Newsgroup: it.comp.lang.vo-clipper
Titolo: HELP VO + MySQL

Salve a tutti
in ambiente VO 2.6 ho provato a usare MySQL tramite ODBC.
i primi risultati sono incoraggianti ma ho un piccolo problema: immaginate
una datawindow in cui a sinistra ho il browser per la navigazione tra i
records e a destra le SLE dei vari campi, spostandomi lungo il databrowser
vengono popolati i campi coi rispettivi valori, e fin qui tutto bene;
purtroppo però se digito un valore nel campo chiave a destra e dalla toolbar
e seleziono la funzione di lettura, la SELECT mi popola il databrowser con i
soli record che soddisfano la select stessa - giustamente... esiste un modo
per emulare la DBserver:Seek() in modo che, passato un valore da cercare in
tabella il puntatore del browser si posizioni sulla riga corrispondente
lasciando visualizzati tutti i records della tabella?
non so se mi sono spiegato - ma grazie a chi vorrà darmi qualche dritta.
ciao

 ha scritto nel messaggio
news:Ldtla.88781$Jg1.2...@news1.tin.it...

Purtroppo la classe SqlTable di VO è fatta a pene di segugio, devi scriverti
tu un metodo seek, considera che una ricerca veloce è fatta prendendo il
record set, vedendo se la chiave che cerchi sta nella prima e nella seconda
metà, visto ciò prendi in esame la metà giusta e fai la stessa cosa, con 6 o
7 iterazioni trovi il record esatto. Noi nella DevoXMysql abbiamo fatto così
e funzioni una meraviglia.
Danilo Giuliani
www.softdevo.com
in...@softdevo.com
sup...@softdevo.com



ti ringrazio... in effetti hai confermato un sospetto che si stava facendo
strada.
approfitto ancora della tua esperienza: ora come ora lavoro su un database
di prova con tabelle nell'ordine di qualche centinaio di records e le
prestazioni sono ottime; posso aspettarmi prestazioni diciamo "discrete" (
una seek() portata a termine diciamo in non oltre 5 secondi) con tabelle
contenenti qualche centinaia di migliaia di records?
grazieciao
PS - la seek che avevo in mente io era più o meno così: mi posiziono a metà
del recordset (goto( int(reccount/2))) se il valore da cercare è maggiore
del valore letto in tabella mi posiziono a metà della metà precedente (a 1/3
per intenderci) se è minore mi posiziono nella metà della metà successiva (a
3/4 sempre per intenderci), e così via finchè il salto di record che deve
fare non è maggiore di un valore arbitrario che posso impostare io (diciamo
9 records) oppure calcolare in base ai records totali; a quel punto vado di
skip() - secondo te (fatti i dovuti controlli iniziali e le opportune
ottimizzazioni) può funzionare?

 >
scusa - ero così soddisfatto del fatto che confermavi i miei dubbi che la
seconda metà della tua risposta l'ho letta dopo aver ripostato...
in effetti la seek() a cui pensavo io è praticamente la stessa che mi hai
suggerito tu...
grazieciao

 ottimizzazioni) può funzionare?
Ma perché inventarsi una ricerca binaria quando esistono le query che
già fanno tutto automaticamente, compreso l'uso degli indici (se li
trovano) per velocizzare il risultato?
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

 trovano) per velocizzare il risultato?
perchè la query ti restituisce SOLO i records che la soddisfano, a me
interessa in ogni caso avere TUTTI i records e poi posizionarmi su quello
che soddisfa la query..
so di non spiegarmi bene - tieni presente che mi diletto a programmare ma
non posseggo una "cultura" informatica, nel senso che sono autodidatta
cia


 
Ti suggerisco caldamente di delegare maggiormente all' RDBMS il lavoro
di selezione, in special modo su tabelle con centinaia di migliaia di
records. Pensa alla situazione nella quale tabelle sono disponibili
via connessione odbc che punta ad un RDBMS residente su un server
remoto.
Nella logica di programmazione cerca di fare delle select mirate e
lavora in locale usando recordset dalle dimensioni strettamente
necessarie.
Saluti.
Marco Braida

 che soddisfa la query..
Forse il problema è proprio lì: perché hai bisogno di tutti i records se
poi te ne serve uno solo? Che cosa devi fare esattamente?



č una questione di interfaccia - se rileggi il primo post puoi fartene
un'idea - o se preferisci di stile che adotto per disegnare le form: cercavo
di cambiare motore di database senza stravolgere l'interfaccia, non tanto
per me, a me starebbe bene anche un campo in cui scrivere di brutto la
select ed un browser per i records che mi restituisce, quanto per i colleghi
che poi userebbero questi programmi: andrebbero in panico se cliccando sul
pulsantino della toolbar  sul browser vedessero restare un solo record