Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3027 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [RESOLU]Modifier table Access en Visual Basic

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[RESOLU]Modifier table Access en Visual Basic

n°2019108
greg360
Posté le 26-08-2010 à 12:13:31  profilanswer
 

Bonjour à tous, je suis débutant en Visual Basic et je suis déjà confronté a un problème :
J´ai crée une table dans Access que je souhaite remplir grâce a un code Visual Basic :
 

Code :
  1. Private Sub Form_Current()
  2. Dim strConnect, strsql As String
  3. strConnect = "DSN=MyDSN"
  4. Set objConn = New ADODB.Connection
  5. objConn.Open strConnect
  6. strsql = "INSERT INTO T_TEST(REF, DESIGN) VALUES(´ &  F_ARTICLE.AR_REF & ´, ´ & F_ARTICLE.AR_DESIGN & ´ ) ¨
  7. MsgBox ¨Fin¨
  8. End Sub


 
Le problème, c´est qu´à l´exécution, j´ai une erreur d´exécution ´-214721865 (80040e37´ :
[Simba][SimbaEngine ODBC DRIVER][DRM File Library]No such table or object.
 
Ce qui signifierait que ma table ¨T_TEST¨ n´existe pas ?
Si c´est le cas, comment puis-je corriger le problème svp ?
 
J'ai aussi une autre methode, celle de creer la table directement dans la fonction :
 

Code :
  1. Private Sub Form_Current()
  2. Dim strConnect, strsql As String
  3. Dim dbs As Database
  4. tbl As TableDef
  5. fld As Field
  6. strConnect = "DSN=MyDSN"
  7. 'strConnect = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\Demo\toto.accdb;"
  8. Set objConn = New ADODB.Connection
  9. objConn.Open strConnect
  10. tbl = dbs.CreateTableDef("T_TEST" )
  11. Set fld = tbl.CreateField("REF", dbText)
  12. Set fld = tbl.CreateField("DESIGN", dbText)
  13. strsql = "INSERT INTO T_TEST(REF,DESIGN) VALUES(' & F_ARTICLE.AR_REF & ',' & F_ARTICLE.AR_DESIGN & ')"
  14. objConn.Execute strsql
  15. MsgBox "fin"
  16. End Sub


 
mais je tombe sur une nouvelle erreur :
 
Erreur de compilation:
instruction incorrecte à l'extérieur d'un bloc de type
 
Si une bonne ame voulait bien m'aider svp  :ange:


Message édité par greg360 le 31-08-2010 à 16:24:44

---------------
Greg
mood
Publicité
Posté le 26-08-2010 à 12:13:31  profilanswer
 

n°2019130
greg360
Posté le 26-08-2010 à 14:07:31  profilanswer
 

Bon je me suis dit que ca venait sans doutes de la base T_TEST, access va la chercher dans la base de donnee connectee via ADODB et non pas en local.
Alors j'ai modifie mon code pour donner ca :
 

Code :
  1. Private Sub Form_Current()
  2. Dim strConnect, strsql As String
  3. Dim dbs As Database
  4. strConnect = "DSN=MyDSN"
  5. Set objConn = New ADODB.Connection
  6. Set dbs = CurrentDb()
  7. Set rst = dbs.OpenRecordset("T_TEST" )
  8. strsql = "INSERT INTO T_TEST(REF, DESIGN) VALUES(" & F_ARTICLE.AR_REF & ", " & F_ARTICLE.DESIGN & " )"
  9. objConn.Execute strsql
  10. MsgBox "fin"
  11. End Sub


 
Sauf que je retombe sur une erreur 424, objet requis ...
 
 
help svp !


---------------
Greg
n°2019143
Arcbitre
J'aime ben ça moi, c'est bon!
Posté le 26-08-2010 à 14:45:28  profilanswer
 

Salut,
 
 

Code :
  1. Set dbs = CurrentDb()
  2.     If dbs Is Nothing Then
  3.         MsgBox "Bd non ouverte"
  4.         Exit Sub
  5.     End If


Pour voir si la database est bien connectée.
 
 
Après, moi j'utilise DAO. C'est bien plus simple.
 

Code :
  1. Dim dbs As DAO.Database
  2. Dim objRs As DAO.Recordset
  3. Dim objRs As DAO.Recordset
  4.         Set dbs = OpenDatabase("chemin\database.mdb" )
  5.        
  6.     If dbs Is Nothing Then
  7.         MsgBox "Bd non ouverte"
  8.         Exit Sub
  9.     End If
  10.    Set objReq = dbs.CreateQueryDef("", "Text de ma requete SQL" )
  11.    Set objRs = objReq.OpenRecordset


 
L'objet recordset contient le resultat de la requete (requete SELECT par ex.).
 

n°2019156
greg360
Posté le 26-08-2010 à 15:00:30  profilanswer
 

Merci pour ta réponse,  
je ne rentre pas dans la condition de test de dbs, donc elle est bien connectée, mais j'ai un message d'erreur au niveau de la requete sql (erreur 242 objet requis)


---------------
Greg
n°2019180
Arcbitre
J'aime ben ça moi, c'est bon!
Posté le 26-08-2010 à 15:46:16  profilanswer
 

Dans la doc MSDN:

Code :
  1. 'Définit le nom de la source de données de type fichier
  2.   strDSN = "FILEDSN=MyDatabase.dsn"
  3.   'Crée l'instance de l'objet Connection et ouvre une connexion à une base de données
  4.   Set cn = Server.CreateObject("ADODB.Connection" )
  5.   cn.Open strDSN
  6.   'Définit l'instruction SQL, SELECT
  7.   strSQL = "INSERT INTO Customers (FirstName, LastName) VALUES ('Jose','Lugo')" 
  8.   'Utilise la méthode Execute pour envoyer une requête SQL à la base de données
  9.   cn.Execute(strSQL)


 
Il doit te manquer l'ouverture de ta connexion.
 

n°2019307
greg360
Posté le 27-08-2010 à 10:51:54  profilanswer
 

Salut, je crois avoir résolu le problème de la connexion, mon maître de stage ne veut pas que je passe par le DSN, dont j'utilise OLEDB..
 
Le code qui suit est fonctionnel pour l'instant, mais comment je peux le tester pour savoir si la connexion s'est bien effectuée ?
 

Code :
  1. Private Sub From_Current()
  2. Dim strConnect As String
  3. strConnect = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\Demo\toto.accdb"
  4. objConn.Open strConnect
  5. MsgBox "fin"
  6. End Sub



---------------
Greg
n°2019362
Arcbitre
J'aime ben ça moi, c'est bon!
Posté le 27-08-2010 à 13:39:27  profilanswer
 


objCom est un objet. Suffit de voir s'il est valide:
 
    If objConn Is Nothing Then
        MsgBox "Raté!"
        Exit Sub
    End If
 
 
 

n°2019365
greg360
Posté le 27-08-2010 à 13:50:15  profilanswer
 

Merci !


---------------
Greg
n°2019386
greg360
Posté le 27-08-2010 à 15:05:24  profilanswer
 

Donc je teste la valeur de objConn et je ne rentre pas dans la condition, donc c'est bon, mais l'erreur 424 objet requis est toujours présente a cette ligne ci :
 

Code :
  1. Private Sub From_Current()
  2. Dim strConnect As String
  3. strConnect = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\Demo\toto.accdb"
  4. objConn.Open strConnect
  5. If objConn Is Nothing Then
  6. MsgBox "fail"
  7. End If
  8. strsql  = "INSERT INTO T_TEST(REF,DESIGN) VALUES(" & F_ARTICLE.AR_REF & "," & F_ARTICLE.AR_DESIGN & " )"
  9. objConn.Execute (strsql)
  10. MsgBox "fin"
  11. End Sub


---------------
Greg
n°2019411
Arcbitre
J'aime ben ça moi, c'est bon!
Posté le 27-08-2010 à 15:46:49  profilanswer
 

Code :
  1. strsql  = "INSERT INTO T_TEST (REF,DESIGN) VALUES (" & F_ARTICLE.AR_REF & "," & F_ARTICLE.AR_DESIGN & " )"


 
Essaie avec cette synthaxe ci-dessus.
 
Sinon, passa ta requête en dur, sans variable, pour être sûr de la synthaxe.

mood
Publicité
Posté le 27-08-2010 à 15:46:49  profilanswer
 

n°2019419
greg360
Posté le 27-08-2010 à 15:55:11  profilanswer
 

Ça fonctionne avec des valeurs en dur, c'est donc un problème de syntaxe de la requête SQL. F_ARTICLE est une table ODBC attache. Si je remplace "F_ARTICLE" par "[Liste articles]" qui est la table qui est remplie avec F_ARTICLE,j'ai une nouvelle erreur : "2465 NomDuDSN ne trouve pas le champ "|" auquel il est fait référence dans votre expression"  
Je suis sur que c'est une erreur complètement nulle, mais en tout est nouveau pour moi (je passe de programmation C# sous emacs a access ...)


---------------
Greg
n°2019426
Arcbitre
J'aime ben ça moi, c'est bon!
Posté le 27-08-2010 à 16:17:12  profilanswer
 

Je crois que la synthaxe, c'est [Table!Champ] (point d'exclamation en séparateur, pas un pipe).

