* * * *

Privacy Policy

Blog italiano

Clicca qui se vuoi andare al blog italiano su Lazarus e il pascal.

Forum ufficiale

Se non siete riusciti a reperire l'informazione che cercavate nei nostri articoli o sul nostro forum vi consiglio di visitare il
Forum ufficiale di Lazarus in lingua inglese.

Lazarus 1.0

Trascinare un file nel programma
DB concetti fondamentali e ZeosLib
Recuperare codice HTML da pagina web
Mandare mail con Lazarus
Stabilire il sistema operativo
Esempio lista in pascal
File INI
Codice di attivazione
Realizzare programmi multilingua
Lavorare con le directory
Utilizzare Unità esterne
TTreeView
TTreeview e Menu
Generare controlli RUN-TIME
LazReport, PDF ed immagini
Intercettare tasti premuti
Ampliare Lazarus
Lazarus e la crittografia
System Tray con Lazarus
UIB: Unified Interbase
Il file: questo sconosciuto
Conferma di chiusura di un applicazione
Liste e puntatori
Overload di funzioni
Funzioni a parametri variabili
Proprietà
Conversione numerica
TImage su Form e Panel
Indy gestiore server FTP lato Client
PopUpMenu sotto Pulsante (TSpeedButton)
Direttiva $macro
Toolbar
Evidenziare voci TreeView
Visualizzare un file Html esterno
StatusBar - aggirare l'errore variabile duplicata
Da DataSource a Excel
Le permutazioni
Brute force
Indy 10 - Invio email con allegati
La gestione degli errori in Lazarus
Pascal Script
Linux + Zeos + Firebird
Dataset virtuale
Overload di operatori
Lavorare con file in formato JSON con Lazarus
Zeos ... dietro le quinte (prima parte)
Disporre le finestre in un blocco unico (come Delphi)
Aspetto retrò (Cmd Line)
Lazarus 1.0
Come interfacciare periferica twain
Ubuntu - aggiornare free pascal e lazarus
fpcup: installazioni parallele di lazarus e fpc
Free Pascal e Lazarus sul Raspberry Pi
Cifratura: breve guida all'uso dell'algoritmo BlowFish con lazarus e free pascal.
Creare un server multithread
guida all'installazione di fpc trunk da subversion in linux gentoo
Indice
DB concetti fondamentali e connessioni standard
Advanced Record Syntax
DB concetti fondamentali e DBGrid
DB concetti fondamentali e TDBEdit, TDBMemo e TDBText
Advanced Record Syntax: un esempio pratico
Superclasse form base per programmi gestionali (e non)
Superclasse form base per programmi gestionali (e non) #2 - log, exception call stack, application toolbox
Superclasse form base per programmi gestionali (e non) #3 - traduzione delle form
Superclasse form base per programmi gestionali (e non) #4 - wait animation
Un dialog per la connessione al database:TfmSimpleDbConnectionDialog
Installare lazarus su mac osx sierra
immagine docker per lavorare con lazarus e free pascal
TDD o Test-Driven Development
Benvenuto! Effettua l'accesso oppure registrati.
Aprile 16, 2024, 07:09:41 am

Inserisci il nome utente, la password e la durata della sessione.

79 Visitatori, 0 Utenti

Autore Topic: ActionList con dataset master - detail.  (Letto 2081 volte)

JonnyB

  • Newbie
  • *
  • Post: 14
  • Karma: +0/-0
ActionList con dataset master - detail.
« il: Maggio 24, 2020, 09:57:47 pm »
Ciao a tutti,
per navigare in una griglia collegata ad un dataset  utilizzo una toolbar con i bottoni di navigazione collegati ad una ActionList e alle relative azioni di categoaria DataBase.
Quanto nella scheda è presente un solo dataset il tutto funziona correttamente.
Non altrettanto quando ho una scheda con una griglia master e una detail.
La toolbar e la relativa ActionList collegata alla tabella master funziona correttamente, purtroppo quella collegata alla tabella di dettaglio inspiegabilmente continua ad agire sulla tabella master sebbene le azioni siano collegate al datasource della tabella di dettaglio.
Ho provato sia a creare le azioni per i due dataset in un singolo ActionList, che a creare due ActionList per ogni dataset senza riuscire ad eliminare l'anomalia.
Sbaglio qualcosa oppure si tratta proprio di un'anomalia ?

xinyiman

  • Administrator
  • Hero Member
  • *****
  • Post: 3249
  • Karma: +12/-0
Re:ActionList con dataset master - detail.
« Risposta #1 il: Maggio 25, 2020, 07:49:48 am »
Servirebbe un esempio che riproduca l'errore.
Ieri è passato, domani è futuro, oggi è un dono...

