Newsgroup: it.comp.lang.vo-clipper
Titolo: MySql e ricerca dati

Ciao a Tutti.
Mi sto cimentando ad usare MySql dopo avere scaricato il Demo di Danilo e 
devo dire che, rispetto alle prove fatte via odbc (motivo per cui l'ho 
accantonato per un certo periodo), è molto veloce e flessibile. lavoro con 
archivi di svariate centinaia di migliaia di record. Due problemi:
1) Se eseguo una  oServer := MySQLSelect{ [select * from Ana_01,Arc_Cli ]+;
             [where arc_cli.n_prog = ana_01.n_prog and ana_01.n_rif 
= ]+AllTrim(cStringa)+[ and Year(ana_01.data)=]+cAnno}, ottengo una tabella 
di una sola riga con i campi delle due tabelle. Volendo aggiornare i dati, 
posso agire come oServer:Nome := 'Pippo' e poi oServer:Commit() o devo 
eseguire due update, una per tabella (Update Arc_cli set nome = "Pippo" 
where ...... e poi update Ana_01 set docum = 'hhj' where ......);
2) se devo cercare un dato per es. 12795/2 in tabella (MySqlTable) con la 
seek o la SetWhere, la ricerca non dà esito positivo, mentre se cerco un 
codice senza "/" la ricerca va a buon fine. Qualche idea del perchè di 
questo comportamento?
Grazie. Enzo

 Grazie. Enzo
Negativo, deve funzionare perchè funziona.(quando fai la seek hai l'ordine 
sul campo giusto ? oServer:SetOrder("codice") oServer:Seek(.....)
Danilo Giuliani 


Le tabelle contengono Arc_Cli = anagrafe clienti ad ana_01 archivio referti 
medici.
Hai ragione funziona. Ho sbagliato la sintassi del metodo setwhere 
(oTab:SetWhere("codice="+cCodice) dove cCodice contiene la stringa 
"12795/2". l'ho trasformata in oTab:SetWhere([codice="]+cCodice+["]) e 
funziona regolarmente. E' sbagliata la prima sintassi?
oTab:Seek(cCodice) non la posso usare in quanto la tabella risultante è 
maggiore di 10 records e non va bene con la demo e quindi uso setWhere. La 
Seek è più veloce della SetWhere?
Ciao e grazie.
 PS. lavoro con Windows XP Prof., VO 2.7b, bBrowser 1.5 prof. aggiornata e 
DeVoxMySql demo.

 ha scritto nel messaggio 
news:iTiqd.227615$b5.11...@news3.tin.it...

La seek funziona come la seek sui DBServer, cioè su una tabella di n record 
posiziona il puntatore al record trovato.
La setwhere ti crea una tabella virtuale di n record quanti sono i record 
che soddisfano la condizione.
Impara la differenza tra tabella fisica e risultato di una query.
Danilo 

 La Seek č piů veloce della SetWhere?
Difficile dirlo. Dipende da come č implementata la Seek stessa. Immagino
che se esiste debba essere abbastanza efficiente da preferirla alla
SetWhere. Credo che, mentre la SetWhere ripete la query sul database, la
Seek lavori sul resultset della stessa e quindi potrebbe essere in
generale piů veloce. Ma lo dico senza conoscere come sono effettivamente
implementate e quindi potrei sbagliare.
EMG
--
EMAG Software Homepage:     
http://www.emagsoftware.it
The EMG's ZX-Spectrum Page: 
http://www.emagsoftware.it/spectrum
The Best of Spectrum Games: 
http://www.emagsoftware.it/tbosg

 Danilo
Ciao. Non voglio fare polemica. Premetto che ho letto attentamente sia 
"Perchè MySql" sia il "Manuale di MySql" e, anche se non ci ho lavorato 
molto, credo di avere capito qualcosa (forse). Se ho eseguto una select su 
due archivi così come l'ho descritta è prpio perche ho letto "Perchè MySql" 
e proprio tu hai scritto che la "Left Join" è più pesante e rallentando 
l'invio dei risultati e quindi raggiungendo lo scopo con la prima 
espressione ho usato questa..
La mia domanda è lecita in quanto so che la setwhere mi ritorna una tabella 
che contiene il risultato della query e la seek mi posiziona sul record 
cercato della tabella, ma, se avessi letto bene, avresti capito che non 
posso usare la seek in quanto la tabella contiene più di 10 records (circa 
200) e, per ogni record oltre il decimo mi viene segnalato che la libreria è 
demo e quindi, se voglio testare la libreria devo fare in modo che il mio 
programma funzioni. Poi valuterò l'acquisto della libreria. Se faccio una 
domanda al NG, mi secca che mi si risponda con altre domande. Può darsi che 
io non abbia capito bene il funzionamento della libreria demo, ma, da quello 
che scrivi tu stesso, è limitata a 10 record per cui non posso fare seek se 
limito la tabella a 10 record. Ecco perchè ho usato il SetWhere. Io volevo 
semplicemente sapere se esiste altra soluzione con la libreria demo e l'uso 
della seek.
Ciao e scusa la prolassità della mail 

 EMG
Non posso usare la seek perchč sto usando la libreria demo di Danilo 
Giuliani, limitata a 10 record e quindi per far funzionare il mio programma 
(Ho preso la parte piů complessa e la sto modificando con MySql, importando 
le stesse tabelle dbf in MySql con il programma SqlManager41. Ecco il perchč 
della mia domanda.
Ciao e grazie dell'aiuto.