VBA et chaîne de connection Oracle 8.1.7
Kobaya
Messages postés
282
Date d'inscription
Statut
Membre
Dernière intervention
-
petititapawpa -
petititapawpa -
Bonjour,
Sous Excel, j'utilise des macros pour faire des requêtes sur Oracle 8.1.7.
La chaîne de connection est
"Provider=MSDAORA. 1;Password=crmuser;User ID=crmuser;Data Source=OPARRSKX01.WORLD"
Le pb, c'est qu'apparamment un recordset construit avec cette connection ne permet pas de balayer (Rst.MoveLast) afin de définir le nombre d'enregistrement(s) qu'il contient.
Faut-il utiliser autre chose que MSDAORA pour que le MoveLast soit possible?
Merci de vos lumières :-)
A+,
Kobaya.
Sous Excel, j'utilise des macros pour faire des requêtes sur Oracle 8.1.7.
La chaîne de connection est
"Provider=MSDAORA. 1;Password=crmuser;User ID=crmuser;Data Source=OPARRSKX01.WORLD"
Le pb, c'est qu'apparamment un recordset construit avec cette connection ne permet pas de balayer (Rst.MoveLast) afin de définir le nombre d'enregistrement(s) qu'il contient.
Faut-il utiliser autre chose que MSDAORA pour que le MoveLast soit possible?
Merci de vos lumières :-)
A+,
Kobaya.
A voir également:
- Provider=msdaora.1
- Gmail connection - Guide
- Chaine tnt gratuite sur mobile - Guide
- Plus de chaine tv - Guide
- Chaine radio - Télécharger - Médias et Actualité
- Chaine musique bouygues - Accueil - Guide TV et vidéo
8 réponses
Je crois qu'il y a un malentendu: la chaine que utilise doit te permettre d'ouvrir la base de données et pas un recordset.
je crois que tu devrais avoir
set DB = opendatabase("Provider=MSDAORA. 1;Password=crmuser;User ID=crmuser;Data Source=OPARRSKX01.WORLD")
set REC = DB.Openrecordset("SELECT ...;")
if REC.recordcount > 0 then
rec.movelast
rec.movefirst
end if
La seule chose qui m'ennuye c'est que tu ne donnes pas le chemin à ta base de données alors qu'elle devrait se trouvée dans la chaine de connection...
je crois que tu devrais avoir
set DB = opendatabase("Provider=MSDAORA. 1;Password=crmuser;User ID=crmuser;Data Source=OPARRSKX01.WORLD")
set REC = DB.Openrecordset("SELECT ...;")
if REC.recordcount > 0 then
rec.movelast
rec.movefirst
end if
La seule chose qui m'ennuye c'est que tu ne donnes pas le chemin à ta base de données alors qu'elle devrait se trouvée dans la chaine de connection...
en fait, j'ai ceci :
Set objConn = New Connection
objConn.ConnectionString = "Provider=MSDAORA. 1;Password=crmuser;User ID=crmuser;Data Source=OPARRSKX01.WORLD"
' ouverture de la connexion
objConn.Open
Set wbkClasseur = Workbooks.Add
strSQL = "SELECT * FROM tfcrcrm ORDER BY nomfcr"
Set objRS = New Recordset
Application.StatusBar = "Lancer la requête..."
objRS.Open strSQL, objConn
et c'est là que j'ai un pb pour parcourir le rs...
A+,
Kobaya.
Set objConn = New Connection
objConn.ConnectionString = "Provider=MSDAORA. 1;Password=crmuser;User ID=crmuser;Data Source=OPARRSKX01.WORLD"
' ouverture de la connexion
objConn.Open
Set wbkClasseur = Workbooks.Add
strSQL = "SELECT * FROM tfcrcrm ORDER BY nomfcr"
Set objRS = New Recordset
Application.StatusBar = "Lancer la requête..."
objRS.Open strSQL, objConn
et c'est là que j'ai un pb pour parcourir le rs...
A+,
Kobaya.
Oui évidement. Essaie voir:
utilise DAO en référence dans ta macro (DAO360.DLL)
dim objConn as new DAO.Database
dim objRS as DAO.Recordset
Set objConn = Opendatabase("Provider=MSDAORA. 1;Password=crmuser;User ID=crmuser;Data Source=OPARRSKX01.WORLD" )
Set wbkClasseur = Workbooks.Add
Set objRS = objConn.openrecordset("SELECT * FROM tfcrcrm ORDER BY nomfcr;") 'NE PAS OUBLIER LE ; EN FIN DE CHAINE
Application.StatusBar = "Lancer la requête..."
if objRS.recordcount>0 then 'Renvoie 1 si il y a des enregistrements
objRS.movelast
end if
set objRS =nothing
objConn.close
set objConn=nothing
Exécute la procédure pas-à-pas ^pour voir s'il n'y a pas de trucs qui cloches...
utilise DAO en référence dans ta macro (DAO360.DLL)
dim objConn as new DAO.Database
dim objRS as DAO.Recordset
Set objConn = Opendatabase("Provider=MSDAORA. 1;Password=crmuser;User ID=crmuser;Data Source=OPARRSKX01.WORLD" )
Set wbkClasseur = Workbooks.Add
Set objRS = objConn.openrecordset("SELECT * FROM tfcrcrm ORDER BY nomfcr;") 'NE PAS OUBLIER LE ; EN FIN DE CHAINE
Application.StatusBar = "Lancer la requête..."
if objRS.recordcount>0 then 'Renvoie 1 si il y a des enregistrements
objRS.movelast
end if
set objRS =nothing
objConn.close
set objConn=nothing
Exécute la procédure pas-à-pas ^pour voir s'il n'y a pas de trucs qui cloches...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
je m'aperçois que je fais tous mes SELECT sans le ; final, ce qui ne semble pas gêner Oracle...
pour ce qui est de DAO360.DLL, je ne peux pas faire ce que je veux sur mon poste (je suis en entreprise, pas à la maison sur mon PC) et les DBA n'aiment pas trop qu'on "attaque leur bébé" par des macros...
j'ai en référence Microsoft DAO 3.51 Object Library.
A+,
Kobaya.
pour ce qui est de DAO360.DLL, je ne peux pas faire ce que je veux sur mon poste (je suis en entreprise, pas à la maison sur mon PC) et les DBA n'aiment pas trop qu'on "attaque leur bébé" par des macros...
j'ai en référence Microsoft DAO 3.51 Object Library.
A+,
Kobaya.
La différence entre DAO 3.51 et DAO 3.6 est que cette dernière permet d'accéder au base de données type Access des versions supérieures à Access97. Donc normalement, ma routine doit pouvoir également fonctionner avec cette DLL.
BAT
BAT