Probleme de recordset

Nirmak Messages postés 2 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 20 mai 2006 - 20 mai 2006 à 16:15
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 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

2 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
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
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
20 mai 2006 à 23:53
Salut Jack, BONJOUR Nirmak.

1/ http://www.vbfrance.com/reglement.aspx clause n°2 !!
2/ Ne serait-ce pas plus simple de passer par une bdd Access plutôt qu'un tableur Excel ?

++
mortalino
0
Rejoignez-nous