[R] Création fichier SQLite et connexion internet
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
[R] Création fichier SQLite et connexion internet
Bonjour,
Je viens de m'apercevoir d'un drôle de phénomène. Lorsque je crée un fichier SQLite par les fonctions d'AutoIt , ce fichier se crée bien si mon PC est connecté à Internet. Si je le déconnecte d'Internet, le fichier SQLite ne se crée pas ! Or mon programme ne fait nullement appel à une connexion Internet, je n'utilise que les fonctions relatives à SQLite (_SQLite_Startup ; _SQLite_Exec ) .
Comment expliquer une chose pareille ?
Je viens de m'apercevoir d'un drôle de phénomène. Lorsque je crée un fichier SQLite par les fonctions d'AutoIt , ce fichier se crée bien si mon PC est connecté à Internet. Si je le déconnecte d'Internet, le fichier SQLite ne se crée pas ! Or mon programme ne fait nullement appel à une connexion Internet, je n'utilise que les fonctions relatives à SQLite (_SQLite_Startup ; _SQLite_Exec ) .
Comment expliquer une chose pareille ?
Modifié en dernier par aulus le mer. 12 févr. 2014 12:52, modifié 2 fois.
- jchd
- AutoIt MVPs (MVP)

- Messages : 2284
- Enregistré le : lun. 30 mars 2009 22:57
- Localisation : Sud-Ouest de la France (43.622788,-1.260864)
- Status : Hors ligne
Re: [..] création fichier SQLite et connexion internet
Voir l'aide de _SQLite_Startup. En pratique copier la DLL qui convient (x86 ou x64) dans un répertoire adapté pour éviter le téléchargement.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Re: [..] création fichier SQLite et connexion internet
S'i vous voulez parler de SQLite3.dll, je l'ai placé dans le dossier contenant l'exécutable, ainsi que dans le dossier Windows\System32 et même dans le dossier Windows\SysWOW64. Je me demande pourquoi l'exécutable ne le trouve pas.
Existe-t-il une DLL spécifique pour 32 bits et une spécifique pour 64 bits ? Si oui, où les trouve-t-on ?
Si je compile en 32 bits sur un PC 64 bits, où dois-je placer la DLL ? dans System32 ou dans SysWOW64 ?
Je vous remercie de m'éclairer sur ces questions.
Dans Exécuter de Windows, j'ai lancé : regsvr32 sqlite3.dll
J'ai obtenu le message : "Le module SQLite3.dll peut ne pas être compatible avec la version que vous exécutez. Vérifiez que le module est compatible avec une version x86 (32 bits) ou x64 (64 bits) de regsvr32.exe" Ce message apporte-t-il un éclaircissement ?
Existe-t-il une DLL spécifique pour 32 bits et une spécifique pour 64 bits ? Si oui, où les trouve-t-on ?
Si je compile en 32 bits sur un PC 64 bits, où dois-je placer la DLL ? dans System32 ou dans SysWOW64 ?
Je vous remercie de m'éclairer sur ces questions.
Dans Exécuter de Windows, j'ai lancé : regsvr32 sqlite3.dll
J'ai obtenu le message : "Le module SQLite3.dll peut ne pas être compatible avec la version que vous exécutez. Vérifiez que le module est compatible avec une version x86 (32 bits) ou x64 (64 bits) de regsvr32.exe" Ce message apporte-t-il un éclaircissement ?
- Tlem
- Site Admin

- Messages : 11818
- Enregistré le : ven. 20 juil. 2007 21:00
- Localisation : Bordeaux
- Status : Hors ligne
Re: [..] Création fichier SQLite et connexion internet
Une partie du code serait utile pour essayer de déterminer le problème.
Thierry
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Re: [..] Création fichier SQLite et connexion internet
Le code fonctionne bien, lorsqu'il y a connexion à internet. Je suis convaincu que c'est le fait que le programme ne trouve pas le fichier SQLite3.dll sur mon disque dur qui fait qu'il ne fonctionne pas. Ayant mis cette dll dans le dossier de l'exécutable, dans le dossier windows\system32 et dans le dossier windows\SysWOW64, je ne vois plus ce qu'il faut faire. Merci de m'aider à trouver la solution :
Est-ce que j'oublie une fonction conduisant l'exécutable à chercher la dll sur le disque dur ?
Code : Tout sélectionner
#include <SQLite.au3>
#include <SQLite.dll.au3>
$File = FileOpenDialog("...")
if $File <> "" Then
Local $dat = $File
Local $sqlite = "fichier.SQLITE"
_SQLite_Startup ()
$Base_SQLite = _SQLite_Open($sqlite)
If FileRead($sqlite) = "" Then
SplashTextOn("", "Création de la base...", 280, 55, -1, -1, 49)
_SQLite_Exec ($Base_SQLite, "CREATE TABLE IF NOT EXISTS liste (numero integer, n, p, d, Pn, Pp, Mn, Mp, Cn, Cp,Type);")
Local $fichier = FileOpen($dat, 0) ; fichier texte
_SQLite_Exec($Base_SQLite, "Begin;")
Local $line
Local $split[161]
While 1
$line = FileReadLine($fichier)
If @error = -1 Then ExitLoop
$split = StringSplit($line, "|")
Local $array_ligne[$split[0]+1]
$array_ligne[0] = $split[0]
$array_ligne[1] = $split[1]
$array_ligne[2] = $split[2]
$array_ligne[3] = ...
...
_SQLite_Exec($Base_SQLite, "INSERT INTO liste (numero, n, p, d, Pn, Pp, Mn, Mp, Cn, Cp, Type) VALUES (" & _
_SQLite_FastEscape($array_ligne[1]) & ", " & _
_SQLite_FastEscape($array_ligne[2]) & ", " & _
...
_SQLite_FastEscape($array_ligne[11]) & ");")
WEnd
_SQLite_Exec($Base_SQLite, "Commit;")
FileClose($fichier)
endif
endif
- Tlem
- Site Admin

