Grabación de imágenes en Oracle 9i a través de SP
Hola a todos,
Estoy intentando grabar imágenes en una columna BLOB de una tabla de Oracle 9i con Delpih IV. Dado que el usuario de conexión a la aplicación, por razones de seguridad, lo único que tiene son sinónimos a Stored Procedures de otro schema con grants de execute (el usuario de conexión no vé las tablas), la única forma de efectuar la grabación es pasando el valor a un Stored Procedure. Estoy utilizando ODAC en Delphi, tengo un componente TOraQuery (similar al TQuery+TUpdateSql) con una columna IMAGEN tipo Blob. El código para SQLInsert del componente es algo así:
La parte de captura de datos en Delphi la resuelvo utilizando un componente TDBImage, y con este código:
Esto funciona bien, me lee cualquier tipo de imagen (jpg, bmp, o ico). El problema lo tengo en Oracle. Según lo que leí en la documentación, debería resolverlo así (asumiendo que las imágenes a cargar sean chicas, nunca superiores a 32K):
Al ejecutar el SP Oracle me devuelve el sgte error: ORA-06502: PL/SQL: numeric or value error: invalid LOB locator specified: ORA-22275 ¿Alguien sabe en qué me estoy equivocando? O lo que es peor: lo que quiero hacer...¿se puede hacer? Gracias. |
Fe de erratas
En el último código SQL, donde dice:
debió decir: De todas maneras, el error sigue siendo el mismo, y ahora descubrí que se genera al ejecutar el sgte comando: Lo que más me llama la atención es que si ejecuto: nLong me da null (por eso me preguntaba si lo que quiero hacer se puede hacer...) |
Ay...
Bueno, perdonen ahora que me salieron todos esos size en el código SQL... Recién estoy aprendiendo a usar esto...
|
Cualquier tipo de archivo en DB de Oracle
Con este codigo en un TOraQuery puedes subir a la DB cualquier tipo de archivo
OraQuery1.Close; OraQuery1.UnPrepare; OraQuery1.SQL.Clear; OraQuery1.SQL.Text:= 'insert into TABLA'+ ' (codigo, imagen)'+ 'values'+ ' (:vCodigo, empty_blob())'+ 'return'+ ' imagen into :imagen'; OraQuery1.Prepare; OraQuery1.ParamByName('vCodigo').Value:= Codigo; OraQuery1.ParamByName('imagen').LoadFromFile(OpenPictureDialog1.FileName ,ftOraBlob); OraQuery1.ParamByName('imagen').ParamType:= ptInput; OraQuery1.ExecSQL; OraQuery1.Close; OraQuery1.UnPrepare; y para bajarlo lo haces con un quiery en un TOraQuery OraQuery1.Close; OraQuery1.UnPrepare; OraQuery1.SQL.Clear; OraQuery1.SQL.Text:= 'select *'+ 'from TABLA' // + condicion where si la necesitas OraQuery1.Prepare; OraQuery1.Open; TBlobField(Query1.FieldByName('imagen')).SaveToFile(SaveDialog1.FileName); OraQuery1.Close; OraQuery1.UnPrepare; |
La franja horaria es GMT +2. Ahora son las 21:53:14. |
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