程序中要使用數據庫,首先是引用SynCommons, SynDB單元,根據不同的數據庫類型,簡單舉幾個例子:
1 使用Access數據庫,引用SynCommons, SynDB,SynOleDb三個單元,如果密碼為空,設置后面三個參數直接為空就可以了.
mORMot數據庫處理方式
Code (Text):
var
gProps: TSQLDBConnectionProperties;
rows: ISQLDBRows;
begin
gProps := TOleDBJetConnectionProperties.Create('test.mdb', '數據庫名', '用戶名稱', '用戶密碼');
rows := gProps.ExecuteInlined('select * from dm_sys', True);
if rows<>nil then
while rows.Step() do
showmessage(rows.ColumnString('value'));
end;
普通記錄集處理方式,增加單元引用 SynDBMidasVCL
Code (Text):
var
gProps: TSQLDBConnectionProperties;
ds: TSynDBDataSet;
begin
gProps := TOleDBJetConnectionProperties.Create('test.mdb', '數據庫名', '用戶名稱', '用戶密碼');
ds := TSynDBDataSet.Create(nil);
try
ds.Connection := gProps;
ds.CommandText := 'select * from dm_sys';
ds.Open;
ds.First;
while not ds.Eof do
ShowMessage(ds.FieldByName('value').AsString);
ds.Close;
finally
FreeAndNil(ds);
end;
end;
以后連接不同類型數據庫,僅列出引用單元和初始化代碼,具體使用基本同上面的代碼。
2 使用Sqlite3數據庫,引用SynCommons, SynDB,SynDBSQLite3, SynSQLite3, SynSQLite3Static
連接為
Code (Text):
gProps := TSQLDBSQLite3ConnectionProperties.Create('test.db3', '', '', '用戶密碼');
//Sqlite3的密碼只設置最后一個參數
3 使用ZEOS可以連接不同數據庫,引用SynCommons, SynDB,SynDBZeos
連接FireBird:
Code (Text):
gProps := TSQLDBZEOSConnectionProperties.Create('zdbc:firebird-2.0://127.0.0.1:3050/model?username=sysdba;'+
'password=masterkey;LibLocation=fbclient.dll', '', '', '');
連接MySql:
Code (Text):
gProps := TSQLDBZEOSConnectionProperties.Create('zdbc:mysql://127.0.0.1:3306/model?username=sysdba;'+
'password=masterkey;LibLocation=libmysql.dll', '', '', '');
連接MySqlEm:
Code (Text):
gProps := TSQLDBZEOSConnectionProperties.Create('zdbc:mysqld-5:///ahoa?compress=yes;dbless=no;useresult=no;timeout=30;'+
'ServerArgument1=--basedir=./;'+
'ServerArgument2=--datadir=./data;'+
'ServerArgument3=--character-sets-dir=./share/charsets;'+
'ServerArgument4=--language=./share/english;'+
'ServerArgument5=--key_buffer_size=64M;'+
'codepage=utf8;AutoEncodeStrings=ON;controls_cp=CP_UTF16;LibLocation=.\lib\libmysqld.dll', '', '', '');
//MySql增強模式可以在程序啟動時啟動MySql數據庫,無單獨的MySql進程。
連接Oracle:
Code (Text):
gProps := TSQLDBZEOSConnectionProperties.Create('zdbc:Oracle:///orcl?username=sysdba;password=masterkey;'+
'LibLocation=oci64\oci.dll', '', '', '');
4 使用ISQLDBRows是速度最快的讀取SQL 數據庫的方法,如果我們寫Web后台程序,這是一個極好的方法。
連接MS SQL Server數據庫:
Code (Text):
type
TForm1 = class(TForm)
mmoLog: TMemo;
btnOpen: TButton;
procedure btnOpenClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses SynDB, SynOleDB, SynCommons;
{$R *.dfm}
procedure TForm1.btnOpenClick(Sender: TObject);
var
dbConn: TOleDBConnectionProperties;
rows: ISQLDBRows;
cServer,cDatabase,cUserId,cUserPwd:RawUTF8;
begin
cServer:='127.0.0.1';
cDatabase:='SM1';
cUserId:='sa';
cUserPwd:='sa';
dbConn := TOleDBMSSQLConnectionProperties.Create(cServer,cDatabase,cUserId,cUserPwd);
//Change TOleDBMSSQLConnectionProperties.SetInternalProperties set fProviderName:='SQLOLEDB' if you don't have SQLNCLI10 installed;
//dbConn.ConnectionStringDialogExecute;
//dbConn.ConnectionString:='Provider=SQLOLEDB;Data Source=127.0.0.1;Initial Catalog=SM1;User Id=xx;Password=xxxx;';
mmoLog.Lines.Add(dbConn.ConnectionString);
rows := dbConn.ExecuteInlined(ToUTF8('select * from 部組信息'), True);
if rows<>nil then
while rows.Step() do
mmoLog.Lines.add(rows.ColumnString(ToUTF8('名稱')));
dbConn.Free;
end;
end.
需要說明的是1.18將TOleDBMSSQLConnectionProperties的ProviderName由SQLOLEDB改成SQLNCLI10,要正常運行,需要安裝MSSQL Native Client 10的驅動,在本站的ftp服務器【/會員FTP/數據庫工具】可以下載,如果想讓你的程序在任何機器上將能跑,打開SynOleDB.pas將TOleDBMSSQLConnectionProperties.SetInternalProperties代碼片段改為fProviderName:='SQLOLEDB'即可。SQLNCLI10與SQLOLEDB都支持SQL Server 2000.
SQLOLEDB任何Windows都帶,SQLNCLI10以及更高版本的SQLNCLI11需要安裝驅動,驅動又分32位與64位。
上述代碼的toUTF函數是為在Delphi7下編譯准備的,如果是2009以上版本可以讓編譯器自動轉換。
如果要做Json序列化為utf8,可使用ColumnUTF8。