mORMot 数据库操作

时间:2021-04-20 02:36:45

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

mORMot 数据库操作的更多相关文章

  1. 如何在高并发环境下设计出无锁的数据库操作(Java版本)

    一个在线2k的游戏,每秒钟并发都吓死人.传统的hibernate直接插库基本上是不可行的.我就一步步推导出一个无锁的数据库操作. 1. 并发中如何无锁. 一个很简单的思路,把并发转化成为单线程.Jav ...

  2. 【知识必备】ezSQL,最好用的数据库操作类,让php操作sql更简单~

    最近用php做了点小东东,用上了ezSQL,感觉真的很ez,所以拿来跟大家分享一下~ ezSQL是一个非常好用的PHP数据库操作类.著名的开源博客WordPress的数据库操作就使用了ezSQL的My ...

  3. MySQL 系列(二) 你不知道的数据库操作

    第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 本章内容: 查看\创建\使用\删除 数据库 用户管理及授权实战 局域网 ...

  4. ABP创建数据库操作步骤

    1 ABP创建数据库操作步骤 1.1 SimpleTaskSystem.Web项目中的Web.config文件修改数据库配置. <add name="Default" pro ...

  5. 【第一篇】ASP&period;NET MVC快速入门之数据库操作(MVC5&plus;EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  6. django数据库操作和中间件

    数据库配置 django的数据库相关表配置在models.py文件中,数据库的连接相关信息配置在settings.py中 models.py相关相关参数配置 from django.db import ...

  7. &lbrack;Android Pro&rsqb; 完美Android Cursor使用例子(Android数据库操作)

    reference to : http://www.ablanxue.com/prone_10575_1.html 完美 Android Cursor使用例子(Android数据库操作),Androi ...

  8. phpcms v9 中的数据库操作函数

    1.查询 $this->select($where = '', $data = '*', $limit = '', $order = '', $group = '', $key='')   返回 ...

  9. Android打造属于自己的数据库操作类。

    1.概述 开发Android的同学都知道sdk已经为我们提供了一个SQLiteOpenHelper类来创建和管理SQLite数据库,通过写一个子类去继承它,就可以方便的创建.管理数据库.但是当我们需要 ...

随机推荐

  1. 用Python写一个简单的Web框架

    一.概述 二.从demo_app开始 三.WSGI中的application 四.区分URL 五.重构 1.正则匹配URL 2.DRY 3.抽象出框架 六.参考 一.概述 在Python中,WSGI( ...

  2. Change screensaver through registry

    If you wanna change the screensaver, you can update registry as follows{autoit script}: RegWrite(&qu ...

  3. js基础第四天

    多个tab栏切换class封装 <style>         *{margin:0;padding:0;}         ul{list-style:none;}         .b ...

  4. 将CString(unicode)转换为char&ast;&lpar;ANSI&rpar;

    1.将CString(unicode)转换为char*(ANSI) CString strServIP; pChat->GetDlgItemText(IDC_IP,strServIP); ] = ...

  5. 学了一个封装的jquery插件,感觉还成

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. java 执行redis的部分方法

    @Autowired private RedisTemplate<String, Object> redisTemplate; public void setRedisTemplate(R ...

  7. A1032&period; Sharing

    To store English words, one method is to use linked lists and store a word letter by letter. To save ...

  8. 《基于Nginx的中间件架构》学习笔记---2&period;nginx的优点以及nginx的安装

    [优势] 优势1:IO多路复用和epoll模型(详见总结知识) 优势2:轻量级(1.功能模块少:只保留了一些核心代码     2.代码模块化) 优势3:CPU亲和 这里的CPU亲和指的是:是一种把cp ...

  9. 可以获取JVM信息的一些管理工具类

    一些可以获取JVM信息的java工具类 BufferPoolMXBean.class ClassLoadingMXBean.class CompilationMXBean.class GarbageC ...

  10. java 多线程之:join&lpar;&rpar; 方法

    join()介绍 join() 定义在java.lang.Thread中. join() 的作用:让"主线程"等待"子线程"结束之后才能继续运行.