Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-10-2010
Paulao Paulao is offline
Miembro
 
Registrado: sep 2003
Ubicación: Rua D 31 Casa 1 - Inhoaíba - Rio de Janeiro - RJ - Brasil
Posts: 637
Poder: 21
Paulao Va por buen camino
Duda con fechas

En mi proyecto, puzo un campo fecha que viene de un cxDateEdit de DevExpress. En el servidor de aplicaciones, tengo una función que haz gravar en el Banco de Datos, asi:
Código Delphi [-]
'Insert Into Mi_Tabla(Campo_date) values (' + DateToStr(variable_date);
Esto me lo tre un valor NULL y no es NULL, pues si yo hago asi:
Código Delphi [-]
ShowMessage(DateToStr(variable_date));
Funciona. Con certeza estas en la linea "DateToStr()", pues yo tengo un campo DateTime en el banco. Vea mi codigo completo desta funcion en el servidor:
Código Delphi [-]
function InsereOrdemProducao(Conn: TZConnection;s_ordem,s_lote,s_produto,s_valid_lote:string;dt_fab: TDateTime;qde_prod: Double;resp_tec:Integer): OleVariant;
var
  Sql:string;
  cdsGeral: TZQuery;
begin
  Result := False;
  cdsGeral := NovoDataSet(Conn);
  sql := 'INSERT INTO ORDEM_PRODUCAO(NRO_ORDEM,NRO_LOTE,PRODUTO,LOTE_VALIDADE,DT_FABRICA,QDE_PRODUZIR,RESP_TECNICO)VALUES(  ' +
         s_ordem + ',' + s_lote + ',' + s_produto + ',' + s_valid_lote + ',' + DateToStr(dt_fab) + ',' +
         FloatToStr(qde_prod) + ',' + IntToStr(resp_tec) + ')';
  try
    cdsGeral.SQL.Text := Sql;
    cdsGeral.ExecSQL;
    Result := True;
    cdsGeral.ApplyUpdates;
  except
    Result := False;
  end;
  cdsGeral.Close;
  FreeAndNil(cdsGeral);

end;
Y abajo es la llamada a la función, por el client:
Código Delphi [-]
procedure TfrmOrdemProducao.cxButton1Click(Sender: TObject);
begin
  if InsereOrdemProducao(quotedstr(edtNroProd.Text),quotedstr(edtNroLote.Text),quotedstr(edtDescricao.Tex  t),
                         quotedstr(edtValidLote.Text),edtDtFabric.Date,edtQde.Value,1) then
    ShowMessage('Orçamento realizado com sucesso!')
  else
    ShowMessage('Erro ao tentar gravar orçamento');
end;

Uso Delphi 7, MySql 5, Zeos y MultiTier.
Responder Con Cita
  #2  
Antiguo 12-10-2010
Paulao Paulao is offline
Miembro
 
Registrado: sep 2003
Ubicación: Rua D 31 Casa 1 - Inhoaíba - Rio de Janeiro - RJ - Brasil
Posts: 637
Poder: 21
Paulao Va por buen camino
Me olvide de otra llamada de Client para servidor es hecha asi:
Código Delphi [-]
function InsereOrdemProducao(s_ordem,s_lote,s_produto,s_valid_lote:string;dt_fab: TDateTime;qde_prod: Double;resp_tec:Integer): Boolean;
begin
  if not ConGeral.Connected then
    ConGeral.Open;
  Result := ConGeral.AppServer.ExecFuncao(INSERE_ORDEM_PRODUCAO,ArrayToStr([s_ordem,s_lote,s_produto,s_valid_lote,DateToStr(dt_fab),FloatToStr(qde_prod),IntToStr(resp_tec)]));
end;

Y en el Servidor tengo esta funcion que hace todo:
Código Delphi [-]
function LeFuncao(Conn: TZConnection; IDFuncao: Integer; Parametros: OleVariant): OleVariant;
begin
  case IDFuncao of
  INSERE_ORDEM_PRODUCAO: Result := InsereOrdemProducao(Conn,PegaItemLista(01,Parametros),
                                                       PegaItemLista(02,Parametros),
                                                       PegaItemLista(03,Parametros),
                                                       PegaItemLista(04,Parametros),
                                                       StrToDate(PegaItemLista(05,Parametros)),
                                                       StrToFloat(PegaItemLista(06,Parametros)),
                                                       StrToInt(PegaItemLista(07,Parametros)));

  else
    Result := '';
  end;
end;
Responder Con Cita
  #3  
Antiguo 12-10-2010
Paulao Paulao is offline
Miembro
 
Registrado: sep 2003
Ubicación: Rua D 31 Casa 1 - Inhoaíba - Rio de Janeiro - RJ - Brasil
Posts: 637
Poder: 21
Paulao Va por buen camino
Señores, una corecion. La fecha no estas NULL, pero asi:
12/10/2010 y creo que el MySql no acepta asi, pero como cambiar por el delphi?
Responder Con Cita
  #4  
Antiguo 12-10-2010
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
En lugar de DateToStr, debes utilizar FormatDateTime para darle el formato que sí acepte MySQL, tambien debes de tomar en cuenta que podrían necesitarse comillas o símbolos para encerrar la fecha de acuerdo a MySQL...

En SQL Server se requieren comillas para encerras fechas:
Código Delphi [-]
SQL := 'Set @Date = ' + QuotedStr(FormatDateTime('yyyy-mm-dd hh:mm:ss', Now));
esto resulta en:
Código:
Set @Date = '2010-10-12 12:47:59'
No recuerdo en MySQL pero creo que debería ser #2010-10-12#


Para mi la mejor opción sería Utilizar parámetros, con eso no necesitas de formatos y conversiones, ya que delphi lo hace solo:
Código Delphi [-]
 with Query do begin
  ...
  SQL.Clear;
  SQL.Add('Set @Date = :ADateValue');
  ParamByName('ADateValue').AsDateTime := Now;
  ...
 end;
__________________


Última edición por ContraVeneno fecha: 12-10-2010 a las 21:15:40.
Responder Con Cita
  #5  
Antiguo 12-10-2010
Paulao Paulao is offline
Miembro
 
Registrado: sep 2003
Ubicación: Rua D 31 Casa 1 - Inhoaíba - Rio de Janeiro - RJ - Brasil
Posts: 637
Poder: 21
Paulao Va por buen camino
Ok, pero si voy con el SQL generado por el programa y ejecutar directo en el Banco de Datos(EMS Lite for MySql), yo consigo grabar, pero por el programa(Delphi) me lo da error.
Responder Con Cita
  #6  
Antiguo 12-10-2010
Avatar de felipe88
[felipe88] felipe88 is offline
Miembro Premium
 
Registrado: may 2007
Ubicación: Mi Valle del Cauca... Colombia!!!
Posts: 1.120
Poder: 18
felipe88 Va por buen camino
Siguiendo la idea de ContraVeneno (lo más adecuado), es importante revisar la declaración de tipo de dato.

No manejo mucho MySQL, pero hagamos como ejemplo:
En la base de tados esta declarado como Date y en Delphi lo enviamos como DateTime, esto podría dar conflicto.
En otro ejemplo he visto el orden de paso de los valores, digamos, en la bd dd/mm/aaaa y en Delphi mm/dd/aaaa

Son ideas....


Saludos!
__________________
Web
Responder Con Cita
  #7  
Antiguo 12-10-2010
Paulao Paulao is offline
Miembro
 
Registrado: sep 2003
Ubicación: Rua D 31 Casa 1 - Inhoaíba - Rio de Janeiro - RJ - Brasil
Posts: 637
Poder: 21
Paulao Va por buen camino
Hizo, las coreciones, la fecha hizo un FormatDate('yyyy-MM-dd',var_date), pero no graba. Yo pego el SQL que es generado en mi aplicacion y si voy directo al MySql(EMS Lite for Mysql) funciona, pero por mi aplicacion no funciona. Que mas puede ser? No es el SQL, pues el si funciona directo en el banco.
Responder Con Cita
  #8  
Antiguo 12-10-2010
Avatar de felipe88
[felipe88] felipe88 is offline
Miembro Premium
 
Registrado: may 2007
Ubicación: Mi Valle del Cauca... Colombia!!!
Posts: 1.120
Poder: 18
felipe88 Va por buen camino
Cita:
Empezado por Paulao Ver Mensaje
Hizo, las coreciones, la fecha hizo un FormatDate('yyyy-MM-dd',var_date), pero no graba. Yo pego el SQL que es generado en mi aplicacion y si voy directo al MySql(EMS Lite for Mysql) funciona, pero por mi aplicacion no funciona. Que mas puede ser? No es el SQL, pues el si funciona directo en el banco.
Aconsejaría usar un punto de quiebre (F5) para comprobar realmente como se pasa la variable sql al Query. Muchas veces se omiten o se van cosas que no son. Depronto puedas ver la solución


Saludos!
__________________
Web
Responder Con Cita
  #9  
Antiguo 13-10-2010
Paulao Paulao is offline
Miembro
 
Registrado: sep 2003
Ubicación: Rua D 31 Casa 1 - Inhoaíba - Rio de Janeiro - RJ - Brasil
Posts: 637
Poder: 21
Paulao Va por buen camino
Resolvi, pues mi servidor apuntava para otra unit, pues como hizo una copia del fuente, creo que si quedo aun con los path antiguos, pero estas listo.. Hizo las coreciones, pero ahora al grabar está mui despacio y si queda mui demorado y el erro es de TimeOut. No se lo puede ser ahora. Zeos o otra cosa, o mismo virus, no lo se, pero no graba por el timeout.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
problema con combobox y duda con fechas alejitoo Varios 3 11-08-2010 01:42:49
Duda con fechas lbidi Varios 2 15-01-2009 16:08:05
Una Duda sobre campos de fechas ale_metall Varios 8 21-10-2007 20:38:45
Duda Con Fechas. kman Varios 4 29-05-2006 03:55:32


La franja horaria es GMT +2. Ahora son las 18:10: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
Copyright 1996-2007 Club Delphi