Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-05-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.051
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
script sql insert into (campo blob)

Hola, he estado buscando, y no he encontrado, algo que necesito hacer, no sé si la edad me nubla la mente o es el calor que hace, pero no lo consigo, me explico:

Lo necesito en un script sql donde se crea una base de datos, sus dominios, generadores, tablas, procedimentos almacenados, triggers y... datos predeterminados.

Pues bien, en el script quiero insertar una serie de ficheros, son informes, y no encuentro la forma de hacerlo, sería algo así como:

Código SQL [-]
insert into tbInformes values (123, 'Título del informe', blob_load('Extractos.rep'), current_timestamp);

El 'blob_load' sería lo que estoy buscando, suponiendo que exista algo así.
También me valdría hacerlo mediante un 'store procedure'.

Gracias por los consejos, que vuestro Dios os lo pague con mucha buena salud, que nunca os falte 50 euros en el bolsillo y que tengáis amor para dar y regalar
Responder Con Cita
  #2  
Antiguo 30-05-2011
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
No tengo tiempo, para mirarlo, pero echalo un ojo por si te puede servir de base.
Código SQL [-]
               BLOB Reading Example (C#)             

                                                TEST.SQL Script (Testing Database)

 Run the following script to create the testing database. It creates a simple table called MYTABLE with a single row. (How to create a database from an SQL script):
CREATE TABLE MYTABLE (     ID   INTEGER,     VAL  BLOB SUB_TYPE 0 SEGMENT SIZE 80 ); Reading values

 Because it is not possible to insert binary BLOB value in the SQL script we need to insert it in the code before reading.
 The following sample prints the values from the column "VAL" to console:
string database = "test.fdb";  CreateEmbeddedDb(database, "test.sql");  FbConnectionStringBuilder csb = new FbConnectionStringBuilder(); csb.ServerType = 1; csb.Database = database;  using (FbConnection c = new FbConnection(csb.ToString())) {   c.Open();          FbCommand cmdInsert = new FbCommand("INSERT INTO mytable(id, val) VALUES(@id, @val)", c);   cmdInsert.Parameters.Add("@id", 1);   cmdInsert.Parameters.Add("@val", new byte[] {1, 2, 3});   cmdInsert.ExecuteNonQuery();    FbCommand cmd = new FbCommand("SELECT val FROM mytable", c);            using (FbDataReader r = cmd.ExecuteReader())   {     while (r.Read())     {       int size = 20;       byte[] bytes = new byte[size];       long count = r.GetBytes(0, 0, bytes, 0, size);       for(int i = 0; i < count; i++)         Console.WriteLine("Value: " + bytes[i]);     }   } } 


             
                            
             Copyright © 2005 - 2007 DotNetFirebird
Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #3  
Antiguo 30-05-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.051
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Gracias
Ha salido un poco "descuadrado", pero creo que es esto:

Código:
string database = "test.fdb";

CreateEmbeddedDb(database, "test.sql");

FbConnectionStringBuilder csb = new FbConnectionStringBuilder();
csb.ServerType = 1;
csb.Database = database;

using (FbConnection c = new FbConnection(csb.ToString()))
{
    c.Open();
            
    FbCommand cmdInsert = new FbCommand("INSERT INTO mytable(id, val) VALUES(@id, @val)", c);
    cmdInsert.Parameters.Add("@id", 1);
    cmdInsert.Parameters.Add("@val", new byte[] {1, 2, 3});
    cmdInsert.ExecuteNonQuery();

    FbCommand cmd = new FbCommand("SELECT val FROM mytable", c);
                
    using (FbDataReader r = cmd.ExecuteReader())
    {
        while (r.Read())
        {
            int size = 20;
            byte[] bytes = new byte[size];
            long count = r.GetBytes(0, 0, bytes, 0, size);
            for(int i = 0; i < count; i++)
                Console.WriteLine("Value: " + bytes[i]);
        }
    }
}
El caso es que dice esto:

Cita:
Because it is not possible to insert binary BLOB value in the SQL script we need to insert it in the code before reading.
El ejemplo, la verdad, es que no lo entiendo, y parece que no es lo que ando buscando.
Responder Con Cita
  #4  
Antiguo 30-05-2011
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Hola Casimiro.

Utilizando los scripts de IB-Experts puedes hacerlo tal y como propones. El problema es que después ese script solo lo va a reconocer el mismo IB-Expert o la utilidad de línea de comandos IBEscript.exe, también de ellos (esto último es lo que utilizo yo).

La única alternativa que se me ocurre es que utilices una UDF de las que incorporan esta función blob_load (o similar). No me gusta depender de UDF's de terceros, pero no parece que haya muchas más soluciones.

http://www.ibphoenix.com/download/tools/udf#59
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #5  
Antiguo 31-05-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.051
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Y cómo lo haces con los scripts de ibexpert?, realmente me viene bien porque es sólo para yo cargar los informes en la BD, no tienen que usarlo luego los clientes. Es para mí.

Porque meter UDFs no me fio, porque luego los servidores van siempre en distintos versiones de linux y vaya a encontrar algún problema inesperado.
Responder Con Cita
  #6  
Antiguo 31-05-2011
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Aquí tienes un ejemplo en los scripts avanzados de IBExpert :

http://www.ibexpert.net/ibe/index.ph...sIntoADatabase

SET BLOBFILE 'C:\f.jpg';
INSERT INTO ... VALUES (..., :h00000000_FFFFFFFF);
SET BLOBFILE 'C:\f2.jpg';
INSERT INTO ... VALUES (..., :h00000000_FFFFFFFF);
SET BLOBFILE 'C:\f3.jpg';
INSERT INTO ... VALUES (..., :h00000000_FFFFFFFF);

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #7  
Antiguo 31-05-2011
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Porque meter UDFs no me fio, porque luego los servidores van siempre en distintos versiones de linux y vaya a encontrar algún problema inesperado.
Te entiendo perfectamente, yo tampoco utilizo ninguna UDF de terceros (e incluso de las UDF's propias de Firebird, recurro a ellas lo mínimo posible, básicamente solo cuando hago procesos de importación de datos).
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #8  
Antiguo 31-05-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.051
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Muchas gracias por la ayuda, lo he probado y aunque no da error alguno, sin embargo, no inserta el archivo, lo guarda como null. El resto de campos están bien, pero el blob está a null. No sé si será porque tengo una versión "personal" y esté limitado en ese aspecto, aunque no da error, ya digo.

También he probado a usar el otro método que viene en ese enlace que has puesto, el de ibeblock, y directamente me dice: "Nada que hacer", así sin más, sin errores ni nada.
Sospecho que será por la versión.
Responder Con Cita
  #9  
Antiguo 31-05-2011
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Muchas gracias por la ayuda, lo he probado y aunque no da error alguno, sin embargo, no inserta el archivo, lo guarda como null. El resto de campos están bien, pero el blob está a null. No sé si será porque tengo una versión "personal" y esté limitado en ese aspecto, aunque no da error, ya digo.

También he probado a usar el otro método que viene en ese enlace que has puesto, el de ibeblock, y directamente me dice: "Nada que hacer", así sin más, sin errores ni nada.
Sospecho que será por la versión.
Es curioso. No creo que sea un problema de la versión Personal, ni de la antiguedad de la versión (llevo usando lo del set blobfile desde hace muchos años).

Probablemente sea más bien un detalle de la localización del archivos, no sé si la dirección tiene que ser referenciada al equipo servidor Firebird o al cliente (aunque creo que es al cliente, el IBExpert o IBScript, que es el que conoce como manejar estas ampliaciones de scripts).

Haz una prueba sencilla, con el IBEscript.exe, el fbclient.dll, y la base de datos, en la misma carpeta (en conexión local), y no marques ninguna ruta para el acceso al archivo a cargar, solo el nombre. Si esto funciona bien, entonces ya puedes seguir haciendo otras pruebas hasta identificar el direccionamiento correcto para los archivos a cargar.

NOTA: Imagino que has puesto el código :h00000000_FFFFFFFF como valor del campo blob, tal y como marca el ejemplo. Esto le marca al script desde donde hasta donde tiene que cargar del archivo de datos (ya que puedes poner distintas secciones del mismo archivo en diferentes campos, algo que tampoco parece algo muy útil, la verdad).
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).

Última edición por guillotmarc fecha: 31-05-2011 a las 14:21:15.
Responder Con Cita
  #10  
Antiguo 31-05-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.051
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
IBEScript.exe can be found in the IBExpert root directory, and needs to be started from DOS. (This feature is unfortunately not included in the Personal Edition.)
Ya podían sacar un mensajito o algo, que se queda uno con cara de tonto mirando la pantalla para ver si ha habido un error

Descargaré una versión de prueba y luego la quitaré.
Responder Con Cita
  #11  
Antiguo 31-05-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.051
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
En la versión trial sí lo trae, lo he instalado y probado:



Aparentemente todo bien, sin embargo:



¡¡¡nulo!!!

Voy a tener que hacer un programita delphi para cargarlos, porque se trataba de ahorrar tiempo y finalmente estoy perdiendo más tiempo en estas pruebas que en hacer el programita
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
error insert con campo incremental arefolio SQL 5 06-08-2008 12:46:02
Formatear BLOB en Insert jlcasih Firebird e Interbase 1 10-05-2006 20:20:17
Problema con insert y campo float Ivanzinho SQL 4 22-06-2005 10:07:22
campo blob acertij022 Conexión con bases de datos 1 19-08-2004 00:10:32


La franja horaria es GMT +2. Ahora son las 22:03:51.


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
Copyright 1996-2007 Club Delphi