Ir al contenido


Foto

Consulta Sql con parametro


  • Por favor identifícate para responder
11 respuestas en este tema

#1 amell2020

amell2020

    Advanced Member

  • Miembros
  • PipPipPip
  • 340 mensajes
  • LocationEn un solo Lugar

Escrito 06 enero 2012 - 02:47

hola amigo tengo problema con esta consulta, cuando habro el formulario donde esta la consulta me dice que el Adoquery1 el paramentro ´Datos´no funciona , favor ayudarme con esto.

consulta:


delphi
  1. procedure Tinscrip.FormCreate(Sender: TObject);
  2. begin
  3. Datetimepicker1.Date:=now;
  4. Adoquery1.Close;
  5. Adoquery1.SQL.text:='Select * from matricula where fecha = datos';
  6. ADOQuery1.Parameters.ParamByName('datos').DataType := ftDate;
  7. ADOQuery1.Parameters.ParamByName('datos').Value :=Datetimepicker1.Date;
  8. Adoquery1.Open;


  • 0

#2 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 06 enero 2012 - 03:06

Hola
Los nombres de los parametros van precedidos de dos puntos:


delphi
  1. procedure Tinscrip.FormCreate(Sender: TObject);
  2. begin
  3. Datetimepicker1.Date:=now;
  4. Adoquery1.Close;
  5. Adoquery1.SQL.text:='Select * from matricula where fecha = :datos';
  6. ADOQuery1.Parameters.ParamByName('datos').DataType := ftDate;
  7. ADOQuery1.Parameters.ParamByName('datos').Value :=Datetimepicker1.Date;
  8. Adoquery1.Open;


Saludos
  • 0

#3 amell2020

amell2020

    Advanced Member

  • Miembros
  • PipPipPip
  • 340 mensajes
  • LocationEn un solo Lugar

Escrito 06 enero 2012 - 03:28

Gracias Caral pero tengo otro problema ahora sale Característica Opcional no implementada, porque?
  • 0

#4 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 06 enero 2012 - 03:50

Hola
No se por que sera.
No entiendo como das dos parametros seguidos al mismo query.
Lo que estas haciendo no tiene logica.
Pueba asi:


delphi
  1. procedure Tinscrip.FormCreate(Sender: TObject);
  2. begin
  3. Datetimepicker1.Date:=now;
  4. Adoquery1.Close;
  5. Adoquery1.SQL.text:='Select * from matricula where fecha = :datos';
  6. ADOQuery1.Parameters[0].Value := Datetimepicker1.Date;
  7. Adoquery1.Open;



Saludos
  • 0

#5 amell2020

amell2020

    Advanced Member

  • Miembros
  • PipPipPip
  • 340 mensajes
  • LocationEn un solo Lugar

Escrito 06 enero 2012 - 03:52

No es que doy dos parametro, sino que es mismo parametro, lo que le pongo el tipo de datos y el segundo le pongo el valor que tomara el parametro
  • 0

#6 amell2020

amell2020

    Advanced Member

  • Miembros
  • PipPipPip
  • 340 mensajes
  • LocationEn un solo Lugar

Escrito 06 enero 2012 - 03:54

Y con el codigo que pusiste sigue dando el mismo error de implementacion
  • 0

#7 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 06 enero 2012 - 03:56

Hola
No se para que poner el tipo de dato si se sabe que es Date ?.
No entiendo la razon del error, nunca lo he visto.
Prueba asi:


delphi
  1. procedure Tinscrip.FormCreate(Sender: TObject);
  2. var
  3. fecha: TDate;
  4. begin
  5. fecha:= now;
  6. Adoquery1.Close;
  7. Adoquery1.SQL.text:='Select * from matricula where fecha = :datos';
  8. ADOQuery1.Parameters[0].DataType := ftDate;
  9. ADOQuery1.Parameters[0].Value := fecha;
  10. Adoquery1.Open;


Saludos
  • 0

#8 amell2020

amell2020

    Advanced Member

  • Miembros
  • PipPipPip
  • 340 mensajes
  • LocationEn un solo Lugar

Escrito 06 enero 2012 - 04:08

Aun sique el problema que raro??

  • 0

#9 amell2020

amell2020

    Advanced Member

  • Miembros
  • PipPipPip
  • 340 mensajes
  • LocationEn un solo Lugar

Escrito 06 enero 2012 - 04:20

