Gambas France BETA


Pas de compte ? Incription

Utilisation d'un gridview apres ajout enregistrements dans bdd(sqlite3)

1
AuteurMessages
mr2222#1 Posté le 2/5/2011 à 21:02:00
Bonjour,

Je souhaiterais faire apparaître dans un gridview associé avec gridview_data(row,colonne) des
enregistrements dans la bdd crées après la lecture de la bdd et affichage dans le gridview (ce qui fonctionne bien) et à la demande.Dans l'exemple donné,ces enregistrements
sont crées avec le button1_click et ils apparaissent bien au fur et à mesure de leur création dans le
gridview.
Cependant,la méthode ne me parait pas orthodoxe et pas efficace (appel sql):il s'agit des 3 dernières
instructions dans button1_click.Y a t'il d'autres solutions?
Merci d'avance pour avis,conseils,explications et remarques.


1
' Gambas class filePRIVATE bête AS NEW ConnectionPRIVATE res AS ResultPRIVATE sql AS StringSTATIC kk AS Integer = 11 ' pour creer les enregistrements sur champ ch1'-------------------------------------------------PUBLIC SUB Form_Open()DIM i AS IntegerDIM tbl AS tableGridView1.header = GridView.HorizontalGridView1.Columns.count = 2GridView1.Columns[0].text = "ch1"GridView1.Columns[1].text = "ch2"WITH bête.Type = "sqlite3".host = "/home/rouault/Bureau/" 'L'emplacement de mon fichier.name = ""END WITHIF Exist("/home/rouault/Bureau/test.grid") THEN 'test.grid=nom fichierKILL "/home/rouault/Bureau/test.grid"ENDIFbête.Openbête.Databases.Add("test.grid")bête.Closebête.name = "test.grid"bête.Opentbl = bête.Tables.Add("Table1")tbl.Fields.Add("ch1", db.Integer)tbl.Fields.Add("ch2", db.Integer)tbl.PrimaryKey = ["ch1"]tbl.Updatebête.Beginres = bête.Create("table1")FOR i = 1 TO 10res!ch1 = ires!ch2 = Int(Rnd(0, 100))res.UpdateNEXTbête.Commitsql = "select * from Table1"res = bête.Exec(sql)GridView1.Rows.Count = res.CountE GridView1_Data(Row AS Integer, Column AS Integer)res.moveTo(row)GridView1.Data.text = Str(res[GridView1.Columns[column].text]) ENDPUBLIC SUB Button1_Click()res = bête.Create("table1")res!ch1 = kkres!ch2 = Int(Rnd(0, 100))res.Updatebête.Commitkk = kk + 1' voici ce qui marche mais je voudrais une autre méthode:sql = "select * from Table1"res = bête.Exec(sql)GridView1.Rows.Count = res.CountEND
manu#2 Posté le 2/5/2011 à 21:56:00
Avec Gambas ca roule !je vois pas ce qui te gène.... moi çà me va :)... Je ne dois pas comprendre la question.... :geek:
Jeanne d'arc, elle a frit, elle a tout compris ! ;)

Config :
Manjaro linux (excellent !)
XFCE 4.1 (simple et efficace)
Gambas 3 dans les dépots (confort total)
linuxos#3 Posté le 2/5/2011 à 22:32:00
Un peu de sel, de poivre et la crevette sera... Bonsoir,

Moi non plus je ne vois pas ce qui te gène. C'est la méthode à utiliser.

Olivier
Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous.
spheris#4 Posté le 3/5/2011 à 17:48:00
mr2222,
Peux-tu nous expliquer ce qui ne te parait pas ou peu orthodoxe ?
;) ;)
Prokopy#5 Posté le 3/5/2011 à 18:09:00
Kinder PinguiCe n'est pas gênant de faire une requête SQL si c'est ça qui te tracasse. C'est tout a fait propre (pour être franc, moi personnellement je n'utilise que ça dans mes codes).

Par contre, le requête en elle-même n'est pas très propre :

