mORMot使用基础 2 数据库连接

Discussion in 'mORMot' started by Q744840146, Jun 21, 2016.

  1. Q7

    Q744840146 New Member Member

    Country:
    China
    程序中要使用数据库,首先是引用SynCommons, SynDB单元,根据不同的数据库类型,简单举几个例子:

    1 使用Access数据库,引用SynCommons, SynDB,SynOleDb三个单元,如果密码为空,设置后面三个参数直接为空就可以了.
    mORMot数据库处理方式
    Code (Text):
    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
    Code (Text):
    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
    连接为
    Code (Text):
    1. gProps := TSQLDBSQLite3ConnectionProperties.Create('test.db3', '', '', '用户密码');
    2. //Sqlite3的密码只设置最后一个参数
    3 使用ZEOS可以连接不同数据库,引用SynCommons, SynDB,SynDBZeos
      连接FireBird:
    Code (Text):
    1.  gProps := TSQLDBZEOSConnectionProperties.Create('zdbc:firebird-2.0://127.0.0.1:3050/model?username=sysdba;'+
    2. 'password=masterkey;LibLocation=fbclient.dll', '', '', '');  
    连接MySql:
    Code (Text):
    1. gProps := TSQLDBZEOSConnectionProperties.Create('zdbc:mysql://127.0.0.1:3306/model?username=sysdba;'+
    2. 'password=masterkey;LibLocation=libmysql.dll', '', '', '');  
    连接MySqlEm:
    Code (Text):
    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进程。
    9.  
    连接Oracle:
    Code (Text):
    1. gProps := TSQLDBZEOSConnectionProperties.Create('zdbc:Oracle:///orcl?username=sysdba;password=masterkey;'+
    2. 'LibLocation=oci64\oci.dll', '', '', '');
    3.  
     
    Ray, chlkuei, tonzi and 1 other person like this.
  2. c5soft

    c5soft 端茶倒水的 Administrator

    Country:
    China
    Admin Post
    使用ISQLDBRows是速度最快的读取SQL 数据库的方法,如果我们写Web后台程序,这是一个极好的方法。
    连接MS SQL Server数据库:
    Code (Text):
    1.  
    2. type
    3.   TForm1 = class(TForm)
    4.     mmoLog: TMemo;
    5.     btnOpen: TButton;
    6.     procedure btnOpenClick(Sender: TObject);
    7.   private
    8.     { Private declarations }
    9.   public
    10.     { Public declarations }
    11.   end;
    12.  
    13. var
    14.   Form1: TForm1;
    15.  
    16. implementation
    17.  
    18. uses SynDB, SynOleDB, SynCommons;
    19.  
    20. {$R *.dfm}
    21.  
    22. procedure TForm1.btnOpenClick(Sender: TObject);
    23. var
    24.   dbConn: TOleDBConnectionProperties;
    25.   rows: ISQLDBRows;
    26.   cServer,cDatabase,cUserId,cUserPwd:RawUTF8;
    27. begin
    28.   cServer:='127.0.0.1';
    29.   cDatabase:='SM1';
    30.   cUserId:='sa';
    31.   cUserPwd:='sa';
    32.   dbConn := TOleDBMSSQLConnectionProperties.Create(cServer,cDatabase,cUserId,cUserPwd);
    33.   //Change TOleDBMSSQLConnectionProperties.SetInternalProperties set fProviderName:='SQLOLEDB' if you don't have SQLNCLI10 installed;
    34.   //dbConn.ConnectionStringDialogExecute;
    35.   //dbConn.ConnectionString:='Provider=SQLOLEDB;Data Source=127.0.0.1;Initial Catalog=SM1;User Id=xx;Password=xxxx;';
    36.   mmoLog.Lines.Add(dbConn.ConnectionString);
    37.   rows := dbConn.ExecuteInlined(ToUTF8('select * from 部组信息'), True);
    38.   if rows<>nil then
    39.     while rows.Step() do
    40.       mmoLog.Lines.add(rows.ColumnString(ToUTF8('名称')));
    41.   dbConn.Free;
    42. end;
    43.  
    44. end.
    45.  
    需要说明的是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。
     
    deerdata and tonzi like this.
  3. Q7

    Q744840146 New Member Member

    Country:
    China
    简单的一个例子,例子中包括两种连接数据库的方式,一种是本地,一种是远程,在选择连接方式后点击连接,就可以进行数据操作了

    远程方式是通过8192端口进行连接的,可以通过端口检测工具看到8192端口的使用情况 QQ图片20160622094316.png
     

    Attached Files:

    c5soft likes this.
  4. tonzi

    tonzi Administrator Staff Member Administrator

    Country:
    China
    请教一下如何使用
    TSQLDBZEOSConnectionProperties
    连接
    MSSQL 2014的数据库?
    ZeOSDBO 连接上述数据库,用FreeTDS_MsSQL>=2005,连接出现character sets错误,连接失败,也一并请教,谢谢!
    附件是ZeOSDBO7.2.1
     

    Attached Files:

  5. wh

    wh1965 New Member Member

    对,连接失败呀!
     
  6. Q7

    Q744840146 New Member Member

    Country:
    China
    zeos7.1和7.2版差别比较大,建议使用7.1.4版

    没用过sqlserver 2005以上版本 :(
     
  7. tonzi

    tonzi Administrator Staff Member Administrator

    Country:
    China
    问题解决了。
    upload_2016-6-23_9-11-40.png

    详细过程(WIN10X64环境,测试X32&X64APP)
    将附件里的freetds-0.95.87\32 bits + iconv\sybdb.dll复制到C:\Windows\SysWOW64->适用X32APP;
    将附件里的freetds-0.95.87\64 bits\sybdb.dll复制到C:\Windows\System32->适用X64APP。
    留意最主要的设置:
    Code (Delphi):
    1. object ZConnection1: TZConnection
    2.     ControlsCodePage = cCP_UTF16
    3.     ClientCodepage = 'UTF8'
    4.     Catalog = ''
    5.     Properties.Strings = (
    6.       'codepage=UTF8'
    7.       'AutoEncodeStrings=ON'
    8.       'controls_cp=CP_UTF16')
    9.     Connected = True
    10.     HostName = '127.0.0.1'
    11.     Port = 0
    12.     Database = 'ABC'
    13.     User = 'sa'
    14.     Password = '******'
    15.     Protocol = 'FreeTDS_MsSQL>=2005'
    16.     Left = 56
    17.     Top = 72
    18.   end
     
    Last edited: Jun 23, 2016
    Ray likes this.
  8. de

    deerdata New Member Member

    Country:
    China
    支持!希望教程继续。棒棒哒
     
  9. ke

    ken123456 New Member Member

    用TSQLDBOracleConnectionProperties 怎么连接oracle数据库,客户端会否要安装oracle客户端?
    哪位大侠给个示例。谢谢!!