développement base de donnée sqlite et base sur excel

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
YvesRossignol
Messages : 133
Inscription : lun. 28/mars/2016 19:09

développement base de donnée sqlite et base sur excel

Message 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

:oops: :?
Yves Rossignol
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: développement base de donnée sqlite et base sur excel

Message 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)

:wink:
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: développement base de donnée sqlite et base sur excel

Message par Marc56 »

Pour importer dans SQLite, tu trouveras des tas d'outils excellents, cependant il est utile d'apprendre à le faire en mode manuel :wink:

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.
8)
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: développement base de donnée sqlite et base sur excel

Message 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)

Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: développement base de donnée sqlite et base sur excel

Message 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)

:wink:
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: développement base de donnée sqlite et base sur excel

Message 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")
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
YvesRossignol
Messages : 133
Inscription : lun. 28/mars/2016 19:09

Re: développement base de donnée sqlite et base sur excel

Message 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
Yves Rossignol
YvesRossignol
Messages : 133
Inscription : lun. 28/mars/2016 19:09

Re: développement base de donnée sqlite et base sur excel

Message 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..
Yves Rossignol
YvesRossignol
Messages : 133
Inscription : lun. 28/mars/2016 19:09

Re: développement base de donnée sqlite et base sur excel

Message 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!!!
Yves Rossignol
YvesRossignol
Messages : 133
Inscription : lun. 28/mars/2016 19:09

Re: développement base de donnée sqlite et base sur excel

Message 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)
Yves Rossignol
YvesRossignol
Messages : 133
Inscription : lun. 28/mars/2016 19:09

Re: développement base de donnée sqlite et base sur excel

Message 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é

:oops: :?
Yves Rossignol
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: développement base de donnée sqlite et base sur excel

Message 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"
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
YvesRossignol
Messages : 133
Inscription : lun. 28/mars/2016 19:09

Re: développement base de donnée sqlite et base sur excel

Message 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.
Yves Rossignol
YvesRossignol
Messages : 133
Inscription : lun. 28/mars/2016 19:09

Re: développement base de donnée sqlite et base sur excel

Message 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.
Yves Rossignol
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: développement base de donnée sqlite et base sur excel

Message 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
Répondre