Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Problemas con Firebird y UPDATE (https://www.clubdelphi.com/foros/showthread.php?t=92770)

mcsebas 27-01-2018 01:00:51

Problemas con Firebird y UPDATE
 
Hola amigos de Club Delphi ... tengo un problema y no se como resolverlo porque me tira este error y la verdad que es MUY MOLESTO.
Les explico

Estoy haciendo un proyecto en donde uso DBXPRESS con Firebird. La conexion y las inserciones todo bien funcionan a la maravilla pero cuando voy a querer modificar algun registro con la instruccion UPDATE me tirar este mensaje

Cita:

Conversion String Error "......"
Cuando utilizo la instruccion UPDATE lo hago con un comando parametrizado.

Ahi les va mi codigo el cual me funciona a la perfeccion con las inserciones.

Código Delphi [-]
  with Comando do
    begin
      Params.CreateParam(ftInteger,'p0',ptInput);
      Params.CreateParam(ftString,'p1',ptInput);
      Params.CreateParam(ftString,'p2',ptInput);
      Params.CreateParam(ftString,'p3',ptInput);
      Params.CreateParam(ftInteger,'p4',ptInput);
      Params.CreateParam(ftString,'p5',ptInput);

      ParamByName('p0').AsInteger:=Id;
      ParamByName('p1').AsString:=Nombre;
      ParamByName('p2').AsString:=Cuenta;
      ParamByName('p3').AsString:=Clave;
      ParamByName('p4').AsInteger:=Permisos;

      if string.IsNullOrWhiteSpace(Observaciones) = true then
        ParamByName('p5').Value:=Null
      else
        ParamByName('p5').AsString:=Observaciones;
    end;

  Comando.ExecSQL(False);

Muchas Gracias

Casimiro Notevi 27-01-2018 14:36:53

¿En qué línea da el error? ¿con qué valores? ¿cuál es la sentencia de udpate? ...

mcsebas 27-01-2018 20:14:18

La sentencia es la siguiente
Código SQL [-]
UPDATE USUARIOS SET NOMBRE=:p1, CUENTA=:p2, CLAVE=:p3, PERMISOS=:p4, OBSERVACIONES=:p5 WHERE ID=:p0
El problema me lo genera cuando quiero modificar campos que son VARCHAR o sea como dice el error TDBXError :Conversion error from string.

La situación se soluciona cuando concateno todos los campos pero no es la idea si utilizo parametros.

Gracias

Casimiro Notevi 27-01-2018 20:47:09

Cita:

Empezado por mcsebas (Mensaje 524229)
El problema me lo genera cuando quiero modificar campos que son VARCHAR o sea como dice el error TDBXError :Conversion error from string.

Bien, pero qué campos, con qué valores, con qué codigo, en qué línea, pon un código que lo veamos... Es que no podemos adivinar.

mRoman 30-01-2018 00:03:35

Algun campo esta mal definido o una variable no tiene el tipo de dato correcto, me hace pensar que el error te lo manda porque estas intentado almacenar un dato de tipo string en un campo numérico o vicerversa....checa eso !. Puede ser que por ahi este la solución.

Por cierto...si necesitamos mas información, ejemplo:

LOS CAMPOS DE LA TABLA, DE QUE TIPO DE DATOS SON?

Y como dice Casimiro....mas información, asi solamente estaremos especulando por donde te da el error.

Observando tus datos:

Código Delphi [-]
          ParamByName('p2').AsString:=Cuenta;
         ParamByName('p3').AsString:=Clave;

"Cuenta" y "Clave", con numéricos? o son de tipo String?

Saludos.

mcsebas 31-01-2018 06:08:21

Disculpen la tardanza en contestar. Les comento lo siguiente:

He creado una clase llamada usuario con las siguientes propiedades:
  • Id ---> Entero
  • Nombre ---> String
  • Cuenta ---> String
  • Clave ---> String
  • Permisos ---> Entero
  • Estado ---> Entero
  • Observaciones ---> String
En dicha clase utilizo una funcion interna (o sea esta en private) en donde parametrizo las sentencias de Insert y Update para no estar repitiendo todo.
Cabe aclarar que las inserciones no generan problema alguno.

El error se suscita cuando en una actualización trato de actualizar (valga la redundancia) los valores del tipo VARCHAR.

Por lo que segui investigando aparentemente es un error en el motor de base de datos que por cierto utilizo FIREBIRD 3 y para conectarme los componentes IBDAC.

La tabla tiene esta estructura:
Código SQL [-]1) ID int not null primary 2) NOMBRE varchar(45) not null 3) CUENTA varchar(15) not null 4) CLAVE varchar(15) not null 5) PERMISOS int not null 6) ESTADO int not null 7) OBS varchar(255)


Espero que puedan ayudarme amigos.
Muchas Gracias

Casimiro Notevi 31-01-2018 09:57:39

Cita:

Empezado por mcsebas (Mensaje 524266)
Por lo que segui investigando aparentemente es un error en el motor de base de datos que por cierto utilizo FIREBIRD 3

Seguro que no.

mRoman 31-01-2018 17:20:34

Solo podré especular, mi experiencia no es mucha, ya nos orientara el moderador, pero esta parte del codigo es correcto?.

Código Delphi [-]
 if string.IsNullOrWhiteSpace(Observaciones) = true then
        ParamByName('p5').Value:=Null  // ESTA LINEA...es lo mismo que esto?:   ParamByName('p5').AsString:="";
      else
        ParamByName('p5').AsString:=Observaciones;

Casimiro Notevi 31-01-2018 17:54:50

Cita:

Empezado por mRoman (Mensaje 524271)
ParamByName('p5').Value:=Null // ESTA LINEA...es lo mismo que esto?: ParamByName('p5').AsString:="";

No es lo mismo, son muy diferentes :)

mcsebas 31-01-2018 20:38:45

Es distinto que poner una cadena en vacio ...
Null lo utilizo para poner en el campo en vacio en la base de datos.

Casimiro Notevi 31-01-2018 22:25:44

Precisamente, no puedes convertir un null a string, usa la cadena vaci´a ''

mcsebas 01-02-2018 04:02:55

Buenas amigos ... gracias por la ayuda.
Encontré la solución y era problema con las transacciones.

Suprimi un el StartTransaction y funciono.

Muchisimas gracias.

Casimiro Notevi 01-02-2018 08:56:10

Eso pasa por no poner el co´digo fuente, no podemos adivinar ;)


La franja horaria es GMT +2. Ahora son las 18:07:10.

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