n°2019429
FlorentG
Unité de Masse
Posté le 27-08-2010 à 16:24:32  profilanswer
 

Voire [Table]![Champ] si je me souviens bien [:petrus dei]

n°2019448
greg360
Posté le 27-08-2010 à 16:57:41  profilanswer
 

Oui c’était bien ça le problème, une erreur de syntaxe dans la requête. Mais maintenant j'ai une erreur au moment de l’exécution de cette requête :
 
"aucune valeur donnée pour un ou plusieurs des paramètres requis"


---------------
Greg
n°2020011
greg360
Posté le 31-08-2010 à 09:10:07  profilanswer
 

Après avoir bien réfléchi ce week-end, j'ai trouve le problème, et c'est un problème complètement stupide...
 
La table F_ARTICLE est sur le DSN et je m'y connecte via ADO, mais la table T_TEST est une table que j'ai créé dans Access, donc je dois m'y connecter avec une autre strConnect.
 
Mais je ne sais pas comment je peux faire pour me connecter a 2 sources différentes .. Et surtout comment faire pour faire un execute(strsql) en utilisant 2 variables de connexion ?
 

Code :
  1. Private Sub Form_Current()
  2. Dim strConnect, strConnect2, strsql As String
  3. Dim dbCPTA As ADODB.Connection
  4. strConnect = "DSN=MyDSN"
  5. strConnect2 = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Demo\toto.accdb"
  6. Set dbCPTA = New ADODB.Connection
  7. dbCPTA.Open = strConnect
  8. strsql = "INSERT INTO T_TEST (REF,DESIGN) VALUES (F_ARTICLE.AR_REF,F_ARTICLE.AR_DESIGN)"
  9. dbCPTA.Execute (strsql)
  10. dbCPTA.Close
  11. Set dbCPTA = Nothing
  12. MsgBox "Fin"
  13. End Sub


 
 
