Newsgroup: it.comp.lang.delphi
Titolo: Help Like

Salve a tutti ho scritto questo sql che su access funziona metre quandoo
passo i valori con delphi 6 no.Vi prego aiutatemi
procedure TFrm_Menu.Btn_GClick(Sender: TObject);
Var
Trova :String;
Carica : TADOQuery;
begin
     Trova := 'g*';
     Carica := TADOQuery.Create (self);
     Carica.Connection := Frm_Menu.Ado_Connetti;
     Carica.Close;
     carica.SQL.Clear;
     Carica.SQL.Add('Select Cat_Piatti.Cod_Piatti, Ricetta.Cod_Piatto,
Ricetta.Cod_Pietanza,Ricetta.Tempo_Preparazione, Ricetta.Tempo_Cottura,');
     Carica.SQL.Add('Ricetta.Num_Persone, Ricetta.Titolo,
Ingredienti.Cod_Piatto,Ingredienti.Cod_Pietanza, Ingredienti.Path,
Preparazione.Cod_Piatto,');
     Carica.SQL.Add('Preparazione.Cod_Pietanza,
Preparazione.Path,Immagini.Cod_Piatto, Immagini.Cod_Pietanza, Immagini.Path
');
     Carica.SQL.Add('from Cat_Piatti, Ricetta, Ingredienti,
Preparazione,Immagini');
     Carica.SQL.Add('where Ricetta.Titolo Like' + AnsiQuotedStr(Trova,#39));
     Carica.SQL.Add('and Ricetta.Cod_Piatto ='+
inttostr(Frm_Menu.Tipo_Piatto));
     Carica.SQL.Add('and Cat_Piatti.Cod_Piatti = Ricetta.Cod_Piatto');
     Carica.SQL.Add('and Ingredienti.Cod_Piatto = Cat_Piatti.Cod_Piatti');
     Carica.SQL.Add('and Ingredienti.Cod_Pietanza= Ricetta.Cod_Pietanza');
     Carica.SQL.Add('and Preparazione.Cod_Piatto=Ingredienti.Cod_Piatto');
     Carica.SQL.Add('and
Preparazione.Cod_Pietanza=Ingredienti.Cod_Pietanza');
     Carica.SQL.Add('and Immagini.Cod_Piatto = Preparazione.Cod_Piatto');
     Carica.SQL.Add('and Immagini.Cod_Pietanza=Preparazione.Cod_Pietanza');
     Carica.open;
     DtS_Tabella.DataSet := Carica;
     DBGrid1.DataSource:= DtS_Tabella;
     DBGrid1.Visible := true;
Grazie a tutti

Il problema è che il carattere che indica ogni possibile combinazione di
caratteri in Access
è '*' (come lo hai impostato tu nella Trova) mentre in SQL standard è '%'.
Se imposti
      Trova := 'g%';
dovrebbe funzionare.
Ti consiglio comunque di ottimizzare la query usando i join tra le tabelle
nella clausola
from: se immetti tutte le tabelle non correlate nella clausola FROM (come
hai fatto tu)
la selezione indicata dai criteri nella clausola WHERE viene effettuata sul
prodotto
cartesiano degli elementi nelle varie tabelle:
 es. 1000 record in RICETTE
     1000 record in CATEGORIE PIATTI
     1000 record in INGREDIENTI
     1000 record in PREPARAZIONI
     1000 record in IMMAGINI
     -> vengono applicati i criteri della clausola WHERE su 1 alla 15
elementi! :-((((((
Se invece usi i JOIN nella clausola FROM la selezione indicata nel WHERE
viene
effettuata solo sui record che soddisfano i criteri
     SELECT *
     FROM ((
  (Cat_Piatti JOIN Ricetta ON Cat_Piatti.Cod_Piatti = Ricetta.Cod_Piatto)
  JOIN Ingredienti ON Ingredienti.Cod_Piatto = Cat_Piatti.Cod_Piatti
   and Ingredienti.Cod_Pietanza = Ricetta.Cod_Pietanza)
  JOIN PREPARAZIONE ON Preparazione.Cod_Piatto = Ingredienti.Cod_Piatto
   and Preparazione.Cod_Pietanza = Ingredienti.Cod_Pietanza)
  JOIN Immagini.Cod_Piatto = Preparazione.Cod_Piatto
   and Immagini.Cod_Pietanza = Preparazione.Cod_Pietanza
     WHERE RICETTA.TITOLO LIKE :TROVA
       AND RICETTA.COD_PIATTO = :COD_PIATTO
:-)))))
Saluti
        Marco Bortolani
 
in...@marcobortolani.it