Nirmak
Messages postés2Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention20 mai 2006
-
20 mai 2006 à 16:15
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 2011
-
20 mai 2006 à 23:53
Voilà mon code :
Private Sub Commande3_Click()
Dim dbs As DAO.Database
Dim PathFic As String
Dim NomFic As String
Dim NomFicXLS As String
Dim NomTable As String
Dim iNom_dpt As String
Dim iNom_ville As String
Dim iNbr_hab As Integer
Dim i As Integer
Dim j As Integer
Dim sql As String
Dim num_dept As String
Dim rsetvar As Recordset
Dim tmp As String
Set dbs = CurrentDb
Set ClasseurXLS = CreateObject("Excel.application")
'Ouverture du classeur d'importation
ClasseurXLS.Workbooks.Open PathFic & "F:\JP\2005-06 OMGL3 S2 TM_2\IMPORT_EXPORT VILLES.xls"
'Set rs = dbs.OpenRecordset("SELECT NOM_VILLE FROM VILLES WHERE NOM_VILLE=iNom_ville;", dbOpenDynaset)
i = 2
Do While ClasseurXLS.cells(i, 1) <> ""
'Recuperation des données lignes par lignes
iNom_ville = ClasseurXLS.cells(i, 1)
iNom_dpt = ClasseurXLS.cells(i, 2)
iNbr_hab = ClasseurXLS.cells(i, 3)
'Recuperation du des villes étant déjà dans la base de données
sql = "SELECT NOM_VILLE FROM VILLES WHERE NOM_VILLE=iNom_ville;"
Set rsetvar = dbs.OpenRecordset(sql, dbOpenDynaset)
'Verification que la ville n'existe pas déjà dans la base de données
If rsetvar.RecordCount = 0 Then
sql = "SELECT N°_DéPARTEMENT FROM DéPARTEMENTS WHERE NOM_DéPARTEMENT=iNom_dpt"
Set rsetvar = dbs.OpenRecordset(sql, dbOpenDynaset)
'Determine si le departement existe déjà ou pas, et l'ajoute le cas echeant
If rsetvar.RecordCount = 0 Then
sql = "INSERT INTO DéPARTEMENTS (NOM_DéPARTEMENT) values ('" & iNom_dpt & "');"
dbs.Execute sql
End If
'Incrementation du nombre de changement apporte dans la base de données, ie le nombre de villes ajoutees
j = j + 1
sql = "INSERT INTO VILLES (N°_DéPARTEMENT,NOM_VILLE,NOMBRE_HABITANT_VILLE) values ('[SELECT DéPARTEMENTS.N°_DéPARTEMENT FROM DéPARTEMENTS WHERE NOM_DéPARTEMENT=iNom_dpt;]', '" & iNom_ville & "' , '" & iNbr_hab & "');"
'Insertion dans la base de donnees de la ville
dbs.Execute sql
End If
'Incrementation du numero de la ligne sous Excelle
i = i + 1
Loop
'Fermeture du classeur d'importation
ClasseurXLS.Workbooks.Close
'Affichage du nombre d'operation effectuee
MsgBox ("Importation des " & j & " données effectuée")
End Sub
C'est l'initialisation des recordset qui ne marche pas... Je ne suis pas une flêche en VB, certainement que c'est une erreur de débutant, mais ce problème me gène déjà depuis pas mal de temps. N'hésitez à demander des précisions sur le code si il y a quelque chose que vous ne comprenez pas. Merci de résoudre mon problème.
Nirmak
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 20 mai 2006 à 16:36
Salut
On veut bien t'aider, mais il faudrait peut-être nous dire quel est le problème .... (erreur, où ?)
Je te rappelle quand même quelques règles de programmation SQL répétées des centaines de fois sur ce forum :
- Les noms des champs comportant des caractères spéciaux (espace, accents, caractères non alphanumériques) doivent être encadrés de crochets [ et ]
- Quand les champs sont de type numérique, les valeurs des champs non pas d'encadrement
- Quand les champs sont de type texte, les valeurs des champs doivent être encadrés par des apostrophes '
- Quand les champs sont de type date, les valeurs des champs doivent être encadrés par des dièses #
D'autre part, toujours dans la catégorie syntaxe SQL : Dans un "Insert Into", soit tu utilises le not clé "Values" pour donner des valeurs fixes, soit tu utilises une sous requète "Select", mais pas les deux.
Tu aurais pu découvrir ça dans n'importe quelle source parlant de DB.
Pour être sûr d'avoir correctement inséré les données, il ne suffit pas de compter le nombres d'instructions, mais il faut demander à l'instruction Execute de te fournir le nombre d'enregistrements touchés par ta requète :
dbs.Execute sql, Nbre
Pour un Insert Into, le résultat ne donner que 1 ... sauf si la requète échoue, mais dans le cas d'un Delete, ce chiffre peut-être plus important.
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Champion du monde de boule de cristal - 2005 Le savoir est la seule matière qui s'accro