Manipulation de BD Access avec Visual Basic [edit : + onglets]

Manipulation de BD Access avec Visual Basic [edit : + onglets] - VB/VBA/VBS - Programmation

Marsh Posté le 18-04-2002 à 12:32:17    

Salut,
 
je suis actuellement en stage et j'ai besoin d'utiliser Visual Basic pour manipuler des bases de données Access. Pour moi l'idéal serait de pouvoir faire avec visual basic des requetes avec la syntaxe SQL sur les BD Access. Donc j'aimerai savoir si c possible, et si oui quelle méthode utiliser... j'aimerais éviter d'utiliser ODBC etc... juste charger les fichiers Access et faire des requete dessus...
 
donc si vous pouviez m'éclairer, me dire si c possible, me mettre sur des pistes ca serait cool :)
 
merci d'avance ! :)

 

[jfdsdjhfuetppo]--Message édité par Jerome le 21-04-2002 à 14:03:32--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 18-04-2002 à 12:32:17   

Reply

Marsh Posté le 18-04-2002 à 12:34:17    

C'est possible.
 
j'ai pas le temps de t'expliquer maintenant, mais dès que j'ai le temps (apres avoir bouffé), je te donnerai un peu plus d'infos (en gros, il faut utiliser les ADO).

 

[jfdsdjhfuetppo]--Message édité par mareek--[/jfdsdjhfuetppo]


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 18-04-2002 à 12:37:13    

ok, merci, ca serait pas mal que tu m'expliques en 2 mots le principe :)
 
c lourd a mettre en oeuvre ou pas ?

Reply

Marsh Posté le 18-04-2002 à 16:07:13    

hop ;)

Reply

Marsh Posté le 18-04-2002 à 16:31:35    

Première chose, dans les références de ton projet, ajoute les 2 bibliothèques suivantes:
-Microsoft ActiveX Data Objects 2.x Libray
-Microsoft ActiveX Data Objects Recorset 2.x Libray
 
ensuite:
 

  • pour se connecter :


dim m_AdoCnn As adodb.Connection
Set m_AdoCnn = New adodb.Connection
m_AdoCnn.Provider = "Microsoft.Jet.OLEDB.4.0"
m_AdoCnn.ConnectionString = dbName
m_AdoCnn.CursorLocation = adUseNone
m_AdoCnn.Open

 
 
dbname est le chemin du fichier mdb (ex: "c:\temp\base.mdb" )
 

  • pour faire un select:


Dim qry as string
Dim rs As New adodb.Recordset
   
qry = "select * from table"
rs.Open qry, m_AdoCnn, adOpenDynamic, m_ADOLockType, adCmdText
   
While Not rs.EOF
  ....
  nom=rs(Nom)
  'lecture du recordset
  ...
  rs.MoveNext
Wend
rs.Close

 
pour la signification des attributs de la fonction rs.open, reporte toi à l'aide de VB
 

  • pour faire une requète de type action(ici un delete):


m_AdoCnn.Execute "delete from table where nom='marcel'"
 
 
si c'est pas tres clair, n'hésite pas à me poser des questions et à regarder dans l'aide de VB.


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 18-04-2002 à 17:52:58    

ah ben merci bcp ! :) c exactement ce que je voulais :)
 
mais je v en profiter pour te poser qques questions :)
dans les librairies dispos, j'en ai plusieurs du type :
Microsoft ActiveX Data Objects 2.x Libray  
je prends laquelle, la Microsoft ActiveX Data Objects 2.7 Libray  ? ou alors ca ne change rien ?
 
sinon, comment puis-je récupérer dynamiquement la liste des tables d'une base Access puis la liste des champs d'une table ?
 
et pour finir, est-il possibile de faire des applications utilisant des onglets avec Visual Basic, j'imagine que oui mais je ne sais pas quel composant il faut charger ni comment l'utiliser ;)
 
en tout cas merci, c vraiment sympa de ta part de m'aider :)

Reply

Marsh Posté le 18-04-2002 à 18:26:48    

Jerome a écrit a écrit :

ah ben merci bcp ! :) c exactement ce que je voulais :)
 
mais je v en profiter pour te poser qques questions :)
dans les librairies dispos, j'en ai plusieurs du type :
Microsoft ActiveX Data Objects 2.x Libray  
je prends laquelle, la Microsoft ActiveX Data Objects 2.7 Libray  ? ou alors ca ne change rien ?



 
oui, prends la dernière, si j'ai écris 2.x c'est que ça peut varier selon ta version de windows.
 

Citation :


sinon, comment puis-je récupérer dynamiquement la liste des tables d'une base Access puis la liste des champs d'une table ?


 
désolé, je sais pas faire. d'ailleurs, je suis pas sur que ça soit possible.
 

Citation :

et pour finir, est-il possibile de faire des applications utilisant des onglets avec Visual Basic, j'imagine que oui mais je ne sais pas quel composant il faut charger ni comment l'utiliser ;)


 
Pour les onglets, utilise les SStab (ils sont mieux que les tabstrip), c'est le composant "Microsoft Tabbed Dialog Control 6.0 (SP5)".
 
Voila, c'est tout pour aujourd'hui, bonne soirée  :hello:

 

[jfdsdjhfuetppo]--Message édité par mareek--[/jfdsdjhfuetppo]


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 18-04-2002 à 18:40:10    

C cool tout ca,
Dans le meme genre est-ce que quelqu'un sait comment recuperer dans une chaine la ligne numero i d'une table de access,  
parce que je galere un peu avec l'aide VB qui dit de passer par un recordset, y doit y avoir plus simple

Reply

Marsh Posté le 18-04-2002 à 19:50:08    

encore merci mareek, pour les tables et les champs c pas trop grave si je trouve pas, il me fallait surtt une réponse pour les onglets, donc c parfait !
 
bonne soirée a toi ! :)

Reply

Marsh Posté le 20-04-2002 à 19:31:23    

:pt1cable:  
Petit melange qui pourra peut-être t'aider.
'Référence
Microsoft AtiveX Data Objects 2.5 Library (msado15.dll)
Microsoft ADO Ext. 2.5 For DLL and Security (msadoX.dll)
 
' Ouverture de la base de donnée  
Private conAccess As New ADODB.Connection
Private sConnectionString As String
 
With conAccess
           
    ' Positionnement du moteur de curseur côté client
    .CursorLocation = adUseClient
             
    ' Le provider est MSDataShape, afin de bénéficier de la puissance des
    ' Data Shape (cf.ADO)
    ' Le fournisseur de données est précisé par la propriété "Data Provider"
    .Provider = "MSDataShape.1"
             
    ' Ouverture de la connexion
    sConnectionString = "Data Provider = Microsoft.Jet.OLEDB.4.0 ;" & _
                        "Data Source = " & sFileName
    .Open sConnectionString
 
End with
' Lecture de la liste des tables de la base
Dim TablesList As New ADODB.RecordSet
Set TablesList = conAccess.OpenSchema(adSchemaTables)
 
'Création d'une requête
Dim sQuery as String
Dim rs As ADODB.Recordset 'Recordset
 
' Création de la requête
sQuery = "SELECT * FROM TableName" 'Par exemple
 
' Création du Recorset
Set rs = New ADODB.Recordset
 
'Exécution de la requête (Voir l'aide en ligne pour les paramètres)
rs.Open sQuery, conAccess, adOpenKeyset, adLockReadOnly, adCmdText
 
'Le résultat se trouve dans le recordset 'rs'
 
'Lecture du RecordSet
Dim sChamp As String
 
With rs
    If .RecordCount <> 0 Then
        'Positionnement sur le premier enregistrement
        .MoveFirst
        Do
            'Lecture du champ désiré
            ' Il est possible de rechercher une valeur dans un champ à
            'l'aide de la méthode Find (rs.find)
            sChamp = rs.Field("Nom du champ" ).Value
            'Positionnement sur l'enregistrement suivant
            .MoveNext
            'Sortie sur le dernier enregistrement
        Loop Until .Eof
        'Fermeture du RecorSet
        .Close
    End If
End with
 
Good luck

Reply

Marsh Posté le 20-04-2002 à 19:31:23   

Reply

Marsh Posté le 21-04-2002 à 01:01:33    

c tjrs bon a prendre ! merci également :)

Reply

Marsh Posté le 21-04-2002 à 13:25:07    

encore une question ;)
 
mareek> pkoi les onglets avec SStab sont mieux que les tabstrip ?

Reply

Marsh Posté le 22-04-2002 à 10:46:15    

Jerome a écrit a écrit :

encore une question ;)
 
mareek> pkoi les onglets avec SStab sont mieux que les tabstrip ?  




 
Je crois que les sstab sont plus souples d'utilisation que les tabstrip et ont plus de fonction (comme les onglets sur 2 lignes par exemple) En fait, comme je n'utilise plus les tabstrip, je me rappelle plus exactement pourquoi ils ont moins bien :D .
 
bonne chance pour la suite.  :hello:


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 22-04-2002 à 12:27:54    

ok, je viens d'essayer les 2, avec les ssTab ca roule tout seul, avec les tabStrip je dois pas tout comprendre ;) donc va pour les ssTab ! ;)
 
maintenant niveau interface j'ai tout ce qu'il faut, je v pouvoir m'attaquer a la BD et appliquer t conseils :)
 
merci !
a+

Reply

Marsh Posté le 22-04-2002 à 15:05:51    

ca commence... ;)
 
j'essai de me connecter mais j'ai un message d'erreur qui m'indique : "Run-time error '3706' ADO n'a pas pu trouver le fournisseur spécifié"
 
voici mon code

Citation :


    Sdl$ = Chr$(13) + Chr$(10)
    Dim m_AdoCnn As ADODB.Connection
    Set m_AdoCnn = New ADODB.Connection
    m_AdoCnn.Provider = "Microsoft.Jet.OLEDB.4.0"
    m_AdoCnn.ConnectionString = "C:\jerome\tests\bd1\films.mdb"
    m_AdoCnn.CursorLocation = adUseNone
    m_AdoCnn.Open
 
    Dim qry As String
    Dim rs As New ADODB.Recordset
     
    qry = "select * from films"
    rs.Open qry, m_AdoCnn, adOpenDynamic, m_ADOLockType, adCmdText
     
    While Not rs.EOF
        txtRes.Text = txtRes.Text & Sdl & rs(Nom)
        'lecture du recordset
        rs.MoveNext
    Wend
    rs.Close


 
d'après le debugger ca pose prbl au niveau du "m_AdoCnn.Open"
 
une idée ? ;)

 

[jfdsdjhfuetppo]--Message édité par Jerome le 22-04-2002 à 15:07:41--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 22-04-2002 à 15:30:59    

Le fichier films.mdb existe-t-il ?


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 22-04-2002 à 15:34:14    

oui oui, il existe

Reply

Marsh Posté le 22-04-2002 à 20:57:26    

ca y est ! ca marche :)
2 choses, j'ai refais tout ca chez moi et j'avais plus l'erreur que j'avais tout à l'heure avec la version du boulot, demain je v y mettre la mienne ca réglera pas mal de prbl ;)
 
Je sais pas si ca peut être source de prbl mais au boulot j'ai Microsoft ActiveX Data Objects 2.0 Libray alors qu'ici j'ai la 2.7...
 
Sinon j'ai eu d'autres prbl après, j'ai du remplacer "rs.Open qry, m_AdoCnn, adOpenDynamic, m_ADOLockType, adCmdText" par "rs.Open qry, m_AdoCnn" sinon il me faisait des caprices ;)

Reply

Marsh Posté le 23-04-2002 à 09:54:02    

Jerome a écrit a écrit :

ca y est ! ca marche :)
2 choses, j'ai refais tout ca chez moi et j'avais plus l'erreur que j'avais tout à l'heure avec la version du boulot, demain je v y mettre la mienne ca réglera pas mal de prbl ;)
 
Je sais pas si ca peut être source de prbl mais au boulot j'ai Microsoft ActiveX Data Objects 2.0 Libray alors qu'ici j'ai la 2.7...



Oui, c'est surement ça la source de tes problèmes, essaye d'installer les services pack de VB et de windows, ça devrait te mettre les composants ADO à jour.
 

Citation :

Sinon j'ai eu d'autres prbl après, j'ai du remplacer "rs.Open qry, m_AdoCnn, adOpenDynamic, m_ADOLockType, adCmdText" par "rs.Open qry, m_AdoCnn" sinon il me faisait des caprices ;)  


 
c'est normal, m_ADOLockType et adcmdtext sont des variables qui sont utilisées dans le code qui m'a servi au copier/coller et que j'ai oublié d'enlever  :D .  Normallement, m_adolocktype est le type de vérouillage de la base et adcmdtext et une commande text spécifique.


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 23-04-2002 à 09:57:37    

bon, ben ca explique pas mal de choses ;)
 
sinon concernant ADO je viens de mettre un topic ;)
tu sais comment je peux installer une nouvelle version d'ADO rapidement ? :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed