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 04-10-2006
Isnel Isnel is offline
Miembro
 
Registrado: oct 2006
Posts: 22
Poder: 0
Isnel Va por buen camino
Problemas al insertar cadenas que contienen el caracter ´

Hola

Necesito insertar una cadena de texto en un campo de una base de datos en InterBase 6.5 Dialect 3, pero la cadena de texto contiene el caracter ´ y se produce un error. La cosa es esta

INSERT INTO ERRORES (ERR) VALUES(´5/ 8/06 10:54PM 00:01´24" 7380´)

Como ven la cadena contiene ´ que se usa para identificar el minuto.

¿Que se puede hacer?
Responder Con Cita
  #2  
Antiguo 04-10-2006
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Respuesta tonta:
En vez de ' no servira un . (punto) u otros : (dos puntos)
lo as probado ?
Saludos
Responder Con Cita
  #3  
Antiguo 04-10-2006
Avatar de Hagen
Hagen Hagen is offline
Miembro
 
Registrado: ene 2004
Posts: 65
Poder: 21
Hagen Va por buen camino
Talking No veo ningun problema !!

Hola.

Estas confundiendo ' con ´

son diferentes, en Interbase/Firebird usas ' para las cadenas:

'esto es una cadena'

La sentencia correcta seria:


INSERT INTO ERRORES (ERR) VALUES ('5/ 8/06 10:54PM 00:01´24" 7380')
Responder Con Cita
  #4  
Antiguo 11-10-2006
Isnel Isnel is offline
Miembro
 
Registrado: oct 2006
Posts: 22
Poder: 0
Isnel Va por buen camino
Sigue el problema

Fue un error mio al plantear al confundir el caracter ' por ´, en realidad sigo teniendo el problema porque lo que necesito es esto:

INSERT INTO ERRORES (ERR) VALUES ('5/ 8/06 10:54PM 00:01'24" 7380')

No puedo sustituir el caracter ' por otro pues esta cadena la recibo desde un autómata y no se le puede cambiar el formato en que trasmite y necesito almacenarla con ese mismo formato.
Responder Con Cita
  #5  
Antiguo 12-10-2006
fly fly is offline
Miembro
 
Registrado: abr 2005
Posts: 65
Poder: 20
fly Va por buen camino
Prueba a filtrar la cadena añadiendo otras comillas (simples) , yo acabo de pasar una DB de Dialesct 1 al 3 y esta funcion me sigue valiendo (aunque antes usaba 2 comillas dobles "" en vez de dos simples ''

Código Delphi [-]
Function TDMF1.TextoSQL(txt : string):string; // Pone comillas al inicio y final del texto
   var c : integer;                       // tambien cambia las comillas por unas dobles
       txt2: string;
  begin

  txt2:='''';
    for c:=1 to Length(txt) do
       if txt[c]<>''''
          then txt2:=txt2+txt[c]
          else txt2:=txt2+''''''; // convertimos las comillas en doble_comillas

    txt2:=txt2+'''';
    TextoSQL:=txt2;
  end;

Su uso es tan simple como la propia función (yo uso unas TIBQuery de lo mas normalito) :

Código Delphi [-]
  Dmf1.edit_q.SQL.Text:=
        ' INSERT INTO Articulos (ref, nombre) '+
        ' VALUES ('+
         Dmf1.TextoSQL(edit_ref.Text)+', '+
         Dmf1.TextoSQL(edit_nom.Text)+
        ')';

  dmf1.edit_q.Close;
  dmf1.edit_q.Prepare;
  dmf1.edit_q.ExecSQL;

A ver si esto te vale, Suerte.

Última edición por fly fecha: 12-10-2006 a las 05:24:43.
Responder Con Cita
  #6  
Antiguo 12-10-2006
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Cita:
Empezado por Isnel
INSERT INTO ERRORES (ERR) VALUES ('5/ 8/06 10:54PM 00:01'24" 7380')

No puedo sustituir el caracter ' por otro pues esta cadena la recibo desde un autómata
¿que cadena es la que recibís del autómata? ¿el insert completo? ¿la cadena de la fecha?

Aún cuando se reciba de un autómata, podes aplicar cualquier transformación a ella. Finalmente, suponiendo que la cadena que recibís del autómata es la fecha, de esta forma:


5/ 8/06 10:54PM 00:01'24" 7380

y que eso lo queres almacenar en firebird, podrías o bien valerte de un parámetro:

Código SQL [-]
insert into tabla (campo) values (:parametro)
Código Delphi [-]
  CadenaAutomata := NuevaCadenaDelAutomata;
  qInsert.ParamByName('parametro').AsString := CadenaAutomata;

Si lo que precisas es construir una sentencia sql válida, entonces yo haría:

Código Delphi [-]
  CadenaAutomata := NuevaCadenaDelAutomata;
  q1.SQL.Text := Format('insert into tabla (campo) values (%s)', [
    QuotedStr(CadenaAutomata)]);

Hasta luego.

;)
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate

Última edición por jachguate fecha: 12-10-2006 a las 17:18:22.
Responder Con Cita
  #7  
Antiguo 13-10-2006
fly fly is offline
Miembro
 
Registrado: abr 2005
Posts: 65
Poder: 20
fly Va por buen camino
Joder jachguate que bueno y oportuno!!!! voy a aprovechar que estoy pasando todo a Dialect 3 para tirar a la basura mi viejo TextoSQL() y cambiarlo por QuotedStr().

Creo que debo leer más me estoy empezando a oxidar....

Saludos y gracias a ambos.
Responder Con Cita
  #8  
Antiguo 13-10-2006
Isnel Isnel is offline
Miembro
 
Registrado: oct 2006
Posts: 22
Poder: 0
Isnel Va por buen camino
Sustituir el caracter ' por 2 '' funciona a la perfección fly.

No he probado el uso de parámetros que propone jachguate, pero creo que es muy interesante y debe funcionar
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
Problemas al Copiar Archivos con el caracter 240 AGAG4 Varios 3 19-05-2006 19:24:25
Ayudaaaa!!! Tabla ASCII: El carácter Ñ vs. carácter ¥ Berto2003 Varios 5 26-07-2005 15:37:48
Problemas al Isertar Cadenas con SQLQuery de DBExpress chivofbv Conexión con bases de datos 0 10-11-2004 19:53:35
Obtener filas que contienen dos o más valores distintos Angel Firebird e Interbase 3 14-10-2003 17:27:56
obtener filas que contienen unos datos y no contienen otros datos Angel Firebird e Interbase 14 10-06-2003 10:11:23


La franja horaria es GMT +2. Ahora son las 15:15:49.


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