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ì
codice:
tabella.first;
while not tabella.eof do
begin
if lowercase(tabella.fieldbyname('citta').asstring)='roma' then
begin
// faccio qualcosa
end;
tabella.next;
end;
in questa ipotesi scansiono, riga per riga, la tabella, cercando qualcosa.
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)
codice:
tabella.filter:='citta ='+chr(39)+'roma'+chr(39);
tabella.filtered:=true;
if tabella.recordcount>0 then
begin
// faccio qualcosa
end;
In sostanza dato un dataset (chiamiamolo pippo) puoi
- 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