gpt4 book ai didi

mysql - Delphi:使用元数据从 MySQL 返回数据库名称

转载 作者:搜寻专家 更新时间:2023-10-30 23:14:08 25 4
gpt4 key购买 nike

我想知道是否有一种方法可以使用 Delphi 对象 TSQLConnection 从 MySQL 返回数据库名称,我知道有一些方法可以返回表名或字段名:TSQLConnection.getTableNames, TSQLConnection.GetFieldNames

但我找不到获取特定服务器上的数据库的方法。

TADOconnection 对象中有一个名为 OpenSchema 的方法:TADOconnection.Openschema,它可以返回数据库名称,但在 TSQLConnection 中,该方法 -protected not public - 不能返回数据库名称。

附言我不想执行“显示数据库”或“从信息模式中选择 * 模式”之类的查询。

任何人都可以提供帮助,谢谢。

最佳答案

我试过这段代码并且它有效,不确定它是否适用于所有 MySQL、MariaDB 版本和所有 Delphi 版本但对我来说它有效,我使用的是 delphi 6 和 MySQL 4.0.25:

function GetMySQLDatabaseNames(AUserName, APassword, AHostName, APort: string; var 
AErrorMessage: String): TStrings;
var SQLConnection: TSQLConnection;
ObjectCursor: ISQLCursor;
Status: SQLResult;
Counter: Integer;
Precision: Smallint;
Value: Pointer;
IsBlank: LongBool;
begin
Result:= TStringList.Create;
SQLConnection:= TSQLConnection.Create(nil);

with SQLConnection do
begin
ConnectionName:='dbnames';
DriverName := 'mysql';
Params.Clear;
Params.Values['User_Name'] := AUserName;
Params.Values['Password'] := APassword;
Params.Values['HostName'] := AHostName;
Params.Values['Database'] := 'mysql';
Params.Values['Port'] := APort;
LibraryName :='dbexpmda.dll';
VendorLib := 'not used';
GetDriverFunc :='getSQLDriverMySQLDirect';
LoginPrompt :=False;
try
Connected := True;

Status:= MetaData.getObjectList(eObjTypeDatabase, ObjectCursor);
while Status = SQL_SUCCESS do
begin
Status:= ObjectCursor.getColumnPrecision(4, Precision);
if Status = SQL_SUCCESS then
begin
Value:= AllocMem(Precision);
Status:= ObjectCursor.getString(4, Value, IsBlank);
if Status = SQL_SUCCESS then
if not IsBlank then
Result.Add(PChar(Value));
end;
Status:= ObjectCursor.Next;
end;
Connected := False;
Free;
except
on E: Exception do
begin
AErrorMessage:= AErrorMessage + E.Message+ sLineBreak;
end;
end;
end;
end;

关于mysql - Delphi:使用元数据从 MySQL 返回数据库名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16769317/

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