PDA

Ver la Versión Completa : Traspaso datos firebird a MSSQL - Problema con campos Blob


vicens22
11-02-2014, 19:40:06
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 :



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í:
tbClientesSQL.mComentario.AsString := tbClientesIB.mComentario.AsString;
También se me ocurre generar Streams para cargar los campos.

// 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