gpt4 book ai didi

delphi - 如何查询 Firebird SQL 方言

转载 作者:行者123 更新时间:2023-12-03 15:28:15 26 4
gpt4 key购买 nike

我正在尝试查询 Firebird 数据库的 SQL 方言(使用嵌入式驱动程序):

procedure TFrmFireDACEmbed.BtnGetDBDialectClick(Sender: TObject);
var
lFDConnection : TFDConnection;
lDriverLink : TFDPhysFBDriverLink;
l : Integer;
begin
if not DlgOpen.Execute then Exit;

lDriverLink := TFDPhysFBDriverLink.Create(nil);
lFDConnection := TFDConnection.Create(nil);
try
lDriverLink.DriverID := 'FBEmbedded';
lDriverLink.VendorLib := 'fbembed.dll'; // 32-bits embedded
lFDConnection.DriverName := S_FD_FBId;
lFDConnection.Params.Database := DlgOpen.FileName;
lFDConnection.Params.Add('Server=127.0.0.1');
lFDConnection.Params.UserName := 'SYSDBA';
lFDConnection.Params.Password := 'masterkey';
lFDConnection.LoginPrompt := False;
lFDConnection.Open;
l := lFDConnection.Params.IndexOf('SQLDialect');
if l <> -1 then
ShowMessage(lFDConnection.Params[l])
else
ShowMessage('SQLDialect not found');
finally
lFDConnection.Close;
lFDConnection.Free;
lDriverLink.Free;
end;
end;

但是lFDConnection.Params仅包含DriverID , Database , Server , User_Name , Password .

检查员显示:

(nil, $2F22820, #$D#$A, nil, 0, ',', '"', '=', [soWriteBOM,soTrailingLineBreak,soUseLocale], (('DriverID=FB', nil), ('Database=D:\Temp\KLANTEN.GDB', nil), ('Server=127.0.0.1', nil), ('User_Name=SYSDBA', nil), ('Password=masterkey', nil), ('', nil), ('', nil), ('', nil)), 5, 8, False, dupIgnore, False, (FireDAC.Stan.Def.TFDDefinition.ParamsChanged,$2F5C4F0), (FireDAC.Stan.Def.TFDDefinition.ParamsChanging,$2F5C4F0), False, TFDConnectionDef($2F5C534) as IFDStanDefinition)

lFDConnection.Params.SQLDialect编译器无法识别。

深入挖掘系统表,我发现对于方言 3 db 的查询

select mon$sql_dialect from mon$database

将返回 3,但对于旧版本 mon$database不存在。

如何检索任何方言的 SQL 方言?

目的是重写使用“幕后”函数的旧代码,例如 isc_attach_database , isc_database_info (必须动态链接, GetProcAddress 等)。

最佳答案

如何获取连接的Firebird数据库的SQL方言?

您可以用以下代码替换旧代码:

uses
FireDAC.Phys.IBWrapper;

procedure TForm1.Button1Click(Sender: TObject);
var
SQLDialect: Integer;
IBDatabase: TIBDatabase;
begin
IBDatabase := TObject(FDConnection1.CliObj) as TIBDatabase;
SQLDialect := IBDatabase.db_sql_dialect;
end;

如何在运行时为Firebird数据库连接指定SQL方言?

您可以通过以下方式指定 SQL 方言的连接定义参数:

FDConnection1.Params.Add('SQLDialect=1');

或者通过类型转换为特定的 Firebird DBMS 连接定义类,如下所示:

TFDPhysFBConnectionDefParams(FDConnection1.Params).SQLDialect := 1;

关于delphi - 如何查询 Firebird SQL 方言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49404046/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com