Autore Topic: [Risolto] DB.SqLite - volumi supportabili  (Letto 8299 volte)

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.152
  • Tonno verde
    • Mostra profilo
Re:DB.SqLite - volumi supportabili
« Risposta #30 il: 11 Novembre 2018, 01:19:54 »

:ot: Vedo che non hai il modulo canberra come hai installato?
Da repository PPA http://ppa.launchpad.net/gambas-team/gambas3/ubuntu bionic

Per installare in Ubuntu il modulo occorre dare questo comando:
Codice: [Seleziona]
sudo apt-get install libcanberra-gtk-module
Però non sono sicuro che possa servire installarlo a posteriori, provare non costa nulla.
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re:DB.SqLite - volumi supportabili
« Risposta #31 il: 11 Novembre 2018, 10:20:26 »
Scusate.
Cos'è il modulo gamberrra e a che serve?
 ???
:ciao:

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.152
  • Tonno verde
    • Mostra profilo
Re:DB.SqLite - volumi supportabili
« Risposta #32 il: 11 Novembre 2018, 11:00:31 »
Scusate.
Cos'è il modulo gamberrra e a che serve?
 ???

Da Ubuntu package : (lib): traduce i segnali dei widget GTK+ nei suoni degli eventi
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 855
    • Mostra profilo
Re:DB.SqLite - volumi supportabili
« Risposta #33 il: 11 Novembre 2018, 13:53:26 »
...
In aggiunta, siccome, per l'uso che ne faccio, la gridview di destinazione si compone di una 20 di righe, al massimo,  pensavo di raccogliere la risposta della nuova query in un array e trasferire, dopo, il contenuto di detto array nella gridview da mostrare nella form.
...
Ciao Picavbg,
è una tecnica che uso spesso anche io quando devo visualizzare parecchi dati in una Gridview, visualizzare un numero ridotto
di righe (impostabile con il metodo che uso io) e "sfogliando" i dati.
Non ho mai fatto prove riguardo la velocità di caricamento, ma per logica dovrebbe essere più veloce.
Io non uso array di "appoggio" per visualizzare un numero ridotto di dati rispetto a quelli contenuti nel result,
ma uso una query specifica.
Questo pomeriggio o al massimo questa sera ti posto il codice che uso per questa tecnica, poi valuta tu.
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 855
    • Mostra profilo
Re:DB.SqLite - volumi supportabili
« Risposta #34 il: 11 Novembre 2018, 13:56:41 »

Per installare in Ubuntu il modulo occorre dare questo comando:
Codice: [Seleziona]
sudo apt-get install libcanberra-gtk-module
Però non sono sicuro che possa servire installarlo a posteriori, provare non costa nulla.
Ciao Gianluigi,
già fatto dopo la tua segnalazione.
Sì, puoi installarlo anche a posteriori.
Ti ringrazio comunque per i tuoi sempre graditi e preziosi suggerimenti.  ;)
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.152
  • Tonno verde
    • Mostra profilo
Re:DB.SqLite - volumi supportabili
« Risposta #35 il: 11 Novembre 2018, 15:13:40 »
Io non uso array di "appoggio" per visualizzare un numero ridotto di dati rispetto a quelli contenuti nel result,
ma uso una query specifica.
Questo pomeriggio o al massimo questa sera ti posto il codice che uso per questa tecnica, poi valuta tu.

Mooooolto interessante  :D  :ok:

nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 855
    • Mostra profilo
Re:DB.SqLite - volumi supportabili
« Risposta #36 il: 11 Novembre 2018, 21:49:12 »
Eccolo, mi scuso se non vi posto un programma di esempio ma solo il codice, ma purtroppo non ho avuto tempo,
se qualcuno ha la bontà di provarlo mi faccia sapere se ci sono errori, con MySql funziona benissimo non sò se è
adattabile anche a SqLite.  :ciao:
Codice: [Seleziona]
Private $iMaxRows As Integer = 15  ' Nr. max righe per pagina
Private $iCurrentPage As Integer  ' Pagina corrente
Private $iMaxPage As Integer  ' Nr. max pagine

Public Sub Form_Open()
  Me.Center()

  Crea_Griglia()  ' Avvia Sub creazione griglia
End

Private Sub Crea_Griglia() ' Creazione GridView dati
  With grdDati
    .Rows.Count = 0
    .Columns.Count = 4
    .Columns[0].Text = "Dato 1"
    .Columns[1].Text = "Dato 2"
    .Columns[2].Text = "Dato 3"
    .Columns[3].Text = "Dato 4"
  End With
End

Private Sub Conta_Record()  ' Conteggio record
  Dim rs As Result
  Dim iTmp As Integer

  rs = MGlobal.db.Exec("SELECT COUNT(campo1) FROM tabella")  ' Query conteggio dati

  iTmp = rs.Count Div $iMaxRows ' Suddivisione record per numero max righe (15) impostate per visualizzazione pagine in grdDati

  If rs.Count Mod $iMaxRows > 0 Then  ' Numerazione pagine
      $iMaxPage = iTmp + 1
    Else
      $iMaxPage = iTmp
  Endif

  GeneratePaging(0) ' Avvia Sub selezione dati e generazione pagine
  $iCurrentPage = 1
  NrPagine($iCurrentPage) ' Avvia Sub visualizzazione Nr. pagine
End

Private Sub GeneratePaging(iPage As Integer)  ' Selezione dati e generazione pagine
  Dim sSql As String
  Dim iStartOffset As Integer

  If iPage <= 0 Then  ' Impostazione numerazione pagine = 1 se pagine <= 0
    iPage = 1
  Endif

  iStartOffset = (iPage - 1) * $iMaxRows  ' Calcolo numero max pagine

  sSql = "SELECT campo1"
  sSql &= " FROM tabella"
  sSql &= " ORDER BY campo1"
  sSql &= " LIMIT "
  sSql = sSql & iStartOffset & "," & $iMaxRows

  grdDati.Clear()
  Crea_Griglia()  ' Avvia Sub creazione griglia
  Vis_Dati(grdDati, sSql)  ' Avvia Sub visualizzazione dati
End

Private Sub Vis_Dati(grd As GridView, sQuery As String)  ' Visualizzazione dati
  Dim i As Integer
  Dim rs As Result

  rs = MGlobal.db.Exec(sQuery)

  With rs
    grd.Rows.Count = 0
    If .Count <> 0 Then
        grd.Columns.Count = .Fields.Count
        grd.Rows.Count = .Count
        i = 0
        While i < .Count
          grd[i, 0].Text = rs!campo1
          grd[i, 1].Text = rs!campo2
          grd[i, 2].Text = rs!campo3
          grd[i, 3].Text = rs!campo4
          i = i + 1
          .MoveNext
        Wend
        MGlobal.db.Close()
      Else
        MGlobal.db.Close()
    Endif
  End With
End

Public Sub tbnPgAvanti_Click()  ' Pagina Avanti
  $iCurrentPage = $iCurrentPage + 1

  If $iCurrentPage >= $iMaxPage Then
    $iCurrentPage = $iMaxPage
  Endif

  MGlobal.db.Open()
  GeneratePaging($iCurrentPage) ' Avvia Sub generazione pagine
  NrPagine($iCurrentPage) ' Avvia Sub Nr. Pagine
End

Public Sub tbnPgIndietro_Click()  ' Pagina Indietro
  $iCurrentPage = $iCurrentPage - 1

  If $iCurrentPage <= 1 Then
    $iCurrentPage = 1
  Endif

  MGlobal.db.Open()
  GeneratePaging($iCurrentPage) ' Avvia Sub conteggio record
  NrPagine($iCurrentPage) ' Avvia Sub visualizzazione Nr. pagine
End

Public Sub NrPagine(iPag As Integer)  ' Numerazione pagine
  txlNrPagine.Text = iPag & "<FONT color=black> di </FONT>" & $iMaxPage
End
« Ultima modifica: 11 Novembre 2018, 22:14:17 da tornu »
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re:DB.SqLite - volumi supportabili
« Risposta #37 il: 11 Novembre 2018, 22:49:59 »
Grazie tornu.
Io non conosco MySql, ma dalle vostre prove vedo che i DB rispondono con sorprendente velocità alle richieste di estrazione dati.
Devo perciò correggere la parte relativa alla compilazione della gridview, e non solo.
Infatti la mia gridview ha una quantità di righe variabili, a seconda del numero dei record prodotti dalla query stessa, perciò all'epoca della realizzazione del passo di programma relativo ho pensato di aggiungere alla gridview di base 1 riga ad ogni record restituito dalla query, Inoltre la mia query non è unica ma è formata da successivi accessi al DB, uno per ciascuna tabella interessata nella compilazione della gridview.
É il risultato della mia completa inesperienza di allora sulla formazione di una query. Oggi capisco che è tutto da rivedere; devo perciò costruire un'unica query che mi restituisca tutti i dati componenti la singola riga da scrivere sulla gridview, inoltre, con la valorizzazione di un array di servizio, posso conoscere esattamente il n° di righe che comporranno la gridview finale e posso generare quest'ultima in maniera unica e definitiva, subito dopo avere riempito l'array di transito.
Spero di avere spiegato bene le modifiche che ho in mente di realizzare.  :'(
 :coder:

:ciao:

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.152
  • Tonno verde
    • Mostra profilo
Re:DB.SqLite - volumi supportabili
« Risposta #38 il: 12 Novembre 2018, 09:40:28 »
@Picavbg
mi intrometto solo per metterti in guardia, intanto non confondere le mie elementari query con quelle di tornu, ma soprattutto ti esorto a leggere bene quello che fa il suo codice.
Principalmente le query, devi studiarti Count e Limit altrimenti sei destinato a ripetere gli stessi errori.
Comunque, se crede e ne ha voglia lascio a tornu, che ne sa molto ma molto più di me, il compito di approfondire l'argomento relativo alla visualizzazione parziale dei risultati di una query.
Ad oggi non sono ancora riuscito a creare una visualizzazione "scorrevole" dei dati limitati in una griglia.  :bad:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re:DB.SqLite - volumi supportabili
« Risposta #39 il: 13 Novembre 2018, 15:42:13 »
Va bene.
Seguirò i vostri consiglim e suggerimenti.
A presto.
« Ultima modifica: 13 Novembre 2018, 15:43:18 da Picavbg »
:ciao:

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.152
  • Tonno verde
    • Mostra profilo
Re:DB.SqLite - volumi supportabili
« Risposta #40 il: 14 Novembre 2018, 00:09:42 »
Potrei dire "contrordine ragazzi" sono finalmente riuscito a far fare quello che volevo alla gridview.
Ora Filtra in pochi attimi milioni di dati e li mostra nella griglia dalla quale possiamo scorrere tutti i dati dal primo all'ultimo e variare anche le dimensioni della griglia.
L'unica cosa che mi fa un po pensare è l'uso del timer, se fossi riuscito con l'osservatore avrei preferito.
Dico contrordine perché sono tornato ai vettori.
@Picavbg ti consiglio di studiarti bene la routine GridView1_Data, nel tuo caso con così pochi record non serve neanche appoggiarsi al Timer, puoi caricare tutto in un colpo solo.

Attenzione che il file allegato carica la prima volta nel database due milioni di record pertanto ci mette un po, ad esempio nel mio computer abbastanza veloce impiega ad aprirsi, ma solo la prima volta, circa 15 secondi in quello tredicenne di mia moglie circa due minuti chiudendosi con l'avviso che il programma restituiva il valore 1, ma poi si avvia normalmente e riesce a filtrare con nonschalance tutti e due i milioni di dati.  :)

@tornu cosa ne dici, secondo te può andare?
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.152
  • Tonno verde
    • Mostra profilo
Re:DB.SqLite - volumi supportabili
« Risposta #41 il: 14 Novembre 2018, 10:09:02 »
La cosa che non mi va del codice appena postato è che se si agisce sulla scroll bar questa si comporta in modo bizzarro andando su quando si ricarica il vettore e poi subito giù inseguendo il mouse.
Se tento di assegnare in partenza il totale delle righe alla gridview, ottengo sempre l'errore di fuori limite e non mi è venuta nessuna idea sul come evitarlo.
Qualche vostra proposta / idea?
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 855
    • Mostra profilo
Re:DB.SqLite - volumi supportabili
« Risposta #42 il: 14 Novembre 2018, 22:15:43 »
...
@tornu cosa ne dici, secondo te può andare?
Velocissimo rispetto agli esempi precedente, non ho avuto tempo di analizzare il codice,
mi pare di aver capito dalle tue spiegazioni che hai cambiato il modo di popolare la
GridView, giusto?  :ok:
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 855
    • Mostra profilo
Re:DB.SqLite - volumi supportabili
« Risposta #43 il: 14 Novembre 2018, 22:17:44 »
La cosa che non mi va del codice appena postato è che se si agisce sulla scroll bar questa si comporta in modo bizzarro andando su quando si ricarica il vettore e poi subito giù inseguendo il mouse.
Se tento di assegnare in partenza il totale delle righe alla gridview, ottengo sempre l'errore di fuori limite e non mi è venuta nessuna idea sul come evitarlo.
Qualche vostra proposta / idea?
Non ho capito il tuo disappunto sul codice, a me funziona benissimo lo scroll  ???
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.152
  • Tonno verde
    • Mostra profilo
Re:DB.SqLite - volumi supportabili
« Risposta #44 il: 14 Novembre 2018, 22:54:17 »

mi pare di aver capito dalle tue spiegazioni che hai cambiato il modo di popolare la
GridView, giusto?  :ok:

Giusto, sono ritornato al primo amore, cioè quello di caricare un vettore, la differenza consiste nel fatto che questo è di 50000 record per volta (fornendo l'offset alla funzione preposta).
« Ultima modifica: 14 Novembre 2018, 22:56:04 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro