Visualizza post

Questa sezione ti permette di visualizzare tutti i post inviati da questo utente. N.B: puoi vedere solo i post relativi alle aree dove hai l'accesso.


Post - tornu

Pagine: 1 [2] 3 4 ... 57
16
Programmazione in generale / Re:DB.SqLite - volumi supportabili
« il: 16 Novembre 2018, 22:07:14 »
Ciao Picavbg,
premesso che non conosco la struttura delle tabelle che richiami nella query, usi SELECT * che in parole povere
significa dammi tutti i campi delle tabelle richiamate in base alle condizioni impostate con gli AND, ma ti servono
tutti per visualizzare i dati che stai filtrando?
Ti ho fatto questa domanda perchè spesso si fà l'errore di richiamare tutti i campi di una tabella anche se non servono,
anche questo metodo è fonte di rallentamento specialmente in DB "corposi".
Per quanto riguarda la GridView ti posto un esempio della stessa "sfogliabile" a pagine.
Ho utilizzato uno degli esempi di Gianluigi con SqLite ( :hard:).
Mi perdonerà Gianluigi per aver "raffazzonato" il suo codice (anche per mancanza di tempo) , ma funziona, purtroppo
alcune funzioni con SqLite non mi erano chiare  :-[

17
Programmazione in generale / Re:DB.SqLite - volumi supportabili
« 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  ???

18
Programmazione in generale / Re:DB.SqLite - volumi supportabili
« 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:

19
Programmazione / Re:caricare ann in una variabile
« il: 14 Novembre 2018, 21:24:11 »
Ciao dex,
non hai postato la query che usi per estrarre i dati, prova ad impostare la query
che ti estrae i dati in questo modo, sperando di aver capito il tuo problema
Codice: [Seleziona]
SELECT DISTINCT anno FROM tabella;

20
Programmazione in generale / Re:DB.SqLite - volumi supportabili
« 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

21
Programmazione in generale / Re:DB.SqLite - volumi supportabili
« 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.  ;)

22
Programmazione in generale / Re:DB.SqLite - volumi supportabili
« 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.

23
Programmazione in generale / Re:DB.SqLite - volumi supportabili
« il: 10 Novembre 2018, 12:41:23 »
In effetti se ci si limita ad interrogare DB Browser i risultati sono immediati  :-\
Citazione
179947 rows returned in 102ms from: SELECT *
FROM tuser
WHERE usdat >= '2009-11-09'
AND usdat <= '2018-11-09'
Che ne deduci?
Forse la visualizzazione dei dati non dipende solo dalla velocità di estrazione dal DB, anche se le sue impostazioni e la
costruzione delle query di interrogazione sono fondamentali. Codice Gambas e Gridview ?
Continuo a fare prove

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

24
Programmazione in generale / Re:DB.SqLite - volumi supportabili
« il: 09 Novembre 2018, 20:39:24 »
Ho fatto la prova con il test proposto da Gianluigi su DB MySql, ho modificato quelle
parti di codice non compatibili con questo DB, i risultati non mi sembrano esaltanti per
200000 record. Vi posto le schermate e mi accingo a modificare il DB con le mie conoscenze,
vi posterò i risultati.

25
Programmazione in generale / Re:DB.SqLite - volumi supportabili
« il: 07 Novembre 2018, 20:50:23 »
Ho visto che dalle risposte praticamente Picavbg ha trovato l'inghippo che rallentava la risposta della query che
interrogava il suo DB.
Volevo solo far notare a Picavbg che il numero di tabelle presenti in un DB non incide sulla velocità di risposta dello
stesso ma il numero di record che la tabella contiene (ma devono essere veramente tanti), se indicizzata correttamente,
che non ci siano dati ridondanti (se non in casi particolari) e come sono costruite le query Sql. Ovviamente come nel tuo
caso impatta anche Gambas, specialmente nel popolare Gridview, Listview e oggetti similari.
Comunque per curiosità provo il test proposto da Gianluigi, vi posterò i risultati.

26
Programmazione in generale / Re:DB.SqLite - volumi supportabili
« il: 04 Novembre 2018, 12:40:02 »
Ciao Picavbg,
io non ho mai usato SqLite, per i miei progetti sia piccoli che "grandi" ho sempre utilizzato MySql
che sicuramente a livello di gestione è similare ma dispone di strumenti e funzionalità che sicuramente
mancano a SqLite. Ma nel tuo caso dove parliamo di circa 106000 record si può dire che sicuramente non
parliamo di un "grande" Database, quindi la lentezza che hai riscontrato nel tempo nell'estrapolare i dati
tramite le tue query sicuramente è data da una ottimizzazione non corretta del DB. L'indicizzazione delle
tabelle sicuramente è la prima cosa da verificare e implementare se non presenti, è una cosa basilare,
noterai delle differenze abissali. Ti posto questo piccolo estratto da letture e informazioni acquisite nel tempo
per far capire a te (ma sicuramente già lo sai) e a chiunque approcci i DataBase.
Ottimizzare database MySQL e velocizzare le query: un esempio concreto
Si supponga, come "esempio estremo", di avere la seguente tabella MySQL:


CREATE TABLE dipendenti (
matricola char(10) NOT NULL,
nome varchar(40),
cognome varchar(40),
indirizzo text(150),
telefono varchar(25),
salario int(11),
salario_straordinario int(10) NOT NULL
);

Per estrarre dal database il dato relativo al salario del dipendente contraddistinto dall'identificativo 693369, si utilizzerà la query che segue:

SELECT salario FROM dipendenti WHERE matricola = '693369';

MySQL, però, di base non dispone di alcun "appoggio" per trovare rapidamente l'informazione cercata: dovrà quindi esaminare il contenuto dell'intera tabella (potenzialmente migliaia di record) per restituire il dato sul salario.
Utilizzando un indice, MySQL potrà viceversa trovare le informazioni richieste molto più rapidamente.
Il "segreto" consiste nel creare l'indice sul campo o sui campi per i quali si attiva la clausola WHERE di SQL.

Nell'esempio, se si crea un indice per il campo matricola, i record cercati saranno trovati da MySQL molto velocemente.

Gli indici, in MySQL, funzionano in maniera molto simile agli indici di un qualunque libro. Si immagini un testo tecnico sprovvisto di indice: per trovare il capitolo Ottimizzare MySQL bisognerà necessariamente sfogliare tutte le pagine; con un indice, invece, ci si potrà recare rapidamente alla pagina giusta.  :ciao:

27
OpenBar / Re:presentazione di Roberto2
« il: 03 Novembre 2018, 12:30:30 »
Benvenuto Roberto2,
non potevi fare scelta migliore... troverai persone speciali e molto preparate (a parte me  ;D:ciao:

28
Se decidete di essere voi a gestire tutto il flusso di fatture XML, il ciclo passivo (fatture ricevute) via PEC, non è un problema girarle al commercialista. Il problema che ti si pone e che dovrai implementare nel tuo gestionale la gestione di questo flusso se hai previsto per esempio uno scadenzario, l'acquistato da fornitore, ecc... Cioè tutti quei dati che in un gestionale il ciclo passivo genera.

29
Ciao naderit,
solo per quanto riguarda le fatture elettroniche che dovrò implementare anche io nel gestionale che stò sviluppando (purtroppo molto lentamente... ma non c'è fretta  :D). Non trovo la "cosa" particolarmente complessa, nel senso che dipende dalla scelta che fai per la gestione delle stesse. Praticamente abbiamo da scegliere due procedure possibili, ovviamente nella scelta incide anche il numero di fatture emesse annualmente (questione di costi gestionali):
1) Appoggiarsi ad un intermediario accreditato tipo Infocert, Aruba, altri... quindi dal tuo gestionale dovrai solo produrre il file (fattura) XML con le specifiche rilasciate dall'Agenzia delle Entrate e tramite l'interfaccia web di queste società acquisire il file da te prodotto, sarà l'intermediario a pensare a firmare elettronicamente la fattura, spedirla al destinatario, gestire i messaggi del SDI (Sistema di Interscambio), è vero che questa scelta ha un costo (abbonamento) ma ti sgrava da una serie di incombenze.
2) "Fai da te" se le fatture emesse annualmente sono relativamente poche. Dovrai comunque dal tuo gestionale generare il file (fattura) XML, acquistare un kit di firma digitale, chiedere all'Agenzia delle Entrate il tuo CDI (Codice di Interscambio), inviare a mezzo PEC le fatture ai destinatari e gestire i messaggi (tipo fattura errata, non conforme, ecc...) sempre tramite PEC.
C'è anche una terza possibilità: dai i tuoi file XML al tuo commercialista e ci pensa lui a gestire tutte le procedure.
Tutto dipende anche se le aziende gestiscono in "casa" la loro contabilità o no.
Spero vi possa servire come traccia se non conoscevate già le procedure di Fatturazione Elettronica PA/B2B  :ciao:

30
OpenBar / Re:Linux Day
« il: 18 Ottobre 2018, 12:18:35 »
Se riesco parteciperò all'evento organizzato dal Gruppo di Cagliari  :ciao:

Pagine: 1 [2] 3 4 ... 57