Page 1 sur 2
développement base de donnée sqlite et base sur excel
Publié : dim. 19/févr./2017 3:41
par YvesRossignol
Bonjour, je me suis lancé dans une troisième application utilisant des bases de données et j'ai besoin de conseil. Premièrement la quantité de données est assez importante. Il s'agit de donnée de géométrie pour des poutres. Il y a 30 colonnes de données par profilé. Le problème c'est que le fichier est un fichier excel. Je voudrais le convertir en sqlite mais je ne sais plus comment...
J'avais trouvé un utilitaire gratuit qui transformait de accbd (access) en sqlite mais différents problèmes m'on fait perdre ce logiciel. L'idée de base était de partir du xls de le transformer en csv de le lire ensuite en l'important avec access et de le transformer avec un convertisseur... mais j'en connais pas... ou une autre "trail" (route sommaire dans le bois en québécois).
Je veux faire la recherche automatique des bons profilés en fonction des cas de chargement. C'est 90% du travail de l'ingénieur en structure. Je veux le faire pour le canada, l'eurocode et le LRFD (américain) j'ai toutes les formules et je l'Ai déjà fait pour le canada et les USA sur mathcad...
vos idées messieurs seront les bienvenues. J'ai cherché cette semaine sur le web. J'ai cherché dans les documentations. mais nada... je suis dans le vide..
Merci de vos commentaires et conseils.
Je vous met un fichier excel sous dropbox...
https://www.dropbox.com/sh/8f5ky9uj06w6 ... nq8da?dl=0

Re: développement base de donnée sqlite et base sur excel
Publié : dim. 19/févr./2017 9:11
par Marc56
YvesRossignol a écrit :Bonjour, je me suis lancé dans une troisième application utilisant des bases de données et j'ai besoin de conseil. Premièrement la quantité de données est assez importante. Il s'agit de donnée de géométrie pour des poutres. Il y a 30 colonnes de données par profilé. Le problème c'est que le fichier est un fichier excel. Je voudrais le convertir en sqlite mais je ne sais plus comment...
Tes fichiers sont des tables uniques donc faciles à exporter.
30 colonnes c'est une toute petite base.
Excel, toutes versions exporte en en .CSV nativement (Enregistrer sous)
SQLite importe tout ce qui est en fichier plat (donc du .CSV)
Exemple d'import dans SQLite
Code : Tout sélectionner
CREATE TABLE ...
.separator ";"
.import <nom complet du fichier source> <nom de la table>
(le point initial est important, il indique qu'il s'agit d'une commande SQLite et non d'une commande SQL)
Autres solutions:
- Laisser les données dans les fichiers excel et les lire à partir du pilote ODBC Excel (que PB gère très bien).
- Si ton application est multiutilisateurs en réseau, importe dans une base PostgreSQL (que PB gère aussi en natif)

Re: développement base de donnée sqlite et base sur excel
Publié : dim. 19/févr./2017 10:37
par Marc56
Pour importer dans SQLite, tu trouveras des tas d'outils excellents, cependant
il est utile d'apprendre à le faire en mode manuel
Méthode rapide (= j'importe toutes les données dans des champs texte, ce qui me permet ensuite de traiter les nombres avec des séparateurs différents selon les pays).
La base de donnée s'appellera "bases.db" et les tables "bases" et "basew". Tu peux changer. (L'extension .db n'a pas d'importance)
Ouvrir avec un éditeur de texte le fichier .CSV exporté depuis excel
Copier la première ligne (entêtes)
Coller cette ligne dans nouveau fichier texte
Ajouter au début de la ligne
CREATE TABLE bases (
Ajouter à la fin de la ligne
)
À l'aide de la fonction rechercher/remplacer, remplacer
;
par
VARCHAR,
(espace VARCHAR virgule espace)
Même chose pour l'autre table
Sauvegarder ce fichier
Télécharger SQLite
http://www.sqlite.org/
Si windows Precompiled Binaries for Windows
sqlite-tools-win32-x86- ... .zip
Extraire sqlite3.exe dans le répertoire où sont les fichiers exportés
depuis la console lancer
sqlite3.exe <nom de la nouvelle base.db>
Au prompt coller la ligne CREATE TABLE...
Vérifier que la table est créée
.schema
Indiquer que le spérateur sera in ";"
.separator ";"
Importer le .csv
.import "baseS.csv" bases
Même chose pour l'autre table
.import "baseW.csv" basew
Vérifier que l'import est ok
select count(*) from bases;
Verifier par exemple une colonne
select dsg from bases;
quitter
.q
PS. Comme tous les codes que je poste: j'ai testé avant.