J'ai teste la syntaxe ci dessus dans un SELECT avec 1 seule source et c'est celle ci qui fonctionne. La question que je me pose, c'est, comment je peux faire pour faire un open de strConnect2 ? Refaire un Set dbCPTA = New ADODB.Connection ?


---------------
Greg
n°2020015
greg360
Posté le 31-08-2010 à 10:04:18  profilanswer
 

Je pense avoir trouvé un moyen de me connecter au DSN et a ma base access :
 

Code :
  1. Private Sub Form_Current()
  2. Dim strConnect, strConnect2 As String
  3. Dim strsql As String
  4. Dim dbCPTA As ADODB.Connection
  5. Dim dbCPTA2 As ADODB.Connection
  6. Dim var_ref As String
  7. Dim var_design As String
  8. strConnect2 = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\Demo\toto.accdb;"
  9. strConnect = "DSN=MyDSN"
  10. Set dbCPTA = New ADODB.Connection
  11. Set dbCPTA2 = New ADODB.Connection
  12. dbCPTA.Open strConnect
  13. dbCPTA2.Open strConnect2
  14. strsql = "SELECT F_ARTICLE.AR_REF AS var_ref, F_ARTICLE.AR_DESIGN AS var_design FROM F_ARTICLE"
  15. dbCPTA.Execute (strsql)
  16. MsgBox var_ref
  17. MsgBox var_design
  18. strsql = "INSERT INTO T_TEST (REF,DESIGN) VALUES (F_ARTICLE.AR_REF,F_ARTICLE.AR_DESIGN)"
  19. dbCPTA.Execute (strsql)
  20. dbCPTA.Close
  21. Set dbCPTA = Nothing
  22. dbCPTA2.Close
  23. Set dbCPTA2 = Nothing
  24. MsgBox "fin"
  25. End Sub


 
Le seul problème pour l'instant, c'est que je ne peux pas voir les valeurs de var_ref et var_design, les msgbox sont vides..
Comment faire pour checker leur valeur ?


---------------
Greg
n°2020097
greg360
Posté le 31-08-2010 à 15:07:11  profilanswer
 

