Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Comment je dois faire pour remplir une table avec un fichier texte ?

2 réponses
Avatar
Claudetom
Bonsoir,
Je suis null pour l'utilisation de requete sous Vb.Net.
Je voudrais pouvoir remplir une table comportant plusieurs champs (20), avec
un fichier texte qui comporte dans chaque ligne un délimiteur (;) entre
chaque mots.
ex: mot1;mot2;mot3;etc.. ligne suivante identique mais il peut y'avoir des
blancs entre 2 (;)
il y'a une soixantaine de lignes du même format à intégrer dans la bd.
Par la suite, il ne faut pas pour les nouveaux imports effacer ceux
existants mais les ajouter ci ceux-ci n'existe pas dans la bd.
Faire cela sous VB en requête.

Merci

2 réponses

Avatar
Fabien Bezagu
Deux approches sont possibles :
- créer une source ODBC avec un pilote pour les fichiers texte. Dans ce cas,
c'est le pilote qui assure la séparation des champs et tout se fait en SQL.
- créer un StreamReader et, pour chaque ligne, utiliser la méthode Split de
la classe String.

Bonne chance

Fabien

"Claudetom" a écrit dans le message de news:
42e66fb9$0$25034$
Bonsoir,
Je suis null pour l'utilisation de requete sous Vb.Net.
Je voudrais pouvoir remplir une table comportant plusieurs champs (20),
avec un fichier texte qui comporte dans chaque ligne un délimiteur (;)
entre chaque mots.
ex: mot1;mot2;mot3;etc.. ligne suivante identique mais il peut y'avoir des
blancs entre 2 (;)
il y'a une soixantaine de lignes du même format à intégrer dans la bd.
Par la suite, il ne faut pas pour les nouveaux imports effacer ceux
existants mais les ajouter ci ceux-ci n'existe pas dans la bd.
Faire cela sous VB en requête.

Merci





Avatar
Claudetom
Bonjour,
j'essaye de remplir ma table mais j'y arrive pas ca fonctionne pas.
Comme j'y connais rien en ado.net (net vb) je dois surement me planter.
Si une personne pouvait m'aider me donner la correction :))
sur le net j'ai chercher mais rien trouvé (remplir une base avec un fichier
text)
Merci

Voici la procédure utilisé :

