Newsgroup: it.comp.lang.delphi
Titolo: problema con adoquery

ciao a tutti,
ho inserito questo statement SQL nella proprietà SQL Tstring di una
Adoquery:
code:-----------------------------------------------------------------------
-------
SELECT *
    FROM clienti
    WHERE RAGIONE_SOCIALE LIKE '%' + Edit2.Text +
'%';------------------------------------------------------------------------
------
Purtroppo ricevo l'errore:
"Il prefisso edit2 non corrisponde al nome o alias di
tabella.."
dove sbaglio???
ciao!

ragiona....
Cosa è per la query la dicitura edit2.text?
Bye
A.


ok ora sto costruendo la query a runtime ma ho un problema con  la seconda
condizione, dove passo il valore della edit2...ricevo il messaggio "errore
di sintassi"...sarà un problema di apici ma non riesco a trovare l'errore:
procedure TForm1.Button1Click(Sender: TObject);
var
num_and: integer;
begin
with ADOQuery1 do begin
  with SQL do begin
    Clear;
    Add('SELECT *');
    Add('FROM clienti');
    Add('where');
    num_and:=0;
    if edit5.text<>'' then
  begin
  if num_and > 1 then
    begin
    SQL.Add ('AND ');
       end;
    SQL.Add('id='+''''+edit2.text+'''');
     num_and:=num_and+1;
      end;
   if edit5.text<>'' then then
  begin
    num_and:=num_and+1;
    if num_and>1 then
    begin
    SQL.Add ('AND ');
       end;
    SQL.Add('ragionesociale like '+'%'+''''+edit2.text+''''+'%');
      end;
  end;
  Open;
 num_and:=0;
end;
ciao!!!

     SQL.Add('ragionesociale like '+'%'+''''+edit2.text+''''+'%');
SQL.Add('ragionesociale like :Parametro_ragionesociale');
Poi una If ad esempio :
    if Trim(edit5.text)<> then
    begin
Parameters.Parambyname('Parametro_ragionesociale').Value:=edit2.text;
    end;
IMHO ti conviene prima costruirti la Query con la sitassi necessaria e i
parametri,
poi in base ai parametri andare a sostituire i valori ....
ciao

function TForm1.GetSqlStatement(AList: TStringList): integer;
var
  WhereCondition: string;
begin
  Result := -1;
  WhereCondition := '';
   AList.Clear;
   // EDIT5.TEXT DOVREBBE ESSERE edId, editId, eId...
   if TRIM(edit2.text) <> '' then bgein
     if Trim(WhereCondition) <> '' then
      WhereCondition := WhereCondition + ' AND ';
    WhereCondition := WhereCondition + Format('Id = %s', [edit2.text]);
//     oppure
//    WhereCondition := WhereCondition + 'Id =' + edit2.text;
  end;
  // edit56 dovrebbe essere edragioneSociale, eRagioneSociale,
editRagioneSociale..
  if TRIM(edit5.text) <>'' then begin
     if Trim(WhereCondition) <> '' then
      WhereCondition := WhereCondition + ' AND ';
    WhereCondition := WhereCondition + Format('ragionesociale like %s%s%s',
[, '%', AnsiQuotedString
(edit2.text, ''''), '%']);
// oppure
// WhereCondition := WhereCondition + 'ragionesociale like %' +
AnsiQuotedString(
//edit2.text, '''')+ '%';
 if  Trim(WhereCondition) <> '' then begin
   AList.Add('  SELECT * FROM CLIENTI WHERE  ');
   AList.Add(WhereCondition)
   Result := 0;
 end
end;
procedure TForm1.Button1Click(Sender: TObject);
var
  SqlStatement: TSTringList;
begin
  SqlStatement := tStringList.Create;
  try
    if GetsqlStatement(SqlStatement) = 0 then begin
    // LA ADOQUERY DOVREBBE STARE IN UN DATAMODULE...
    // e magari dovrebbe essere qryNominati, qNominativi, aqNominativi....
   with ADOQuery1 do begin
      Close;
      Sql.Assign(SqlStatement);
     Open;
   end;
   end
  else
    ShowMessage('Non è stata indicata alcuna chiave di ricerca!');
 finally
   SqlStatement.Free;
  end;
end;
Bye
A.

Mi permetto, prima di tutto, di darti un consiglio: non usare i With
annidati... dopo i Goto e la peste bubbonica sono la cosa più pericolosa del
mondo :)
Anzi, come direbbe Laforgia, non usarli per niente, che male non fa.
Poi, visto che il codice è un tantinello incasinato (num_and?), debugga e
postaci il valore di ADOQuery1.Sql.Text subito prima dell'Open.
-- 
Jax