Cet exemple de code permet d'importer des données depuis un fichier texte. La caractéristique de ce fichier texte est que les enregistrements sont mis les uns à la suite des autres sans séparateur. Nous ne connaissons que la taille des différents champs.
Un exemple de fichier texte :
0001WARIN Christophe0002BALTAZARD Marie
0004DUPONT Jacques 0005PIERRE Louis 0006HUGUES Hugo
0007PARQ Patrice
Pour importer un tel fichier, nous allons créer une table correspondante avec les mêmes champs, à savoir :
- Un champ Numero de type entier.
- Un champ Nom de type texte.
- Un champ Prénom de type texte
Puis dans un module, nous allons créer un type Enregistrement qui correspondra à une occurence dans notre fichier texte.
Private Type enregistrement
Num As String * 4
Nom As String * 10
Prenom As String * 10
End Type
Puis une procédure pour lire le fichier en accés direct :
Public Sub lireFichier(chemin As String)
On Error GoTo err
Dim Fichier As Integer, numenr As Long
Dim Client As enregistrement
Dim NbErreur As Long
Dim Stopper as boolean
stopper = False
Fichier = FreeFile
Open chemin For Random As Fichier Len = Len(Client)
numenr = 1
While Not EOF(Fichier) And Not stopper
Get 1, numenr, Client
With Client
If .Nom <> "" Then
NbErreur = NbErreur + Insererdanstable(CLng(.Num), _
.Nom, .Prenom, stopper)
End If
End With
numenr = numenr + 1
Wend
MsgBox "Insertion terminée avec : " & _
NbErreur & " erreur(s)", vbInformation, _
"Insertion..."
GoTo fin
err:
MsgBox "Echec" & vbCrLf & vbCrLf & _
err.Description, vbCritical, "Insertion..."
fin:
Close Fichier
End Sub
L'ouverture se fait en mode direct grâce à l'instruction Open for random. Ensuite, il faut passer à la même instruction la longueur en octet d'un enregistrement. Cela correspond à la longueur de la variable Client. Enfin, il faut lire chaque enregistrement grâce à l'instruction Get en passant le numéro de l'enregsitrement en question (NumEnr), jusqu'à atteindre la fin du fichier (fonction EOF).
Dans l'instruction Get, le premier paramètre correspond à l'octet de l'enregistrement concerné à lire. En général, on s'interresse à la globalité des données. La lecture commence donc à l'octet 1. Le second est, comme nous l'avons dit plus haut, le numéro de l'enregistrement. Enfin le troisième est une variable qui va recevoir les données.
Il faut ensuite rajouter une procédure qui enregistrera les données dans notre base de données :
Private Function Insererdanstable(VNumero As Long, _
VNom As String, VPrenom As String,ByRef Stopper as Boolean ) As Long
On Error GoTo err
Dim SQL As String
SQL = "INSERT INTO Tbl_Client (Numero,nom,prenom) VALUES " & _
"(" & VNumero & "," & AjouterQuote(VNom) & "," & _
AjouterQuote(VPrenom) & ")"
CurrentDb.Execute SQL
Exit Function
err:
Insererdanstable = 1
MsgBox "impossible d'insérer : " & vbcrl & _
VNumero & vbCrLf & _
VNom & vbCrLf & _
VPrenom & vbCrLf & vbCrLf & _
err.Description, vbCritical, "Insertion"
If MsgBox("voulez vous continuer ?", vbQuestion + vbYesNo, _
"Insertion") = vbNo Then stopper = True
End Function
Private Function AjouterQuote(Chaine As String) As String
Chaine = Replace(Chaine, Chr(0), "")
AjouterQuote = Chr(34) & Trim$(Replace(Chaine, Chr(34), _
Chr(34) & Chr(34))) & Chr(34)
End Function
En cas d'erreur d'insertion, un message demande à l'utilisateur s'il veut continuer. Si il répond Non, le booléen Stopper est fixé à true ce qui aura pour effet de faire sortir le programme de la boucle de lecture ici :
While Not EOF(Fichier) And Not stopper
Pour comprendre d'avantage le fonctionnement, je vous invite à télecharger le fichier zip qui contient l'ensemble de l'application.
|