Manipulation de BD Access avec Visual Basic [edit : + onglets] - VB/VBA/VBS - Programmation
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]
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 ? 
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: 
 
 
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" ) 
 
 
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 
 
 
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. 
Marsh Posté le 18-04-2002 à 17:52:58
ah ben merci bcp !  c exactement ce que je voulais
 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  
 
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 :   | 
 
 
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   
 
[jfdsdjhfuetppo]--Message édité par mareek--[/jfdsdjhfuetppo]
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 
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 !  
 
Marsh Posté le 20-04-2002 à 19:31:23
 
  
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 
Marsh Posté le 21-04-2002 à 13:25:07
encore une question  
 
 
mareek> pkoi les onglets avec SStab sont mieux que les tabstrip ? 
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  .
 . 
 
bonne chance pour la suite.   
 
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 !
 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+ 
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 :   | 
 
 
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]
Marsh Posté le 22-04-2002 à 15:30:59
Le fichier films.mdb existe-t-il ?
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  
 
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   .  Normallement, m_adolocktype est le type de vérouillage de la base et adcmdtext et une commande text spécifique.
 .  Normallement, m_adolocktype est le type de vérouillage de la base et adcmdtext et une commande text spécifique. 
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 ?  
 
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]