![]() |
AW: Paradox nach MSSQL
Welchen Fehler bekommst du denn genau?
Versuch mal den Text zu casten: auf varchar(max) oder teile den string in Teil auf auf und CONCAT die. ![]() ![]() |
AW: Paradox nach MSSQL
Ich muss hier aber die Liste der Felder bime Insert mit angeben,
da die Zieltabelle mehr Felder als die Quelltabelle hat. |
AW: Paradox nach MSSQL
Zitat:
Wenn wirklich echtes Interesse besteht, würde ich das ja mal an einem konkreten Beispiel aufzeigen. |
AW: Paradox nach MSSQL
Hallo Herr Raabe
Dsa wäre sehr nett !! Gruß egentur |
AW: Paradox nach MSSQL
Hmm..
(Mal ganz D6 Progger, Quick and Dirty); Ich würde nen keines Tool schreiben, welches eine Connection per ADO zur Paradox-Datenbank öffnet, nen query mit dem Select für die benötigten Daten. (Alles simple per Button click)
Delphi-Quellcode:
Somit werden alle Daten in eine XML-Datei geschrieben (natürlich den Dateinamen nach deinen Wünschen ändern.
ADOQuery.Open;
ADOQuery.SaveToFile(ExtractFilePath(ParamStr(0)) + 'Test.Dat', pfXML); ADOQuery.Close; Über einen 2. Button das selbe Tool verwenden, um eine Verbindung zur MSSQL-Datenbank zu öffen (ebenfalls per ADO) und dann kannst Du mit
Delphi-Quellcode:
einen gezielten Insert machen, ganz nach deinen Wünschen..
procedure TForm1.Button2Click(Sender: TObject);
begin ADOQuery.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Test.Dat'); ADOQuery.First; While not ADOQuery.Eof do begin // Insert mit den Daten aus ADOQuery.... ADOQuery.Next; end; ADOQuery.Close; end; Hierbei werden die Daten 1:1 übertragbar... Somit bei Paradox Button1, Datendatei und Tool auf anderen Server mitnehmen und per Button2 dort in die MSSQL Datenbank schieben... Geschrieben in wenigen Minuten... (Nur so nen Gedanke.. ;) ) |
AW: Paradox nach MSSQL
Hier eine kleine Routine, die ein DataSet in eine BCP-Importdatei schreibt. Die Felder der Quell- und Zieltabelle müssen dabei in Reihenfolge und Typ übereinstimmen (Namen sind egal).
Delphi-Quellcode:
Der passende BCP-Aufruf sehe dann folgendermaßen aus:
procedure ExportDataSetToBCP(DataSet: TDataSet; const FileName: string);
function GetBytesText(const ABytes: TBytes): string; var B: Byte; begin Result := ''; for B in ABytes do Result := Result + IntToHex(B, 2); end; var fld: TField; S: string; sep: string; writer: TStreamWriter; begin writer := TStreamWriter.Create(FileName, False, TEncoding.ANSI); try DataSet.Active := true; DataSet.First; while not DataSet.Eof do begin sep := ''; for fld in DataSet.Fields do begin Writer.Write(sep); if not fld.IsNull then begin case fld.DataType of ftDate: S := FormatDateTime('yyyy-mm-dd', fld.AsDateTime); ftTime: S := FormatDateTime('hh:nn:ss', fld.AsDateTime); ftDateTime: S := FormatDateTime('yyyy-mm-dd hh:nn:ss', fld.AsDateTime); ftTimeStamp: S := FormatDateTime('yyyy-mm-dd hh:nn:ss.zzz', fld.AsDateTime); ftBlob: S := GetBytesText(fld.AsBytes); else S := fld.DisplayText; end; Writer.Write(S); end; sep := #9; end; Writer.WriteLine; DataSet.Next; end; finally writer.Free; end; end;
Code:
Die Platzhalter in spitzen Klammern müssen natürlich durch die tatsächlichen Werte ersetzt werden.
bcp <Database>.dbo.<Table> in "<ImportFile>" -b 10000 -c -C ACP -e "<ErrorFile>" -E -T -S <Server>
|
AW: Paradox nach MSSQL
Weil diese Importsachen in der Praxis so kompliziert sein können:
- Wenn ein Text TAB oder CR/LF enthält, stört das das BCP gar nicht? - Sollten die Hexzeichen nicht mit 0x eingeleitet werden? - Sollten nicht Floats auch in Standard-US-Format gebracht werden? |
AW: Paradox nach MSSQL
Zitat:
Zu den konkreten Fragen: - In dem Fall muss man halt andere Feld- bzw. Record-Trennzeichen(-folgen) definieren, die nicht zu Kollisionen mit dem Datenbestand führen. - Nicht wenn das Feld in MSSQL als VARBINARY angelegt ist. Andernfalls wäre die Hexdarstellung auch wohl nicht geeignet. - Vermutlich ja, aber das war in diesem Fall schon von der Einstellung in Windows vorgegeben. |
AW: Paradox nach MSSQL
:thumb:
|
AW: Paradox nach MSSQL
Hallo TigerLilly, hallo Herr Raabe
die Funktion f_hextostr(hexstring) hat schon funktioniert, da das Zielfeld vom Typ Memo war. Nochmals vielen Dank egentur |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:57 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 by Thomas Breitkreuz