mORMot使用基础 2 数据库连接
程序中要使用数据库,首先是引用SynCommons, SynDB单元,根据不同的数据库类型,简单举几个例子:
1 使用Access数据库,引用SynCommons, SynDB,SynOleDb三个单元,如果密码为空,设置后面三个参数直接为空就可以了.
mORMot数据库处理方式
1 var 2 gProps: TSQLDBConnectionProperties; 3 rows: ISQLDBRows; 4 begin 5 gProps := TOleDBJetConnectionProperties.Create('test.mdb', '数据库名', '用户名称', '用户密码'); 6 rows := gProps.ExecuteInlined('select * from dm_sys', True); 7 if rows<>nil then 8 while rows.Step() do 9 showmessage(rows.ColumnString('value')); 10 end;
普通记录集处理方式,增加单元引用 SynDBMidasVCL
1 var 2 gProps: TSQLDBConnectionProperties; 3 ds: TSynDBDataSet; 4 begin 5 gProps := TOleDBJetConnectionProperties.Create('test.mdb', '数据库名', '用户名称', '用户密码'); 6 ds := TSynDBDataSet.Create(nil); 7 try 8 ds.Connection := gProps; 9 10 ds.CommandText := 'select * from dm_sys'; 11 ds.Open; 12 ds.First; 13 while not ds.Eof do 14 ShowMessage(ds.FieldByName('value').AsString); 15 ds.Close; 16 finally 17 FreeAndNil(ds); 18 end; 19 end;
以后连接不同类型数据库,仅列出引用单元和初始化代码,具体使用基本同上面的代码。
2 使用Sqlite3数据库,引用SynCommons, SynDB,SynDBSQLite3, SynSQLite3, SynSQLite3Static
连接为
1 gProps := TSQLDBSQLite3ConnectionProperties.Create('test.db3', '', '', '用户密码');//Sqlite3的密码只设置最后一个参数
3 使用ZEOS可以连接不同数据库,引用SynCommons, SynDB,SynDBZeos
连接FireBird:
1 gProps := TSQLDBZEOSConnectionProperties.Create('zdbc:firebird-2.0://127.0.0.1:3050/model?username=sysdba;'+ 2 'password=masterkey;LibLocation=fbclient.dll', '', '', '');
连接MySql:
1 gProps := TSQLDBZEOSConnectionProperties.Create('zdbc:mysql://127.0.0.1:3306/model?username=sysdba;'+ 2 'password=masterkey;LibLocation=libmysql.dll', '', '', '');
连接MySqlEm:
1 gProps := TSQLDBZEOSConnectionProperties.Create('zdbc:mysqld-5:///ahoa?compress=yes;dbless=no;useresult=no;timeout=30;'+ 2 'ServerArgument1=--basedir=./;'+ 3 'ServerArgument2=--datadir=./data;'+ 4 'ServerArgument3=--character-sets-dir=./share/charsets;'+ 5 'ServerArgument4=--language=./share/english;'+ 6 'ServerArgument5=--key_buffer_size=64M;'+ 7 'codepage=utf8;AutoEncodeStrings=ON;controls_cp=CP_UTF16;LibLocation=.\lib\libmysqld.dll', '', '', ''); 8 //MySql增强模式可以在程序启动时启动MySql数据库,无单独的MySql进程。
1 gProps := TSQLDBZEOSConnectionProperties.Create('zdbc:Oracle:///orcl?username=sysdba;password=masterkey;'+ 2 'LibLocation=oci64\oci.dll', '', '', '');
使用ISQLDBRows是速度最快的读取SQL 数据库的方法,如果我们写Web后台程序,这是一个极好的方法。
连接MS SQL Server数据库:
1 type 2 TForm1 = class(TForm) 3 mmoLog: TMemo; 4 btnOpen: TButton; 5 procedure btnOpenClick(Sender: TObject); 6 private 7 { Private declarations } 8 public 9 { Public declarations } 10 end; 11 12 var 13 Form1: TForm1; 14 15 implementation 16 17 uses SynDB, SynOleDB, SynCommons; 18 19 {$R *.dfm} 20 21 procedure TForm1.btnOpenClick(Sender: TObject); 22 var 23 dbConn: TOleDBConnectionProperties; 24 rows: ISQLDBRows; 25 cServer,cDatabase,cUserId,cUserPwd:RawUTF8; 26 begin 27 cServer:='127.0.0.1'; 28 cDatabase:='SM1'; 29 cUserId:='sa'; 30 cUserPwd:='sa'; 31 dbConn := TOleDBMSSQLConnectionProperties.Create(cServer,cDatabase,cUserId,cUserPwd); 32 //Change TOleDBMSSQLConnectionProperties.SetInternalProperties set fProviderName:='SQLOLEDB' if you don't have SQLNCLI10 installed; 33 //dbConn.ConnectionStringDialogExecute; 34 //dbConn.ConnectionString:='Provider=SQLOLEDB;Data Source=127.0.0.1;Initial Catalog=SM1;User Id=xx;Password=xxxx;'; 35 mmoLog.Lines.Add(dbConn.ConnectionString); 36 rows := dbConn.ExecuteInlined(ToUTF8('select * from 部组信息'), True); 37 if rows<>nil then 38 while rows.Step() do 39 mmoLog.Lines.add(rows.ColumnString(ToUTF8('名称'))); 40 dbConn.Free; 41 end; 42 43 end.
需要说明的是1.18将TOleDBMSSQLConnectionProperties的ProviderName由SQLOLEDB改成SQLNCLI10,要正常运行,需要安装MSSQL Native Client 10的驱动,如果想让你的程序在任何机器上将能跑,打开SynOleDB.pas将TOleDBMSSQLConnectionProperties.SetInternalProperties代码片段改为fProviderName:='SQLOLEDB'即可。SQLNCLI10与SQLOLEDB都支持SQL Server 2000.
SQLOLEDB任何Windows都带,SQLNCLI10以及更高版本的SQLNCLI11需要安装驱动,驱动又分32位与64位。
上述代码的toUTF函数是为在Delphi7下编译准备的,如果是2009以上版本可以让编译器自动转换。
如果要做Json序列化为utf8,可使用ColumnUTF8。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
2019-04-03 Delphi 10.2 新特性之—TFDBatchMoveJSONWriter
2019-04-03 Delphi Sysem.JSON 链式写法(转全能中间件)