Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Paradox nach MSSQL (https://www.delphipraxis.net/198865-paradox-nach-mssql.html)

egentur 6. Dez 2018 09:23

Datenbank: Paradox • Version: 4 • Zugriff über: BDE

Paradox nach MSSQL
 
Hallo Zusammen,

Ich habe eine Paradox DB mit Memofeldern die allerdings binäre Daten enthalten
und muss diese nach MSSQL wieder in Memofelder übertragen.

Allerdings habe ich keine direkte Verbindung beider DBs.
Ich müsste aus der Paradox DB ein Schript erzeugen das ich in der MSSQL wieder einspielen kann.

Das Erzeugen des Scripts (Lesen aus Paradox) klappt.
Ich konvertieren die Binärdaten in Hex ( 0x123... ).

Meine Frage : wie bekomme ich die Daten ( 0x123...) wieder in das MSSQL Memofeld
sodass diese dort wieder binär vorliegen ?

Danke für jeden Hinweis !

hoika 6. Dez 2018 10:05

AW: Paradox nach MSSQL
 
Hallo,
ich hatte mir damals für den Umstieg von Paradox auf Interbase ein eigenes Programm geschrieben,
eben u.a. weil ich die Kontrolle über die Blobs haben wollte.

TigerLilly 6. Dez 2018 10:45

AW: Paradox nach MSSQL
 
Ab MSSQL 2008:

SELECT
CONVERT(varbinary(64), '0x16004D616E75623232', 1),
CONVERT(varchar(64), 0x16004D616E75623232, 1),
CONVERT(varchar(64), 0x16004D616E75623232, 2);

Siehe auch CONVERT() in BOL.

egentur 6. Dez 2018 11:07

AW: Paradox nach MSSQL
 
Danke TigerLilly

Ich brauche das Insert Statement für MSSQL
Insert into Table(Field) values ('0x123')

Wobei Field vom Type Text ist.
z.B.
Insert into Table(Field) values ('0x414243')

und der Inhalt des Feldes soll dann 'ABC' sein

eine Idee ?

TigerLilly 6. Dez 2018 12:53

AW: Paradox nach MSSQL
 
Du möchtest aus den Hex kodierten Zeichen die ursprünglichen Zeichen wiederherstellen? Also aus 414243 soll ABC werden?


Code:
CREATE FUNCTION [dbo].[f_hextostr] (@hexstring VARCHAR(512))
RETURNS VARCHAR(256)
AS
begin
declare @char1 char(1), @char2 char(1), @strlen int, @currpos int, @result varchar(256)
set @strlen=len(@hexstring)
set @currpos=1
set @result=''
while @currpos<@strlen
begin
set @char1=substring(@hexstring,@currpos,1)
set @char2=substring(@hexstring,@currpos+1,1)
if (@char1 between '0' and '9' or @char1 between 'A' and 'F')
and (@char2 between '0' and '9' or @char2 between 'A' and 'F')
set @result=@result+
char((ascii(@char1)-case when @char1 between '0' and '9' then 48 else 55 end)*16+
ascii(@char2)-case when @char2 between '0' and '9' then 48 else 55 end)
set @currpos = @currpos+2
end
return @result
end

Code:
insert into …. () values (f_hextostr(hexstring)

Achtung: Die Funktion geht davon aus, dass die Hex Zeichen in jeweils 2 Zeichen kodiert werden.

Uwe Raabe 6. Dez 2018 13:10

AW: Paradox nach MSSQL
 
Du könntest auch das Bulk Copy Programm verwenden. Das benötigt einfach nur eine Textdatei, in der die Records mit CRLF und die Felder mit TAB getrennt sind. Blob-Felder werden dabei als Block von Hexbytes dargestellt. Damit lassen sich auch große Tabellen ziemlich schnell übertragen.

https://docs.microsoft.com/de-de/sql...ql-server-2017

egentur 6. Dez 2018 14:22

AW: Paradox nach MSSQL
 
Hallo TigerLilly

Vielen Dank,
das war genau das was ich brauchte.

Ich muss halt nur die Funktion in der Ziel DB anlegen.

Viele Grüße
und schöne Weihnachten schonmal

NormanNG 6. Dez 2018 14:34

AW: Paradox nach MSSQL
 
Hi,

oder ohne funktion mittels dynamic sql

Code:
 declare @data varchar(100)
 select @data = '0x414243'

 exec ( 'SELECT CONVERT(varchar(36),' + @data + ')')

egentur 7. Dez 2018 12:45

AW: Paradox nach MSSQL
 
Hallo Zusammen

Jetzt muss ich doch nochmal nachfragen.
Beim Exportieren aus Paradox erhalte ich Strings wie z.B.

INSERT INTO MyTable(
Counter,SData) values (
176,dbo.f_hextostr('0x2620DB8A0000173A83B1DAB9ACB9 A90760400512940C89B...'))

Jetzt ist der Value von SData, sprich der Wert für 0x262... doch teilweise sehr groß,
ca. 23k

Nun kann das SSMS (Sql Server Management Studio) diesen String nicht interpretieren (weil zu lang)
auch SQLCMD bringt hier Syntaxfehler beim Versuch zu importieren.

Gibt es einen anderen Weg die Daten wieder einzuspielen ?

Dank für eure Hinweise

Uwe Raabe 7. Dez 2018 13:12

AW: Paradox nach MSSQL
 
Zitat:

Zitat von egentur (Beitrag 1420303)
Gibt es einen anderen Weg die Daten wieder einzuspielen ?

Siehe https://www.delphipraxis.net/1420237-post6.html

Wenn du einer Routine zum Export eines DataSet in dem für bcp erwarteten Formats brauchst, kann ich vielleicht damit dienen (muss nur etwas graben).


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:45 Uhr.
Seite 1 von 2  1 2      

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