Ver la Versión Completa : ayuda con ADOQuery
Markoz
10-06-2006, 11:16:36
Tengo el siguiente codigo
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
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:
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
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"
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:
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:
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
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.