OVH Cloud OVH Cloud

DAO avec Excel

2 réponses
Avatar
Emcy
Bonjours,

Avec Excel, je lis/ecrit sur une BDD Acces qui se trouve sur un autre poste
(en DAO)

J'ai cru comprendre que lorsqu'on execute une requete sur une BDD qui se
trouve sur un poste différent, la BDD est importée sur le PC puis la requete
est executée.

Que se passe t-il si plusieurs utilisateurs écrivent en même temps sur le
même element de la BDD ?

2 réponses

Avatar
FILK
Bonjour Emcy,

En DAO, la base n'est pas importée (en tout cas pas à ma connaissance). Pour
monter des infos en vba dans une base de données :

- j'ouvre une connection à une bdd
- j'execute une requête permettant de monter les données (requête sql d'ajout)
- je referme la connection

Le moteur DAO permet de piloter Access. Donc il faut que :
- Access soit installé sur ton poste
- Access soit installé en mode serveur

Pour les utilisations concomitantes d'access, je te donne ce lien d'enfer,
le mec a bien testé l'affaire :
http://www.info-3000.com/access/limite.php

Bon courage.

Philippe












Bonjours,

Avec Excel, je lis/ecrit sur une BDD Acces qui se trouve sur un autre poste
(en DAO)

J'ai cru comprendre que lorsqu'on execute une requete sur une BDD qui se
trouve sur un poste différent, la BDD est importée sur le PC puis la requete
est executée.

Que se passe t-il si plusieurs utilisateurs écrivent en même temps sur le
même element de la BDD ?





Avatar
jb
Bonjour,

Il n'y a pas d'import de la BDD.
Exemple de lecture/Création (on suppose sur l'exemple que la BD est
dans le même répertoire que l'appli Excel)

Sub Lit_client()
'Cocher DAO 3.6 dans Outils/Référence
rep_appli = ActiveWorkbook.Path
Dim db As Database
Dim rs As Recordset
Set db = OpenDatabase(rep_appli & "access2000.mdb")
Set rs = db.OpenRecordset("Select * FROM client")
i = 2
Do While Not rs.EOF
Cells(i, 10) = rs!nom_client
Cells(i, 11) = rs!ville
rs.MoveNext
i = i + 1
Loop
End Sub


Sub ajout()
If Range("B3").Value <> "" Then
Dim db As Database
Dim rs As Recordset
rep_appli = ActiveWorkbook.Path
Set db = OpenDatabase(rep_appli & "access2000.mdb")
Set rs = db.OpenRecordset("client", dbOpenTable)
rs.AddNew ' Création enregistrement
rs!nom_client = Range("B3").Value ' Transfert
rs!ville = Range("B4").Value
rs.Update ' Validation
rs.Close
Range("B3").Value = ""
Range("B4").Value = ""
Else
MsgBox "Saisir un nom!"
End If
End Sub

Pour la modif. Il y a Erreur si on écrit en même temps dans le même
Enreg. (Utiliser la gestion d'erreur)

On error Resume Next
Err=0
Rs.Edit
IF Err=0 then
rs!nom_client = Range("B3").Value ' Transfert
rs!ville = Range("B4").Value
rs.Update ' Validation
rs.Close
Else

End If
On Error Goto 0 ' annule gestion erreur

Cordialement JB