Problème résolu, en parfait noobie, je ne connaissait pas l'existence des recordset ;)
 
Je ne met pas encore la bannière "[RESOLU]" car j'aurais encore qqes questions plus tard !


---------------
Greg
n°2020132
greg360
Posté le 31-08-2010 à 16:00:42  profilanswer
 

Le problème de modification de table via code vb est résolu :) merci a tous de m'avoir aidé
 
Edit : je joins quand meme le code résolu :p
 

Code :
  1. 1.Private Sub Form_Current()
  2. 2.
  3. 3.Dim strConnect, strConnect2 As String
  4. 4.Dim strsql As String
  5. 5.Dim dbCPTA As adodb.Connection
  6. 6.Dim dbCPTA2 As adodb.Connection
  7. 7.
  8. 8.'declaration des recordsets
  9. 9.Dim rst As New adodb.Recordset
  10. 10.Dim rst2 As New adodb.Recordset
  11. 11.
  12. 12.'ouverture + connection au DSN "MyDSN"
  13. 13.strConnect = "DSN=MyDSN"
  14. 14.Set dbCPTA = New adodb.Connection
  15. 15.dbCPTA.Open strConnect
  16. 16.
  17. 17.'ouverture + connection à la BDD
  18. 18.Set dbCPTA2 = New adodb.Connection
  19. 19.strConnect2 = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\Demo\toto.accdb;"
  20. 20.dbCPTA2.Open strConnect2
  21. 21.
  22. 22.'reset de la table T_TEST
  23. 23.DoCmd.SetWarnings False
  24. 24.DoCmd.RunSQL "DELETE * FROM T_TEST"
  25. 25.DoCmd.SetWarnings True
  26. 26.
  27. 27.'récupération des champs necessaires dans le recordset
  28. 28.rst.Open "SELECT F_ARTICLE.AR_REF ,F_ARTICLE.AR_DESIGN  FROM F_ARTICLE", dbCPTA
  29. 29.rst.MoveFirst
  30. 30.
  31. 31.'boucle d'insertion des valeurs du recordset dans la table vide T_TEST
  32. 32.While Not (rst.EOF)
  33. 33.    strsql = "INSERT INTO T_TEST (REF,DESIGN) VALUES ('" & rst(0) & "', '" & rst(1) & "')"
  34. 34.    dbCPTA2.Execute (strsql)
  35. 35.    rst.MoveNext
  36. 36.Wend
  37. 37.
  38. 38.'récupération des champs de T_TEST dans un autre recordset
  39. 39.rst2.Open "SELECT T_TEST.REF,T_TEST.DESIGN FROM T_TEST", dbCPTA2
  40. 40.rst2.MoveFirst
  41. 41.
  42. 42.'boucle d'affichage et de test de la table T_TEST
  43. 43.While Not (rst2.EOF)
  44. 44.    MsgBox "REF : " & rst2(0) & " DESIGN :" & rst2(1) & "."
  45. 45.    rst.MoveNext
  46. 46.Wend
  47. 47.
  48. 48.'fermeture du recordset
  49. 49.rst.Close
  50. 50.'fermeture de la connexion au DSN
  51. 51.dbCPTA.Close
  52. 52.'suppression de l'objet dbCPTA
  53. 53.Set dbCPTA = Nothing
  54. 54.
  55. 55.'fermeture du recordset
  56. 56.rst2.Close
  57. 57.'fermeture de la connexion à la BDD
  58. 58.dbCPTA2.Close
  59. 59.'suppression de l'objet dbCPTA2
  60. 60.Set dbCPTA2 = Nothing
  61. 61.
  62. 62.
  63. 63.MsgBox "fin"
  64. 64.
  65. 65.End Sub


Message édité par greg360 le 31-08-2010 à 16:33:49

---------------
Greg

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [RESOLU]Modifier table Access en Visual Basic

 

Sujets relatifs
[ACCESS] Rafraichissement tables liés avec requêtesModifier un template CSS
Créer une table dans Access à partir d'un tableau[ACCESS] [RESOLU] Problème de doublon récalcitrant
[BO] Table comparison qui ne renvoie pas les updateMoyen le plus simple de modifier/remplacer ?
Access, impossible d'atteindre nouvel enregistrementProbleme de compilation visual c++ 2008
[RESOLU] Modifier timeout pour un mysql_query() ??? 
Plus de sujets relatifs à : [RESOLU]Modifier table Access en Visual Basic


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR