Page 1 sur 1

Copier des données dans table depuis une listIcon

Publié : jeu. 26/mai/2011 21:31
par anissa
Bonjour

Existe t il un moyen rapide de copier les enregistrements dans une table (sqlite) à partir d'une ListIconGadget? La méthode classique marche bien mais elle est trop lente...

Code : Tout sélectionner

For Wrow=0 to CountGadgetItems(#Grid)-1 
     For Wcol= 0 to 3
          Wdata$(Wcol)=GetGadetItemText(#Grid,Wrow,Wcol)
     Next Wcol     
     Wsql = "Insert Into MaTable (Col0,Col1,Col2,Col3) Values ("
     Wsql + Chr(34) + Wdata$(0) + Chr(34) + ","
     Wsql + Chr(34) + Wdata$(1) + Chr(34) + ","
     Wsql + Chr(34) + Wdata$(2) + Chr(34) + ","
     Wsql + Chr(34) + Wdata$(3) + Chr(34) + ")"
     CheckDataBaseUpdate(MaBase,Wsql)
Next Wrow
Ce code marche bien mais devient trop lent en fonction du nombre de lignes dans la liste
(Dans mon exemple 1146 enregistrements)

Existe til une solution meilleure plus rapide ?

Merci à tous

Anissa

Re: Copier des données dans table depuis une listIcon

Publié : ven. 27/mai/2011 0:22
par graph100
C'est pas possible d'envoyer plusieurs lignes avec une seule requête sql ?
d'abord tu construit ta requête, puis tu envoie toutes les instructions d'un coup ??
ça me parait faisable pour 1000 lignes

Re: Copier des données dans table depuis une listIcon

Publié : ven. 27/mai/2011 1:18
par graph100
j'ai regardé, tu fais tes requêtes de la forme :

Code : Tout sélectionner

grosse_requête = "requête ; requête ; etc ...."
DataBaseUpdate(0, grosse_requête)

Re: Copier des données dans table depuis une listIcon

Publié : ven. 27/mai/2011 19:26
par anissa
grosse_requête = "requête ; requête ; etc ...."
DataBaseUpdate(0, grosse_requête)
Mais comment construire toutes ces requêtes dans grosse_requête?
Je ne vois pas comment extraire ces données du grid pour les insérer d'un seul coup
sauf si je n'ai pas bien compris le contenu de cette grosse requête.

Un exemple de code est ce que c possible svp?

Merci

Re: Copier des données dans table depuis une listIcon

Publié : ven. 27/mai/2011 23:31
par graph100
anissa a écrit :

Code : Tout sélectionner

For Wrow=0 to CountGadgetItems(#Grid)-1 
     For Wcol= 0 to 3
          Wdata$(Wcol)=GetGadetItemText(#Grid,Wrow,Wcol)
     Next Wcol     
     Wsql = "Insert Into MaTable (Col0,Col1,Col2,Col3) Values ("
     Wsql + Chr(34) + Wdata$(0) + Chr(34) + ","
     Wsql + Chr(34) + Wdata$(1) + Chr(34) + ","
     Wsql + Chr(34) + Wdata$(2) + Chr(34) + ","
     Wsql + Chr(34) + Wdata$(3) + Chr(34) + ")"
     CheckDataBaseUpdate(MaBase,Wsql)
Next Wrow
bah tout simplement en reprenant chaque requête que tu construits dans ton code ci-dessus :)

Là j'ai grillé l'alim de mon pc, et je suis saoul, donc je te répond sans avoir passer le code par purebasic -_-

Code : Tout sélectionner

grosse_requete.s = ""

For Wrow = 0 to CountGadgetItems(#Grid) - 1 
     For Wcol= 0 to 3
          Wdata$(Wcol) = GetGadetItemText(#Grid, Wrow, Wcol)
     Next Wcol

     Wsql.s = "Insert Into MaTable (Col0,Col1,Col2,Col3) Values ("
     Wsql + Chr(34) + Wdata$(0) + Chr(34) + ","
     Wsql + Chr(34) + Wdata$(1) + Chr(34) + ","
     Wsql + Chr(34) + Wdata$(2) + Chr(34) + ","
     Wsql + Chr(34) + Wdata$(3) + Chr(34) + ")"

     grosse_requete = grosse_requete + Wsql + ";"
Next Wrow

; on enlève le dernier ';' je sais pas si c'est utile ...
grosse_requete = left(grosse_requete, len(grosse_requete) - 1)

CheckDataBaseUpdate(MaBase, grosse_requete)
Du coup, comme tu as sortie la requète SQL de la boucle, et que tu la fait qu'une seule fois, ca va aller bcp plus vite je pense !
C'est la requète sql qui prend du temps, pas le reste, donc le but est toujours de mettre ce qui prend le plus de temps en dehors des boucles