cominciamo col dire che .mdb e delphi non sono proprio l'accoppiata migliore o canonica.
---
in versione supersemplificata esistono due grandi tipologie di oggetti delphi per i database:
- tquery (e cugini)
- ttable (e cugini)
le tquery sono essenzialmente un "qualcosa" cui passi una query SQL e che vengono popolate con le righe che scegli.
le ttable invece sono oggetti che contengono tutte le righe di una certa tabella
( sto banalizzando parecchio, ma non voglio sacrificare la chiarezza)
---
Entrambe (query e tabelle) hanno associate un dataset, che è in sostanza una matriciona che hanno tanti campi quanti sono quelli della select (per la query) e dell'intera tabella (per le table)
all'interno del dataset sono definiti tanti bei metodi, i principali dei quali sono first, last, eof,locate e filter [poi ci sono edit, append e post], e possono essere "live" oppure no (live per le query significa che se modifichi il contenuto del dataset "magicamente" cambia il contenuto della tabella).
---
Tornando a bomba, supponiamo di avere magicamente una tabella collegata alla tabella fisica (file .mdb, tabella mysql etc).
potresti fare qualcosa (di molto inefficiente) tipo così
in questa ipotesi scansiono, riga per riga, la tabella, cercando qualcosa.codice:tabella.first; while not tabella.eof do begin if lowercase(tabella.fieldbyname('citta').asstring)='roma' then begin // faccio qualcosa end; tabella.next; end;
Questo tipo di accesso è estremamente inefficiente (talvolta è necessario) se la tabella è grande (è accettabile se la tabella è piccola).
Puoi fare altre cose, ad esempio (anche questa inefficiente)
In sostanza dato un dataset (chiamiamolo pippo) puoicodice:tabella.filter:='citta ='+chr(39)+'roma'+chr(39); tabella.filtered:=true; if tabella.recordcount>0 then begin // faccio qualcosa end;
- contare quanti record ha pippo.recordcount
- sapere se è attivo pippo.active
- posizionarti sul primo record pippo.first
- posizionarti sul record successivo pippo.next
- sapere se sei arrivato sull'ultimo record pippo.eof
- accedere ai vari campi
pippo.fieldbyname('nomecampo').asstring
oppure
pippo.fieldbyname('nomecampo').asinteger
oppure
pippo.fieldbyname('nomecampo').asfloat
(...)
- vedere se il campo è null pippo.fieldbyname('nomecampo').isnull
- cercare il primo campo che ha un certo valore pippo.locate('nomecampo','boh',[])
- "filtrare" (ossia vedere) solo i campi che rispettano un certo filtro QBE
pippo.filter:=' (data=1) and (lunghezza<10)';
pippo.filtered:=true
- puoi aggiungere dei dati
pippo.append;
pippo.fieldbyname('campo').asstring:='qualcosa';
pippo.fieldbyname('lunghezza').asinteger:=10;
pippo.post;
- modificare i dati del record corrente
pippo.edit;
pippo.fieldbyname('campo').asstring:=pippo.fieldby name('campo').asstring+' ciao';
pippo.post;
- eliminare il record corrente
pippo.delete;
---
Poi c'è il "mondo" delle query

Rispondi quotando