Newsgroup: it.comp.lang.delphi
Titolo: Problemi con Locate su FireBird e Componenti InterBase

Salve ragazzi.
Sono in condizioni veramente disperate.
Causa scelte aziendali devo realizzare un programma utilizzando Delphi 6,
FireBird 1.5 e
gli oggetti InterBase per l'accesso al DataBase.
Dopo aver fatto quasi il 50% del lavoro mi sono accorto che, utilizzando la
Locate per
posizionarsi su un record, la ricerca risulta essere lentissima.
Su una tabella di soli 10 record per esempio, nel caso in cui voglio cercare
l'ultimo record,
impiego circa 3 secondi.
Ho provato a sostituire il DataBase FireBird con Interbase e il problema non
si verifica.
In effetti ho sempre usato la Locate, anche per lavorare con BDE e MS
SQLServer, e non
ho mai riscontrato grossi rallentamenti.
Ho fatto un po' di ricerche sia su questo NewsGroup che con Google per
capire come
poter risolvere il problema e ho trovato molti colleghi che sonsigliano
l'utilizzo della Locate
con dei DataBase Server.
Suggeriscono invece di utilizzare, nel caso dei componenti di InterBase, gli
oggetti IBQuery
e IBDataSet che consentono l'utilizzo di istruzioni SQL per fare le
ricerche.
Non ho trovato niente perň che spieghi in che modo utilizzare questi
oggetti.
Per farmi capire riporto questo esempio :
Ho una tabella (IBTable) master chiamata A e ho una tabella (IBTable) detail
chiamata B.
Ad ogni record della tabella A corrispondono piů record della tabella B.
I campi della la tabella A li ho collegati a dei componenti DBEdit, mentre i
campi della tabella B
sono collegati ad una DBGrid.
Attraverso un DBNavigator faccio tutte le operazioni di Inserimento,
Modifica, Cancellazione ecc ...
Fra le altre cose ho realizzato una funzione che mi permette di effettuare
una ricerca mirata di un
determinato record utilizzando una Locate sulla Tabella A.
Ora mi chiedo :
Se non utilizzo i componenti IBTable come faccio a realizzare un
collegamento di tipo Master / Detail
su di una form ?
Non utilizzando questi oggetti, e quindi non utilizzando la Locate, come
faccio a posizionarmi su un
determinato record sul quale dovrň poi poter andare in Cancellazione o in
Modifica attraverso il
DBNavigator ?
Forse le mie domande sono sciocche, ma vi assicuro che in questo momento ho
la testa completamente
vuota e non mi viene in mente nulla.
Ringrazio tutti quelli che vorrano aiutarmi.
Donato Di Tullio

 gli oggetti InterBase per l'accesso al DataBase.
Usa le zeoslib, funzionano anche con firebird 1.5
http://sourceforge.net/project/showfiles.php?group_id=35994
Ciao
Gianni

 Usa le zeoslib, funzionano anche con firebird 1.5
Grazie 1000, anzi di più.
Le ho provate e funzionano velocissimissimamente e non ho ancora riscontrato
nessun
problema.
Ne avevo già sentito parlare, ma non penso che fossero così semplici da
usare.
Ora sto modificando tutti programmi che avevo già fatto che sono un bel po'.
Se avrò qualche difficoltà mi permetterò di disturbare di nuovo.
Grazie ancora.
Donato Di Tullio

)

 Spero di averti comunque fornito indicazioni utili. :-)
Ti ringrazio moltissimo.
Ciò che mi hai spiegato era proprio quello che mi mancava.
Per adesso non ne farò uso perchè ho già adottato la soluzione propostami da
Gianni Giusti, consistente nell'utilizzo delle Zeos Lib che mi consentono di
utilizzare
gli oggetti TTable con le solite Locate ecc ... avendo prestazioni
accettabili, anzi
a mio avviso le prestazioni sono addirittura migliori di quelle che si
avevano con il
BDE.
Comunque per progetti più grandi e con volumi di dati notevolmente superiori
di
sicuro terrò conto dei tuoi consigli.
