[VBA] Probléme ADO

Poupy -  
Polux31 Messages postés 7219 Statut Membre -
Bonjour,

J'ai quelques difficulté dans un tp sur l'utilisation de la programation orienté objet (ado, adox) sous access

Situation du probléme :

1 Table :
Client (CodeCli, nomCli, adrCli, villeCli)

Travail a faire :

1 réaliser le prog VB qui crée la table client [Fait]
2 réaliser le prog VB qui crée le formulaire de saisie des infos de la table [Fait]
3 réaliser le prog VB qui affiche dans la fenêtre d'excution tous les clients d'une ville quelconque saisie [en cours]
4 écrire une procédure qui rajoute le champ CA (chiffre d'affaire) d'un client et qui initialise ce champs à 100 [en cours]

Mon essaie pour la 3eme partie :

Sub RequetteVille()

Dim MaConnex As ADODB.Connection
Dim MonRS As ADODB.Recordset
Dim MaReq As String

Set MaConnex = New ADODB.Connection
Set MonRS = New ADODB.Recordset

MaReq = "SELECT nomCli, villeCli" & "FROM Client" & "WHERE villeCli = [Choisisez la ville]" & ";"

Debug.Print MaReq

End Sub

Cette procédure affiche : SELECT nomCli, villeCliFROM ClientWHERE villeCli = [Choisisez la ville];
Et non le résultat de cette requette SQL.

Mon essaie pour la 4eme partie :

Sub AjoutCA()

Dim MaConnex As ADODB.Connection
Dim MaTable As ADOX.Table
Dim MaColonne As ADOX.Column
Dim catalogue As ADOX.Catalog

Set MaConnex = CurrentProject.Connection
catalogue.ActiveConnection = MaConnex
Set MaTable = Tables!Client
Set MaTable.ParentCatalog = catalogue

Set MaColonne = New ADOX.Column
With MaColonne
.Name = "CA"
.Type = adVarWChar
.DefinedSize = 24
End With
MaTable.Columns.Append MaColonne

End Sub

Dans cette procédure, je n'arrive a faire correspondre la variable MaTable, à la table Client.

Voila, mon probléme.
Configuration: Windows Vista
Firefox 3.0.10

9 réponses

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour,

    normal car tu ne t'es pas connecté à ta base
    ' à adapter
    fichier = localisationdetabase & "\tabasemdb"
    Set source= New ADODB.Connection
    source;"Provider = Microsoft.Jet.OLEDB.4.0;" & _
    "data source=" & fichier & ";"
    ----
    et tu n'instancie ta requete:
    set requete= new Adodb.Recordset
    texte_sql="SELECT nomCli, vill....
    Set requete = source.Execute(texte_SQL)
    debug print requete
    il ya peut être des parenthèses ou un point (trou de mémoire!)
    -----
    ton texte SQL est faux: WHERE villeCli = [Choisissez la ville]"
    peut-^tre mais....:WHERE villeCli= [" & choisissez.. & "]
    ----
    d'autre part la déclaration Dim source as ADODB.connection et dim requete as ADODB.recorset n'est pas un modèle de portabilité: à chaque changement d'ordi il faut vérifier si la bbliothèque ADO est cochée et qu'on est pas sur une version antérieure d' Access

    emploie plutôt
    Dim Source As Object, Requete As Object
    ...
    Set Source = CreateObject("ADODB.Connection")
    ....
    Set Requete = CreateObject("ADODB.Recordset")

    Cordialement, Michel
    0
  2. Poupy
     
    le code que tu me propose est tellement approximatif qu'il ne m'a pas aidé ...

    D'autre parce que tu me propose :" Set requete = source.Execute(texte_SQL)
    debug print requete "

    ne marche pas
    0
    1. Polux31 Messages postés 7219 Statut Membre 1 204
       
      Et pourtant tout est clairement expliqué. Je pense que l'approximation n'est pas dans la solution proposée ...
      0
  3. Poupy
     
    dapré la solution proposé, j arrive a sa. solution que ne marche toujours pas. (erreur indiqué sur : set Monrs = source.excecute

    Sub requetebis()
    Dim MaConnex As Adodb.Connection
    Dim MonRs As Adodb.Recordset
    Dim MaReq As String

    Set MaConnex = New Adodb.Connection
    MaConnex = CurrentProject.Connection

    Set MonRs = New Adodb.Recordset
    MaReq = "SELECT nomCli, villeCli " & "FROM Client " & "WHERE villeCli = " & "Aubagne " & ";"
    Set MonRs = Source.Execute(MaReq)
    Debug.Print MonRs

    End Sub

    'Commentaire: currentProject.connexion = "Provider Microsoft.ACE.OLEDB.12.0;user id = admin; data source = .........
    End Sub
    0
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      Fais du macramé, ça ira mieux
      --
      0
  4. Poupy
     
    ... faut que je trouve ... j'ai pas le choix ..
    0
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      L'erreur se voit comme le nez au milieu de la figure...
      --
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Poupy
     
    Comparaison: ce qui fait / ce que tu ma proposé:

    fichier = localisationdetabase & "\tabasemdb"
    Set source= New ADODB.Connection
    source;"Provider = Microsoft.Jet.OLEDB.4.0;" & _
    "data source=" & fichier & ";"
    ----
    et tu n'instancie ta requete:
    set requete= new Adodb.Recordset
    texte_sql="SELECT nomCli, vill....
    Set requete = source.Execute(texte_SQL)
    debug print requete
    il ya peut être des parenthèses ou un point (trou de mémoire!)
    -----
    ton texte SQL est faux: WHERE villeCli = [Choisissez la ville]"
    peut-^tre mais....:WHERE villeCli= [" & choisissez.. & "]
    -------------------------------------------------------------------------------
    Sub requetebis()
    Dim MaConnex As Adodb.Connection
    Dim MonRs As Adodb.Recordset
    Dim MaReq As String

    Set MaConnex = New Adodb.Connection // Set source= New ADODB.Connection
    MaConnex = CurrentProject.Connection // source;"Provider = Microsoft.Jet.OLEDB.4.0;" & _ "data source=" & fichier & ";"

    Set MonRs = New Adodb.Recordset // set requete= new Adodb.Recordset
    MaReq = "SELECT nomCli, villeCli " & "FROM Client " & "WHERE villeCli = " & "Aubagne " & ";" // texte_sql="SELECT nomCli, vill....
    Set MonRs = Source.Execute(MaReq) // Set requete = source.Execute(texte_SQL)
    Debug.Print MonRs // debug print requete

    End Sub

    les erreurs les plus évidente sont parfois les plus dure a trouvé ...
    0
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      "Le code que tu me propose est tellement approximatif qu'il ne m'a pas aidé ..."

      Et tu crois que je vais t'aider en plus?
      Dém.... toi tout seul
      0
  7. Poupy
     
    désolé... je me suis un peu emporté, le fait que je n'arrive pas a avancé sur ce tp me stress un peu ...

    bref j'ai trouvé une de mes erreurs :
    Set MonRs = Source.Execute(MaReq) Devient Set MonRs = MaConnex.Execute(MaReq)

    Mais une erreur apparait m'indiquant l'opération n'est pas autorisé si l'objet est fermé.
    0
  8. Poupy
     
    Je doit maintenant corriger une erreur m'indiquant que mon Recordset n'est pas ouvert.

    J'ai donc rajouté :

    MonRs.Open MaReq, MaConnex, adOpenStatic

    et encore un echec ^^
    0
  9. Poupy
     
    Merci beacoup pour m'avoir indiquez des éléments de réponse. J'ai donc pu enfin trouvé la solution :

    Sub Marequete()

    Dim MaConnex As New Connection
    Dim MonRs As New Recordset
    Dim MaReq As String

    Set MaConnex = CurrentProject.Connection
    MaReq = "select * from client"
    Set MonRs.ActiveConnection = maConnex
    MonRs.Open MaReq, MaConnex

    MonRs.MoveFirst
    While MonRs.EOF <> True
    Debug.Print MonRs!nomCli & " " & MonRs!villeCli
    MonRs.MoveNext
    Wend

    End Sub
    0
  10. Poupy
     
    Je post une nouvelle foi car j'avais oublié un petit quelque chose ^^

    Sub RequetteVille()

    Dim maConnex As New Connection
    Dim monRs As New Recordset
    Dim maReq As String
    Dim vVille As String

    Set maConnex = CurrentProject.Connection
    maReq = "select * from client"
    Set monRs.ActiveConnection = maConnex
    monRs.Open maReq, maConnex

    vVille = InputBox("Indiquez la ville")
    monRs.MoveFirst
    While monRs.EOF <> True
    If monRs!villeCli = vVille Then
    Debug.Print monRs!nomCli & " " & monRs!villeCli
    End If
    monRs.MoveNext
    Wend

    End Sub
    0
    1. Polux31 Messages postés 7219 Statut Membre 1 204
       
      Et ben tu vois ... quand tu veux te donner la peine ... tu y arrives très bien ... ^^

      ;o)
      0