JonnyB

  • Newbie
  • *
  • Post: 14
  • Karma: +0/-0
Re:ActionList con dataset master - detail.
« Risposta #2 il: Maggio 30, 2020, 04:31:36 pm »
Ciao, eccovi un esempio; le tabelle master e detail in formato dbf vengono generate automaticamente.
La master rappresenta le regioni italiane mentre quella di dettaglio le relative città.
Mentre l'inserimento dei dati nella tabella master non presenta problemi (provate ad inserire un paio di records), in quella di dettaglio la relativa toolbar non risponde correttamente, rimane collegata alla tabella master e viceversa.
L'unico modo per riuscire ad inserire dei records correttamente è quello di fare in modo che la dbgrid di dettaglio abbia il focus con tastiera, premendo ad es. il tasto 'ins'.
Mi sembra di capire che ActionList non aggiorni i suoi componenti database quando dbgrid ha il focus con il semplice click del mouse.

Avogadro

  • Full Member
  • ***
  • Post: 217
  • Karma: +0/-0
Re:ActionList con dataset master - detail.
« Risposta #3 il: Maggio 30, 2020, 08:35:03 pm »
esempio con le dbgrid:

procedure TForm1.DBGrid2Enter(Sender: TObject);
begin
  dbnavigator1.DataSource:=dbgrid2.DataSource;
end;




JonnyB

  • Newbie
  • *
  • Post: 14
  • Karma: +0/-0
Re:ActionList con dataset master - detail.
« Risposta #4 il: Maggio 31, 2020, 12:05:00 pm »
attenzione: non si tratta di un dbnavigator ma di una toolbar i cui bottoni sono collegati ai componenti database dell'actionlist.

Avogadro

  • Full Member
  • ***
  • Post: 217
  • Karma: +0/-0
Re:ActionList con dataset master - detail.
« Risposta #5 il: Giugno 07, 2020, 10:18:58 pm »
Non cambia nulla: devi collegare il datasource dell'action list  con quello la tabella che ti interessa in quel momento.

Il dbnavigator poi si puo' "mettere" nella toolbar e questo semplifica molto la vita ("È inutile fare con più ciò che si può fare con meno"  G. Occam) .


JonnyB

  • Newbie
  • *
  • Post: 14
  • Karma: +0/-0
Re:ActionList con dataset master - detail.
« Risposta #6 il: Giugno 09, 2020, 06:25:35 pm »
Ogni bottone, sia della ToolBarMaster che della ToollBarDetail, è collegato alla medesima azione (DataSetFirst1, DataSetPrior1,ecc).
Inoltre ogni bottone è collegato al medesimo evento OnMouseEnter col seguente codice:

procedure TForm1.ToolButtonMouseEnter(Sender: TObject);
var sDataSource: TDataSource;
begin
  if (Sender as TToolButton).Parent.Name='ToolBarMaster' then
    sDataSource := DsMaster
  else
    sDataSource := DsDetail;
   DataSetFirst1.DataSource := sDataSource;
   DataSetPrior1.DataSource := sDataSource;
   DataSetNext1.DataSource := sDataSource;
   DataSetLast1.DataSource := sDataSource;
   DataSetInsert1.DataSource := sDataSource;
   DataSetEdit1.DataSource := sDataSource;
   DataSetPost1.DataSource := sDataSource;
   DataSetCancel1.DataSource := sDataSource;
   DataSetRefresh1.DataSource := sDataSource;
   DataSetCancel1.DataSource := sDataSource;
end;

mentre in delphi funziona, in lazarus no!

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2382
  • Karma: +10/-0
