Page 1 sur 1

[R] sqlite : boucle _SQLite_FastEscape($split[..]) & ", "

Posté : lun. 15 juil. 2013 18:58
par aulus
Bonsoir,

Voici mon code remplissant la table "liste d'une base sqlite en puisant les données dans un fichier texte :

Code : Tout sélectionner

_SQLite_Startup ()
$Base_SQLite = _SQLite_Open($sqlite)

   _SQLite_Exec ($Base_SQLite, "CREATE TABLE IF NOT EXISTS liste (numero, nom, prenom, jourNaiss, moisNaiss, anneeNaiss, sexe, origine, profession, commentaire);")

   $fichier = FileOpen($File, 0)    ; fichier texte
  _SQLite_Exec($Base_SQLite, "Begin;")

   While 1
       $line = FileReadLine($fichier)
       If @error = -1 Then ExitLoop

    $split = StringSplit($line, "|")


        _SQLite_Exec($Base_SQLite, "INSERT INTO liste VALUES (" & _
                _SQLite_FastEscape($split[1]) & ", " & _
                 _SQLite_FastEscape($split[2]) & ", " & _
                _SQLite_FastEscape($split[3]) & ", " & _
                 _SQLite_FastEscape($split[4]) & ", " & _
                 _SQLite_FastEscape($split[5]) & ", " & _
                 _SQLite_FastEscape($split[6]) & ", " & _
                 _SQLite_FastEscape($split[7]) & ", " & _
                 _SQLite_FastEscape($split[8]) & ", " & _
                 _SQLite_FastEscape($split[9]) & ", " & _
                 _SQLite_FastEscape($split[10]) & ");")
   WEnd

   _SQLite_Exec($Base_SQLite, "Commit;")
   FileClose($fichier)
   _SQLite_Close()
_SQLite_Shutdown()
 
Les lignes _SQLite_Exec($Base_SQLite, "Begin;") et _SQLite_Exec($Base_SQLite, "Commit;") ont quelle utilité ?

D'autre part, j'aimerais faire une boucle pour éviter de coder la centaine de _SQLite_FastEscape($split[..]) & ", " & _ . J'ai tenté de le faire avec un for... Next... mais ça ne colle pas.

Je vous remercie de m'éclairer sur ces questions.

Re: [..] sqlite : boucle _SQLite_FastEscape($split[..]) & ",

Posté : lun. 15 juil. 2013 20:39
par mikell
J'avais fait ça une fois avec des valeurs stockées dans une array

Code : Tout sélectionner

$string = ""
For $i = 1 to $a[0]-1
      $string &= _SQLite_FastEscape($a[$i]) & ", "
Next
$string &= _SQLite_FastEscape($a[$a[0]])

_SQLite_Exec(-1, "INSERT INTO liste (.....) VALUES (" & $string & ");")
Pour le begin et commit, jchd en avait parlé, c'est pour optimiser l'entrée des instructions (je crois..) en tout cas au niveau rapidité c'est assez spectaculaire

Re: [..] sqlite : boucle _SQLite_FastEscape($split[..]) & ",

Posté : lun. 15 juil. 2013 21:57
par aulus
Merci Mikell,

Pouvez-vous m'expliquer la présence de la ligne codée après la boucle :

Code : Tout sélectionner

$string &= _SQLite_FastEscape($a[$a[0]])
 

Re: [..] sqlite : boucle _SQLite_FastEscape($split[..]) & ",

Posté : lun. 15 juil. 2013 22:25
par mikell
Dans mon exemple $a[0] représente le nombre d'éléments dans l'array, donc $a[$a[0]] étant le dernier élément de l'array cette dernière ligne c'est pour la syntaxe de la fin de l'expression

Code : Tout sélectionner

       _SQLite_Exec($Base_SQLite, "INSERT INTO liste VALUES (" & _
                _SQLite_FastEscape($split[1]) [color=#FF0000]& ", "[/color] & _
                 ......
                 _SQLite_FastEscape($split[9]) [color=#FF0000]& ", "[/color] & _
                 _SQLite_FastEscape($split[10]) [color=#FF0000]& ");")[/color]

Re: [..] sqlite : boucle _SQLite_FastEscape($split[..]) & ",

Posté : lun. 15 juil. 2013 22:36
par jchd
Perso, j'utilise des fonctions "raccourcies" pour faciliter la lisibilité : les X, Y et Z encapsulent respectivement chaînes, binaires et valeurs numériques. Les XX, YY et ZZ font pareil mais ajoutent une virgule avant.
► Afficher le texte
Ca donne des choses comme ça :
► Afficher le texte

Re: [..] sqlite : boucle _SQLite_FastEscape($split[..]) & ",

Posté : lun. 15 juil. 2013 22:50
par aulus
@Mikell
Ce $a[$a[0]] est des plus abscons pour moi. Je n'en comprenais pas le sens. Merci pour votre code qui fonctionne à merveille et m'évite une tripotée de lignes.

@jchd
Je prends note de l'idée pour l'avenir.

Merci à tous deux.