Visualizzazione dei risultati da 1 a 7 su 7

Discussione: [delphi] datamodule

  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,311

    [delphi] datamodule

    Ciao a Tutti,

    sto scrivendo una semplice applicazione che gestisce 2 tabelle (clienti e fornitori) di un database Interbase.

    ho creato una form MDI + 2 form MDIchild che vengono create selezionando le voci dal menu....
    codice:
    procedure TFrmMenu.EstrattoConto1Click(Sender: TObject);
    begin
      Application.CreateForm(TFrmClienti , FrmClienti )
    end;
    ho anke creato un Datamodule, dove ho inserito

    IBdatabase
    IBtransaction
    IBDataset

    nelle opzioni del progetto nella sezione Auto-Create ho solo la FrmMenu e il Datamodule, mentre le altre Form le creo a runtime.

    domanda:

    come faccio ad inserire sulle FrmClienti le tabelle del database che ho nel mio datamodule?

    grazie

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,282

    Re: [delphi] datamodule

    Originariamente inviato da 123delphi321
    come faccio ad inserire sulle FrmClienti le tabelle del database che ho nel mio datamodule?
    Cosa intendi per "inserire"?

    Intendi "inserire due componenti TIBTable" all'interno delle form, "referenziare il TIBDataSet" contenuto nel Data Module o altro?

    Nel primo caso, ti basta aggiungere i componenti desiderati selezionandoli dalla Palette, ma non credo sia questo il tuo problema.

    Nel secondo caso, che in realtà riguarda anche il primo, per referenziare un componente che si trova in un Data Module ti basta aggiungerlo all'elenco delle unit utilizzate (clausola uses) della unit che contiene la definizione della form.

    Aprendo entrambi (solo la prima volta) il DataModule e la form all'interno dell'IDE di Delphi, potrai assegnare ad un componente della form un riferimento ad un componente che si trova nel DataModule.

    Ovviamente, il DataModule deve essere creato e possibilmente prima della form quando il programma viene mandato in esecuzione.

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

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

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,311
    grazie per la tempestivissima risposta!

    era la seconda opzione qlla che mi interessava.

    adesso funziona.

    io sbagliavo inquanto avevo inserito :

    uses Unt_datamodule.....nella Unit del FrmMenu....e non nella Unit della FrmClienti.


    grazie.

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,311
    riesco a visualizzare il conetenuto delle tabelle.

    a questo punto, da un'applicazione apro 2 volte la stessa Form nella quale ho inserito una dbgrid in cui la tabella clienti, quindi in pratica, visualizzo due volte la tabella clienti.

    il problema che ho adesso e' che navigando nella prima griglia, vedo il cursore muoversi anke nella seconda, posizionandosi sul medesimo elemento.

    forse devo settare qualche proprieta' particolare?


    la Dbgrid e' associata ad un Datasource che e' associata IBDataset (select * from clienti)

    Ibtransaction.defaultaction := TACommitRetaining;...al fine di visualizzare simultaneamente le modifiche apportate al dataset.

    grazie

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,282
    Originariamente inviato da 123delphi321
    a questo punto, da un'applicazione apro 2 volte la stessa Form nella quale ho inserito una dbgrid in cui la tabella clienti, quindi in pratica, visualizzo due volte la tabella clienti.
    Ok.

    il problema che ho adesso e' che navigando nella prima griglia, vedo il cursore muoversi anke nella seconda, posizionandosi sul medesimo elemento.
    Ovvio se hai associato alle due griglie il medesimo DataSet.
    Quando ti sposti da un record all'altro all'interno del DataSet mediante interazione con una griglia, tutti gli altri controlli associati al medesimo DataSet vengono aggiornati per rispecchiare l'esito dell'azione.

    forse devo settare qualche proprieta' particolare?
    Occorre semplicemente un DataSet differente per ogni "vista".


    la Dbgrid e' associata ad un Datasource che e' associata IBDataset (select * from clienti)
    E' probabile che l'altra griglia sia associata al medesimo DataSet.

    Ibtransaction.defaultaction := TACommitRetaining;...al fine di visualizzare simultaneamente le modifiche apportate al dataset.
    La proprietà DefaultAction viene considerata solamente se si fa uso di un timeout entro il quale, a fronte di modifiche, non vengono effettuati «Commit» o «RollBack»...in ogni altra condizione, la proprietà è ininfluente; i metodi Commit e Rollback, oppure CommitRetaining e RollbackRetaining devono sempre essere chiamati esplicitamente.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,311
    hai ragione adesso funge bene, ho inserito sulla FrmClienti un oggetto Ibdataset e ad esso ho collegato il mio datasource.

    quindi riesco a visualizzare la tabella clienti puntando il cursore, per ogni dataset su un record diverso. ok.

    avendo sempre 2 sessioni aperte,...modifico dei valori sulla tabella 1, ma questi non li riesco a visualizzare automaticamente sulla tabella 2.

    sul dataset..., corrispondente agli eventi IBDataSet1AfterDelete/Edit/Insert/Post eseguo:
    codice:
    procedure TFrmClienti.IBDataSet1AfterDelete(DataSet: TDataSet);
    begin
      DataModule1.IBTransaction1.CommitRetaining;
    end;
    ho provato anke ad effettuare:
    codice:
    procedure TFrmClienti.FormActivate(Sender: TObject);
    begin
     IBDataSet1.RefreshSQL ;
    end;
    im modo da ottenere un refresh al momento dell evento active sulla tabella 2.


    che tecnica devo utilizzare per ottenere quest'effetto 'refresh'

    grazie 1000
    fulvio

  7. #7
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,282
    RefreshSQL non è un metodo, ma una proprietà.

    E' sempre bene controllare sulla Guida in linea se una proprietà o un metodo fa effettivamente quello che si desidera.

    Per aggiornare i dati, occorre chiudere a riaprire l'IBDataSet, cioè chiamare il metodo Close e Open.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

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.