Estuve leyendo algo parecido miren aqui:

Ha llegado el momento de explicaros de donde me venia el problema. Me he pasado días y días mirando por Internet, “rastreando” las causas del error y cada vez que modificaba el código del programa la pesadilla continuaba, yo creía que el problema venia en que estaba pasando mal los parámetros en la fecha o alguna historia de este tipo (eso me pasa por obcecarme en la misma idea)

La pista me la dió uno de los errores que me generaba
Microsoft SQL Server Driver. Caracteristica opcional no implementada

El tema es que originalmente la aplicación del cliente fue desarrollada en VB6 y utiliza como bases de datos Microsoft SQL Server 2000. Habia que hacer unas modificaciones y he usado Delphi 7. Los errores me los daba tanto en Windows XP como en Vista.

La Solución:

http://support.micro...om/kb/294160/es

Personalmente para resolver el problema del paso de las fechas por parámetro, he tenido que modificar la cadena de conexión ADO y también el código de la aplicación para que me fuera aceptada la fecha cuando se realiza la modificación del registro.

La cadena de conexión que usaba en la propiedad ConectionString del componente ADOConection era la siguiente:

Provider=MSDASQL.1;Password=password;Persist Security Info=True;User ID=nombre_usuario;Data Source=sqllaco;Mode=ReadWrite;Extended Properties="DSN=midsn;UID=sa;PWD=laco;APP=Enterprise;WSID=JAVIER_LOCAL;DATABASE=RECIBOS";Initial Catalog=RECIBOS

Y ahora es:

Provider=SQLOLEDB.1;Password=password;User ID=nombre_usuario;Data Source=sqllaco;Mode=ReadWrite;Extended Properties="DSN=midsn;UID=sa;PWD=laco;APP=Enterprise;WSID=JAVIER_LOCAL;DATABASE=RECIBOS";Initial Catalog=RECIBOS

La parte Persist Security Info=True, que aparece en la antigua configuración, en la nueva, se suprime (no recuerdo exactamente en que pagina encontré este dato, creo que en la misma web del enlace)

Y el código de programa para que esto funcione es el siguiente:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
Var
  FechaActual : TDateTime;
begin
  FechaActual :=now;
  with ADOQuery1 do
  begin
    Close;
    SQL.Clear;
    SQL.Text:='Update CuotasEmitidas SET ImpRecibo = 21.02, FecSituacion= :MiFecha ' +
    ' WHERE (CuotasEmitidas.CodPers = 462 AND CuotasEmitidas.NumRecibo = 1)';
//---------------------------------------------
//  Si añado este bloque me genera error   
(*  with Parameters.AddParameter do
    begin
      DataType:=ftDate;
      Name :='MiFecha';
      Direction:=pdInput;
    end;*)
// ------------------------------
Parameters.ParamByName('MiFecha').Value:=StrToDate(FormatDateTime('dd/mm/yyyy',fechaActual));
    Prepared:=True;
    if prepared then
      ExecSQL;
  end;

Si añado el bloque de código que lo tengo como comentario, me genera el error:

Multiple Step OLE DB operation generated errors. Check each OLE DB status value, if avalaible. No work was done.

Y en al ADOQuery1 no tengo ningún parámetro creado !

Bueno, pues aqui dejo esto por si alguien le puede servir de ayuda.
Saludos
  • 0

#10 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 06 enero 2012 - 05:22

Hola
Lo solucionaste ?.
Saludos
  • 0

#11 amell2020

amell2020

    Advanced Member

  • Miembros
  • PipPipPip
  • 340 mensajes
  • LocationEn un solo Lugar

Escrito 06 enero 2012 - 05:31

Bueno yo lo resolvi de una manera no adecuado, pero me funciona :D :D :D :D :D :D :D


delphi
  1. procedure Tinscrip.FormCreate(Sender: TObject);
  2. var
  3. fecha: TDate;
  4. DATOS:STRING;
  5. begin
  6. fecha:= now;
  7. DATOS:=DateTostr(fecha);
  8. Adoquery1.Active;
  9. Adoquery1.SQL.text:='Select * from matricula where fecha LIKE ''%'+DATOS+'%'''; ;
  10. Adoquery1.Open;


  • 0

#12 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 06 enero 2012 - 05:33

Hola
Lo importante es que funciona, no como. (y)
Saludos
  • 0




IP.Board spam blocked by CleanTalk.