Autore Topic: Variazione dati del form.  (Letto 1216 volte)

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 855
    • Mostra profilo
Variazione dati del form.
« il: 16 Dicembre 2008, 23:30:18 »
Buona sera a tutti,
mi scuso se l'oggetto della discussione non è molto chiaro ma non sapevo come porlo, praticamente vi chiedo un consiglio su come posso implementare nel modo migliore la seguente funzionalità:

poniamo per esempio di avere un form con dei campi, che possono essere TextBox,
ComboBox, ect. che vengono popolati dai classici dati che compongono una anagrafica clienti (ragione sociale, indirizzo, località, ect..), richiamo una anagrafica esistente che mi popola i suddetti campi, apporto delle modifiche ai dati e premo il bottone 'Esci' o la 'X', vorrei che il programma mi avvisasse con un messaggio che stò chiudendo senza salvare i dati, questo deve avvenire solo se modifico uno o più campi.

Uso MySQL è normalmente in un esempio come quello che ho esposto, io inserisco tutti i dati dei campi contemporaneamente con un'unica istruzione SQL, potrei farlo campo per campo avendo il controllo delle modifiche ma mi sembra un po' dispersivo e "pesante", c'è qualche modo per farlo controllare a Gambas in modo più "semplice"?
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Variazione dati del form.
« Risposta #1 il: 17 Dicembre 2008, 20:08:31 »
Credo che hai due alternative, a mio avviso:

1) ti imposti una variabile, che viene impostata a TRUE se uno dei campi interessati viene modificato; un esempio potrebbe essere gestire questa variabile attraverso gli eventi di ogni oggetto, relativi a modifiche al dato, es.: ComboBox_Change()

2) usi la proprietà Tag degli oggetti per salvarti lo stato del controllo; in effetti fai come nella 1), solo che alla chiusura fai un loop di controllo su questa proprietà

L'evento che puoi utilizzare per intercettare la chiusura è Form_Close(), dove annullerai la funzione sulla base dei Tag o var di cui sopra.

Purtroppo, non mi risulta ci sia qualcosa, nè in Gambas che in altri linguaggi, che ti gestisca questa cosa. Il confronto deve essere fatto in base al tipo di controllo (es. TextBox=testo o CheckBox=boolean) oltre al fatto che alcuni controlli potrebbero non essere strettamente collegati ad un campo di tabella.

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 855
    • Mostra profilo
Re: Variazione dati del form.
« Risposta #2 il: 17 Dicembre 2008, 23:04:00 »
Grazie md9237, sempre puntuale e prezioso nei consigli, mi hai dato degli spunti su cui lavorare per trovare il modo più funzionale per implementare ciò che mi serve.
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Variazione dati del form.
« Risposta #3 il: 19 Dicembre 2008, 15:37:07 »
Beh in effetti penso che quello che ha detto md9237 è l'unico modo però dovresti salvati i dati inseriti prima in una variabile così se l'utente reinserisce gli stessi dati il programma non chiede di salvare un file che fondamentalmente è rimasto lo stesso....

faccio un esempio....c'è un campo NOME che caricato mi porta come stringa CESKHO...se io cancello questa stringa e la sostituisco con PIPPO mi dirà di salvare ma se inserisco di nuovo CESKHO che senso ha salvare?

Spero di essere stato chiaro!

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Variazione dati del form.
« Risposta #4 il: 19 Dicembre 2008, 16:44:35 »
La tua obiezione è corretta ma non ha utilità pratica se il form contiene molti dati: costringi il programma a salvarsi X dati. Se X è su valori accettabili (diciamo 5-6 textbox), allora potresti anche fare una cosa del genere, ma se hai una cinquantina di widget, fra textbox, menu a tendine, griglie, ecc... che fai?

Molto meglio semplicemente assegnare tutti i widget ad un gruppo e poi modificare dentro l'evento Change del gruppo la variabile di controllo: in questa maniera non sei costretto ad implementare un controllo per ogni widget.
Visita il mio sito personale: http://www.leonardomiliani.com

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Variazione dati del form.
« Risposta #5 il: 19 Dicembre 2008, 16:49:54 »
Ora non so quanti dati debba elaborare il software di tornu però personalmente la vedevo una cosa un pò più "professionale" agli occhi dell'utilizzatore finale....

poi ovviamente la scelta ricade sul programmatore....;-D

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 855
    • Mostra profilo
Re: Variazione dati del form.
« Risposta #6 il: 19 Dicembre 2008, 21:01:13 »
per Ceskho:

Al metodo che tu mi suggerisci avevo già pensato, ma ho abbandonato subito perchè la cosa diventava un pò complessa e poco funzionale, questo perchè come ha ipotizzato leo nel mio progetto i widget sono parecchi.

Nell'aprire la discussione ho fatto l'esempio che mi sembrare più appropriato per farmi capire nel modo più semplice e per avere da parte vostra uno spunto sul quale lavorare ed applicare sul mio progetto che in realtà è più complesso di una semplice anagrafica clienti, comunque grazie per la risposta.

per leo:

L'assegnazione di un gruppo mi sembra alquanto funzionale (da come l'hai descritta), ma non ho ben capito come funziona, potresti farmi un esempio.
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Variazione dati del form.
« Risposta #7 il: 19 Dicembre 2008, 23:00:07 »
Se hai notato, nella lista delle proprietà dei widget è presente la voce "(Group)".
Poniamo che tu crei 2 textbox denominate txtAreatesto1 e txtAreatesto2: ad entrambi inserisci come gruppo il nome "Elementi".
Adesso hai 2 modi per indicare i controlli: o li indirizzi con il loro nome oppure con il nome del gruppo.

Esempio:
l'evento generato al variare della 1a textbox è txtAreatesto1_Change(), quello della 2a text è txtAreatesto1_Change().
Ma entrambe rispondono anche a Elementi_Change(): questo è un evento che viene sollevato al variare di una delle 2 textbox. Per sapere qual'è la textbox che ha sollevato l'evento, basta usare l'oggetto LAST, che referenzia il widget responsabile dell'evento.
Esempio:

Codice: [Seleziona]

PUBLIC SUB Elementi_Change()

  Message.Info("Evento sollevato dalla textbox " & LAST.Name)

END
Visita il mio sito personale: http://www.leonardomiliani.com

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Variazione dati del form.
« Risposta #8 il: 20 Dicembre 2008, 01:28:48 »
Da notare che il mio esempio, conteneva una semplice ma efficace logica, appunto per il discorso dell multivariazioni.

In fondo, il problema qual'è?

Io ho un dato consolidato nel database che voglio modificare, apro la form di modifica, mi imposto i valori nei controlli e li imposto anche nei rispettivi Tag, in modo da avere come riferimento il dato contenuto nel database. Durante l'editing, puoi fare tutte le modifiche che vuoi, ma il Tag rimane nello stato originario; alla chiusura, non fai altro che confrontare il valore del controllo con il valore del Tag, e il gioco è fatto! Qualsiasi modifica avvenuta nel tempo, dall'apertura, fino alla chiusura dell'editing, non ha alcuna importanza; alla fine confronti tutto e sei a posto.

Unico neo di questo discorso, che comunque non è oggetto di discussione, è la gestione della multiutenza, ovvero quella logica che dice che, mentre tu modifichi un dato caricato da una tabella, e qualcun'altro te lo varia da un'altra applicazione, il contenuto del Tag se ne và a farsi benedire... In questo caso, la cosa si complica, costringendo il programmatore, se ne ha necessità, di operare delle richieste in backgroung, verificando che i dati originari non siano stati variati nel frattempo, ed effettuando un'aggiornamento dei Tag se qualcosa è cambiato.
Il concetto che ho descritto in parole molto povere, è un'indicazione di massima di cosa può accadere in questi casi, ma ci sono ulteriori implicazioni che possono complicare ulteriormente il discorso.
Comunque non mi sembra questa la discussione adatta...

Un'altra idea che mi è venuta mentre scrivo questa risposta, è la possibilità di analizzare il database prima di salvare direttamente le tue modifiche, analizzando se è il caso di farlo o meno, e magari decidere pure se aggiornare i soli campi modificati...

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 855
    • Mostra profilo
Re: Variazione dati del form.
« Risposta #9 il: 20 Dicembre 2008, 21:03:49 »
per leo:

grazie dell'esempio che mi da lo spunto per delle prove.

per md9237:

sto lavorando anche su i tuoi suggerimenti, per quanto riguarda la tua ultima idea di analizzare i dati interessati sul DB è stato il mio primo approccio, ma mi sono fermato perchè almeno per come lo stavo impostando io (non so se in modo corretto) mi sembrava un pò 'complicato', in parole povere per ogni campo controllavo tramite query Sql se il dato da aggiornare avesse delle differenze, se si facevo l'update, ma le query diventavano troppe e quindi ho abbandonato questo metodo.

Lavoro sui suggerimenti che mi avete dato, vediamo se riesco a semplificarmi la vita.
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)