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)
-   -   ayuda con ADOQuery (https://www.clubdelphi.com/foros/showthread.php?t=32598)

Markoz 10-06-2006 11:16:36

ayuda con ADOQuery
 
Tengo el siguiente codigo

Código Delphi [-]
  if (key = #13) then
    begin
      With dm.QBusArticulo do
        begin
          Close;
          SQL.Clear;

          if rgBusArticulo.ItemIndex = 1 then
            begin
             
              SQL.Text := 'Select * from tb_Articulos where idArtEan =' + frmBusArticulo.edtBusArticulos.Text;
            end
          else
            begin
              SQL.Text := 'Select * from tb_Articulos where Nombre =' + frmBusArticulo.edtBusArticulos.Text ;
            end;
         Open;
        end;
    end;

trato de utilizar ADOQuery por que solo quiero realizar consultas a una base de datos la cual no puedo modificar para agregarle Procedimientos Almacenados.

Al correrlo con MSSQL me dice que el nombre de la columna no existe, y dicho nombre es lo que envio en el parametro frmBusArticulo.edtBusArticulos.Text ;

si alguien tiene algun ejemplo de uso de ADOQuery para consultas SQL se lo agradeceria

Lepe 10-06-2006 11:50:19

Con tu permiso modifico el código, creo que falta QuotedStr para encerrar el valor de buscarArticulo.text entre comillas simples. ¿O será que en access son comillas dobles ¿?:confused:

Código Delphi [-]
const sqlArticulos = 'Select * from tb_Articulos where %s = %s'
 if (key = #13) then
    begin
      With dm.QBusArticulo do
        begin
          Close;
//          SQL.Clear; En realidad no hace falta, ya que al establecer la propiedad Text
//                        Se hace un Clear internamente.

          if rgBusArticulo.ItemIndex = 1 then
              SQL.Text := Format(sqlArticulos, ['idArtEan',
                                                  QuotedStr(frmBusArticulo.edtBusArticulos.Text)])
          else
              SQL.Text := Format(sqlArticulos, ['Nombre',
                                                  QuotedStr(frmBusArticulo.edtBusArticulos.Text)]);

         Open;
        end;
    end;

En este caso, estoy suponiendo que idArtEan y Nombre son campos de tipo carácter (string, varchar, etc). Si idArtEan es un campo de tipo entero, no hace falta el QuotedStr.

Si QuotedStr no te funciona, prueba a encerrarlo con comillas dobles.

Si no es mucha molestia me gustaría que comentaras la solución (si se resuelve... claro ;))

Saludos

Markoz 10-06-2006 18:05:45

Muchas gracias Lepe, sirvio bien, saludos.

Markoz 10-06-2006 19:13:54

Trate de utilizar el mismo codigo para otra consulta donde manejo fechas

Código Delphi [-]
      f1 := DateTimeToStr(dFechaInicio.date) ;
      f2 := DateTimeToStr(dFechaFinal.date) ;
      With dm.QBusKardex do
        begin
          Close;
          SQL.Clear;

          sqlKardex:= 'Select * from tb_Kardex where %s = %s AND FechaTransaccion BETWEEN %s AND %s';
          //SQL.Text := 'Select * from tb_Articulos where Nombre =' + frmBusArticulo.edtBusArticulos.Text ;

          SQL.Text := Format(sqlKardex,
                          ['idArtEan',
                          QuotedStr(ResArticulo),
                          QuotedStr(f1),
                          QuotedStr(f2)]);
          Open;
      

       end;


y me regresa el siguiente error "sintax error converting character string to smalldatetime type"

Lepe 11-06-2006 03:20:26

Las fechas son algo especiales, porque se pueden pasr en varios formatos :
dd/mm/yyyy
mm/dd/yyyy
yyyy/mm/dd

Es mejor que Delphi sea el que busque el formato adecuado para este tipo de datos, así que usamos parámetros:
Código Delphi [-]
      With dm.QBusKardex do
        begin
          Close;
          SQL.Clear;

          sqlKardex:= 'Select * from tb_Kardex where %s = %s AND FechaTransaccion BETWEEN : prFechaInicio AND : prFechaFin';
          SQL.Text := Format(sqlKardex,
                          ['idArtEan',
                          QuotedStr(ResArticulo)]);
    // hemos usado la técnica anterior para establecer parte del SQL, 
   // ahora usamos la otra técnica:
     Parambyname('prFechaInicio').AsDatetime := dtFechaInicio.Date;
     Parambyname('prFechaFin').AsDatetime := dtFechaFinal.Date;
          Open;

En este caso queda algo engorrosa la consulta, pero el nombre de un campo (IdArtEan) no puede pasarse por parámetros. el uso de parámetros en una consulta simple sería:

Código Delphi [-]
   query1.sql.text := ' SELECT * FROM TABLA WHERE Codigo = : prCodigo AND FECHA BETWEEN  : pr1 AND : pr2' ;
  query1.Parambyname('pr1').AsDateTime := now;
  query1.Parambyname('pr2').AsDateTime := now + 4;
  query1.Parambyname('prCodigo').AsInteger := 23;
  query1.Open;
Como ves, a todos los parámetros de la consulta le pongo el prefijo "pr" delante, más que nada por claridad para mí. Simplemente con anteponer los dos puntos ":" a cualquier nombre, ya delphi lo interpreta como un parámetro.

Saludos


La franja horaria es GMT +2. Ahora son las 15:49:46.

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