gpt4 book ai didi

delphi - 以编程方式查找 MS-Access 2007 表 'Field index' 是否存在? TField.IsIndexedField 不起作用

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

我的表 Customers 有一个已索引的字段 UserID。

enter image description here

现在,当我从 delphi 中删除此字段时,我将 EOleExecption 作为其索引字段。我尝试使用以下代码:

ObjCustomers := TADOTable.Create(nil);    
ObjCustomers.Connection := Connection;
ObjCustomers.TableName := 'Customers';
ObjCustomers.Open;

if (ObjCustomers.FindField('UserID').IsIndexField) then
begin
ExecuteSQLStatements(['DROP INDEX UserID ON Customers']);
end;

但是在这种情况下,Tfield.IsIndexField 的结果为 False。此外,我不想做这样的事情:

try      
ExecuteSQLStatements(['DROP INDEX UserID ON Customers']);
except
on E: exception do
end;

有什么方法可以让我在执行 SQL 查询之前检查该字段是否已索引吗?

提前谢谢!

最佳答案

GetIsIndexField 未由 TADODataSet 实现,结果将为 False

使用TADOConnection.OpenSchema检索表索引:

var DataSet: TADODataSet;

DataSet := TADODataSet.Create(nil);
try
Connection.OpenSchema(siIndexes, VarArrayOf([Unassigned, Unassigned, Unassigned, Unassigned, 'Customers']), EmptyParam, DataSet);
while not DataSet.Eof do begin
ShowMessage(DataSet.FieldByName('INDEX_NAME').AsString);
DataSet.Next;
end;
finally
DataSet.Free;
end;
<小时/>

为了使这个答案完整:正如 TLama 建议的您可以使用 TADODataSet 方法 GetIndexNames .
ADO 在内部使用 Command.ActiveConnection.OpenSchema(adSchemaIndexes...

function IsIndexField(DataSet: TADODataSet; FieldName: string): Boolean;
var
SL: TStringList;
begin
SL := TStringList.Create;
try
DataSet.GetIndexNames(SL);
Result := SL.IndexOf(FieldName) <> -1;
finally
SL.Free;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
ObjCustomers: TADOTable;
begin
ObjCustomers := TADOTable.Create(nil);
ObjCustomers.Connection := Connection;
ObjCustomers.TableName := 'Customers';

if IsIndexField(TADODataSet(ObjCustomers), 'UserID') then
begin
Showmessage('Index');
Connection.Execute('DROP INDEX UserID ON Customers');
end
else
Showmessage('Not Index');

// ObjCustomers.Open;
ObjCustomers.Free;
end;

关于delphi - 以编程方式查找 MS-Access 2007 表 'Field index' 是否存在? TField.IsIndexedField 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9094964/

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