- Messages : 11818
- Enregistré le : ven. 20 juil. 2007 21:00
- Localisation : Bordeaux
- Status : Hors ligne
Re: [..] Création fichier SQLite et connexion internet
Bonsoir. Essayez de mettre le paramètre $iForceLocal de la fonction _SQLite_Startup à 1 et profitez en pour spécifier le chemin de la DLL. 
Si vous comptez mettre votre script sous forme d'exe, il vous faudra évidemment inclure cette DLL lors de la compilation et l'extraire au moment voulu vers le dossier qui convient.
Si vous comptez mettre votre script sous forme d'exe, il vous faudra évidemment inclure cette DLL lors de la compilation et l'extraire au moment voulu vers le dossier qui convient.
Thierry
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
- mikell
- Spammer !

- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: [..] Création fichier SQLite et connexion internet
" If #include <SQLite.dll.au3> is included the SQLite version is check. If older, download will occur."
Essaye de commenter cet include, ou de prendre la version la plus récente de la dll ici
Et la dll, je la mettrais dans le dossier du script pour éviter les emmerdes vu que c'est le 1er endroit où AutoIt regarde
Essaye de commenter cet include, ou de prendre la version la plus récente de la dll ici
Et la dll, je la mettrais dans le dossier du script pour éviter les emmerdes vu que c'est le 1er endroit où AutoIt regarde
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
- jchd
- AutoIt MVPs (MVP)

- Messages : 2284
- Enregistré le : lun. 30 mars 2009 22:57
- Localisation : Sud-Ouest de la France (43.622788,-1.260864)
- Status : Hors ligne
Re: [..] Création fichier SQLite et connexion internet
Virer l'include et spécifier le chemin de la dll, car FileOpenDialog change le répertoire par défaut.
Faire aussi ce que dit Tlem.
C'est quoi ce test exactement ? Si la base fait 2 Gb, on va vraiment lire 2 Gb pour savoir si elle esiste ?
Préciser le type des colonnes lors de la création de la table et le respecter si on veut éviter les surprises. Ainsi numero est de type integer mais on y stocke des chaînes. Si numero se veut un identificateur unique alors autant en faire la clé primaire.
A quoi sert $array_ligne ?
Faire aussi ce que dit Tlem.
Code : Tout sélectionner
If FileRead([b]$sqlite[/b]) = "" ThenPréciser le type des colonnes lors de la création de la table et le respecter si on veut éviter les surprises. Ainsi numero est de type integer mais on y stocke des chaînes. Si numero se veut un identificateur unique alors autant en faire la clé primaire.
A quoi sert $array_ligne ?
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Re: [..] Création fichier SQLite et connexion internet
Bonjour à tous et merci pour tous ces conseils et toutes ces indications.
1. j'ai viré #include <SQLite.dll.au3> en le commentant
2. j'ai téléchargé la dernière version de SQLite3.dll que j'ai placé dans le dossier du script
3. j'ai ajouté dans mon code :
Résultat du test : que je sois connecté à internet ou que je ne le sois pas, j'obtiens l'erreur "SQLite3.dll Can't be Loaded".
@tlem
J'inclus la dll dans le pack de distribution de mon programme. Cela convient-il ?
@ jchd
Je vais réfléchir à vos remarques...
1. j'ai viré #include <SQLite.dll.au3> en le commentant
2. j'ai téléchargé la dernière version de SQLite3.dll que j'ai placé dans le dossier du script
3. j'ai ajouté dans mon code :
Code : Tout sélectionner
Local $sLocalSQLiteDll = @ScriptDir & "\sqlite3.dll"
Local $sSQliteDll = _SQLite_Startup($sLocalSQLiteDll, False, 1)
If @error Then
MsgBox($MB_SYSTEMMODAL, "SQLite Error", "'SQLite3.dll' Can't be Loaded!")
Exit -1
EndIf
@tlem
J'inclus la dll dans le pack de distribution de mon programme. Cela convient-il ?
@ jchd
Je vais réfléchir à vos remarques...
Re: [..] Création fichier SQLite et connexion internet
Et que donne ça ?
Code : Tout sélectionner
IF NOT FileExists($sLocalSQLiteDll) Then Exit MsgBox(16, "", "SQLite3.dll not found in " & @ScriptDir)Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
- jchd
- AutoIt MVPs (MVP)