Re:ActionList con dataset master - detail.
« Risposta #7 il: Giugno 09, 2020, 09:51:41 pm »
Ciao Jonny.
Che sistema operativo usi (dal path nell'esempio mi viene da pensare a Windows)?
Che versione hai si lazarus e fpc?
A me la tua demo ha funzionato.
Esempio : Piemonte, VenetoVenezia Torino.
Se cambio regione, mi cambia la città.
Forse mi è sfuggito il problema

Stilgar

Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

Avogadro

  • Full Member
  • ***
  • Post: 217
  • Karma: +0/-0
Re:ActionList con dataset master - detail.
« Risposta #8 il: Giugno 10, 2020, 12:15:43 pm »
Ci sono un sacco di cose che in delphi vanno e in lazarus no

Alcune cose si possono risolvere in automatico (da qualche parte in lazarus c'è "un traduttoe", altre no

Insistere sulla strada "si ma in delphi  si puo' fare "  non mi sembra molto costruttivo.

Io ho sempre usato il db navigator, l' ho sempre posizionato nella tool bar e ha sempre funzionato alla perfezione

Sinceramente non capisco dove sia il problema


Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2382
  • Karma: +10/-0
Re:ActionList con dataset master - detail.
« Risposta #9 il: Giugno 10, 2020, 02:14:05 pm »
@JonnyB: La questione che in Delphi le cose si potevano fare in un modo che in Lazaus bisogna capire come rifarle, non è, purtroppo, una novità.

Diciamo che affidandosi ad una libreria (quella dei componenti) che mirano ad avere un certo grado di compatibilità, è facile incorrere in comportamenti simili ma non gli stessi. L'obiettivo che hanno i programmatori è quello di permettere la compilazione senza rogne. Ma basta una vigola, un if, che il comportamento cambia.

Sono il primo a non apprezzare troppo alcune cose della LCL, ma non posso dire che non sia valida. Tenendo conto che è cross platform e ha un buon grado di astrazione, non si può dire che sia pessima.

Quella che si può muovere, come critica, sicuramente è la documentazione non proprio ottimale :) Ma credo che lascino andare avanti Delphi con la documentazione.

Il punto di forza e debolezza dei Lazaurs è essere open source. Come tale soffre di tutte le cattive abitudini dell'open source ;)
@Avogrado: non credo sia da metterla nel piano di "poco costruttivo" ma della "frustrazione".  Passami le imprecisioni.

Stilgar


Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

JonnyB

  • Newbie
  • *
  • Post: 14
  • Karma: +0/-0
Re:ActionList con dataset master - detail.
« Risposta #10 il: Giugno 10, 2020, 07:27:38 pm »
Utilizzo window10, Lazarus 2.0.8, FPC 3.0.4
@Stilgar il problema riguarda la navigazione nelle griglie col solo utilizzo delle ToolBar. Ad applicazione avviata la TollBar di dettaglio agisce sulla tabella master.
L'unico modo per correggere il comportamento è fare un click all'interno della griglia di dettaglio, il problema è che poi la ToolBar master rimane collegata alla tabella di dettaglio e così via.
Allego l'ultima versione del programma di prova.

La questione che ho sollevato è nata da un post di questo sito in cui si evidenzia il
vantaggio di utlizzare una ToolBar e un'ActionList per ampliare le funzionalità
limitate del DbNavigator (vedi aggiungere nuovi bottoni) ed effettivamente è così se non per l'anomalia in questione con tabelle master/detail nella stessa form.
Con la TollBar si possono aggiungere ai bottoni delle immagini personalizzate e la si può ampliare con estrema facilità con un look dell'applicazione decisamente più gradevole.

Il codice postato è alquanto semplice e lo si può semplificare ancora di più, non penso proprio che si tratti di un'incompatibilità di linguaggio tra delphi e lazarus.

In questi mesi sto effettuando il porting a lazarus di un'applicazione scritta in delphi.
Mi sono stupito del passaggio senza problemi di alcuni miei componenti, librerie e unità.

In questa fase incorro in alcune anomalie come quella del topic: Ancora su 'Operation
cannot be performed on an inactive dataset'.

Ritengo che sia costruttivo per tutti evidenziare situazioni simili e contare sull'esperienza di voi tutti e perché no, nella speranza che giungano a chi può mettere mano al codice di lazarus.

Il porting continua anche se a volte è frustrante: viva Lazarus.
« Ultima modifica: Giugno 10, 2020, 09:00:49 pm da JonnyB »

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2382
  • Karma: +10/-0
Re:ActionList con dataset master - detail.
« Risposta #11 il: Giugno 11, 2020, 03:12:59 pm »
Con la versione che ho installata non riscontro le anomalie che evidenzi. :(

Stilgar
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

JonnyB

  • Newbie
  • *
  • Post: 14
  • Karma: +0/-0
Re:ActionList con dataset master - detail.
« Risposta #12 il: Giugno 12, 2020, 06:16:50 pm »
La cosa è preoccupante, come si spiega ?
Quale versione di Lazarus e S.O. utilizzi ?
Tra le varie versioni di Lazarus qual'è la più stabile ?
Invito altri utenti a provare gli esempi postati in particolare chi utilizza l'ultima versione di Lazarus e verificare quanto sopra riportato.
Grazie a tutti.
« Ultima modifica: Giugno 13, 2020, 11:22:29 am da JonnyB »

 

Recenti

How To

Utenti
  • Utenti in totale: 785
  • Latest: gmax
Stats
  • Post in totale: 18769
  • Topic in totale: 2232
  • Online Today: 80
  • Online Ever: 900
  • (Gennaio 21, 2020, 08:17:49 pm)
Utenti Online
Users: 0
Guests: 79
Total: 79

Disclaimer:

Questo blog non rappresenta una testata giornalistica poiché viene aggiornato senza alcuna periodicità. Non può pertanto considerarsi un prodotto editoriale ai sensi della legge n. 62/2001.