mormot mysql_mORMot 数据库操作

本文介绍了如何使用mORMot框架进行数据库操作,包括连接Access、SQLite3、ZEOS(支持FireBird、MySQL、Oracle)以及MS SQL Server,并提供了相应的连接代码示例,强调了ISQLDBRows作为快速读取SQL数据的方法及其适用场景。

程序中要使用数据库,首先是引用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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值