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 En Campo Fecha (https://www.clubdelphi.com/foros/showthread.php?t=69752)

microbiano 06-09-2010 18:05:43

Error En Campo Fecha
 
RESULTA QUE CUANDO CONSULTO UN DETERMINADO REGISTRO DE LA BASE DE DATOS EN EL CUAL EN UNA COLUMNA DE TIPO DATETIME. HAGO LA SIGUIENTE CONSULTA.
Código Delphi [-]
  with Fmodulo.qry_registra do
   begin
     SQL.Clear;
     SQL.Add('select * from volantes');
     SQL.Add('where volante=:volante_a_buscar');
     Parameters.ParamByName('volante_a_buscar').Value:=Trim(wbuscar);
     try
      open;
      if not Fmodulo.qry_registra.IsEmpty then
       begin
        Fregistro.wmodificar:=FieldByname('id_volante').AsString;
        Fregistro.txtoficio.Text:=FieldByname('volante').AsString;
        Fregistro.txtremitente.Text:=FieldByname('remitente').AsString;
        Fregistro.txtfirmado.Text:=FieldByname('firmado_por').AsString;
        fregistro.txtasunto.Text:=FieldByname('asunto').AsString;
        Fregistro.txtrecibio.Text:=FieldByname('recibe').AsString;
        fregistro.txtarchivo.Text:=FieldByname('archivo_en').AsString;
        ShortDateFormat := 'dd/mm/yyyy';
        fregistro.dtp_fecha_oficio.Date:=StrToDate(FieldByname('fecha_oficio').asString);
        fregistro.dtp_fecha_recibido.Date:=StrToDate(FieldByname('fecha_recibido').asString);
        {registros de distribucion}
        Fregistro.dtp_fecha_turno.DateTime:=StrToDate(FieldByname('fecha_turnado').AsString);        
        Fregistro.cb_personal.Text:= FieldByname('TURNADO_A').AsString;
        Fregistro.txtinstrucciones.Text:=FieldByname('para').AsString;
        {termina registros de distribucion}
        Fregistro.widentificador:=1;
        exit;
       end
      else
       begin
         Fregistro.widentificador:=0;
       end;
     except
      on E:EOleException do
        begin
        MessageDlg(Format('Error: %s    Codigo: %d', [E.Message, E.ErrorCode]), mtError, [mbOK], 0);
        exit;
       end;
     end;
   end;

BIEN CUANDO HAY UN REGISTRO EN EL QUE AUN NO TIENE UNA FECHA. AL REGRESAR UN CAMPO DE TIPOD FECHA PARA CARGARLO AL tDATETIME ME MANDA EL SIGUIENTE ERROR

IS NOT A VALID DATE.

ALGUIEN SABER COMO PONER UNA FECHA EN UN TDATE CUANDO EL CAMPO DE LA BASE DE DATOS DE TIPO FECHA ESTA VACIO?

Jab 06-09-2010 18:14:25

Añádele la información:

TDateTime necesita un formato de dd/mm/yyyy hh:mm:ss

En este caso puedes hacer dos opciones

Fregistro.dtp_fecha_turno.DateTime:=StrToDate(FieldByname('fecha_turnado').AsString);
El dato fecha_turnado puede ser vacío ¿verdad?

If FieldByname('fecha_turnado').Value is null then << lo que quieras >>
Posicionarlo como "clear" de tal manera que en la base queda en blanco.

Asígnarle una fecha por defecto, o si el campo es un formato dd/mm/yyyy deberás añadirle la hora.

Sino, también puedes capturar el código crítico

Try

Fregistro.dtp_fecha_turno.DateTime:=StrToDate(FieldByname('fecha_turnado').AsString);
Except << aquí metes el código para el error >>>
por ejemplo: Fregistro.dtp_fecha_turno.DateTime := nil
End;//del try

No recuerdo si se le asigna con nil. Sino puedes utilizar la opción de asignarle la fecha por defecto que requieras.

Saludos.

ContraVeneno 06-09-2010 18:34:07

Código Delphi [-]
Fregistro.dtp_fecha_turno.DateTime:=FieldByname('fecha_turnado').AsDateTime;

siempre y cuando tu fecha sea fecha... me refiero a que el campo fecha, este definido como fecha... por que una fecha es una fecha, ¿o no?. No se porque la manía de creer que una fecha es una cadena... pero bueno... de echo, uan fecha es un número.

microbiano 06-09-2010 19:06:35

contraveneno
 
probe de mil formas de insertar fecha, ahora bien lo que utilizo es ADO, ahora el ejemplo que pones no hay ninfun problema el problema es cuando en el campo de tipo fecha no tengo registrada una fecha es decir esta vacio.

Neftali [Germán.Estévez] 07-09-2010 12:29:29

Cita:

Empezado por microbiano (Mensaje 375660)
...el problema es cuando en el campo de tipo fecha no tengo registrada una fecha es decir esta vacio.

¿No puedes preguntar antes de asignar si el campo es nulo?

microbiano 07-09-2010 17:21:47

Listo Resuelto El Problema
 
JEJEJE CAPTURE LA EXCEPCION JEJEJE DEJO EL CODIGO
Código Delphi [-]
with Fmodulo.qry_registra do
   begin
     SQL.Clear;
     SQL.Add('select * from volantes');
     SQL.Add('where volante=:volante_a_buscar');
     Parameters.ParamByName('volante_a_buscar').Value:=Trim(wbuscar);
     try
      open;
      if not Fmodulo.qry_registra.IsEmpty then
       begin
        Fregistro.wmodificar:=FieldByname('id_volante').AsString;
        Fregistro.txtoficio.Text:=FieldByname('volante').AsString;
        Fregistro.txtremitente.Text:=FieldByname('remitente').AsString;
        Fregistro.txtfirmado.Text:=FieldByname('firmado_por').AsString;
        fregistro.txtasunto.Text:=FieldByname('asunto').AsString;
        Fregistro.txtrecibio.Text:=FieldByname('recibe').AsString;
        fregistro.txtarchivo.Text:=FieldByname('archivo_en').AsString;
        ShortDateFormat := 'dd/mm/yyyy';
        fregistro.dtp_fecha_oficio.Date:=StrToDate(FieldByname('fecha_oficio').asString);
        fregistro.dtp_fecha_recibido.Date:=StrToDate(FieldByname('fecha_recibido').asString);
        {registros de distribucion y verifico que no me traiga una
        fecha vacio si es asi le pongo la fecha actual}
        try
         Fregistro.dtp_fecha_turno.DateTime:=StrToDate(FieldByname('fecha_turnado').AsString);
        except
         on EConvertError do
     
          Fregistro.dtp_fecha_turno.DateTime:=Now;
         end;
        Fregistro.cb_personal.Text:= FieldByname('TURNADO_A').AsString;
        Fregistro.txtinstrucciones.Text:=FieldByname('para').AsString;
        {termina registros de distribucion}
        Fregistro.widentificador:=1;
        exit;
       end
      else
       begin
         Fregistro.widentificador:=0;
       end;
     except
      on E:EOleException do
        begin
        MessageDlg(Format('Error: %s    Codigo: %d', [E.Message, E.ErrorCode]), mtError, [mbOK], 0);
        exit;
       end;
     end;
   end;

AHORA BIEN ME SIGUE LA DUDA DEL POR QUE NO PUEDO USAR PARAMETROS PARA GENERAR MIS CONSULTAS:


LO QUE PARA UNOS ES FACIL HACER UN SERT DE LA SIGUIENTE MANERA :
Código Delphi [-]
      SQL.Clear;
      sql.Add('Insert into sap_serv(nombreserv,cuota)');
      SQL.Add('Values( :servicio, :cuota)');
      Parameters.ParamByName('servicio').Value:=wservicio;
      Parameters.ParamByName('cuota').Value:=wcuota;

YO LO TENGO QUE HACER ASI
Código Delphi [-]
 sql.Clear;
     sql.Add(' insert into sap_contrato (');
     Sql.Add(' nocontrato ,');    //1
     sql.Add(' nombre ,');//2
     sql.Add(' paterno ,');//3
     sql.Add(' materno ,');//4
     sql.Add(' ncompleto, '); //5
     sql.Add(' localidad ,');//6
     sql.Add(' calle ,');//7
     sql.Add(' noext ,');//8
     sql.Add(' noint ,');//9
     sql.Add(' cp ,');//10
     sql.Add(' fecharegistro ,');//111
     sql.Add(' telefono ,');//12
     sql.Add(' observacio, ');//13
     sql.add(' status ');//14
     sql.Add(' ) values (');
     sql.Add(' '+QuotedStr(wnocontrato)+', ');//1
     sql.Add(' '+QuotedStr(wnombre)+', ');//2
     sql.Add(' '+QuotedStr(wpaterno)+', ');//3
     sql.Add(' '+QuotedStr(wmaterno)+', ');//4
     sql.Add(' '+QuotedStr(wcompleto)+', '); //5
     sql.add(' '+QuotedStr(wlocalidad)+', ');//6
     sql.Add(' '+QuotedStr(wcalle)+', ');//7
     sql.Add(' '+IntToStr(wnoint)+', ');//8
     sql.Add(' '+inttostr(wnoext)+', ');//9
     sql.Add(' '+Inttostr(wcp)+', '); //10
     sql.Add(' '+QuotedStr(DateToStr(wfechare))+', ');//11
     sql.Add(' '+QuotedStr(wtel)+', ');//12
     sql.Add(' '+QuotedStr(wobs)+', ');//13
     sql.Add(' '+Inttostr(westatus) +')');//14
      ExecSQL;

AHORA LO QUE PREGUNTO ES HAY AKLGUNA EXTRAÑA RAZON DEL PORQUE ALGUNOS PUEDEN USAR PARAMETROS Y OTROS NO, O DEPENDE DE LA BASE DE DATOS O DE LOS COMPOMENTES QUE SE USAN PARA ACCEDER A ELLOS O DE LAS USES.

MIS USES

Código Delphi [-]
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Buttons, ComCtrls,ADODB,ComObj,DateUtils;

MIS COMPONENTE SON

ADOCONEXION,ADOQUERY,ADOSTOREPROCEDURE.


Y MI BASE DE DATOS ES

SQLSERVER 2000

CONTRAVENENO, QUE USES TIENES REGISTRADAS, QUE BASE DE DATOS USAS Y QUE COMPONENTES?

ESPERO ME RESPONDAN :-)