Re: développement base de donnée sqlite et base sur excel
Publié : dim. 19/févr./2017 10:53
par microdevweb
Bonjour,
La première chose à faire est de convertir ton fichier exel
Dans exel
--> Exporter
--> Modifier le type de fichier
--> Texte(séparateur: tabulation)
Ensuite voici une exemple de code
Code : Tout sélectionner
UseSQLiteDatabase()
; Création de la base de donnée
DbName.s="Db.sqlite"
CreateFile(0,DbName)
CloseFile(0)
OpenDatabase(0,DbName,"","")
req.s="CREATE TABLE myTable(id int,"
For i=1 To 32
req+"myColumn_"+Str(i)+"TEXT,"
Next
; J'enlève la dernière virgule
req=Left(req,Len(req)-1)
; je termine la requete
req+")"
; Création la table
If Not DatabaseUpdate(0,req)
MessageRequester("Sql Error 1",DatabaseError())
End
EndIf
; ouverture du fichier
OpenFile(0,"baseS.txt")
Txt.s=ReadString(0)
While Not Eof(0)
Txt.s=ReadString(0)
req="INSERT INTO myTable VALUES("
For i=1 To 33
req+"'"+StringField(Txt,i,Chr(9))+"',"
Next
; J'enlève la dernière virgule
req=Left(req,Len(req)-1)
; je termine la requete
req+")"
If Not DatabaseUpdate(0,req)
MessageRequester("Sql Error 2",DatabaseError())
End
EndIf
Wend
; Lecture de la db pour vérifié
req="SELECT * FROM myTable"
If Not DatabaseQuery(0,req)
MessageRequester("Sql Error 3",DatabaseError())
End
EndIf
While NextDatabaseRow(0)
Debug GetDatabaseString(0,1)
Wend
MessageRequester("Info","Convertion terminée")
CloseDatabase(0)
Re: développement base de donnée sqlite et base sur excel
Publié : dim. 19/févr./2017 11:31
par Marc56
J'y pense maintenant: Si les données ne sont utilisées par tes clients qu'en
lecture seule, il est peut-être inutile de les mettre en base de données ? une section data dans le programme est suffisante. Tu les travaillent ensuite dans un tableau.
(Tes données font 4 et 41 ko en csv, l'EXE ne sera donc pas très alourdi)

Re: développement base de donnée sqlite et base sur excel
Publié : dim. 19/févr./2017 11:57
par microdevweb
Une petit exemple qui copie en data dans le presse papier, après juste ctrl v et c'est joué
Code : Tout sélectionner
; ouverture du fichier
OpenFile(0,"baseS.txt")
Txt.s=ReadString(0)
i=0
req.s="Datasection"
While Not Eof(0)
Txt.s=ReadString(0)
req+" "+"Line_"+Str(i)+":"+Chr(13)+Chr(10)+"Data.s "
For i=1 To 33
req+Chr(34)+StringField(Txt,i,Chr(9))+Chr(34)+","
Next
;enlever la dernière virgule
req=Left(req,Len(req)-1)+Chr(13)+Chr(10)
i+1
Wend
req+"EndDatasection"
SetClipboardText(req)
MessageRequester("Info","Copier dans le presse papier")
Re: développement base de donnée sqlite et base sur excel
Publié : dim. 19/févr./2017 19:11
par YvesRossignol
Merci de vos commentaires
j'avais pensé mettre mes données en dans une section data.... mais vous avez vu la base pour les S (standard) et les W (semelle large = wild) mais j'ai aussi les fichiers pour les C, Les L, Les tubes ronds, carrés, etc... et ils non pas le même nombre de colonnes... je pense que ça va marcher quand même.
Yves
Re: développement base de donnée sqlite et base sur excel
Publié : dim. 19/févr./2017 19:14
par YvesRossignol
L,avantage pour moi de prendre SQlite:
1- je veux l'interfacer avec le prochain programme qui va calculer les propriétés de surfaces de formes géométriques (assemblages de poutres, plaques, etc...) et faire que je puisse les sauver dans une base de données...
2- J'aimerai apprendre sqlite plus tard un peu... pour le moment c'Est vraiment juste un convertisseur gratuit ou payant... je suis un dinosaure et je ne suis pas à l'aise avec la programmation en mode commande
Merci à tous..
Re: développement base de donnée sqlite et base sur excel
Publié : dim. 19/févr./2017 23:16
par YvesRossignol
Bonjour, j'ai essayé le code précédent pour construire db.sqlite mais toutes mes data se retrouve dans la colonne ID avec plein de ; entre chaque...
une idée.... je vais quand même vérifier que c'est bien le ; que cherchait le programme et non pas la virgule.
En passant, dans window, quand j'ouvre le csv, il y a des tabulateurs, mais quand je l'ouvre avec notepad++ il y a des ";"
mon fichier txt est dans le répertoire de ma dropbox.
encore merci!!!
Re: développement base de donnée sqlite et base sur excel
Publié : dim. 19/févr./2017 23:51
par YvesRossignol
il faut chercher cHR(59) et non pas CHR(9) car si on voit des HT horizontal tab, dans notepad++ on voit bien que c'est des ";"..
J'ajoute une très mince contribution car j'ai beaucoup de base de données à convertir...
Code : Tout sélectionner
UseSQLiteDatabase()
; Création de la base de donnée
Titre1$ = "Nom de la base de données"
Message1$ = "Entrer le nom de la base de données avec l'extension"
TexteParDefauts1$ = "Db.sqlite"
Resultat1$ = InputRequester(Titre1$, Message1$, TexteParDefaut1$)
DbName.s=Resultat1$
CreateFile(0,DbName)
CloseFile(0)
OpenDatabase(0,DbName,"","")
Titre2$ = "Nom de la table"
Message2$ = "Entrer le nom de la table"
TexteParDefauts2$ = "myTable"
Resultat2$ = InputRequester(Titre2$, Message2$, TexteParDefaut2$)
tempo$="CREATE TABLE "+Resultat2$+"(id int,"
; req.s="CREATE TABLE myTable(id int,"
req.s=tempo$
Titre2a$ = "Nom du prefixe des colonnes"
Message2a$ = "prefixe"
TexteParDefauts2a$ = "myColumn"
Resultat2a$ = InputRequester(Titre2a$, Message2a$, TexteParDefaut2a$)
Titre2b$ = "Combien de colonne"
Message2b$ = "nombre de colonne"
TexteParDefauts2b$ = "33"
Resultat2b$ = InputRequester(Titre2b$, Message2b$, TexteParDefaut2b$)
nbcolonne.d=Int(Val(Resultat2b$))
nbcol.i=Int(nbcolonne.d-1.0)
Debug Str(nbcolonne.d)
For i=1 To nbcol
req+Resultat2a$+Str(i)+"TEXT,"
; req+"myColumn_"+Str(i)+"TEXT,"
Next
; J'enlève la dernière virgule
req=Left(req,Len(req)-1)
; je termine la requete
req+")"
; Création la table
If Not DatabaseUpdate(0,req)
MessageRequester("Sql Error 1",DatabaseError())
End
EndIf
; ouverture du fichier
Titre3$ = "Nom du fichier texte d'entrée"
Message3$ = "Entrer le nom du fichier d'entree avec extension"
TexteParDefauts3$ = "base.txt"
Resultat3$ = InputRequester(Titre3$, Message3$, TexteParDefaut3$)
OpenFile(0,Resultat3$)
; OpenFile(0,"baseS.txt")
Txt.s=ReadString(0)
While Not Eof(0)
Txt.s=ReadString(0)
tempo2$="INSERT INTO "+Resultat2$+" VALUES("
req=tempo2$
; req="INSERT INTO myTable VALUES("
For i=1 To 33
req+"'"+StringField(Txt,i,Chr(59))+"',"
Next
; J'enlève la dernière virgule
req=Left(req,Len(req)-1)
; je termine la requete
req+")"
If Not DatabaseUpdate(0,req)
MessageRequester("Sql Error 2",DatabaseError())
End
EndIf
Wend
; Lecture de la db pour vérifié
req="SELECT * FROM "+Resultat2$
; req="SELECT * FROM myTable"
If Not DatabaseQuery(0,req)
MessageRequester("Sql Error 3",DatabaseError())
End
EndIf
While NextDatabaseRow(0)
Debug GetDatabaseString(0,1)
Wend
MessageRequester("Info","Convertion terminée")
CloseDatabase(0)
Re: développement base de donnée sqlite et base sur excel
Publié : lun. 20/févr./2017 1:09
par YvesRossignol
Oublier le code que je viens d'envoyer... J'ai mal compris certaines choses... je vais le corriger et le retourner. Désolé

Re: développement base de donnée sqlite et base sur excel
Publié : lun. 20/févr./2017 1:10
par falsam
En attendant j'en pose un ^^
Contrôlé avec SQLite Explorer
http://www.purebasic.fr/french/viewtopi ... 60#p177460
Code : Tout sélectionner
EnableExplicit
Define.s DataBaseName = "baseS.sqlite", TableName, Buffer, ReqSQL, ErrorSQL, ColNames, ColValues
Define.b FirstLine = #True
Define.i Database, MaxCol, Col
UseSQLiteDatabase()
;Création d'une base de donnée vierge si besoin
Database = ReadFile(#PB_Any, DataBaseName, #PB_File_SharedRead)
If Not Database
Database = CreateFile(#PB_Any, DatabaseName)
If Database
CloseFile(Database)
Else
MessageRequester("Erreur", "Impossible de créer un fichier")
End
EndIf
Else
CloseFile(Database)
EndIf
;Nom de la table à créer
TableName = "baseS"
;Ouverture du fichier csv correspondant
If ReadFile(0, TableName + ".csv")
;Ouverture de la base de données
Database = OpenDatabase(#PB_Any, DatabaseName, "", "", #PB_Database_SQLite)
While Eof(0) = 0
Buffer = ReadString(0)
If FirstLine = #True
;C'est la premiere ligne : Creation de la table
FirstLine = #False
MaxCol = CountString(Buffer, ";")
;Récupération des noms des colonnes
ColNames = "("
For Col = 1 To MaxCol + 1
ColNames + StringField(Buffer, Col, ";")
If Col <= MaxCol
ColNames + ","
EndIf
Next
ColNames + ")"
ReqSQL = "CREATE TABLE " + TableName + ColNames
DatabaseUpdate(Database, ReqSql)
Debug "Creation de la table " + TableName + " " + DatabaseError()
Debug "Requete de création " + ReqSQL
Else
;Ajout des enregistrements
MaxCol = CountString(Buffer, ";")
ReqSQL = ""
ColValues = "("
For Col = 1 To MaxCol + 1
ColValues + #DQUOTE$ + StringField(Buffer, Col, ";") + #DQUOTE$
If Col <= MaxCol
ColValues + ","
EndIf
Next
ColValues + ")"
ReqSql + "INSERT INTO " + TableName + ColNames + " VALUES " + ColValues
DatabaseUpdate(Database, ReqSql)
ErrorSQL = DatabaseError()
If ErrorSQL <> ""
Debug ErrorSQL
Debug ReqSQL
EndIf
EndIf
Wend
CloseFile(0)
Else
MessageRequester("Information","Impossible d'ouvrir le fichier!")
EndIf
Debug "Fin de traitement"
Re: développement base de donnée sqlite et base sur excel
Publié : lun. 20/févr./2017 1:20
par YvesRossignol
Et bien, je me pensais un peu plus avancé qu'un débutant mais franchement Falsam tu me dépasses de millions de km en avancement en pb.
Merci!
Je vais travailler à partir de ton code car j'ai toujours 8 bases à faire...
J'étais déjà impressionné par toi mais là, je suis sans mot.
Re: développement base de donnée sqlite et base sur excel
Publié : lun. 20/févr./2017 1:22
par YvesRossignol
en passant que veux dire les deux accents circonflexes... je suis québecois et peu habitué au langage comme ça...
je sais j'ai l'air con... mais je m'essaye.
Re: développement base de donnée sqlite et base sur excel
Publié : lun. 20/févr./2017 5:44
par Zorro
YvesRossignol a écrit :en passant que veux dire les deux accents circonflexes....
representent les yeux qui sourient ....
ça peut etre remplacé par ^_^
mais je pense qu'il peut aussi s'agir d'etonnement ( ^^ ) representent aussi les sourcils qui se relevent ....(perso c'est comme ça que je l'emploi )
quelques signification de smileyText
https://fr.wiktionary.org/wiki/Annexe:Binettes