AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Datenbank-Metainformationen abfragen schlägt fehl
Thema durchsuchen
Ansicht
Themen-Optionen

Datenbank-Metainformationen abfragen schlägt fehl

Ein Thema von TiGü · begonnen am 16. Mär 2016 · letzter Beitrag vom 16. Mär 2016
 
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.062 Beiträge
 
Delphi 10.4 Sydney
 
#1

Datenbank-Metainformationen abfragen schlägt fehl

  Alt 16. Mär 2016, 10:41
Datenbank: MS SQL • Version: 2005 • Zugriff über: FireDAC
Hallo Gemeinde,

vorab: ich bin in Sachen Datenbanken relativ unbeleckt.

Ich will von einer Datenbank die Tabellennamen und die Feldinformationen per FireDAC abfragen und als XML-Schema abspeichern.

Delphi-Version ist Seattle Enterprise mit Update 1.
Die Datenbank läuft auf einen MS SQL Server 2005.
Sie hat 96 Tabellen mit verschiedenen vielen Feldern.

Ich befolge den Tipp von Uwe Raabe (http://stackoverflow.com/a/21025749) und hole mir über TFDTable.FieldDefs.Update die Felddefinitionen und möchte sie zunächst per SaveToFile als XML abspeichern.

Jedoch fliegt mir nach ca. fünf bis sechs geholten Tabellen und abgespeicherten XML-Schemta eine EMSSQLNativeException um die Ohren und ich weiß gerade nicht weiter.

Weiß jemand Rat?

Es folgt der Quelltext, Exception und Callstack:

Delphi-Quellcode:
procedure TDbStructureExporter.SaveDatabaseDetails(
  const ACatalogName: string;
  const ASchemaName: string = '';
  const APattern: string = '');
var
  Con: TFDCustomConnection;
  TableList: TStringList;
  TableName, FieldName: string;
begin
  Con := FConnectionWrapper.Connecton;

  TableList := TStringList.Create;
  try
    Con.GetTableNames(ACatalogName, ASchemaName, APattern, TableList);
    for TableName in TableList do
    begin
      ExportTable(TableName);
    end;
  finally
    TableList.Free;
  end;
end;

procedure TDbStructureExporter.ExportTable(const ATableName: string);
var
  LConnection: TFDCustomConnection;
  LTable: TFDTable;
  LTableName: string;
begin
  CoInitialize(nil);
  try
    LTableName := ATableName;

    LConnection := TFDCustomConnection.Create(nil);
    LConnection.ConnectionDefName := cConnectionDef;
    LConnection.Connected := True;
    try
      LTable := TFDTable.Create(nil);
      LTable.Connection := LConnection;
      try
        LTable.Open(LTableName); // <--- hier knallts dann!

        LTable.FieldDefs.Update;
        if LTable.FieldDefs.Updated then
          LTable.SaveToFile('C:\Temp\' + LTableName + '.xml', TFDStorageFormat.sfXML);
      finally
        LTable.Free;
      end;
      LConnection.Connected := False;
    finally
      LConnection.Free;
    end;
  finally
    CoUninitialize;
  end;
end;
Code:
Project DbStructureExportVCL.exe raised exception class EMSSQLNativeException with message '[FireDAC][Phys][ODBC][Microsoft][ODBC SQL Server Driver]Die Verbindung ist mit Ergebnissen von einem anderen hstmt belegt'.



:74e3dad8 KERNELBASE.RaiseException + 0x48
FireDAC.Stan.Error.FDException(???,???,???)
FireDAC.Phys.ODBCWrapper.TODBCHandle.ProcessError(???)
FireDAC.Phys.ODBCWrapper.TODBCHandle.Check(???)
FireDAC.Phys.ODBCWrapper.TODBCMetaInfoStatement.Execute
FireDAC.Phys.ODBCBase.TFDPhysODBCCommand.OpenMetaInfo
FireDAC.Phys.ODBCBase.TFDPhysODBCCommand.InternalOpen
FireDAC.Phys.TFDPhysCommand.OpenBase
FireDAC.Phys.TFDPhysCommandAsyncOpen.Execute
FireDAC.Stan.Async.TFDStanAsyncExecutor.ExecuteOperation(False)
FireDAC.Stan.Async.TFDStanAsyncExecutor.Run
FireDAC.Phys.TFDPhysCommand.ExecuteTask(TFDPhysCommandAsyncOpen($3277210) as IFDStanAsyncOperation,nil,False)
FireDAC.Phys.TFDPhysCommand.Open(False)
FireDAC.Phys.Meta.TFDPhysConnectionMetadata.FetchToCache(mkPrimaryKey,'MyDatabaseName','dbo','','MyTableName',0,$31B8CB0)
FireDAC.Phys.Meta.TFDPhysConnectionMetadata.GetTablePrimaryKey('MyDatabaseName','dbo','MyTableName')
FireDAC.Phys.ODBCBase.TFDPhysODBCCommand.OpenMetaInfo
FireDAC.Phys.ODBCBase.TFDPhysODBCCommand.InternalOpen
FireDAC.Phys.TFDPhysCommand.OpenBase
FireDAC.Phys.TFDPhysCommandAsyncOpen.Execute
FireDAC.Stan.Async.TFDStanAsyncExecutor.ExecuteOperation(False)
FireDAC.Stan.Async.TFDStanAsyncExecutor.Run
FireDAC.Phys.TFDPhysCommand.ExecuteTask(TFDPhysCommandAsyncOpen($3277050) as IFDStanAsyncOperation,nil,False)
FireDAC.Phys.TFDPhysCommand.Open(False)
FireDAC.Phys.Meta.TFDPhysConnectionMetadata.FetchToCache(mkIndexes,'','','','MyTableName',0,$31B8BC0)
FireDAC.Phys.Meta.TFDPhysConnectionMetadata.GetTableIndexes('','','MyTableName','')
FireDAC.Comp.Client.TFDTable.UpdateIndexDefs
Data.DB.TDefCollection.UpdateDefs((FireDAC.Comp.Client.TFDTable.UpdateIndexDefs,$320EB70))
Data.DB.TIndexDefs.Update
FireDAC.Comp.DataSet.TFDDataSet.OpenIndexes
FireDAC.Comp.DataSet.TFDDataSet.InternalOpen
Data.DB.TDataSet.DoInternalOpen
Data.DB.TDataSet.OpenCursor(???)
FireDAC.Comp.DataSet.TFDDataSet.OpenCursor(False)
FireDAC.Comp.Client.TFDRdbmsDataSet.OpenCursor(False)
FireDAC.Comp.Client.TFDTable.OpenCursor(False)
Data.DB.TDataSet.SetActive(???)
FireDAC.Comp.DataSet.TFDDataSet.SetActive(???)
Data.DB.TDataSet.Open
FireDAC.Comp.Client.TFDTable.Open(???)
DbStructureExporter.TDbStructureExporter.ExportTable('MyTableName')
DbStructureExporter.TDbStructureExporter.SaveDatabaseDetails('MyDatabaseName','dbo','')
DbStructureExporter.View.TForm1.Button1Click($31FC9A0)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:07 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz