Autore Topic: [Risolto] Report di stampa (gb.report2) sqlite e DrawingArea  (Letto 1365 volte)

Offline naderit

  • Grande Gambero
  • ***
  • Post: 140
    • Mostra profilo
Ciao a tutti, sono alle prese con i report di stampa e sto usando la la classe gb.report2 e fino a qui tutto ok anche il codice allegato funziona
Codice: [Seleziona]
Private rsquote As Result

Public Sub Report_Open()

Dim sql As String
Mod_Conn.db_apro

sql = "SELECT * FROM soci INNER JOIN quote ON soci.idsoci = quote.idsoci WHERE Anno = '" & FrmSoci.TextBox4.Text & "' ORDER BY soci.Cognome "
    rsquote = Mod_Conn.$conn.Exec(sql)
    ReportHBox1.DataCount = rsquote.Count
    reportlabel5.Text = FrmSoci.Label10.Text
End

Public Sub ReportLabel1_Data(Index As Integer)

  rsquote.MoveTo(Index)
  Last.Data = rsquote!Cognome

End

Public Sub ReportLabel2_Data(Index As Integer)

  rsquote.MoveTo(Index)
  Last.Data = rsquote!Anno

End

Public Sub ReportLabel3_Data(Index As Integer)

  rsquote.MoveTo(index)
  Last.data = Format$(rsquote!Importo, "$$0.#0")

End

ora esiste la possibiltà di chiudere il collegamento al database, in questo caso con "Mod_Conn.$conn.Close",  quando viene chiuso il report?
Grazie
« Ultima modifica: 28 Giugno 2015, 19:48:31 da naderit »

Offline naderit

  • Grande Gambero
  • ***
  • Post: 140
    • Mostra profilo
Re: Report di stampa gb.report2 e sqlite
« Risposta #1 il: 19 Giugno 2015, 21:46:45 »
Ciao Vi allego un progetto di prova, a cui non riesco trovare una soluzione, il problema è questo: avviando il progetto appare un textbox con l'anno in corso, se premo il pulsante mi apre il report dove trovo l'elenco filtrata dal valore anno, e fino a qui tutto ok. Ma se chiudo il report, cambio la data in 2014 nella textbox e riavvio il report rimane sempre l'elenco precedente. Per avere l'elenco 2014 devo chiudere tutto, riavviare ed inserire 2014 nella textbox. Dove sbaglio? :hard:
Grazie   

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Report di stampa gb.report2 e sqlite
« Risposta #2 il: 20 Giugno 2015, 11:17:01 »
Confessom che non conoscevo l'oggetto Report,  però, grazie al tuo problema  :D, ho potuto cominciare a guardarlo. Ho guardato anche un pò la documentazione ufficiale sull'argomento e, purtroppo, non ho trovato l'ampio riscontro che m'aspettavo. Infatti volevo capire a cosa serve il metodo report.preview, ma non ci sono riuscito.

A parte ciò, ho provato il tuo programma ed ho notato che:
- apri un DB che non hai creato precedentemente, attività necessaria per potervi scrivere e leggere.;
- per uscire dal Form Report1 sfrutti il pulsantino "x" di sistema, posto in alto a destra, nel Form.

La gestione del Report poi esula dalla gestione del DB, quindi, come procedi all'apertura del DB, dentro il modulo Mod_Conn.$conn che richiami dentro la classe Report1, così devi procedere alla sua chiusura. La chiusura conviene farla attraverso l'intercettazione del click sul pulsantinio "x".

Vedo che utilizzi uno stile per me alquanto nuovo al quale non sono abituato, come aprire un DB inesistente, comunque, per quello che posso cercherò di darti anch'io una mano.
 :ciao:


:ciao:

Offline naderit

  • Grande Gambero
  • ***
  • Post: 140
    • Mostra profilo
Re: Report di stampa gb.report2 e sqlite
« Risposta #3 il: 20 Giugno 2015, 18:47:24 »
Ciao Picavbg, si il db è stato creato precedentemente da programma, che ho volutamnete escluso solo per capire il funzionamento della classe report. In effetti il db rimane aperto e non ho trovato il moto di chiuderlo quando frutto il pulsantino "X". Per la chiusura del db ok praticamente lo chiudo nel modulo in questo modo:

Public Procedure db_apro()
$conn.Close 
With $conn
  .Type = "sqlite3" 'tipo di database
  .Host = $percorso
  .Name = "anagrafica"
  .Open
End With
End

 cosa intendi  con "aprire un DB inesistente"?
Grazie per l'aiuto.

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Report di stampa gb.report2 e sqlite
« Risposta #4 il: 21 Giugno 2015, 00:07:43 »
il db è stato creato precedentemente da programma, che ho volutamnete escluso solo per capire il funzionamento della classe report. In effetti il db rimane aperto e non ho trovato il moto di chiuderlo quando frutto il pulsantino "X". Per la chiusura del db ok praticamente lo chiudo nel modulo in questo modo:

Public Procedure db_apro()
$conn.Close 
With $conn
  .Type = "sqlite3" 'tipo di database
  .Host = $percorso
  .Name = "anagrafica"
  .Open
End With
End

Si, è una soluzione senz'altro valida. Anch'io utilizzo la stessa tecnica.  Infatti chiudere un DB già chiuso non comporta inconvenienti.
L'unico neo resta alla chiusura del programma. In quel momento il DB come verrà chiuso? Con o senza commit? Se non sono state effettuate registrazioni, non importa, ma se il programma operasse pure registrazioni?
Potresti aggiungere una close del DB prima di uscire definitivamente dal programma, ma dovresti intercettare il click del mouse sul pulsantino "x" della finestra ancora aperta prima della chiusura. Come si fa non lo ricordo, ma dovrei avere un appunto in proposito. Io non l'ho mai messo in pratica. Vedrò di trovare la risposta che ti serve.

Citazione da: naderit
cosa intendi  con "aprire un DB inesistente"?
Il programma che ho scaricato dalla discussione corrente non contiene istruzioni di creazione del DB, per cui quando l'ho avviato non è stato creato alcun DB, quindi il DB non esisteva proprio.
A parte ciò ci sarebbe da considerare un'altro aspetto: Pur mancando il DB, il programma, quando ha incontrato la open, ha continuato a lavorare come se il DB fosse presente, senza dare alcuna segnalazione di errore. Tale comportamento di Gambas non l'ho proprio capito.
:ciao:

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Report di stampa gb.report2 e sqlite
« Risposta #5 il: 21 Giugno 2015, 12:27:02 »
Eccomi qua; ricordavo bene, era un argomento affrontato proprio da me qualche anno fa. Puoi leggere la discussione qui
Se dovessi avere ancora dubbi, mi trovi al solito indirizzo  ;D
 ;)
:ciao:

Offline naderit

  • Grande Gambero
  • ***
  • Post: 140
    • Mostra profilo
Re: Report di stampa gb.report2 e sqlite
« Risposta #6 il: 22 Giugno 2015, 20:47:09 »
Ciao ho visto la discussione che mi hai indicato ma sembrerebbe che non si possa applicare l'evento Report_Close, provando non mi da alcun risultato, in risposta al DB, lo trovi nella cartella del progetto viene richiamato con  Application.Path. Al momento sto lavorando al problema per cui anche cambiando l'anno nella textbox, il report continua ad memorizzare il dato iniziale della query, nonostante venga chiuso.
Se non trovo soluzione, cambierò approccio ai report di stampa.  :D :D :D
   

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Report di stampa gb.report2 e sqlite
« Risposta #7 il: 22 Giugno 2015, 22:52:21 »
Ciao ho visto la discussione che mi hai indicato ma sembrerebbe che non si possa applicare l'evento Report_Close, provando non mi da alcun risultato
Infatti, non devi inserire la close del DB dentro la Form Report
ma dentro la FMain.close. Serve solo ad eseguire la close prina di abbandonare il programma.

Citazione da: naderit
in risposta al DB, lo trovi nella cartella del progetto viene richiamato con  Application.Path.
Si, poi ho guardato meglio e l'ho trovato.

Citazione da: naderit
Al momento sto lavorando al problema per cui anche cambiando l'anno nella textbox, il report continua ad memorizzare il dato iniziale della query, nonostante venga chiuso.
Mi sembrava infatti anomala la responsabilità dovuta alla mancata close del DB. Secondo me dovrebbe dipendere dal modo con cui richiami la classe Report. Infatti è come se pur avendo impostato un anno diverso dal precedente, venisse passato sempre lo stesso anno, quello della prima volta, oppure c'è un bug in Gambas.
Però, non avendo esperienza in merito, non posso darti  la mano che ti necessita. Ho trovato questo
Vedi se ti può aiutare.
 :ciao:
:ciao:

Offline naderit

  • Grande Gambero
  • ***
  • Post: 140
    • Mostra profilo
Re: Report di stampa gb.report2 e sqlite
« Risposta #8 il: 28 Giugno 2015, 19:46:51 »
Dunque potrei dire di aver risolto, ho affrontato il problema da un'altro punto di vista, ho utilizzato una DrawingArea ed il tutto funziona egregiamnete per avere un'anteprima, manca solo la stampa. Allego il progetto
 ;D ;D

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Report di stampa gb.report2 e sqlite
« Risposta #9 il: 29 Giugno 2015, 13:12:11 »
Ciao naderit,
prendo nota della tua informazione, ma momentaneamente non ho gli strumenti per guardare la tua nuova soluzione. Non so se hai letto qui che, senza alcuna spiegazione, ho perso tutti i miei dati aggiornati. Sto ancora cercando una soluzione per il loro recupero integrale sena dover ricorrere a copie di salvataggio, non recentissime.
Spero di risolvere bene ed al più presto. Mi farò sentire alla fine dei miei guai.
 :ciao:
« Ultima modifica: 29 Giugno 2015, 13:16:00 da Picavbg »
:ciao: