Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

[VB6] ACCÉS À UNE BASE DE DONNÉES ACCESS EN ADO


Information sur le tutorial

Catégorie :Base de Donnees Date de création : 28/06/2005 12:51:37 Vu : 24 948 fois

Note :
8 / 10 - par 16 personnes
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (39)
Ajouter un commentaire et/ou une note

Description

un petit tuto pour vous apprendre comment se connecter en ADO à une base de données Access

Tutorial

Bienvenue dans ce tutorial qui, je l'espère, vous apprendra à vous connecter à une base de données Access en utilisant l'ADO.

 Petite explication rapide de l'ADO tout d'abord... ADO permet d'accéder à des données et de les manipuler. Les objets contenus dans ADO assurent la connexion à une source de données ainsi que la lecture, l'ajout, la mise à jour ou la suppression de données ( Merci Microsoft pour la definition...!).

Maintenant que les presentations sont faites, passons à l'accés à la base de données... Tout d'abord, il y a certaines references à cocher... dans le menu Projets - Références, Microsoft AtiveX Data Objects 2.x Library. Ensuite, il faut établir une connexion avec la base. Pour cela, on utilise l'objet 'connection' : 

   Dim con as ADODB.Connection
   Set con = New ADODB.Connection

Ensuite, il faut définir le pilote ainsi que la chaine de connexion :

   con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" Chemin de la base "

Puis, ouvrir la connexion :

   con.open

Si vous devez traiter une base de données assez grande et que vous ouvrez souvent votre connexion, je conseille de mettre tout ce que nous avons vu dans un module, et d'appeler à chaque fois le module. Par exemple si le module s'appele SeConnecter : 

   Call module1.SeConnecter(con

Voilà pour ce qui est de la connexion, passons désormais à la phase de manipulation des données. Pour cela, il faut utiliser des requêtes, de la même maniére que sous Access, avec insert into, update, delete, select ... .

Tout d'abord, déclarer la variable de type Recordset :

  Dim rs as ADODB.Recorset
  Set rs = New Recordset

Puis pour executer la requête : 

   rs.Open " select [nomduchamp] from [nomdelatable] where ..., con, AdopenDynamic, AdLockOptimistic

Et pour le résultat : res = rs![nomduchamp]

Il y a quelques propriétés à connaitre pour les résultats des Recordset :

rs.movefirst : Se place sur le premier enregistrement
rs.Movenext : Se place sur le prochain enregistrement
rs.Movelast : Se place sur le dernier enregistrement
rs.Moveprevious : Se place sur l'enregistrement précedent
rs.EOF : Fin des enregistrement (End of File)
rs.BOF : Début des enregistrements (Begin Of File)

rs.EOF et rs.BOF s'utilise surtout dans des boucles. Par exemple : 

   While rs.EOF = False
      list1.AddItem rs![nomduchamp]
   Wend

Pour des valeurs à l'interieur des requetes prises dans des textbox, des listbox ou autres, si vces données sont de la forme Text, il faut les presenter ainsi :

'" & Text1.Text & "',
Pour des Numériques : " & Text1.Text & "',
et pour les dates  # " &  Text1.Text  & " #.

Exemple :

rs.open "select * from matable where monchamp = '" & Text1.text & "';",con, AdOpenDynamic, AdLockOptimistic

Aprés avoir utilisé une requete, il faut la fermer... : rs.close

Et de meme pour la connexion : con.close

Et pour plus de sécurité, c'est à dire pour être sur que la connexion est bien fermé, faire : 
Set rs = Nothing 
Set con = Nothing

 
Voilà donc une des maniéres de se connecter à une base de données Access... Il en existe bien d'autres, mais j'espere pouvoir vous les présenter plus tard... En esperant que ce tutorial vous sera utile, bonne programmation!

Tof008

    

 

28 juin 2005 13:32:01 :
Correction de fautes
30 juin 2005 09:26:20 :
correction
signaler à un administrateur
Commentaire de mik67 le 28/06/2005 13:53:49

Bonne intiative que de suggérer ce tutorial !
Tout est clair et cela mérite d'être souligné ...
Le principal y est donc que demander de plus ! ;)

Bonne continuation...

Mika

signaler à un administrateur
Commentaire de NeT_SlipKnoT le 28/06/2005 15:43:18

Et bien voilà que tu te lances carrément dans les tutoriaux!
Quel boss ce tof008!

Très utile comme tutorial. A noter quand même que tu as oublié de mettre une référence à cocher: Microsoft DAO 3.51 Object Library ;-).

signaler à un administrateur
Commentaire de NeT_SlipKnoT le 29/06/2005 09:20:08

Euh désolé pour la référence, je me suis trompé, je voulais parler de celle là: Microsoft ADO Ext. 2.7 for DDL and Security .
A moins que cette référence ne soit pas nécessaire?

signaler à un administrateur
Commentaire de tof008 le 30/06/2005 11:24:35

Non, je ne pense pas que cette réference soit necessaire net_slipknot! Je pense que j'ai mis tout ce qu'il y a à cocher...
Si vous voyez ce tutorial, et que vous y trouvez une faute ou un oubli, n'hésitez pas à me le signaler...
Et n'hésitez pas à le noter surtout...! C'est mon premier tuto et j'aimerais savoir ce que vous en pensez!!!

signaler à un administrateur
Commentaire de Miss_Am le 04/07/2005 17:32:58

Honnêtement ton tutorial est bien fait et clair...
J'aurais juste une question à te poser.....Quand tu mets "adresse de la base"....peux-tu me donner un exemple...?
Parce que moi j'ai mis " C:\Mesdocs\Mabase.mdb "
Et ca me met qu'il attends la fin d'instruction....

signaler à un administrateur
Commentaire de Lynk Hirosue le 19/07/2005 10:30:25

Merci pour ce tuto ! Clair et précis. Je pense que ça va m'aider !

signaler à un administrateur
Commentaire de evaflore le 09/08/2005 16:18:08

pr un tuto ,c'en est vraiment un, clair concis précis et surtout simple un bonheur pour les débutantes comme moi merci à toi

signaler à un administrateur
Commentaire de Lemside le 20/08/2005 23:47:46

Ah c'est très bien pour l'idée du tutorial et puis c'est à assez clair ce que vous avez écrit, mais pourquoi personne ne veut parler de l'accès concurrentiel ou multiutilisateurs justement sous ACCESS et ADO???. Moi c'est là que je suis bloqués. Si vous êtes bien dans ça, je vous propose de le faire comme la suite de votre tutorial. en tout cas ça m'aiderais beaucoup. Merci

signaler à un administrateur
Commentaire de dev238 le 25/08/2005 19:02:03

c'était très bien expliqué.Bravo!
On peut mettre:
   Dim con as New ADODB.Connection
au lieu de
   Dim con as ADODB.Connection
   Set con = New ADODB.Connection
est ce que c'est possible? parce que ça fonctionne très bien avec moi.

signaler à un administrateur
Commentaire de guilleto le 02/09/2005 09:35:01

Bonjour à tous !

J'ai mis les références suivantes :
Microsoft ActiveX Data Objects (Multi-dimensional) 2.6 Library
Microsoft ActiveX Data Objects 2.0 Library

Et le code suivant :

'  Dim con As ADODB.Connection
'  Set con = New ADODB.Connection

  Dim con As New ADODB.Connection

  con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= E:\MonFichier.mdb"
  con.Open
  
'  Dim rs As ADODB.Recorset
'  Set rs = New Recordset
  Dim rs As New ADODB.Recordset

' IL PLANTE ICI ET INDIQUE erreur 3709 définiepar l'utilisateur ou par l'objet !
  rs.Open " select * from MonTyp where N4='F???02????????I??????????', con, AdopenDynamic, AdLockOptimistic"

  res = rs![N4]
  rs.Close
  con.Close
  
  Set rs = Nothing
  Set con = Nothing
End Sub

Et pourtant ça ne fonctionne pas !

Que dois-je faire pour que cela fonctionne correctement ?

Par avance merci !

Olivier

P.S. : C'est assez urgent !

signaler à un administrateur
Commentaire de hhafid le 13/09/2005 01:49:49

a mon avis il faut ajouter un module qui permet de remplir une grille avec une table ou une requete et le rafraichissement automatique

signaler à un administrateur
Commentaire de Lemside le 13/09/2005 15:11:56

Y'a-t-il quelqu'un qui peut m'aider sur l'accès mutltiutilisateur avec ADO et ACCESS. Par exemple en me filant un portion de code. Je pense surtout à TUNINGMAX qui m'a déjà donné quelques explications.

signaler à un administrateur
Commentaire de bouv le 23/09/2005 13:49:59

   While rs.EOF = False
      list1.AddItem rs![nomduchamp]
   Wend

Si tu ne met pas de rs.MoveNext tu n'en sors jamais
   Do While rs.EOF = False
      list1.AddItem rs![nomduchamp]
      rs.MoveNext
   Loop

Et pour le résultat : res = rs![nomduchamp]

N'oubliez jamais de vérifier la valeur du champs avec IsNull
If Not IsNull(rs![nomduchamp]) Then res = rs![nomduchamp]

Bonne prog
++

signaler à un administrateur
Commentaire de whatitis le 03/12/2005 15:41:09

Ce tutoriel eclaire un peu ma lanterne, mais l'exmeple ne fonctionne toujours pas.

Comment utiliser correctement la requête :
rs.Open " select [nomduchamp] from [nomdelatable] where ..., con, AdopenDynamic, AdLockOptimistic

en effet une erreur d'execution apparait

msg recu :
erreur d'execution 3709
impossible d'utiliser cette connexion pour effectuer cette opération
Elle est fermé ou non valide dans ce contexte.


merci d'avance...

signaler à un administrateur
Commentaire de bouv le 03/12/2005 19:37:07

Ta connexion est formée. Es-tu bien passé par :

con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" Chemin de la base "

con.open

++

signaler à un administrateur
Commentaire de whatitis le 04/12/2005 10:11:29

Oui, mais je ne vois pas comment utiliser la requette correctement.

signaler à un administrateur
Commentaire de whatitis le 04/12/2005 10:19:19

voila exactement mon code :

Dim con As ADODB.Connection
Dim rs As ADODB.Recordset

Private Sub Affiche_Click()
    Set con = New ADODB.Connection
    Set rs = New Recordset
    
    con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= C:\Documents and Settings\cyrille\Mes documents\Programmes Visual Basic\Videotheque\BD_Videotheque.mdb"
    con.Open
    rs.Open " select Titre from ChampsPrincipaux where ..., con, AdopenDynamic, AdLockOptimistic"
    res = rs!Titre
    
    rs.Close
    Set rs = Nothing
    Set con = Nothing
End Sub

signaler à un administrateur
Commentaire de bouv le 04/12/2005 10:49:04

Essai de remplacer

Dim con As ADODB.Connection
Dim rs As ADODB.Recordset

par

Dim con As New ADODB.Connection
Dim rs New As ADODB.Recordset

signaler à un administrateur
Commentaire de tof008 le 04/12/2005 21:14:16

Hello! Je vous demanderai juste de bien vouloir poster vos questions ou problêmes ne concernant pas directement mon tuto dans le forum... En effet, ceci est un tutorial et vous aurez plus de réponses à vos problêmes en postant un sujet!!

Merci à vous!!!

signaler à un administrateur
Commentaire de bouv le 05/12/2005 10:16:38

Il me semble que la question de whatitis est directement liée à l'utilisation de ton tuto...

signaler à un administrateur
Commentaire de NeT_SlipKnoT le 10/12/2005 15:02:32

Je crois qu'il t'a cassé tof008 ;-)

signaler à un administrateur
Commentaire de tof008 le 11/12/2005 16:39:41

Klr NeT_SlipKnot! Mais bon, il n'en reste pas moins que les questions pour les problêmes techniques se posent sur un forum, et pas dans une réponse à un tutorial...
Sinon à quoi servirait un forum???
Chaque chose a sa place...!lol!

signaler à un administrateur
Commentaire de AleksDev le 28/02/2006 16:02:28

Moi je veux bien un petite aide quand a l'utilisation du module,c'est à dire ce que l'on doit y mettre en variables ou references, jusk'a présent g travaillé en DAO ce qui me parraissait plus simple pour débuter...

Sinon je suis pas encore un pro en dvpmt,si je peux apporter ma contribution,  un ptit conseil pour indiquer le chemin de la base : con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= App.path & "\fichier.mdb"

"\Fichier.mdb" étant la base de donnée que vous aurez placé a la racine du programme, enfin comment dire,l'endroit ou vous enregistrez votre projet pour le moment ;)

signaler à un administrateur
Commentaire de mdoussouki le 07/03/2006 12:17:19

tres bien bonne discription merci

signaler à un administrateur
Commentaire de BarthOlivier le 17/03/2006 00:46:48

Je suis nouveau en ADO. Plus habitué au DAO j'ai des gros souci de compréhension ...

Sur le principe de connexion je comprend. Je suppose aussi que c'est normal que je ne puisse pas acceder a mes bases de données actuelles (DAO) avec les controles ADO alors je veux créer une nouvelle base mais là souci ....

en DAO c'est simple ou fait :

  Dim td As TableDef
  Dim db As Database
    
  Screen.MousePointer = vbHourglass
  'Set db = CreateDatabase(nom_base, dbLangGeneral, dbVersion30)
  If PASSWORD <> vbNullString Then
    Set db = CreateDatabase(nom_base, dbLangGeneral & ";pwd=" & PASSWORD, dbEncrypt)
  Else
    Set db = CreateDatabase(nom_base, dbLangGeneral, dbEncrypt)
  End If
  
  Set td = New TableDef
    Set f = New Field
        f.Name = "Version"
        f.Type = dbText
        td.Fields.Append f
    td.Name = "Version"
  db.TableDefs.Append td
  db.close

mais en ADO on fait comment ??? j'ai essayé de regarder mais je trouve pas de tuto claires ... Peut-etre trops habitué au DAO ?

ET je contredis ce que disent certains ... DAO c'est pas compliqué !!!!!! juste bientot obsolete ... lol

Une autre question... (et oui toujour la meme !!! ) ADO c'est vraiment plus rapide que DAO (j'utilse souvent des DBgrid et des CtrlDATA )


Merci de votre aide et de vos conseil :)

MisterMok

signaler à un administrateur
Commentaire de tof008 le 18/03/2006 13:08:46

Hello!
Pour ton probleme, je pense (mais sans en etre sur!) que tu peux créer des tables en utilisant des create table.... Je n'ai jamais essayé alors je ne peux pas vraiment te dire le résultat!!!
Pour l'ADO, mes profs me l'ont juste conseillé en me disant que c'était plus rapide, mais tu trouveras de nombreux défenseurs DAO sur ce forum qui te diront le contraire lol!
Désolé de ne pas pouvoir t'aider plus que ca et merci à tous pour vos commentaires!

signaler à un administrateur
Commentaire de sabiha93 le 31/05/2006 08:32:56

Bonjour,
Je viens de lire le tutorial et il est vraiment bien, rien a dire! Mais moi j'utilise une base de données SQL server, j'aimerais que l'on m'explique s'il y'a une différence et si oui laquelle? Car g chercher partout dans ce site et a chaque fois il est question de base Access!!
Merci pour votre aide.

signaler à un administrateur
Commentaire de thr_dreamer_57 le 02/07/2006 22:58:05

Salut tout le monde,
Je souhaite féliciter Tof008 pour ce tutorial très interressant qui résume tout ce qu'on a besoin pour se connecter à une base de données access car j'ai lu un tat d'articles sur l'ADO pour pouvoir comprendre mes ce tutorial est bcp plus précis, objectif et récapitulatif. merci encore ToF008.

Juste une petite question pour ceux qui peuvent m'aider :
je suis entrain de réaliser un petit code qui fé intervenir des clips flash (.swf graçe à Shockwave ocx) et j'arrive pas à les gérer genre stopper le clip ou faire démarrer un autre clip é je trouve pas si c fesable côté ActionScript ou côté VB. si ça vous interresse de m'aider je peux détailler plus ma question. merci

signaler à un administrateur
Commentaire de Devil and Angel le 13/07/2006 16:30:06

Pas mal pour un premier tuto.
Je l'ai utilisé mais je crois que tu as fait une faute ici:
con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" Chemin de la base " : tu as mis un " en trop.
Sinon il est super ton tuto

signaler à un administrateur
Commentaire de neimad58 le 01/08/2006 18:12:23

Bonsoir,

je suis un grand débutant en ADO.net et en VB  aussi d'ailleurs, et j'ai testé ton code mais il me le refuse au niveau de la requete SQL :

Private Sub CommandButton1_Click()

Module4.SeConnecter

  Dim rs As ADODB.Recordset
  Set rs = New Recordset

   rs.Open " select Nom from Personnes, con, AdopenDynamic, AdLockOptimistic"

   While rs.EOF = False
  
      UserForm3.ComboBox1.AddItem rs!Nom
   Wend

    rs.Close
    con.Close

Set rs = Nothing
Set con = Nothing

End Sub

Pourtant j'ai bien créé cette base et la connection a l'air de s effectuer sans problème dans le module 4.

S'agit t'il d'une erreur classique à corriger ? Y a t il une autre bibliotheque a ajouter ?

Merci pour les réponses,

Neimad58

signaler à un administrateur
Commentaire de tof008 le 07/08/2006 12:46:04

rs.Open " select Nom from Personnes", con, AdopenDynamic, AdLockOptimistic
Voila, il faut que tu fasse comme ca..; le guillemet se place à la fin de la requete, avant la connexion...

signaler à un administrateur
Commentaire de Coke Hax le 08/08/2006 17:05:54

Premièrement, merci de ce tutorial.

Deuxièmement, j'ai deux questions.

1) Est-ce que le " ; " est obligatoire, un peu comme dans les commandes de MySQL ?
2) Est-ce que la BDD se crée automatiquement si elle ne l'est pas ?

Merci d'avance,

Coke Hax

signaler à un administrateur
Commentaire de tof008 le 09/08/2006 11:16:14

De rien pour le tuto!

En réponse à tes questions

1: NON le ";" n'est pas obligatoire!
2 : la BDD ne se crée pas automatiquement!

bonne programmation

signaler à un administrateur
Commentaire de jpmaton le 11/12/2006 16:04:49

Très bon logiciel, mais petite question concernant les apostrophes des string$ à transférer :

'" & Text1.Text & "' , ... et si le Texte de Text1.Text contient ' par exemple un nom tel que "du Schmol d'Alcantara" , comment faire ?

Merci

signaler à un administrateur
Commentaire de tof008 le 11/12/2006 16:38:44

Tu utilise un replace(Text1.Text,"'","''"). il me semble que c'est ca. Tu peux aussi choisir de remplacer par un espace ou un caractere spécial. Par contre je ne suis plus sur que ce soit la syntaxe exacte. Une petite recherche sur le forum te donneras la réponse de suite!!!! Utilise les mots clés replace et apostrophe, ca devrait te sortir ca en moins de deux!
Good Luck

signaler à un administrateur
Commentaire de aimmeur le 07/12/2007 15:02:50

bonjour, j'ai essayé mais j'ai un souci.
Ma base ne s'ouvre pas
voilà mon code :
Dim con As New ADODB.Connection
Set con = New ADODB.Connection
con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= E:\LAR\ecole\CQP\BILAN\client.mdb; Persist Security Info=False"
con.Open (StatCqp)
j'ai fait juste cela pour voir si j'arrivais à ouvrir la base... ben non..
J'ai aussi essayé ca :
Set con = OpenDatabase("E:\LAR\ecole\CQP\BILAN\client.mdb")
rien non plus... à savoir que j'ai pratiquement tout déclaré en référence...
Suis à bout.
Merci pour un coup de main

signaler à un administrateur
Commentaire de ghost19bassem le 08/12/2007 22:33:13

mercie pour vos propositions, je souhaite que ce code fonctionne

signaler à un administrateur
Commentaire de ritchy01 le 29/01/2008 11:43:13

Bonjour et merci pour ton Tuto !
Quelqu'un sait il comment incrémenter une base access ligne par ligne puis colonne par colonne ?
Mon pb est le suivant : la 1° colonne tout va bien mais la 2° n'est pas réindexée a la 1° ligne ce qui me donne une base en "escalier"
Merci pour vos futures réponses :))
Stéphane

signaler à un administrateur
Commentaire de HansPrestat le 29/05/2008 17:43:10

Salut,
le code marche mais à condition de connaître le chemin de la base. or quand on le met en package pour un client la base a sans nul doute un autre chemin que celui inscrit par le développeur. Personnellement j'ai un lien ODBC sur ma base Access et la base n'est pas reconnu à cet endroit:
con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" Chemin de la base "

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Septembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
2930     

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,09 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.