Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MS SQL Server (https://www.clubdelphi.com/foros/forumdisplay.php?f=23)
-   -   Traspaso datos firebird a MSSQL - Problema con campos Blob (https://www.clubdelphi.com/foros/showthread.php?t=85184)

vicens22 11-02-2014 19:40:06

Traspaso datos firebird a MSSQL - Problema con campos Blob
 
Buenas tardes,

Estoy intentando realizar un traspaso de datos desde una base Firebird a MSSQL y me encuentro con un curioso problema en relación con los campos de comentarios (blobs).

Resulta que en firebird varias tablas tienen campos tipo Blob (tBlobField) y lo que necesito es pasarlo a su equivalente en SQL (campo text).

Tengo otras aplicaciones de traspaso realizadas con otra versión anterior de delphi (2007) en las cuales el código siguiente funcionaba sin problema :

Código Delphi [-]

tbClientesSQL.mComentario.value := tbClientesIB.mComentario.value;

Ahora al intentar compilar el mismo código con Delphi XE5 obtengo el siguiente código de error:

[dcc32 Error] traspasoSbiwTOSbiol50.pas(775): E2010 Incompatible types: 'AnsiString' and 'System.TArray<System.Byte>'

He buscado y consultado diversos foros y por lo que me parece el problema tiene que ver con el cambio a Unicode que se aplicó en delphi 2009 (al menos eso me ha parecido entender).
He probado diversas soluciones y cambios aconsejados, de momento sin éxito.

Alguien se ha encontrado con problema similar y puede echarme un cable ??

Muchas gracias por cualquier sugerencia.

Saludos,

Vicente

duilioisola 12-02-2014 09:22:18

Supongo que la representación de los Blobs para cada base de datos se hace diferente (AnsiString y Array of byte)
¿Has probado asignar el valor del campo a un TStrings y luego asignar esta variable al nuevo campo?
Otra posibilidad, si se trata de textos es tratar de utilizar algo así:
Código Delphi [-]
tbClientesSQL.mComentario.AsString := tbClientesIB.mComentario.AsString;
También se me ocurre generar Streams para cargar los campos.
Código Delphi [-]
// Poner todo esto entre try..finally
StreamMsSQL := tbClientesSQL.CreateBlobStream(tbClientesSQL.mComentario, bmWrite);
StreamFB := tbClientesIB.CreateBlobStream(tbClientesIB.mComentario, bmRead);
StreamMsSQL.CopyFrom(StreamFB, StreamFB.Size);
StreamMsSQL.Free;
StreamFB.Free;

vicens22 12-02-2014 10:48:09

Buenos días,

La primera opción que me aconsejaste funcionó perfectamente. Creía haberla probado ya, pero debí cometer algún error porque ahora ha funcionado a la primera.

Muchas gracias por tu ayuda !!

Saludos

Vicente


La franja horaria es GMT +2. Ahora son las 18:26:16.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi