Gambas3 > Database

combobox e mysql

(1/4) > >>

giango:
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: ---
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

--- Termina codice ---
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!

Gianluigi:
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:

Gianluigi:
Comunque il combobox si popola così nome-combobox.Add(item) nel tuo caso dovrebbe essere:

--- Codice: ---
ComboBox1.Add(rs["ricetta"])
' oppure
ComboBox1.Add(rs!ricetta)

--- Termina codice ---
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...

giango:
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

Gianluigi:
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

Navigazione

[0] Indice dei post

[#] Pagina successiva

Vai alla versione completa