FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Como convertir un campo VARCHAR a uno BLOB, si se puede?
Pues eso como puedo hacer para cambiar todos los ficheros de un campo VARCHAR a uno BLOB.
O como convertir el campo VARCHAR en BLOB directamente. |
#2
|
||||
|
||||
Hola,
en teoría debería ser algo así: Código:
alter table "<tabla>" alter "<columna_varchar>" type <blob> [subtype <subtipo>] Puedes intentar "tocar" las tablas del sistema donde se almacena la información de tipo de las columnas. Concretamente la tabla RDB$FIELDS, columnas RDB$FIELD_TYPE, RDB$FIELD_SUB_TYPE. De todas formas, tampoco estoy seguro que puedas llegar a buen puerto. Otra alternativa: 1. Crear la columna BLOB. 2. Mediante un UPDATE pasar el contenido de la columna VARCHAR a la columna BLOB recién creada. 3. Eliminar la columna VARCHAR. Saludos. |
#3
|
|||
|
|||
Habia pensado ya en crear un nuevo campo de tipo BLOB, y hacerlo mediante un UPDATE como bien dices, pero una cosa
como tengo que declarar el nuevo campo de tipo BLOB es decir eso del subtipo que decis, que no lo tengo claro. Porque yo creo el campo Código:
ALTER TABLE FACTURAS ADD DESCRIPCION_CONCEPTO2 BLOB Código:
UPDATE FACTURAS SET DESCRIPCION_CONCEPTO2=DESCRIPCION_CONCEPTO |
#4
|
||||
|
||||
Hola.
No puedes hacer ese UPDATE, porqué el motor no permite la conversión de tipos entre varchar y blob, con lo que los campos són de distinto tipo. O bien te haces un pequeño programa Delphi, en que te coja un campo y lo asigne a otro, o tendrás que usar una UDF (hay algunas que llevan funciones de conversión de blob a varchar). En la web de Claudio Valderrama tienes una lista bastante completa de udf's. http://www.cvalde.com/ (Por cierto ahora no está en linea, supongo que será algo temporal, aquí tienes otra recopilación que no es tan completa http://www.ibphoenix.com/main.nfs?a=...e=ibp_udf_libs) Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). |
#5
|
||||
|
||||
Hola,
Cita:
estos son los metadatos que estoy utlizando ... Código:
CREATE TABLE "varchar2blob" ( "campo1" VARCHAR(128), "campo2" BLOB SUB_TYPE TEXT SEGMENT SIZE 80 ); Código:
update "varchar2blob" set "campo2" = "campo1" where "campo1" = "campo1" Saludos. Última edición por kinobi fecha: 31-07-2003 a las 14:32:45. |
#6
|
||||
|
||||
Hola
Tienes razón, lo acabo de probar, permite hacer directamente la asignación de campos. Permite hacer cosas como : set Campo_Blob = Campo_Varchar set Campo_Blob = 'Texto' pero no expresiones como : set Campo_Blob = Campo_Blob || 'Texto' judoboy tienes que usar el subtipo 1 (Texto). ¿ Que mensaje de error te da ? ¿ Que versión de Interbase/Firebird utilizas ? Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). |
#7
|
|||
|
|||
Vamos a ver por partes
Primero creo el nuevo campo de tipo BLOB de la siguiente forma: Código:
alter table lineas_partida add descripcion_concepto2 blob sub_type text 2º Hago el UPDATE Código:
var SentenciaSql:String; begin UModuloDAtos.Lin_Partidas.DAtaset.Open; UModuloDatos.Lin_Partidas.DataSet.First; while not (UModuloDatos.Lin_Partidas.DAtaSet.Eof) do begin SentenciaSql:='UPDATE LINEAS_PARTIDA SET DESCRIPCION_CONCEPTO2= DESCRIPCION_CONCEPTO '+ ' WHERE PARTIDA="'+UModuloDatos.TLin_PartidasPARTIDA.AsString+'" '; Q.Close; Q.Sql.Clear; Q.Sql.Add(SentenciaSql); Q.ExecSQL; UMOduloDatos.Lin_Partidas.DataSet.NExt; end; Y me da el siguiente error Invalid modify request. conversion error from string "BLOB" |
#8
|
||||
|
||||
Hola,
tal vez sea un problema del juego de caracteres (¿?), ya que el UPDATE que construyes, aparentemente debería funcionar; a mí desde luego me funciona. De todas formas, ¿no sería más fácil hacerlo directamente con una herramienta tipo IBConsole, ISQL o similares, antes que hacerlo desde código Delphi? Saludos. |
#9
|
||||
|
||||
Hola.
A mi también me funciona. ¿ Que Interbase / Firebird usas ?, si usas una versión un poco antigua (IB 5, IB 6.0 OS, FB 1 RC1, ...) ¿ puedes actualizarte a Firebird 1.03 ? Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). |
#10
|
|||
|
|||
Utilizo Intebase 6.0
Si me actualizo a Firbird 1.3, no tendre nigún problema con mis BDA? ¿Me funcionarán todas las consultas que tengo creadas? y lo más importante como hago la actualización? |
#11
|
||||
|
||||
Hola,
Cita:
Cita:
Cita:
2. Hacer un back-up previo (con InterBase 6.0) de todas las bases de datos que querrás utilizar con Firebird. 3. Desinstalar InterBase 6.0 4. Instalar Firebird 5. Recuperar (restore) los back-ups e las bases de datos que has hecho anteriormente. Básicamente esos son los pasos. En cuanto a usuarios creados en InterBase 6.0: en principio una copia directa de la base de datos de usuarios (isc4.gdb) que estabas utilizando en IB 6, debería funcionar en Firebird. Para más seguridad, puedes hacer el mismo proceso de back-up/restore que hagas con las bases de datos de los usuarios. Saludos. |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
|