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)
-   -   error al insertar campo de tipo fecha con paramtero (https://www.clubdelphi.com/foros/showthread.php?t=69604)

microbiano 27-08-2010 23:54:54

error al insertar campo de tipo fecha con paramtero
 
resulta que lo que antes funcionaba ahora ya no este es el codigo que siemte habia usado.

Código Delphi [-]

with fmodulo.qry_registra do
   begin
     sql.Add('insert into volantes(usuario,recibe,volante,fecha_oficio)');
     sql.Add('values (:usuario,:recibe,:volante,:fecha_oficio);');
     Parameters.ParamByName('usuario').Value:=Trim(Fprincipal.wusuario);
     Parameters.ParamByName('recibe').Value:=wrecibio;
     Parameters.ParamByName('volante').Value:= woficio;
     Parameters.ParamByName('fecha_oficio').Value:= DateToStr(Fregistro.dtp_fecha_oficio.Date);
     try
      ExecSQL;
      application.MessageBox('Registro Almacenado Correctamente','',mb_ok + mb_iconinformation);
      exit;
     except
      on E:EOleException do
        begin
        //showmessage('Problemas con query ['+text+']');
        MessageDlg(Format('Error: %s    Codigo: %d', [E.Message, E.ErrorCode]), mtError, [mbOK], 0);
        exit;
       end; 
     end;
   end;

bien pues ahora al ejecutar memuestra el siguiente error:
proyect volate.exe raised exception class EOLeException with message [Microsoft][ODBC SQL SERVER Driver] caracteristica opcional no implementada'. process stopeed. use step or run to coninue

ya probre con dateStro(y fecha)
con dateStr(format('dd-mm-yyy',fecha)


alguien tiene alguna idea

afunez2007 28-08-2010 00:17:33

ese tipo de problemas es tipico cuando no se le define el tipo al parametro, deberias hacerlo asi:
Código Delphi [-]
with fmodulo.qry_registra do
   begin
     sql.Add('insert into volantes(usuario,recibe,volante,fecha_oficio)');
     sql.Add('values (:usuario,:recibe,:volante,:fecha_oficio);');
     Parameters.ParamByName('usuario').Value:=Trim(Fprincipal.wusuario);
     Parameters.ParamByName('recibe').Value:=wrecibio;
     Parameters.ParamByName('volante').Value:= woficio;
     Parameters.ParamByName('fecha_oficio').AsDate:= Fregistro.dtp_fecha_oficio.Date;
     try
      ExecSQL;
      application.MessageBox('Registro Almacenado Correctamente','',mb_ok + mb_iconinformation);
      exit;
     except
      on E:EOleException do
        begin
        //showmessage('Problemas con query ['+text+']');
        MessageDlg(Format('Error: %s    Codigo: %d', [E.Message, E.ErrorCode]), mtError, [mbOK], 0);
        exit;
       end; 
     end;
   end;

Es una buena practica cuando usas parametros que definas los tipos asi te evitaras problemas, por ejemplo si guardas texto utilizas .AsString, si es un entero .AsInteger, si es un campo con decimales .AsFloat, si es fecha .AsDate o .AsDateTime, etc...

Saludos

microbiano 28-08-2010 00:20:28

Gracias
 
mira realmente estoy utilizadon ADO, entonces la unica opcion que te da es

.value:=


que crees que pueda ser?

Casimiro Notevi 28-08-2010 00:45:02

Desconozco ADO, pero se supone que .value va a esperar el tipo que corresponda al campo, así que seguramente el problema sigue siendo que haces una conversión de date a string que no hace falta

Código:

Parameters.ParamByName('fecha_oficio').Value:=  Fregistro.dtp_fecha_oficio.Date;

microbiano 28-08-2010 00:49:14

hola casimiro
 
la verdad ya probe pasando el dato com tipo fecha y aun asi no lo acepta.

hice la prueba con la siguiente instruccion y funciona pero la verdad me queda duda del por que no puedo hacerlo con parametros.

Código Delphi [-]
sql.Add('INSERT INTO VOLANTES (');
   Sql.Add(' usuario,');   
   sql.Add(' recibe,');
   sql.Add(' volante,');
   sql.Add(' fecha_oficio');
   sql.Add(' ) values (');
   sql.Add(' '+QuotedStr(Fprincipal.wusuario)+', ');
   sql.Add(' '+QuotedStr(wrecibio)+', ');
   sql.Add(' '+QuotedStr(woficio)+', ');
   sql.Add(' '+QuotedStr(DateToStr(wfechaoficio))+')');

Caral 28-08-2010 01:03:03

Hola
No entiendo:
En primera instancia haces esto:
Código Delphi [-]
DateToStr(Fregistro.dtp_fecha_oficio.Date)
Y no funciona, y luego haces esto:
Código Delphi [-]
QuotedStr(DateToStr(wfechaoficio))
Y funciona.
No veo la relacion de los parametros, pero si veo una clara diferencia en cuanto a como llamas al campo fecha.
Saludos

afunez2007 28-08-2010 01:05:06

Cita:

Empezado por microbiano (Mensaje 374790)
la verdad ya probe pasando el dato com tipo fecha y aun asi no lo acepta.

hice la prueba con la siguiente instruccion y funciona pero la verdad me queda duda del por que no puedo hacerlo con parametros.

Código Delphi [-]sql.Add('INSERT INTO VOLANTES ('); Sql.Add(' usuario,'); sql.Add(' recibe,'); sql.Add(' volante,'); sql.Add(' fecha_oficio'); sql.Add(' ) values ('); sql.Add(' '+QuotedStr(Fprincipal.wusuario)+', '); sql.Add(' '+QuotedStr(wrecibio)+', '); sql.Add(' '+QuotedStr(woficio)+', '); sql.Add(' '+QuotedStr(DateToStr(wfechaoficio))+')');

Ese es el problema de utilizar sql.add, a mi en lo particular me gusta mas el sql.text:

Código Delphi [-]
with fmodulo.qry_registra do
   begin
     sql.Text:='insert into volantes(usuario,recibe,volante,fecha_oficio)'
             +' values (:usuario,:recibe,:volante,:fecha_oficio)';
     Parameters.ParamByName('usuario').Value:=Trim(Fprincipal.wusuario);
     Parameters.ParamByName('recibe').Value:=wrecibio;
     Parameters.ParamByName('volante').Value:= woficio;
     Parameters.ParamByName('fecha_oficio').Value:= Fregistro.dtp_fecha_oficio.Date;
     try
      ExecSQL;
      application.MessageBox('Registro Almacenado Correctamente','',mb_ok + mb_iconinformation);
      exit;
     except
      on E:EOleException do
       begin
        //showmessage('Problemas con query ['+text+']');
        MessageDlg(Format('Error: %s    Codigo: %d', [E.Message, E.ErrorCode]), mtError, [mbOK], 0);
        exit;
       end; 
     end;
   end;

Caral 28-08-2010 01:09:04

Hola
A mi tambien me gusta mas usar Text por que lo veo mas claro, pero no tiene nada que ver el uso de ADD, add es add, adhiere el texto es lo mismo que usar text y +.
Saludos

Casimiro Notevi 28-08-2010 01:41:39

Pues ya que estamos :)... yo tampoco usa .add, sólo uso .text
Y tampoco uso with, me confunde :)

