Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-12-2008
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 26
maeyanes Va por buen camino
Hola...

Cita:
Empezado por Lepe Ver Mensaje
... pero no has usado ADO .

En ADO sólo tienes .Value no existe AsString, AsDate, etc.

Saludos
Si lo he usado, pero no tan extensamente...

Y bueno, aun así, con poner .Value := FechaActual le debería funcionar sin grandes problemas. Claro siempre que establezca bien que el valor que se espera es de tipo TDateTime...


Saludos...
Responder Con Cita
  #2  
Antiguo 03-12-2008
javi.donvito javi.donvito is offline
Registrado
 
Registrado: may 2005
Posts: 6
Poder: 0
javi.donvito Va por buen camino
Gracias por la bienvenida y por responderme tan rápido. Y disculpar por el estilo del primer mensaje.

He realizado las pruebas que me habéis indicado pero sigo tendiendo problemas

El programa me genera la siguiente excepción:

'... exception class EConvertError with message "2008-12-03" is not a valid date'

No entiendo porqué, es un formato de fecha válido. Tampoco entiendo que me lo genere en ´la segunda linea

FechaActual :=StrToDate(FormatDateTime ('yyyy/mm/dd',now));

Siguiendo con las pruebas y pasando la fecha de las formas que me habias comentado

Parameters.ParamByName('pFecha').Value:=now; {o poniedo FechaActual}
me sigue generando el mismo error de ayer

Project rRecibos.exe raised exception class EOleException with message Microsoft ODBC SQL Server Drivers Optional feature not implemented

He probado y dado un motón de vueltas y me sigue dando problemas para pasar las fechas ¿Alguna sugerencia?

Gracias

Código Delphi [-]
procedure TForm1.btnActualizaClick(Sender: TObject);
Var
  FechaActual : TDateTime;
begin
  DateSeparator :='-';

 (*  En la siguiente linea
  FechaActual :=StrToDate(FormatDateTime ('yyyy/mm/dd',now));
  me sale el error
       '... exception class EConvertError with message "2008-12-03" is not a valid date'
 *)
  with ADOQCambiar do
  begin
    SQL.Clear;

    SQL.Add ('UPDATE CuotasEmitidas SET FecSituacion = Fecha'+
            'WHERE CuotasEmitidas.CodPers = 1801 ' +
            'AND CuotasEmitidas.NumRecibo = 810375');

    Parameters.ParamByName('pFecha').Value:=StrToDate(FormatDateTime ('yyyy/mm/dd',now));
    ExecSQL;

 end;
end;
Responder Con Cita
  #3  
Antiguo 03-12-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Thumbs up

Código Delphi [-]
procedure TForm1.btnActualizaClick(Sender: TObject);
Var
  FechaActual : TDateTime;
begin

  with ADOQCambiar do
  begin
    SQL.Clear;

    SQL.Add ('UPDATE CuotasEmitidas SET FecSituacion = :pFecha'+
            'WHERE CuotasEmitidas.CodPers = 1801 ' +
            'AND CuotasEmitidas.NumRecibo = 810375');

    Prepare;
     if Parameters.ParamByName('pFecha') = nil then
     begin
        ShowMessage('uuuups, hace falta crear al parámetro en tiempo de ejecución con Parameters.Add( pFecha ) ');
     end
     else
     begin
        Parameters.ParamByName('pFecha').Direction := pdinput;
         Parameters.ParamByName('pFecha').DateType := ftDateTime;
        Parameters.ParamByName('pFecha').Value:= now;
     end;
    ExecSQL;
 end;
end;

Según veo estás borrando el SQL, eso hace que los parámetros también se eliminen (al menos es el comportamiento normal del Tquery, ignoro lo que hace TADOquery), En principio debería crearse al ejecutar el "Prepare" que he puesto, pero no sé las propiedades que tomaría, por eso las defino yo. Ejecuta y cuéntame si sale el showmessage, si no sale, el error que da, etc

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #4  
Antiguo 03-12-2008
javi.donvito javi.donvito is offline
Registrado
 
Registrado: may 2005
Posts: 6
Poder: 0
javi.donvito Va por buen camino
Buenas de nuevo

Lo he ejecutado y me genera la siguiente expeción:

"... exception class EDataBaseError with ADOQCambiar. Parameter 'pFecha' not found"
en la siguiente linea



Código Delphi [-] If Parameters.ParamByName('pFecha') = nil





En la Query tengo creado el parametro pFecha y lo tengo configurado de la siguiente forma



Código Delphi [-]
Attributes
(todos a false)
DataType: ftDateTime
Direction : pdInput
NumericScale : 0
Precision: 0
Siza: 0
Value : 0:00:00
Type: Date








En la linea donde pone Prepare me generaba el error en compilación Undeclared identifier por lo que la he cambiado a Prepared :=True (no se si hice bien) he probado ejecutando el código de la siguientes formas



Código Delphi [-]// Primera opción
...
Prepared := True;
If Parameters.ParamByName('pFecha') = nil
...
// Segunda opción
...
Prepared := True;
Parameters.ParamByname('pFecha').Direction := pdinput;
Parameters.ParamByname('pFecha').DataType := ftDateTime; If Parameters.ParamByName('pFecha') = nil
...



En la segunda opción me da el error


"... exception class EDataBaseError with ADOQCambiar. Parameter 'pFecha'
not found"

en la linea
Parameters.ParamByname('pFecha').Direction := pdinput;

La Query lo que pretende simplemente es cambiar las fechas de aquellos registros que previamente fueron seleccionadas. Con el error que me encontraba con la fecha he dejado la Query lo más simple y sencilla posible intentando modificar para las pruebas un único registro.

¿Que puedo hacer ahora?.
Muchas Gracias
Responder Con Cita
  #5  
Antiguo 03-12-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
El parámetro lo tienes creado en tiempo de diseño, pero al borrar el sql con "SQL.Clear" ese parámetro se elimina también de memoria, según los resultados, hay que crear el parámetro en tiempo de ejecución:
Código Delphi [-]
procedure TForm1.btnActualizaClick(Sender: TObject);
Var
  FechaActual : TDateTime;
begin

  with ADOQCambiar do
  begin
    SQL.Clear;

    SQL.Add ('UPDATE CuotasEmitidas SET FecSituacion = Fecha'+
            'WHERE CuotasEmitidas.CodPers = 1801 ' +
            'AND CuotasEmitidas.NumRecibo = 810375');

    with Parameters.AddParameter do begin
           DataType := ftDateTime;
           Name := 'pFecha'; 
           Direction := pdInput;
           Value := now;
    end;
    Prepared := True;
    ExecSQL;
 end;
end;

A ver qué nos dice ahora

OFFTOPIC: ¿donde están los expertos en ADO? ¿de espectadores?

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #6  
Antiguo 03-12-2008
javi.donvito javi.donvito is offline
Registrado
 
Registrado: may 2005
Posts: 6
Poder: 0
javi.donvito Va por buen camino
Lo he probado tal cual como está escrito el procedure y me genera el siguiente error en la instruccion ExecSql:

"...exception class OleException with message "Multiple - step Ole Db operation generated errors. Check Ole Db Status value, if avalaible. No Work was done"


Gracias
Responder Con Cita
  #7  
Antiguo 03-12-2008
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.740
Poder: 26
ContraVeneno Va por buen camino
Código Delphi [-]
procedure TfReenvios.BitBtn2Click(Sender: TObject);
begin
with ADOQCambiar do begin
  // Actualizar
  If active then Close;
  SQL.Clear;
  SQL.Add ('UPDATE CuotasEmitidas SET FecSituacion = :Fecha ');
  SQL.Add('WHERE CuotasEmitidas.CodPers = 1801 ');
  SQL.Add('AND CuotasEmitidas.NumRecibo = 810375');
  Parameters.ParamByName('Fecha').Value := Now;
  ExecSQL;
 end; //with
end;

Eso funciona, comprobado. Cualquier error que te marque, no es culpa de este código y deberías buscar el error en otro lado.
__________________

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
Cómo paso por parametro una matriz?? NeoAnderson API de Windows 5 12-03-2008 02:47:09
Problema Paso parametro funcion NEG1414 C++ Builder 1 13-12-2007 22:58:22
parametro fecha con ado cmena Conexión con bases de datos 0 30-06-2005 17:55:50
Como paso un parametro a un formulario FNADALO OOP 4 22-11-2003 19:52:02
Como paso un la intancia Tstrings de un TComboBox (ComboBox.items) por parametro? orfeo OOP 1 05-05-2003 07:58:52


La franja horaria es GMT +2. Ahora son las 02:56:37.


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
Copyright 1996-2007 Club Delphi