Newsgroup: it.comp.lang.delphi
Titolo: D2007 Metodo di ricerca stringhe

Ciao a tutti, 
ho un DB (in Firebird embedded) formato da un centinaio di record, in 
ogni record ci sono 5 fields; 4 di essi devono contenere fino a un max 
di 1000 chars ognuno (meglio VarChar o Memo?).
Devo dare all'utente la possibilità di cercare una stringa a caso in 
tutti i fields di ogni record in modo da ottenere una SELECT dei record 
trovati. Consigli in proposito?... Metodo di ricerca più veloce?
Il database dovrà girare da CD-ROM.
Grazie 
Paolo
--- posted by geoForum on 
http://www.delphiedintorni.it

 Consigli in proposito?... Metodo di ricerca più veloce?
Trattandosi di "solo" centinaia di records, io caricherei tutto in un CDS e
lavorerei in memoria... :)
Ciao
-- 
Morde

>Trattandosi di "solo" centinaia di records, io caricherei tutto in un 
CDS e lavorerei in memoria... :)
Si, (conosco gli articoli di Cary Jensen sul CDS) e l'ho già 
provato/sperimentato... è senz'altro un'ottima alternativa di cui terrò 
conto. Visto che si tratta di un DB 'piccolo' alla fine spero di poter 
fare una comparazione fra l'utilizzo di Firebird e del CDS e decidere 
così di conseguenza... l'uso del CD-ROM come supporto mi preoccupa un 
po'... ma l'ordine è perentorio: non si deve installare niente!
Per il metodo di ricerca (sto googlando da un po') qualcuno mi sa dare 
qualche dritta?


 così di conseguenza...
Io veramente intendevo un'altra cosa: metti un CDS nella tua applicazione
che alla partenza si carica i dati da firebird e poi lavori in memoria.
Uno non esclude l'altro, ma si completano a vicenda.
E' appunto la soluzione ideale se non puoi scrivere nulla sul supporto di
origine del db. 
Inoltre, se dovrai aggiungere ulteriori dati un domani al database basta
rilasciarne un'altra versione, e la tua applicazione continuera' a
funzionare senza che la ricompili.
-- 
Morde

 così di conseguenza...
Firebird è una cosa; i CDS sono un'altra cosa. Non ci può essere
comparazione tra loro perché sarebbe come comparare un'automobile con un
volante.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

volante.
Certo, intendevo dire una comparazione fra il tempo di restituzione 
della select usando solo Firebird o solo il CDS. 
Per Morde: non li ancora provati in abbinata... ok, vedo di darmi da 
fare anche in tal senso.




sorry per l'errore :-(


 della select usando solo Firebird o solo il CDS.
Tempi irrisori per centinaia di record... :D
-- 
Morde

 della select usando solo Firebird o solo il CDS. 
Non ha senso un confronto del genere. La select è sempre eseguita da
Firebird, quindi il tempo è sempre quello. Il CDS aggiunge uno strato
superiore per la manipolazione dei dati. Rinnovo a te il consiglio che dò
a molte persone: approfondisci meglio i concetti di base, prima di
cominciare a scrivere applicazioni.


cominciare a scrivere applicazioni.
Consiglio sempre valido!... aggiungerei che è anche importante provare e 
sperimentare i concetti di base in piccole applicazioni-test proprio per 
digerire meglio i concetti. Faccio notare che la documentazione 
rilasciata per D2007 è arrivata a oltre 17.000 pagg. in pdf. 
Tornando all'oggetto del mio tread, e ribadendo che sto sperimentando 
solo con Firebird (per adesso) ho usato questo codice che mi permette di 
fare una ricerca su 5 campi conteporaneamente, sia su stringhe minuscole 
e maiuscole e sia con presenza dell'apostrofo nella stringa:
spero di essere sulla buona strada... ma se avete suggerimente migliori
rimbeccatemi pure :-)
procedure TForm1.bSearchClick(Sender: TObject);
var S : string;
begin
  DS.Close;
  DS.SelectSQL.Clear;
  if cbFull.Checked = TRUE then
  S := stringSearch.text
  else
  S := '%' + stringSearch.text + '%';
  DS.SelectSQL.Text :=
  ('select * from COM where ' +
  ' LOWER(COMUNE) like ' + QuotedStr(S) +
  ' or LOWER(MEMO1) like ' + QuotedStr(S) +
  ' or LOWER(MEMO2) like ' + QuotedStr(S) +
  ' or LOWER(MEMO3) like ' + QuotedStr(S) +
  ' or LOWER(MEMO4) like ' + QuotedStr(S));
   DS.Open;
end;