Caral 28-08-2010 01:43:51

Hola
Cita:

Empezado por Casimiro Notevi (Mensaje 374797)
Pues ya que estamos :)... yo tampoco usa .add, sólo uso .text
Y tampoco uso with, me confunde :)

Ahora solo falta que nos digas:
Tampoco uso Windows, uso Linux.......:D:D:D
Saludos Amigo.

Casimiro Notevi 28-08-2010 02:33:26

Cita:

Empezado por Caral (Mensaje 374798)
Hola
Ahora solo falta que nos digas:
Tampoco uso Windows, uso Linux.......:D:D:D
Saludos Amigo.

jejeje... tampoco uso corbata :D

microbiano 28-08-2010 15:48:07

Graciad
 
Considerare lo del . Text aunque lo haré el lunes jeje mi amada esposa rompió el cable de energía de la pc, tengo el honor de dos grandes caral y Casimiro un saludo amigos

Casimiro Notevi 28-08-2010 18:57:47

Cita:

Empezado por microbiano (Mensaje 374823)
Considerare lo del . Text aunque lo haré el lunes jeje mi amada esposa rompió el cable de energía de la pc,

ja,ja... ¿y cómo se puede romper el cable?, espero que estuviese desconectado porque sería peligroso :S

Cita:

Empezado por microbiano
tengo el honor de dos grandes caral y Casimiro un saludo amigos

Pero Caral sí que es grande, yo a su lado soy un enano :D

microbiano 29-08-2010 14:53:52

Gracias
 
Si estaba desconectado pero bueno ahora a esperar para comprarlo.
Por otro lado que onda alguna otra opción
Del por que no puedo insertar con parámetros

microbiano 30-08-2010 18:01:31

ya intente con sql.text
 
hola de acuerdo a los consejos hasta hora recibidos, resulta que ya proble con sql.text, y sigue sin funcionar me sigue sacando el error proyect volate.exe raised exception class EOLeException with message [Microsoft][ODBC SQL SERVER Driver] caracteristica opcional no implementada'. process stopeed. use step or run to coninue.

ahora bien en cuanto a caral por que dices que vevs una Caral me podrias decir cual es diferencia de como llamo a los parametros.

ahora bien es necesario declarar alguna libreria para poder usar parametros de tupo fecha, me refiero a que por ejemplo si quieres usar ADO, necesitas declarar ADOBD.

espero me explique.

por lo pronto voy a dejarlo funcionar de acuerdo a lo escribir el dia viernes.


La franja horaria es GMT +2. Ahora son las 16:53:23.

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