Die sechste Tabelle habe ich schon durch skippen (if TableName = 'GenauDieseTabelle' then exit) ausgeschlossen.
Bei den darauffolgenden Tabellen passiert der Fehler auch und das sind meiner Meinung nach alles normale Tabellen ohne große Besonderheiten.
Die Tabelle heißt 'ItemEntries' und hat 60 Felder.
Vielen Dank aber bis hierhin für eure Mühe, aber ihr braucht euch darüber jetzt nicht weiter den Kopf zerbrechen.
Ich habe das mit der Table sein gelassen und eine
Query mit
SQL '...where 1=2' verwendet (siehe Quelltext unten).
Damit habe ich mein Ziel erfüllt.
Falls noch jemand einen eleganteren Weg hat, nur her damit!
PS: Das mit den Co(Un)Initialize deswegen, falls das in einen eigenen Threadkontext ausgeführt wird.
Ich hatte nämlich versuchsweise jede Tabellenabfrage in einen eigenen Task und das schreiben der
XML per
MSXML ging dann nicht mehr.
Delphi-Quellcode:
procedure TDbStructureExporter.SaveDatabaseDetails(
const ACatalogName: string;
const ASchemaName: string = '';
const APattern: string = '');
var
TableList: TStringList;
TableName: string;
begin
TableList := TStringList.Create;
try
FConnectionWrapper.Connecton.GetTableNames(ACatalogName, ASchemaName, APattern, TableList);
CoInitialize(nil);
try
for TableName in TableList do
begin
ExportTable(TableName);
end;
finally
CoUninitialize;
end;
finally
TableList.Free;
end;
end;
procedure TDbStructureExporter.ExportTable(const ATableName: string);
var
LQuery: TFDQuery;
begin
LQuery := TFDQuery.Create(nil);
try
LQuery.Connection := FConnectionWrapper.Connecton;
LQuery.SQL.Clear;
LQuery.SQL.Add('select * from ' + ATableName + ' where 1=2');
LQuery.Active := True;
LQuery.SaveToFile('C:\Temp\' + ATableName + '.xml', TFDStorageFormat.sfXML);
finally
LQuery.Free;
end;
end;