Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Delphi e database

    Salve a tutti,

    dopo aver realizzato alcuni programmini con il Delphi, ora mi trovo a che fare con i database.

    Premetto che ho letto la guida su Delphi ma non ci ho capito molto.

    Sto cercando di realizzare il calcolatore del codice fiscale, simile a quelli che si scaricano su Internet.
    Quindi il mio obiettivo è qualcosa del tipo: ho un database .mdb con tutti i comuni italiani. Poi ho una combobox in cui è possibile anche immettere testo, se per esempio digito R, il menu a tendina mi mostra tutti i comuni che iniziano per R, poi digito O e mi dà tutti i comuni che iniziano per RO, e così via finché non digito ROMA.

    Ciò è ancora molto complicato per me

    Vorrei partire da qualcosa di più semplice: per esempio supponiamo di avere un database con un solo campo "Città", riempito così: Roma, Milano, Firenze, Venezia, Napoli.
    E poi su una Combobox (suppongo che bisogna una DBLookUpCombobox, vero?), siano visualizzate queste opzioni nel menù a discesa.

    Finora sono solo riuscito a fare una ADOConnection, in cui ho costruito la stringa dandogli il percorso del file .mdb, e come driver gli ho dato il Microsoft Jet (si usa quello per i mdb, vero?); ma poi ho un po' pasticciato con i DataSet, DataSource... non sono riuscito a capire come funziona il tutto...

    Qualcuno potrebbe gentilmente dirmi come fare?

    Grazie tante!

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    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

  3. #3
    Grazie mille per l'aiuto!

    Ho già risolto usando gli oggetti ADO del Delphi e le query SQL

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.