Dim StrConn As String
Private MaConn As New System.Data.OleDb.OleDbConnection
'declaration du DataSet
Private DtSet As New DataSet
'declaration du dataAdapter
Private AdapTTirages As New OleDb.OleDbDataAdapter("select * from
Tirages", MaConn)
Private AdapTRapports As New OleDb.OleDbDataAdapter("select * from
Rapports", MaConn)

Public Sub UpdateDatabase()
StrConn = "Provider=Microsoft.Jet.OLEDB.4.0;User ID­min;Data
Source=" & Application.StartupPath & "BaseEuroMillions.mdb" '& _
'********* Pilote ISAM introuvable ?? *************
'";Mode=Share Deny None;Jet OLEDB:Engine Type=5;Jet OLEDB:Database
Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2" & _
'";Jet OLEDB:Global Bulk Transaction=1;Jet OLEDB:Create System
Databaseúlse;Jet OLEDB:Encrypt Databaseúlse" & _
'";Jet OLEDB:Dont't Copy Locale on Compactúlse;Jet OLEDB:Compact
Without Replica Repairúlse;Jet OLEDB:SFPúlse"
'********* Pilote ISAM introuvable ?? *************
MaConn.ConnectionString = StrConn
Dim a() As String
Dim Count As Long

Me.StatusBar.Text = "Téléchargement vers " & AdrTelechargement
' open our database, in the same path than the application

MaConn.Open() 'connexion de la bd

Me.StatusBar.Text = "Unzipping " & Application.StartupPath &
"Base" & "euromillions.zip" & vbCrLf

Count = 0
Me.StatusBar.Text = "Importation " & Application.StartupPath &
"Base" & "Euromill.csv" & vbCrLf

If File.Exists(Application.StartupPath & "Base" & "Euromill.csv")
Then
enteteFichierValide2 =
"annee_numero_de_tirage;jour_de_tirage;date_de_tirage;" & _
"date_de_forclusion;boule_1;boule_2;boule_3;boule_4;" &
_
"boule_5;etoile_1;etoile_2;boules_gagnantes_en_ordre_croissant;"
& _
"etoiles_gagnantes_en_ordre_croissant;" & _
"nombre_de_gagnant_au_rang1_en_france;nombre_de_gagnant_au_rang1_en_europe;rapport_du_rang1;"
& _
"nombre_de_gagnant_au_rang2_en_france;nombre_de_gagnant_au_rang2_en_europe;rapport_du_rang2;"
& _
"nombre_de_gagnant_au_rang3_en_france;nombre_de_gagnant_au_rang3_en_europe;rapport_du_rang3;"
& _
"nombre_de_gagnant_au_rang4_en_france;nombre_de_gagnant_au_rang4_en_europe;rapport_du_rang4;"
& _
"nombre_de_gagnant_au_rang5_en_france;nombre_de_gagnant_au_rang5_en_europe;rapport_du_rang5;"
& _
"nombre_de_gagnant_au_rang6_en_france;nombre_de_gagnant_au_rang6_en_europe;rapport_du_rang6;"
& _
"nombre_de_gagnant_au_rang7_en_france;nombre_de_gagnant_au_rang7_en_europe;rapport_du_rang7;"
& _
"nombre_de_gagnant_au_rang8_en_france;nombre_de_gagnant_au_rang8_en_europe;rapport_du_rang8;"
& _
"nombre_de_gagnant_au_rang9_en_france;nombre_de_gagnant_au_rang9_en_europe;rapport_du_rang9;"
& _
"nombre_de_gagnant_au_rang10_en_france;nombre_de_gagnant_au_rang10_en_europe;rapport_du_rang10;"
& _
"nombre_de_gagnant_au_rang11_en_france;nombre_de_gagnant_au_rang11_en_europe;rapport_du_rang11;"
& _
"nombre_de_gagnant_au_rang12_en_france;nombre_de_gagnant_au_rang12_en_europe;rapport_du_rang12;"

Dim enteteFichLong As Integer = enteteFichierValide2.Length
Dim sFileName As String = Application.StartupPath.ToString &
"BaseEuromill.csv"
Dim fs As New System.IO.FileStream(sFileName, IO.FileMode.Open,
IO.FileAccess.Read)
Dim sRead As New System.IO.StreamReader(fs)
Dim strLine As String = sRead.ReadLine
'DEBUT Verification que le fichier est le bon format en
comparant l'entete sur une longueur définie
Dim EnteteFichier As String = Strings.Left(strLine,
enteteFichLong)

If EnteteFichier = enteteFichierValide2 Then 'Verifie que le
fichier est au bon format
Do Until strLine = ""
Debug.WriteLine(strLine)
strLine = sRead.ReadLine
If strLine = Nothing Then
sRead.Close()
fs.Close()
Exit Do 'Sub
End If
a = strLine.Split(";")

' Vérifie si le tirage existe
Dim rstTirages As OleDbCommand = MaConn.CreateCommand
Dim rstReaderTir As OleDbDataReader =
rstTirages.ExecuteReader

rstTirages.CommandText = ("SELECT * FROM Tirages Where
Tirage=" & a(0))
If rstReaderTir.Read = False Then
rstReaderTir.Close()
Count = Count + 1
' Ajout du tirage
Me.StatusBar.Text = "Ajout TIRAGE " & a(0) & " date
" & a(2)

Dim NewLigne As DataRow
With DtSet
' Création de la nouvelle ligne
NewLigne = DtSet.Tables("Tirages").NewRow
'affectation des valeurs
NewLigne(0) = Val(a(0)) 'Champs Tirage
NewLigne(1) = CDbl(Strings.Mid(a(2), 7, 2)) &
"/" & CDbl(Mid(a(2), 5, 2)) & "/" & CDbl(Mid(a(2), 1, 4)) 'Champs Date
NewLigne(2) = Val(a(4)) 'Champs B1
NewLigne(3) = Val(a(5)) 'Champs B2
NewLigne(4) = Val(a(6)) 'Champs B3
NewLigne(5) = Val(a(7)) 'Champs B4
NewLigne(6) = Val(a(8)) 'Champs B5
NewLigne(7) = Val(a(9)) 'Champs E1
NewLigne(8) = Val(a(10)) 'Champs E2
NewLigne(9) = CStr(a(11)) 'Champs B_croissant
NewLigne(10) = CStr(a(12)) 'Champs E_croissant
' Ajout de la ligne à la table
.Tables("Tirages").Rows.Add(NewLigne)
' Mise a jour de la base
MajBase(AdapTTirages, "Tirages")
End With
End If

' Vérifie si le rapport existe
Dim rstRapports As OleDbCommand = MaConn.CreateCommand
Dim rstReaderRap As OleDbDataReader =
rstRapports.ExecuteReader

rstRapports.CommandText = ("SELECT * FROM Rapports Where
Tirage=" & a(0))
If rstReaderRap.Read = False Then
rstReaderRap.Close() 'ferme le reader
' Ajout du rapport
Me.StatusBar.Text = "Ajout RAPPORTS " & a(0) & "
date " & a(2)
'affectation des valeurs
Dim NewLigne As DataRow
With DtSet
' Création de la nouvelle ligne
NewLigne = DtSet.Tables("Rapports").NewRow
'affectation des valeurs
NewLigne(0) = Val(a(0)) 'Champs Tirage
NewLigne(1) = CDbl(Strings.Mid(a(2), 7, 2)) &
"/" & CDbl(Mid(a(2), 5, 2)) & "/" & CDbl(Mid(a(2), 1, 4)) 'Champs Date
NewLigne(2) = Val(a(13)) 'Champs nbrR1
NewLigne(3) = Val(a(14)) 'Champs nbrR1e
NewLigne(4) = Val(a(15)) 'Champs rapR1 SOMMES
NewLigne(5) = Val(a(16)) 'Champs nbrR2
NewLigne(6) = Val(a(17)) 'Champs nbrR2e
NewLigne(7) = Val(a(18)) 'Champs rapR2 SOMMES
NewLigne(8) = Val(a(19)) 'Champs nbrR3
NewLigne(9) = Val(a(20)) 'Champs nbrR3e
NewLigne(10) = Val(a(21)) 'Champs rapR3 SOMMES
NewLigne(11) = Val(a(22)) 'Champs nbrR4
NewLigne(12) = Val(a(23)) 'Champs nbrR4e
NewLigne(13) = Val(a(24)) 'Champs rapR4 SOMMES
NewLigne(14) = Val(a(25)) 'Champs nbrR5
NewLigne(15) = Val(a(26)) 'Champs nbrR5e
NewLigne(16) = Val(a(27)) 'Champs rapR5 SOMMES
NewLigne(17) = Val(a(28)) 'Champs nbrR6
NewLigne(18) = Val(a(29)) 'Champs nbrR6e
NewLigne(19) = Val(a(30)) 'Champs rapR6 SOMMES
NewLigne(20) = Val(a(31)) 'Champs nbrR7
NewLigne(21) = Val(a(32)) 'Champs nbrR7e
NewLigne(22) = Val(a(33)) 'Champs rapR7 SOMMES
NewLigne(23) = Val(a(34)) 'Champs nbrR8
NewLigne(24) = Val(a(35)) 'Champs nbrR8e
NewLigne(25) = Val(a(36)) 'Champs rapR8 SOMMES
NewLigne(26) = Val(a(37)) 'Champs nbrR9
NewLigne(27) = Val(a(38)) 'Champs nbrR9e
NewLigne(28) = Val(a(39)) 'Champs rapR9 SOMMES
NewLigne(29) = Val(a(40)) 'Champs nbrR10
NewLigne(30) = Val(a(41)) 'Champs nbrR10e
NewLigne(31) = Val(a(42)) 'Champs rapR10 SOMMES
NewLigne(32) = Val(a(43)) 'Champs nbrR11
NewLigne(33) = Val(a(44)) 'Champs nbrR11e
NewLigne(34) = Val(a(45)) 'Champs rapR11 SOMMES
NewLigne(35) = Val(a(46)) 'Champs nbrR11
NewLigne(36) = Val(a(47)) 'Champs nbrR11e
NewLigne(37) = Val(a(48)) 'Champs rapR11 SOMMES
' Ajout de la ligne à la table
.Tables("Rapports").Rows.Add(NewLigne)
' Mise a jour de la base
MajBase(AdapTRapports, "Rapports")
End With
End If
Loop
sRead.Close()
fs.Close()
Me.StatusBar.Text = "Importation effectuée, " & CStr(Count)
& " nouveaux tirages."
Else
MessageBox.Show("Le format du fichier est différent !
Annulé..." & Application.StartupPath & "Base" & "Euromill.csv", "Format
invalide", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
sRead.Close()
fs.Close()
MaConn.Close()
End If
Else
MessageBox.Show("Le fichier n'existe pas ?", "Lecture fichier",
MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
End If
End Sub

Private Sub MajBase(ByVal Adapter As OleDbDataAdapter, ByVal table As
String)
MaConn.Open()
' Création CommandBuilder
'(genere automatiquement l'update entre le dataSet et la base de
donnée
Dim CmdBuild As OleDbCommandBuilder
CmdBuild = New OleDb.OleDbCommandBuilder(Adapter)
Adapter.UpdateCommand = CmdBuild.GetUpdateCommand()
Adapter.Update(DtSet, table)
MaConn.Close()
End Sub



"Fabien Bezagu" <fbezagu_at_novacor_dot_fr> a écrit dans le message de news:
%
Deux approches sont possibles :
- créer une source ODBC avec un pilote pour les fichiers texte. Dans ce
cas, c'est le pilote qui assure la séparation des champs et tout se fait
en SQL.
- créer un StreamReader et, pour chaque ligne, utiliser la méthode Split
de la classe String.

Bonne chance

Fabien

"Claudetom" a écrit dans le message de news:
42e66fb9$0$25034$
Bonsoir,
Je suis null pour l'utilisation de requete sous Vb.Net.
Je voudrais pouvoir remplir une table comportant plusieurs champs (20),
avec un fichier texte qui comporte dans chaque ligne un délimiteur (;)
entre chaque mots.
ex: mot1;mot2;mot3;etc.. ligne suivante identique mais il peut y'avoir
des blancs entre 2 (;)
il y'a une soixantaine de lignes du même format à intégrer dans la bd.
Par la suite, il ne faut pas pour les nouveaux imports effacer ceux
existants mais les ajouter ci ceux-ci n'existe pas dans la bd.
Faire cela sous VB en requête.

Merci