microbiano 07-09-2010 23:45:20

sigue mi duda con parametros
 
bueno resulta que ya investigue y al parecer no encuentro la respuesta a mi duda del porque no puedo usar parametros en las instrucciones sql lo que para unos hacer un insert es tan facil como
Código Delphi [-]
 SQL.Clear;
      sql.Add('Insert into sap_serv(nombreserv,cuota)');
      SQL.Add('Values( :servicio, :cuota)');
      Parameters.ParamByName('servicio').Value:=wservicio;
      Parameters.ParamByName('cuota').Value:=wcuota;

yo tengo que hacer lo siguiente
Código Delphi [-]
sql.Clear;
     sql.Add(' insert into sap_contrato (');
     Sql.Add(' nocontrato ,');    //1
     sql.Add(' nombre ,');//2
     sql.Add(' paterno ,');//3
     sql.Add(' materno ,');//4
     sql.Add(' ncompleto, '); //5
     sql.Add(' localidad ,');//6
     sql.Add(' calle ,');//7
     sql.Add(' noext ,');//8
     sql.Add(' noint ,');//9
     sql.Add(' cp ,');//10
     sql.Add(' fecharegistro ,');//111
     sql.Add(' telefono ,');//12
     sql.Add(' observacio, ');//13
     sql.add(' status ');//14
     sql.Add(' ) values (');
     sql.Add(' '+QuotedStr(wnocontrato)+', ');//1
     sql.Add(' '+QuotedStr(wnombre)+', ');//2
     sql.Add(' '+QuotedStr(wpaterno)+', ');//3
     sql.Add(' '+QuotedStr(wmaterno)+', ');//4
     sql.Add(' '+QuotedStr(wcompleto)+', '); //5
     sql.add(' '+QuotedStr(wlocalidad)+', ');//6
     sql.Add(' '+QuotedStr(wcalle)+', ');//7
     sql.Add(' '+IntToStr(wnoint)+', ');//8
     sql.Add(' '+inttostr(wnoext)+', ');//9
     sql.Add(' '+Inttostr(wcp)+', '); //10
     sql.Add(' '+QuotedStr(DateToStr(wfechare))+', ');//11
     sql.Add(' '+QuotedStr(wtel)+', ');//12
     sql.Add(' '+QuotedStr(wobs)+', ');//13
     sql.Add(' '+Inttostr(westatus) +')');//14
      ExecSQL;