1
SELECT * From Table1


Avec cette requête, tu demandes à ta base de données de récupérer tous les champs puis de te les envoyer … juste pour que tu les comptes. Il serait plus approprié de lui demander de compter les champs et de t'envoyer les résultats. Une requête comme celle-ci ferait bien mieux l'affaire :

1
SELECT Count(*) AS nblignes FROM Table1


Cela te renverra un résultat avec un champ "nblignes" et qui contiendra le nombre de lignes dans ta table.
Il te suffira d'y accéder comme pour un champ normal :

1
sql = "Select Count(*) As nblignes From Table1"res = bete.Exec(sql)GridView1.Rows.Count = res!nblignes


Ça c'est la méthode pour si tu n'es pas sûr à l'avance que ta table aura gagné seulement 1 champ quand tu cliqueras.
Sinon, si tu utilises la variable kk comme identifiant unique et qu'elle correspond à la longueur de ta table (tu es sûr qu'ils se suivront exactement sans double : 1, 2, 3, 4 … et que le champ à l'id 4 est bien le quatrième), alors tu peux tout simplement l'utiliser pour définir le nombre de lignes de ton GridView :

1
GridView1.Rows.Count = kk


Voilà comment on passe d'un programme qui rame à un programme rapide. :)
Par contre essaye de trouver des noms plus explicites que kk pour tes variables. Sinon c'est génant de s'y retrouver après (sans mauvais jeu de mot. ;) ).
La théorie, c'est quand on sait tout et que rien ne fonctionne.
La pratique, c'est quand ça marche mais qu'on ne sait pas pourquoi.
Quand la théorie rejoint la pratique, rien ne fonctionne et on ne sait pas pourquoi.
mr2222#6 Posté le 4/5/2011 à 22:27:00
bonjour,

Voici quelques explications et précisions supplémentaires:

1 - point de départ:J'ai une bdd avec par ex 10 enreg dans ma table.Pour les afficher
j'utilise le gridview associé avec gridview_data pour l'affichage "automatisé" suite
à la requète "SELECT" dans le gridview.Ceci fonctionne très bien.
2- Maintenant j'ajoute un enregistrement dans ma table(via le bouton_click dans l'exemple
donné ou par tout autre moyen - textbox etc...).
ET je veux faire apparaitre dans le gridview ,je dis bien les anciens enreg + le nouveau.
Si j'avais 10 enreg au début, je dois visualiser 11 enreg.
3- Et la question que je me posais est la suivante:est-ce vraiment la bonne méthode
que d'utiliser à chaque nouvel enreg que je crée et que je valide une requète
SQL balayant la totalité de la table?Imaginez la situation suivante:100 enreg nouveaux=100 requètes
Voila pour le pb posé.Si j'ai bien compris il n'y a guère d'autre solution avec l'utilisation de gridview_data
Pour ce qui concerne le sélect "count(*)..." je n'ai pas réussi à le faire fonctonner car il me retourne
constamment le nombre 1 ou me renvoie une erreur lors de l'exécution de gridview_data.
De toute facon,il me parait nécessaire d'obtenir les data pour qu'ils s'affichent.Mais,peut-etre
que quelque chose m'echappe.

Amities.



gambix#7 Posté le 19/5/2011 à 08:38:00
Faire simple !ce qui est kk


c'est le faite d'utiliser une requête pour donner le compte a la gridview et une pour la remplir !


normalement on utilise la même ! vu qu'on remplis la grid view avec cette série


dans le genre
private hres as result
private hcon as connection = new connection


public sub _new()
hcon.host = localhost
hcon. ... blabla
end

public sub button1_click()

hres = db.exec(blabla)
gridview1.count = hres.count

end


Public sub GridView1_Data(row,col)
hRes.Moveto(row)
GridView.Data.text = hres!nom
end


c'est du pseudo code ... c'est juste pour la comprendenture du principe:)
Moins de texte dans une signature c'est agrandir son espace.
1