gpt4 book ai didi

sql - 使用 Delphi XE3 如何获取 MS Access 中的表列表并排除 View /查询?

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

使用 Delphi XE3 如何获取 MS Access 中的表列表并排除 View /查询?

我尝试使用 ADOConnection1.GetTableNames - 但它返回所有表和 View (查询)。

我也尝试过使用查询,例如。 “SELECT * FROM MSysObjects WHERE Type=1 AND Flags=0”需要 System.mdw 文件,但这会导致更多问题,因为 mdw 文件并不总是存在。

我想开发一个应用程序来比较两个 mdb 文件的表结构,并创建一个脚本来修改/同步数据库中的表结构。

非常感谢任何帮助。

最佳答案

您可以使用OpenSchema方法传递siTables值。然后使用返回数据集的 TABLE_TYPE 列过滤结果。

尝试这个示例代码

{$APPTYPE CONSOLE}

{$R *.res}

uses
SysUtils,
ActiveX,
ComObj,
Adodb,
Variants;


procedure ListTables(const FileName : string);
var
LADOConnection : TADOConnection;
LADODataSet: TADODataSet;

begin
LADOConnection := TADOConnection.Create(nil);
try
LADOConnection.ConnectionString := Format('Provider=Microsoft.ACE.OLEDB.12.0;Data Source=%s;Persist Security Info=False;', [FileName]);
LADODataSet := TADODataSet.Create(nil);
try
LADODataSet.Connection := LADOConnection;
LADOConnection.OpenSchema(siTables, EmptyParam, EmptyParam, LADODataSet);

LADODataSet.Filter := '(TABLE_TYPE = ''TABLE'')'; //show only the tables
LADODataSet.Filtered := True;

while not LADODataSet.EOF do
begin
Writeln(Format('Name %s Type %s',[LADODataSet.FieldByName('TABLE_NAME').AsString, LADODataSet.FieldByName('TABLE_TYPE').AsString]));

LADODataSet.Next;
end;

finally
LADODataSet.Free;
end;
finally
LADOConnection.Free;
end;
end;

begin
try
CoInitialize(nil);
try
ListTables('C:\Test\Northwind.MDB');
finally
CoUninitialize;
end;
except
on E:EOleException do
Writeln(Format('EOleException %s %x', [E.Message,E.ErrorCode]));
on E:Exception do
Writeln(E.Classname, ':', E.Message);
end;
Writeln('Press Enter to exit');
Readln;
end.

关于sql - 使用 Delphi XE3 如何获取 MS Access 中的表列表并排除 View /查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37473151/

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