Fórum Query e ADOQuery #158325
07/05/2003
0
Bom dia!
Pessoal com o componente Query eu usava o seguinte:
[i:d40ddbc171]DM.Query1.Close;
DM.Query1.SQL.Clear;
dm.Query1.SQL.Add(´SELECT * FROM Livros WHERE descricao LIKE :Desc order by descricao´);
dm.Query1.ParamByName(´Desc´).AsString := ´¬´+Descri+´¬´;
DM.Query1.Prepare;
dm.Query1.Open;
DBGrid1.SetFocus;[/i:d40ddbc171]
Mas o mesmo código não funciona com o ADOQuery, o que eu preciso mudar?
Valeu!
Angelo
Pessoal com o componente Query eu usava o seguinte:
[i:d40ddbc171]DM.Query1.Close;
DM.Query1.SQL.Clear;
dm.Query1.SQL.Add(´SELECT * FROM Livros WHERE descricao LIKE :Desc order by descricao´);
dm.Query1.ParamByName(´Desc´).AsString := ´¬´+Descri+´¬´;
DM.Query1.Prepare;
dm.Query1.Open;
DBGrid1.SetFocus;[/i:d40ddbc171]
Mas o mesmo código não funciona com o ADOQuery, o que eu preciso mudar?
Valeu!
Angelo
Angelo
Curtir tópico
+ 0
Responder
Posts
07/05/2003
Marcelo.c
Na linha:
dm.Query1.ParamByName(´Desc´).AsString := ´¬´+Descri+´¬´;
Substitua [b:2c3b7c2be9]AsString[/b:2c3b7c2be9] por [b:2c3b7c2be9]Value[/b:2c3b7c2be9].
dm.Query1.ParamByName(´Desc´).AsString := ´¬´+Descri+´¬´;
Substitua [b:2c3b7c2be9]AsString[/b:2c3b7c2be9] por [b:2c3b7c2be9]Value[/b:2c3b7c2be9].
Responder
Gostei + 0
07/05/2003
Carlos_28
Utilize esta rotina, é 10 x + rápido que o Query ou ADOQuey
você pode modificala
Esta rotina adiciona um cláusula Where ou mais uma condição à sua Where do seu código sql do componente ADODataSet.
O ADODataSet é mais rápido que o ADOQuery ou Query.
Você tem que montar seu SQL normalmente sem order by
procedure AddWhereClause( ADODataSet : TADODataSet ; WhereClause: String);
var sCmd,sOrder:string;
iPosOrderBy: integer;
iPosGroupBy: integer;
begin
If WhereClause = ´´ then
exit;
iPosOrderBy:=Pos(´ORDER BY´,UpperCase( ADODataSet.CommandText));
iPosGroupBy:=Pos(´GROUP BY´,UpperCase( ADODataSet.CommandText));
If iPosOrderBy = 0 then
begin
sCmd := ADODataSet.CommandText;
sOrder := ´´;
end
else
begin
if iPosGroupBy = 0 then
begin
sCmd := Copy(ADODataSet.CommandText,0,iPosOrderBy-1);
sOrder := Copy(ADODataSet.CommandText,iPosOrderBy,Length(ADODataSet.CommandText)-iPosOrderBy);
end
else
begin
sCmd := Copy(ADODataSet.CommandText,0,iPosGroupBy-1);
sOrder :=Copy(ADODataSet.CommandText,iPosGroupBy,Length(ADODataSet.CommandText)-iPosOrderBy);
end;
end;
ADODataSet.CommandText:=sCmd;
If Pos(´WHERE´, UpperCase(ADODataSet.CommandText)) = 0 then
ADODataSet.CommandText := ADODataSet.CommandText + ´ WHERE ´ + WhereClause
else
ADODataSet.CommandText := ADODataSet.CommandText + ´ AND ´ + WhereClause;
If sOrder <> ´´ then
ADODataSet.CommandText := ADODataSet.CommandText + sOrder;
end;
você pode modificala
Esta rotina adiciona um cláusula Where ou mais uma condição à sua Where do seu código sql do componente ADODataSet.
O ADODataSet é mais rápido que o ADOQuery ou Query.
Você tem que montar seu SQL normalmente sem order by
procedure AddWhereClause( ADODataSet : TADODataSet ; WhereClause: String);
var sCmd,sOrder:string;
iPosOrderBy: integer;
iPosGroupBy: integer;
begin
If WhereClause = ´´ then
exit;
iPosOrderBy:=Pos(´ORDER BY´,UpperCase( ADODataSet.CommandText));
iPosGroupBy:=Pos(´GROUP BY´,UpperCase( ADODataSet.CommandText));
If iPosOrderBy = 0 then
begin
sCmd := ADODataSet.CommandText;
sOrder := ´´;
end
else
begin
if iPosGroupBy = 0 then
begin
sCmd := Copy(ADODataSet.CommandText,0,iPosOrderBy-1);
sOrder := Copy(ADODataSet.CommandText,iPosOrderBy,Length(ADODataSet.CommandText)-iPosOrderBy);
end
else
begin
sCmd := Copy(ADODataSet.CommandText,0,iPosGroupBy-1);
sOrder :=Copy(ADODataSet.CommandText,iPosGroupBy,Length(ADODataSet.CommandText)-iPosOrderBy);
end;
end;
ADODataSet.CommandText:=sCmd;
If Pos(´WHERE´, UpperCase(ADODataSet.CommandText)) = 0 then
ADODataSet.CommandText := ADODataSet.CommandText + ´ WHERE ´ + WhereClause
else
ADODataSet.CommandText := ADODataSet.CommandText + ´ AND ´ + WhereClause;
If sOrder <> ´´ then
ADODataSet.CommandText := ADODataSet.CommandText + sOrder;
end;
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)