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

    Delphi: campi corrispondenti

    Da qualche giorno mi sto dedicando alla soluzione di un problema in linguaggio delphi.
    Ho due tabelle non legate tra di loro se non da qualche campo che hanno in comune.
    Mi spiego meglio. Ho una dbgrid collegata alla prima tabella che si chiama clienti.
    La seconda tabella si chiama città.
    Vorrei fare in modo che nella dbgrid possa aprire dal campo città che si trova nella tabella clienti, la tabella città e riempire i campi corrsipondenti (cap e provincia).
    Chiaramente nella dbgrid ho attivato la proprietà buttonstyle cbsellipsis in modo tale che con i classici puntini... mi consenta di attivare l'evento di apertura della finestra con la seconda tabella. Il problema è che vorrei sapere se esiste un sistema "automatico" come assegnare i campi corrispondenti cioè cap e provincia dalla tabella citta alla tabella clienti.

  2. #2

    re....

    Allora voressti vedere in un unica tabella tutti i valori della tabella clienti ed, in base al/ai campi comuni, i valori della tablle citta'....ho capito bene?

    se il problema e' questo invece di associare una ttable al datasource del dbgrid associa una tquery con una query simile alla seguente:


    codice:
    select campo1,campo2, etc...
    from clienti left join citta' 
    on clienti.cap=citta'.cap

    ciao!

  3. #3
    No mi sono espresso male. Ho una tabella clienti nella quale vi sono tre campi che sono uguali a quelli di una seconda tabella Citta.
    Le due tabelle hanno in comune tre campi: citta, cap e provincia.
    Nella dbgrid della tabella Clienti ho attivato la proprietà buttonstyle cbsellipsis nel campo citta (per intenderci quella proprieta che con i classici puntini...) che ad un evento di click del mouse mi apre la tabella citta (collegata ad una dbgrid) in una seconda finestra.
    Io vorrei che cliccando nella nuova finestra citta in un record ben preciso, mi inserisca in automatico i tre campi uguali (citta cap e provincia) dalla tabella citta a clienti.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Ma in genere non si replicano i campi tra tabelle. In questo modo il DB non e' normalizzato.

    Semmai devi dotare ogni record della tabella Città di un ID univoco e aggiungere un campo IDCittà alla tua tabella Clienti. Imposti una relazione tra i due campi ID e lavori con questa.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Si hai perfettamente ragione. Esiste allora un modo come fare vedere i campi nella tabella cliente solo a video senza inserirli nel db una volta scelta la città? Per esempio creare dei campi di sola visualizzazione nella tabella clienti.

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Mi associo al suggerimento di oregon per quanto riguarda la necessaria ottimizzazione del database: utilizzare tre campi per correlare due tabelle è inefficiente e ridondante. Conviene invece utilizzare un ID e correlare le tabelle attraverso questo campo, magari aggiungendo anche la definizione di una foreign key, ma qui si esula dal problema principale (e puoi approfondire autonomamente il discorso, che rischia di diventare troppo vasto qui).

    Per quanto riguarda il problema principale, Delphi ti consente di correlare le tabelle definendo una relazione "master/detail" tra di loro, e specificando i campi che costruiscono questa relazione.

    Per approfondire in dettaglio, si dovrebbe almeno conoscere il database con cui stai lavorando, e anche la libreria dei componenti che utilizzi per l'accesso ai dati.

    Dal punto di vista dell'interfaccia grafica, una volta che i due DataSet (tabelle, query, ecc.) sono collegati da questa relazione, lo spostamento all'interno della tabella di testata (master) muove automaticamente il "cursore" nella tabella di dettaglio (detail); basta associare - tramite il componente TDataSource - le tabelle ad una griglia (es. TDBGrid) per visualizzare direttamente questo stato, senza nemmeno scrivere codice.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  7. #7
    Gentili amici, Vi ringrazio per gli interventi e le soluzioni proposte al mio problema.
    Ho trovato comunque la soluzione che ho trovato abbastanza interessante anche perchè è molto vicina all'idea che avevo io.

    Ve la mostro giusto per renderla disponibile.
    http://delphi.about.com/od/usedbvcl/l/aa101403b.htm

    Vi ringrazio comunque e vi auguro un buon lavoro.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.