- Messages : 2284
- Enregistré le : lun. 30 mars 2009 22:57
- Localisation : Sud-Ouest de la France (43.622788,-1.260864)
- Status : Hors ligne
Re: [..] Création fichier SQLite et connexion internet
Code : Tout sélectionner
#AutoIt3Wrapper_UseX64=n ;(Y/N) Use AutoIt3_x64 or Aut2Exe_x64. Default=N
; si l'on copie sqlite3.dll et sqlite3_x64.dll dans le répertoire @ScriptDir
; alors ce code DOIT fonctionner en x86 ou x64 sans y changer quoi que ce soit
#include <SQLite.au3>
#include <Constants.au3>
Local $sLocalSQLiteDll = @ScriptDir & "\sqlite3.dll"
Local $sSQliteDll = _SQLite_Startup($sLocalSQLiteDll, True, 1)
If @error Then
MsgBox($MB_SYSTEMMODAL, "SQLite Error", "'SQLite3.dll' Can't be Loaded!")
Exit -1
Else
MsgBox($MB_SYSTEMMODAL, "SQLite status", $sSQliteDll & " loaded." & @LF & "SQLite3 v" & _SQLite_LibVersion() & " subsystem ready.")
EndIf
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
- Tlem
- Site Admin

- Messages : 11818
- Enregistré le : ven. 20 juil. 2007 21:00
- Localisation : Bordeaux
- Status : Hors ligne
Re: [..] Création fichier SQLite et connexion internet
Effectivement si le script est lancé en x64 sans spécifier la version de la dll Sqlite3 à utiliser, cela pouvait probablement poser problème, mais dans l'exemple ci-dessus, quel est l’intérêt de copier Sqlite3_x64.dll si la directive #AutoIt3Wrapper_UseX64=n est spécifiée ou si l'utilisation de la version x32 est explicitement indiqué ?
Edit : Je viens de contrôler et même si la dll x86 est explicitement spécifiée, le lancement ou la compilation du script en x64 redirige sur l'utilisation de la dll x64 !
Donc soit on rajoute la directive #AutoIt3Wrapper_UseX64=n ou avec la nouvelle version d'AutoIt #pragma compile(x64, false) pour compiler/lancer le script exclusivement en x86 et dans ce cas seule la dll x32 sera nécessaire, sinon il faut rajouter les 800Ko de la version x64.
Edit : Je viens de contrôler et même si la dll x86 est explicitement spécifiée, le lancement ou la compilation du script en x64 redirige sur l'utilisation de la dll x64 !
Donc soit on rajoute la directive #AutoIt3Wrapper_UseX64=n ou avec la nouvelle version d'AutoIt #pragma compile(x64, false) pour compiler/lancer le script exclusivement en x86 et dans ce cas seule la dll x32 sera nécessaire, sinon il faut rajouter les 800Ko de la version x64.
Thierry
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Re: [..] Création fichier SQLite et connexion internet
J'ai lancé vos 2 tests qui se sont révélés réussis. La dll est bien trouvée et bien chargée.
La solution était la ligne : #AutoIt3Wrapper_UseX64=n qui manquait à mon code, en accompagnement de la déclaration de la localisation de la dll dans la fonction Local $sSQliteDll = _SQLite_Startup($sLocalSQLiteDll, False, 1)
Je suis très heureux de cette réussite et vous remercie tous pour l'intérêt que vous avez porté à mes difficultés, et la gentillesse d'avoir consacré de votre temps à les résoudre.
La solution était la ligne : #AutoIt3Wrapper_UseX64=n qui manquait à mon code, en accompagnement de la déclaration de la localisation de la dll dans la fonction Local $sSQliteDll = _SQLite_Startup($sLocalSQLiteDll, False, 1)
Je suis très heureux de cette réussite et vous remercie tous pour l'intérêt que vous avez porté à mes difficultés, et la gentillesse d'avoir consacré de votre temps à les résoudre.


