![]() |
BatchMove für dbExpress und/oder ADO
Hallo allerseits,
für die "gute alte" BDE gab's doch 'ne Kompoenente TBatchMove. Bei dbExpress gibt es etwas derartiges nicht ![]() Zitat:
|
Re: BatchMove für dbExpress und/oder ADO
Hallo,
ich hole den Beitrag mal nach vorn, da ich jetzt tatsächlich so eine Komponente oder eine Anregung (für ADO-ODBC-Verbindungen), wie ich dies bei Tabellen/Queries mit sehr vielen Spalten auch ohne viel Code-Zeilen realisieren kann. Die Quell- und Ziel-Tabellen befinden sich in verschiedenen Datenbanken (hier Informix). Und die DB's wiederum können auf unterschiedlichen (UNIX-)Rechnern liegen. Aus den Quell-Tabellen sollen auch nur bestimmte Datensätze kopiert werden. |
Re: BatchMove für dbExpress und/oder ADO
Hallo Rainer,
möglicherweise hilft dir diese ![]() ![]() |
Re: BatchMove für dbExpress und/oder ADO
Hallo Spocky,
vielen Dank für den Tip. Ich könnte aber jetzt eher etwas für ADO gebrauchen. Aber wenn's gar nicht anders geht, muß ich eben die ADO durch die DBExpress-Kompos ersetzen. Habe ja heute erst mit dem kleinen Tool angefangen. |
Re: BatchMove für dbExpress und/oder ADO
Ich habe das jetzt durch zwei eigene Methoden im DataModul gelöst. Für jeden Datensatz einer Antwortdatenmenge der Quell-DB wird ein INSERT-Statement generiert, welches auf der Ziel-DB ausgeführt wird:
Delphi-Quellcode:
{**
Kopieren von selektierten Datensätzen aus einer Datenbank in eine gleich aufgebaute Datenbank-Tabelle. Die selektierten Datensätze werden in einem TBetterADODataSet dargestellt. @param sTableName Name der Datenbank-Tabelle @param ds_Source Dataset mit selektierten Datensätzen @return @see CreateInsertSQL } procedure TdmCopyVertrag.CopyTable(sTableName: String; ds_Source: TBetterADODataSet); begin ds_Source.Open; ds_Source.First; { Für jeden Datensatz des Result-Sets wird ein INSERT-Statement erzeugt und auf die Ziel-Tabelle ausgeführt. } while not ds_Source.Eof do begin qu_Dest.SQL.Clear; qu_Dest.SQL.Add (CreateInsertSQL(sTableName, ds_Source)); qu_Dest.ExecSQL; ds_Source.Next; end; // while not ds_Source.Eof do ds_Source.Close; end; // CopyTable {** Erstellen eines Insert-Statements für den aktuellen Datensatz der Quell-Tabelle. @param sTableName Name der Datenbank-Tabelle @param ds_Source Dataset mit selektierten Datensätzen @return Insert-Statement @see CopyTable } function TdmCopyVertrag.CreateInsertSQL(sTableName: String; ds_Source: TBetterADODataSet ): String; var sFields, sValues: String; i: Integer; DefaultLCID: Integer; begin { Dezimal-Trennzeichen in SQL-Statement muß ein Punkt sein! } DecimalSeparator := '.'; ThousandSeparator := ','; sValues := ' VALUES('; sFields := '('; for i := 0 to ds_Source.FieldCount - 1 do begin if ds_Source.Fields[i].IsNull then sValues := sValues + 'NULL' else begin { Zeichenketten müssen von '' begrenzt werden. Bei Informix muß zusätzlich die Funktion Date() verwendet werden. Gegebenenfalls können hier Besonderheiten weiterer Datentypen abgehandelt werden } case ds_Source.Fields[i].DataType of ftString: begin sValues := sValues + QuotedStr(ds_Source.Fields[i].AsString); end; // ftString ftDate: begin sValues := sValues + 'Date(' + QuotedStr(ds_Source.Fields[i].AsString)+ ')'; end; // ftDate else begin sValues := sValues + ds_Source.Fields[i].AsString; end; // else end; // case ds_Source.Fields[i].DataType of end; // if ds_Source.Fields[i].IsNull else sFields := sFields + ds_Source.Fields[i].FieldName; { Values und Feldnamen werden durch Komma getrennt. Nach dem letzten Wert bzw. Feldnamen hingegen steht eine runde schließende Klammer! } if i = ds_Source.FieldCount - 1 then begin sValues := sValues + ')'; sFields := sFields + ')'; end // if i = ds_Source.FieldCount - 1 then else begin sValues := sValues + ', '; sFields := sFields + ', '; end; // if i = ds_Source.FieldCount - 1 else end; // for i := 0 to ds_Source.FieldCount - 1 do Result := 'INSERT INTO ' + sTableName + sFields + sValues; { Rücksetzen auf Standard-Werte für den jeweiligen PC } DefaultLCID := GetThreadLocale; DecimalSeparator := GetLocaleChar(DefaultLCID, LOCALE_SDECIMAL, '.'); ThousandSeparator := GetLocaleChar(DefaultLCID, LOCALE_STHOUSAND, ','); end; // CreateInsertSQL |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz