Autore Topic: combobox e mysql  (Letto 790 volte)

Offline giango

  • Grande Gambero
  • ***
  • Post: 105
    • Mostra profilo
combobox e mysql
« il: 18 Ottobre 2022, 17:27:28 »
Buonasera a tutto il team!
Dopo avere molto apprezzato le funzionalità di gambas con i DB sqlite mi sto scontrando con un problemino alquanto serio in merito al DB mysql. Ho un server in localhost, e pertanto non presenta alcun tipo di ritardo nella consultazione; l'ho testato con un'applicazione in access ed è una scheggia. Il problema della lentezza mi si presenta ad esempio al caricamento dei dati in una textarea, per cui servono almeno 3 secondi per caricare 2000 items, quando con access/VBA è istantaneo. Senza dubbio sto sbagliando qualcosa e mi viene il dubbio che la cosa sia da imputare ai componenti selezionati per l'app. Il codice che popola la textarea è il seguente:
Codice: [Seleziona]
Public Sub Button3_Click()
  SQL = "select ricetta,id_ric from ric_nomi order by ricetta"
  rs = avvio.conn.Exec(SQL)
  For Each rs
    TextArea1.Text = TextArea1.Text & rs!ricetta & Chr(13)
    'ComboBox1.add rs["ricetta"]
    rs.MoveNext
  Next
End
e come si può notare ho disattivato la linea che popolava la combo in quanto presenta un incomprensibile errore, che ho cercato di risolvere modificando la sintassi di lettura del recordset. Vi sarei grato se poteste darmi qualche dritta in merito per entrambe le questioni: quella della lentezza e poi quella dell'errore!
Grazie!
« Ultima modifica: 20 Ottobre 2022, 12:05:16 da giango »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.157
  • Tonno verde
    • Mostra profilo
Re:comnobox e mysql
« Risposta #1 il: 18 Ottobre 2022, 18:54:49 »
Ciao e bentrovato,

prima di rispondere avrei bisogno di sapere come sono questi 2000 item, puoi fare l'esempio di come è un item.
Perché ti serve caricare una combobox?
Perché scegli una TextArea per mostrare gli item e non una GridView?

Si parla di ricette, vorresti scegliere la ricetta da mostrare da un elenco e mostri solo una ricetta nella textarea?

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

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.157
  • Tonno verde
    • Mostra profilo
Re:comnobox e mysql
« Risposta #2 il: 19 Ottobre 2022, 09:33:20 »
Comunque il combobox si popola così nome-combobox.Add(item) nel tuo caso dovrebbe essere:
Codice: [Seleziona]
ComboBox1.Add(rs["ricetta"])
' oppure
ComboBox1.Add(rs!ricetta)
La lentezza è ingiustificata a fronte di così pochi record, evidentemente sbagli qualcosa.
Vedo che hai inserito parecchi componenti, ma se fossero in conflitto Gambas lo direbbe.
Se usi MySQL gb.db.odbc è inutile, potresti provare a usare gb.gui.qt al posto di gb.gtk3 a volte funziona meglio.

Se mi dai qualche indicazione posso fare un esempio pratico...
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline giango

  • Grande Gambero
  • ***
  • Post: 105
    • Mostra profilo
Re:comnobox e mysql
« Risposta #3 il: 19 Ottobre 2022, 14:08:09 »
Grazie Gianluigi per il tuo intervento.
La tabella database ha una ventina di campi, ma come vedi dalla query io mi limito a caricare il nome della ricetta. E'solo una prova che sto facendo per vedere la risposta temporale. S effettuo la stessa prova con un DB sqlite3 la risposta è rapidissima, invece qui no.
Per item intendevo il contenuto del campo ricetta che è la descrizione ( una trentina di caratteri al max)
I componenti che ho inserito non li ho scelti con cognizione di causa, ma evidentemente qualcuno tra essi potrebbe essere causa di conflitto. La popolazione della combo poi non si spiega perchè non funzioni. Ma se popolo la combo con una variabile a cui do il contenuto del campo del record, allora la lista viene caricata, anche se la risposta dell'elenco a discesa è un incubo

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.157
  • Tonno verde
    • Mostra profilo
Re:comnobox e mysql
« Risposta #4 il: 19 Ottobre 2022, 15:41:18 »
Per prima cosa puoi cominicarmi che versione di Gambas usi e su quale Linux?

Non so che Gambas hai, ma se non hai compilato, mentre ti preparo un test di esempio potresti scaricare da qui la cartella che contiene tutto di gambas (vedi immagine):
https://gitlab.com/gambas/gambas
magari scegliendo la stabile (riga rossa) e scaricare il file compresso (riga blu) dell'immagine example.png
Decomprimi il file scaricato e fai doppio click sulla cartella decompressa, doppio click su app, doppio click su exsamples e su Database.

Dentro la cartella Database trovi tre esempi inizia dal primo Database aprilo con la IDE di Gambas, vale a dire che devi aprire Gambas e navigare fino a questa cartella oppure per semplificarti la vita copi la cartella Database oppure il progetto Database in una posizione più comoda e apri il progetto nella IDE.

Avvii il progetto Database, si aprirà la finestra come da immagine (mysql1) inserisci i dati come da immagine usando il root di MySQL e la sua password.
Prima di premere il tasto Connect spunta Debug e Create database if it does not exist.

Una volta fatto lasciando tutto come è (10000 Records) clicchi:
prima su Create
Poi su Fill with
e alla fine su Bound controls exampl...

Apparirà la finestra come da immagine mysql2.png

Studiati un po il tutto e poi puoi passare agli altri due progetti database

Divertiti

P.S. Ho aggiunto una precisazione sul root di MySQL per evitare fraintendimenti
« Ultima modifica: 20 Ottobre 2022, 10:37:43 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline giango

  • Grande Gambero
  • ***
  • Post: 105
    • Mostra profilo
Re:comnobox e mysql
« Risposta #5 il: 20 Ottobre 2022, 12:04:33 »
Buongiorno carissimo e grazie per il tuo prezioso supporto.
La versione di gambas3 che ho installato è quella presente nei repository di Mint 21, ed i pacchetti installati sono quelli della foto.
Chiarisco che sono alcuni anni che uso gambas con il DB sqlite e le app che ho creato sono sempre state molto efficienti.
Dovendo cimentarmi in una app che usa mysql su un server asiatico, mi preoccupavo prima di testarne la reattività con un mysql su localhost. Ed è qui che è sorto il problema della lentezza.
Non mi sono preoccupato di scaricare la versione che dici tu in quanto nel passato ogni installazione da repo ha sempre funzionato bene, ma se dici che si potrebbe presentare qualche problema, allora soprassiedo, disinstallo e faccio come dici.
Proverò poi a testare il prg che mi proponi e ti saprò dire.
Grazie molte per il tuo aiuto e buon lavoro!

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.157
  • Tonno verde
    • Mostra profilo
Re:comnobox e mysql
« Risposta #6 il: 20 Ottobre 2022, 12:35:13 »
Buongiorno carissimo e grazie per il tuo prezioso supporto.
La versione di gambas3 che ho installato è quella presente nei repository di Mint 21, ed i pacchetti installati sono quelli della foto.
Chiarisco che sono alcuni anni che uso gambas con il DB sqlite e le app che ho creato sono sempre state molto efficienti.
Dovendo cimentarmi in una app che usa mysql su un server asiatico, mi preoccupavo prima di testarne la reattività con un mysql su localhost. Ed è qui che è sorto il problema della lentezza.
Non mi sono preoccupato di scaricare la versione che dici tu in quanto nel passato ogni installazione da repo ha sempre funzionato bene, ma se dici che si potrebbe presentare qualche problema, allora soprassiedo, disinstallo e faccio come dici.
Proverò poi a testare il prg che mi proponi e ti saprò dire.
Grazie molte per il tuo aiuto e buon lavoro!

Io non ti stavo suggerendo di compilare, ma solo di scaricare la cartella che contiene, fra le altre cose es. il codice sorgente scritto dallo stesso Minisini utile per imparare direttamente dal suo inventore, anche gli esempi.

Poi si direi che visto che usi Mint dovresti eliminare la versione 3.16 che hai installata e da PPA installare l'ultima stabile.
Una volta che hai disinstallato, i comandi sono:
Codice: [Seleziona]
$ sudo add-apt-repository ppa:gambas-team/gambas3
Quindi aggiorna i sorgenti e installa Gambas:
Codice: [Seleziona]
$ sudo apt-get update
$ sudo apt-get install gambas3

Mi scuso se ti ho dato l'impressione di pensare che non conosci Gambas e i database.

Io nel campo sono un semplice amatore e per giunta scarso  ;D

Mi diverto a cercare di capire, ma con scarsi risultati, come si può creare un buon database con le poche conoscenze che ho e mi piace condividere.

Nella cartella degli esempi i database sono tre.

Non mi devi ringraziare io credo che lo scambio della conoscenza, anche se poca, può aiutare chiunque, pure un guru...
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline giango

  • Grande Gambero
  • ***
  • Post: 105
    • Mostra profilo
Re:combobox e mysql
« Risposta #7 il: 20 Ottobre 2022, 13:19:34 »
Tranquillo, non ti ho frainteso Gianluigi, e non hai motivo di scusarti!
Ho tolto la versione precedente ed ho installato l'ultima stabile (3.17.3)
Ho provato ad eseguire lo stesso codice che ho postato all'inizio, ed il ritardo di 3 secondi persiste.
Quello che non riesco a capire dal tuo precedente messaggio,è come posso utilizzare un esempio mysql se non vado a caricare il db sul mio server localhost. Rammento che il DB a cui punto nella mia nuova app, risiede sia sul mio server locale che su quello asiatico, e l'interrogazione mediante access è istantanea in locale ed ovviamente ritardata su quello lontano.
Se non riesco a risolvere questo dilemma, sarò costretto ad abbandonare gambas optando purtroppo per il VBA o meglio su ambienti di sviluppo estesi che possano lavorare con diversi S.O. come il Java.

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.157
  • Tonno verde
    • Mostra profilo
Re:combobox e mysql
« Risposta #8 il: 20 Ottobre 2022, 13:43:34 »

Quello che non riesco a capire dal tuo precedente messaggio,è come posso utilizzare un esempio mysql se non vado a caricare il db sul mio server localhost. Rammento che il DB a cui punto nella mia nuova app, risiede sia sul mio server locale che su quello asiatico, e l'interrogazione mediante access è istantanea in locale ed ovviamente ritardata su quello lontano.


Se non fai una prova come fai a capire?

Hai letto il codice dell'esempio che ti ho indicato?

Gambas si collega al server, crea il database, questo naturalmente accade solo se hai i permessi per farlo, e apre una finestra come da sequenza di immagini 1 e 2.

Spero di aver chiarito.

Naturalmente se il database è stato creato da altri e tu hai solo permessi limitati di accesso, dovrai confrontarti con l'amministratore del database per risolvere i problemi.
Io in questo caso sarei inutile in quanto non ho mai lavorato sui database  :-\
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.157
  • Tonno verde
    • Mostra profilo
Re:combobox e mysql
« Risposta #9 il: 20 Ottobre 2022, 14:01:47 »
Parlando sempre dell'esempio che ti ho indicato, dovresti soffermarti a capire il codice della finestra FRequest e come fa a popolare la griglia.

Questo è il codice chiave:
Codice: [Seleziona]
Public Sub tbvData_Data(Row As Integer, Column As Integer)

  $rData.MoveTo(Row)

  tbvData.Data.Text = Str($rData[tbvData.Columns[Column].Text])
  tbvData.Data.Background = Color.RGB((Row Mod 31) * 8, (Row Mod 17) * 15, (Row Mod 13) * 21)
  tbvData.Data.Foreground = Color.White

End

Sono a disposizione per ulteriori chiarimenti.
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline giango

  • Grande Gambero
  • ***
  • Post: 105
    • Mostra profilo
Re:combobox e mysql
« Risposta #10 il: 20 Ottobre 2022, 15:26:29 »
Ecco qui!
Come vedi il pannello di connessione è privo dei ceckbox "Debug e Create database if it does not exist."
Dato che il mio server localhost ha come user e psw i miei dati, ho inserito questi ed il pannello di connessione si è chiuso.
Non esiste in tale pannello l'opzione che permette di creare un nuovo DB, come puoi vedere dall'immagine allegata.
Pertanto non mi è possibile fare il test su un DB che non esiste.

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.157
  • Tonno verde
    • Mostra profilo
Re:combobox e mysql
« Risposta #11 il: 20 Ottobre 2022, 15:40:05 »
Nella cartella Database ci sono tre database il primo si chiama Database e è quello che ti ho indicato  :-\
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline giango

  • Grande Gambero
  • ***
  • Post: 105
    • Mostra profilo
Re:combobox e mysql
« Risposta #12 il: 20 Ottobre 2022, 16:15:40 »
Niente da fare! Rinuncio a capire. Anche con il DB di esempio è una lumaca.
Peccato perchè con sqlite era molto performante!
Ti ringrazio nuovamente per la pazienza che hai avuto e del tempo che ti ho fatto perdere.
Buon lavoro!

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.157
  • Tonno verde
    • Mostra profilo
Re:combobox e mysql
« Risposta #13 il: 20 Ottobre 2022, 16:32:36 »
Niente da fare! Rinuncio a capire. Anche con il DB di esempio è una lumaca.
Peccato perchè con sqlite era molto performante!
Ti ringrazio nuovamente per la pazienza che hai avuto e del tempo che ti ho fatto perdere.
Buon lavoro!

Ok, ma se ti arrendi alle prime difficoltà ...

Penso che tu abbia sbagliato qualcosa nell'installazione di mySQL

Ho Ubuntu come te e non faccio in tempo a cliccare sul pulsante che già ottengo la risposta di 10000 (diecimila record) tutti belli formattati che con Access te li scordi.

Vedi filmato compresso a questo link:
https://paste.c-net.org/DementiaMalakai
« Ultima modifica: 20 Ottobre 2022, 16:33:14 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline giango

  • Grande Gambero
  • ***
  • Post: 105
    • Mostra profilo
Re:combobox e mysql
« Risposta #14 il: 20 Ottobre 2022, 16:43:06 »
Come gia accennato il DB che ho in locale lavora perfettamente con VBA/Access e la prova con access sul server asiatico si connette in una decina di secondi (8000 km). Non vedo pertanto i motivi per cui non dovrebbe funzionare con il gambero. Il server è stato installato con Xampp ed il db accessibile con phpmyadmin ha tutti i privilegi settati sul mio utente.
Se ci sono settaggi particolari per gambas non lo so, ma se ci sono son ben nascosti!
Addirittura la lettura con excel dal server risulta molto veloce, e sto parlando di excel che lavora dentro ad una VM sotto linux!
Penso che a questo punto mi convenga passare al PHP visto che lavora lato server e non mi da ritardi nella trasmissione delle pagine web