AHORA LO QUE PREGUNTO ES HAY AKLGUNA EXTRAÑA RAZON DEL PORQUE ALGUNOS PUEDEN USAR PARAMETROS Y OTROS NO, O DEPENDE DE LA BASE DE DATOS O DE LOS COMPOMENTES QUE SE USAN PARA ACCEDER A ELLOS O DE LAS USES.

mis uses

Código Delphi [-]
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Buttons, ComCtrls,ADODB,ComObj,DateUtils;


IS COMPONENTE SON

ADOCONEXION,ADOQUERY,ADOSTOREPROCEDURE.


Y MI BASE DE DATOS ES

SQLSERVER 2000

CONTRAVENENO, QUE USES TIENES REGISTRADAS, QUE BASE DE DATOS USAS Y QUE COMPONENTES?

ESPERO ME RESPONDAN :-)

microbiano 07-09-2010 23:49:30

Gracias por las Respuestas

Casimiro Noteví 07-09-2010 23:56:28

O me equivoco o el hilo nuevo que has abierto es una copia de este, si es el mismo entonces no debes abrir otro, sigue aquí hasta que soluciones el problema. Borro el otro. Saludos.

microbiano 08-09-2010 16:28:28

vaya veo que nadie me da una respuesta, seguire investigando y si encuentro la solucion la compartire

Casimiro Noteví 08-09-2010 16:34:06

El problema, amigo, es que no se entiende bien cuál es el problema, qué es lo que has hecho y qué ha ocurrido después. O sea, no te has explicado bien... o no te hemos entendido nosotros.

microbiano 08-09-2010 16:44:18

mi Estimado amigo Casimirotengo la duda del porque para unos es tan facil ahcer un insert con parametros ejemplo

Código Delphi [-]
 SQL.Clear;
      sql.Add('Insert into sap_serv(nombreserv,cuota)');
      SQL.Add('Values( :servicio, :cuota)');
      Parameters.ParamByName('servicio').Value:=wservicio;
      Parameters.ParamByName('cuota').Value:=wcuota;
y si yo trato de hacerlo me dice que la aplicacion utiliza un valor de tipo no valido para la operacion actual entonces lo que hago es
Código Delphi [-]
sql.Clear;
     sql.Add(' insert into sap_serv (');
     Sql.Add(' nombreserv ,');   
     sql.Add(' cuota ,');  
     sql.Add(' ) values (');
     sql.Add(' '+QuotedStr(wservicio)+', ');
     sql.Add(' '+Inttostr(wcuota) +')');
      ExecSQL;

bien la pregunta es :

¿ por que para unos les funciona la primera opcion de los parametros y a mi no?

se debe a:

* la base de datos (utilizo sqlserver2000)
* las uses que tenemos registradas(

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,)
Dialogs, StdCtrls, ExtCtrls, Buttons, ComCtrls,ADODB,ComObj,DateUtils; * los compomente utilizados(ADOCONEXION,ADOQUERY y ADOSTOREDPROC.


y le pregunte a contraveneno que si me podia decir que componentes usa, que base de datos y que uses tiene registradas.


Neftali [Germán.Estévez] 08-09-2010 16:51:37

Cita:

Empezado por microbiano (Mensaje 375747)
Gracias por las Respuestas

Yo pensé que ya lo habías resuelto después de esta respuesta. :confused::confused:
Deberías intentar NO ESCRIBIR EN MAYÚSCULAS, eso se hace bastante incómodo y no ayuda a que te ayuden. :o

Cita:

Empezado por microbiano (Mensaje 375794)
¿ por que para unos les funciona la primera opcion de los parametros y a mi no?

Está bien que nos digas que no te funciona, pero eso da poca información o ninguna. Deberías intentar explicar algo más que "...no me funciona".
¿Te da error? ¿Al compilar? ¿Al ejecutar?
¿Cual?
¿No te da error, pero no inserta?
¿Alguna excepción?
:confused::confused:

microbiano 08-09-2010 17:11:33

Gracias amigo por contestar.

mira el error que me manda es :
Código Delphi [-]
EoleException With message' la plaicacion utiliza un valor de tipo no válido para la operacion alcual'. process stopped. use step or run

ElDioni 08-09-2010 17:19:26

Buenas,
hombre, a bote pronto, por el error que te da, diría que le estas
pasando un tipo de dato que no es el mismo que tienes en la base
de datos, quiero decir que "cuota" es de tipo numérico y le estas
pasando una cadena de texto con wcuota, ¿puede ser?.

Un saludo

Casimiro Noteví 08-09-2010 17:29:11

Es que estás haciendo cosas distintas:

En el primero:
Parameters.ParamByName('servicio').Value:=wservicio;
Parameters.ParamByName('cuota').Value:=wcuota;


El campo "servicio" de qué tipo, y la variable "wservicio" de qué tipo es?



En el segundo:
sql.Add(' '+QuotedStr(wservicio)+', ');
sql.Add(' '+Inttostr(wcuota) +')');


Aquí estás pasando el valor de la variable wservicio entre comillas, sin embargo, en el modelo anterior... no!!!


Es lo único que puedo sacar con tan pocos datos :)

microbiano 09-09-2010 21:58:01

haber lo entiendo el problema es simple haber por que algunos para sus instrucciones de insercion usan parametros y les funciona de maravilla y en cambio a mi no,

solo quiero saber si es por el manejador de base de datos los componentes o a que se debe

Casimiro Noteví 09-09-2010 22:19:00

Cita:

Empezado por microbiano (Mensaje 375798)
mira el error que me manda es :
Código Delphi [-]
EoleException With message' la plaicacion utiliza un valor de tipo no válido para la operacion alcual'. process stopped. use step or run

Según ese mensaje (que dudo que sea un copia->pega ;) se supone que es por el tipo de dato, pero si no nos das más pistas...

Casimiro Noteví 09-09-2010 22:20:35

Cita:

Empezado por microbiano (Mensaje 375912)
haber lo entiendo el problema es simple haber por que algunos para sus instrucciones de insercion usan parametros y les funciona de maravilla y en cambio a mi no,

solo quiero saber si es por el manejador de base de datos los componentes o a que se debe

Repito lo de arriba, si no nos das pistas... adivinos no somos ;)

microbiano 10-09-2010 00:00:44

CAsimiro Gracias por responder no se que mas pistas quieres: uso ADODBConexion,ADODBquery y ADoStoredProcedu.

y quiero hacer un insert

pero cuando trato de trabajar con parametro me dice que la operacion utiliza un valor de tipo no valido para la operacion.

lo unico que pregunto es si hay que declarar algun USES para usar parametros?.


el tipo de datos en la base de datos son varchar(50) y cuota es numeric


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

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi