PDA

Ver la Versión Completa : Parametro para ingresar una variable en un blob


Jack
10-05-2004, 09:41:54
Hola de nuevo, en esta ocasión mi problema es la necesidad de ingresar una variable en un campo blob pero via SQL, es decir aplicandolo como parametro y utilizando un 'UPDATE o INSERT', probé con una variable tstream pero no me
aceptaba esta definicion como parametro. Alguien podría darme una pista. Gracias de antemano.

guillotmarc
10-05-2004, 11:46:02
Hola.

Con lo poco que dices, la única pista que te puedo dar, es que sigas probando, porqué se puede hacer (yo lo tengo en marcha). Si das más información, como la versión de Interbase, componentes utilizados, algo del código que no te funciona, el error que obtienes, ... quizá te podamos ayudar más.

Saludos.

SCORDOBA
10-05-2004, 16:01:53
Hola:

No has dicho con que componentes accedes a la base de datos. si lo estas haciendo desde Delphi con IBX o FIB busca en la calse TParams de TQuery los metodos, LoadFormStream, LoadFromFile.

Saludos

Jack
10-05-2004, 22:05:09
Disculpar, creí que me había explicado bien, el firebird es el 1.5, el componente es el ibsql de la paleta ibx de delphi5, el c´digo es algo asi
ibsql.sql.add( 'update Graficos' );
ibsql.sql.add( 'set Campo = :InCampo' );
ibsql.params.byname( 'InCampo' ) = 'variable'.
ibsql.execquery
Si campo esta definido como blob, de que tipo tiene que estar definido 'variable' en delphi.
No se si me explicado muy bien pero en fin, espero alguna contestación. Gracias otra vez

SCORDOBA
11-05-2004, 09:37:05
Hola

El tipo de variable dedpende de lo que quieras poner. En principio prodria ser cualquiera.

Incorrecto
ibsql.params.byname( 'InCampo' ) = 'variable'.

Correcto

ibsql.params.byname( 'InCampo' ).asBlob = string
ibsql.params.byname( 'InCampo' ).asInteger = Integer
..
ibsql.params.byname( 'InCampo' ).LoadFromFile()
ibsql.params.byname( 'InCampo' ).LoadFromStream()

Estas son algunas de los metodos para introducir informacion en un blob.

Saludos

guillotmarc
11-05-2004, 10:37:37
Con componentes dbExpress, esto funciona correctamente. (no utilizo IBX por lo que no te lo puedo confirmar con esos componentes).

Comprueba que el parámetro InCampo lo tienes definido de tipo ftBlob.

Saludos.

gzerox
19-05-2004, 18:33:21
en caso de querer ingresar una imagen, prueba esto


Consulta.Close;
Consulta.SQL.Clear;
Consulta.SQL.Add('INSERT INTO tabla (Imagen)');
Consulta.SQL.Add('VALUES (:img)');
if Image2.Picture.Graphic <> nil then begin //si la imagen tiene algo
M:=TmemoryStream.Create; //creo un stream en memoria
Image2.Picture.Graphic.SaveToStream(M); //asigno la imagen al stream
M.Seek(0,0); //posiciono el stream al inicio
Consulta.ParamByName('imh').LoadFromStream(M,ftblob); //lleno el parametro con el stream
M.Free; //libero el stream
end
else begin // si no hay imagen que guardar
M:=TmemoryStream.Create; //creo el memory stream
M.Clear; //lo limpio
M.Seek(0,0); //lo posiciono al inicio
Consulta.ParamByName('Foto').LoadFromStream(M,ftblob); //lo guardo en el parametro
M.Free; //libero el stream
end;
Consulta.ExecSQL; //ejecuto la sentencia SQL




se puede sin embargo guardar con este codigo cualquier tipo de archivo siempre y cuando se asigne primero al TMemoryStream y luego este se asigne al parametro