Na wat zoeken in de BDE32.hlp en enig experimenteren kwam ik op de volgende oplossing:
Code:
procedure TForm1.Button2Click(Sender: TObject);
var
hCursor : hDBICur;
ListDesc : TBLBaseDesc;
hFieldCur: hDBICur;
rslt: DBIResult;
Field: FLDDesc;
begin
Table1.Open;
Check(DbiOpenTableList(Table1.DBHandle, False, False, 'dbo.*', hCursor));
Memo1.Clear;
Memo2.Clear;
while (DbiGetNextRecord(hCursor, dbiNOLOCK, @ListDesc, nil) = dbiErr_None) do begin
if (pos('dbo', ListDesc.szName) = 1) then begin
Memo1.Lines.Add(ListDesc.szName);
Check(DbiOpenFieldList(Table1.DBHandle, ListDesc.szName, nil, True, hFieldCur));
repeat
rslt := DbiGetNextRecord(hFieldCur, dbiNOLOCK, @Field, nil);
if (rslt = DBIERR_NONE) then begin
Memo2.Lines.Add(ListDesc.szName + ': ' + Field.szName);
end;
until (rslt <> DBIERR_NONE);
end;
end; // while
Table1.Close;
end;
Het resultaat van bovenstaande code is dat de naam van alle tabellen die in de database staan in Memo1 worden gezet. Van alle tabellen worden de velden in Memo2 gezet.
Helemaal tevreden ben ik hier niet mee. Omdat ik geen onderscheid kan maken tussen systeemtabellen en 'user'tabellen. Dus wie helpt mij daar mee?
Bookmarks