Probleme

methodmay31 Messages postés 45 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 6 mai 2006 - 15 mars 2006 à 12:18
methodmay31 Messages postés 45 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 6 mai 2006 - 16 mars 2006 à 09:50
Bonjour a Tous

g un petit probleme avec une connection a une base de donnée voila mon code

Sub maxkeyNumCandidat(ByVal maxcand As Integer)


Dim db As Connection
Dim Max As Recordset


Set db = Connection
db.CursorLocation = adUseClient
db.Open "PROVIDER =Microsoft.Jet.OLEDB.4.0;Data Source='" & CheminBase & "';"
Set Max = New Recordset
Max.Open "Select (max(NumCandidat)+1) as cand from Candidat", db, adOpenStatic, adLockOptimistic


While Not Max.EOF

Candid = Max![cand]
Max.MoveNext
Wend

maxcand = Candid



End Sub

Je ne compren pas pourquoi la ligne gras bloque ..
quand j'affiche l'aide Vb me parle toujours de la librairie MSDN que je n'ai pas est ce que l'erreur vient vraimen du fait qu'il me manque cette libraire ??
On ma parlé aussi de msdn Online ? Ou puis je trouver ca sur le web ?

Merci

23 réponses

methodmay31 Messages postés 45 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 6 mai 2006
15 mars 2006 à 12:20
Cette procédure sert en fait a prendre le dernier identifiant inscrit dans la BDD et de lui ajouter un pour pouvoir insérer des données a l'identifiant +1 ds la BDD
0
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
15 mars 2006 à 12:28
Salut MethodMay31,

je n'ai pas essayé d'exécuter ton code, je ne l'ai que lu.

essayes déjà :
Set db = New Connection 'il s'agit de créer une instance et la référencer, donc opérateur New, à moins que Connection soit une variable globale, ce dont je doute.
en plus, conseil pour le long terme, écrit plutôt :

Dim db As ADODB.Connection
Dim Max As ADODB.Recordset

et

Set db = New ADODB.Connection
Set Max = New ADODB.Recordset

Pendant que j'y suis, ton maxcand ne renverra pas son résultat, car il faut déclarer :
ByRef maxcand As Integer

Voilà,
pour info, la librairie MSDN n'est pas une bibliothèque de liaison dynamique (dll) manquante, mais une vraie bibliothèque électronique, toute aussi manquante pour toi, contenant un savoir-faire étonnant, et une base de connaissance époustoufflante, et on peut l'acheter auprès de Microsoft ou de ses revendeurs.

rvblogn
0
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
15 mars 2006 à 12:38
C'est encore moi,

je viens de lire ton 2ème message, et j'ajoute:

si tu n'as pas trop avancé dans ton développement, et que tu es l'architecte de la base de données, et que CheminBase pointe vers une Base Access, tu pourrais avoir le champ cand (qui d'ailleurs aurait mieux fait de s'appeler CANDIDATS.Id, c'est plus parlant et plus conventionné, mais ça, c'est moi qui le dit) de type NuméroAuto, ce qui aurait pour effet immédiat de ne pas avoir à te préoccuper du prochain identifiant disponible avant de faire une insertion d'un nouveau candidat.

rvblogn
0
methodmay31 Messages postés 45 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 6 mai 2006
15 mars 2006 à 12:44
Effectivement le Byref a été testé avant mais pareil erreur avec la librairie msdn ... ah cette fameuse librairie

Sinon j'aimerai aussi savoir ce que représente exactement cette ligne de code db.CursorLocation = adUseClient

Merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
methodmay31 Messages postés 45 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 6 mai 2006
15 mars 2006 à 12:47
Je part en fait d'un existant et de tré peu de connection en VB puisque j'ai commencé lundi a coder en VB

Je ne suis donc par l'architecte de la BDD en question Mais je doi adapter cette appli a l'entreprise qui m'embauche en tan que stagiaire donc je pren en note ta remarque et ds ma prochaine Bdd le champ sera auto incrémenté

Merci
0
methodmay31 Messages postés 45 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 6 mai 2006
15 mars 2006 à 12:50
Maintenant mon appli s'arrete a

.CursorLocation = en me diant erreur de compilation Méthode ou membre de donnée introuvable....
Que doi je faire ?
0
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
15 mars 2006 à 13:05
Pour résumer le adUseClient te donne un curseur côté client, ce qui veut dire que tu ne peux l'utiliser qu'en lecture seule.adUseNone, pas de curseur, adUseServer, côté serveur, et adUseClientBatch, je ne sais pas, je crois que c'est obsolète.

Ensuite, je persiste avec mon conseil de ADODB.Connection (et idem pour Recordset). Pourquoi?
L'objet Data Access Object (DAO) implémente aussi un objet Connection, mais il n'implémente pas de propriété CursorLocation (et si tu l'utilise, VB te dira "erreur de compilation Méthode ou membre de donnée introuvable....").
Vérifies dans tes références de projet quel est l'objet que tu utilise DAO ou ADO?

rvblogn
0
PhilocheMan Messages postés 55 Date d'inscription jeudi 28 juillet 2005 Statut Membre Dernière intervention 23 mars 2006 1
15 mars 2006 à 13:59
Pour la propriété CursorLocation, j'ai trouvé qu'elle permettait de définir (ou de retourner) le type de curseur utilisé, soit :
adUseServer (par défaut) : pour utiliser le curseur fourni par le driver ou le data utilisé
ou
adUseClient : pour utiliser le curseur local "côté client"
Il est dit aussi que cette propriété doit être fixée avant d'établir la connection, sinon cela reste sans effet.
Pour être complet, cette propriété existe pour l'objet Collection MAIS AUSSI pour l'objet RecordSet.

Je peux me tromper, mais dans ton exemple (Base de donnée JET), je ne crois pas qu'on puisse gérer des curseurs... A voir...
0
BasicInstinct Messages postés 1470 Date d'inscription mardi 5 février 2002 Statut Membre Dernière intervention 20 octobre 2014 12
15 mars 2006 à 14:14
db.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source='" & CheminBase & "';"
Set Max = New Recordset
Max.CursorLocation = adUseClient ' sur le recordset, pas sur la connection.
Max.Open "Select (max (NumCandidat)+1) as cand from Candidat", db, adOpenStatic, adLockOptimistic

Candid = Max![cand] 'ta requete ne revoyant qu'une valeur, il n'est pas utile de parcourir le recordset
'perso je prefere l'ecriture
Candid = Max("cand") 'quand j'ai plusieurs champs
'sinon das ton cas, j'ecris
Candid=Max(0)

BasicInstinct
0
methodmay31 Messages postés 45 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 6 mai 2006
15 mars 2006 à 15:02
g de nouvelle erreure notamment sur cette ligne que j'ai instancié sur le recordset et non plus sur la connection

Max.CursorLocation = adUseClient

l'erreur est une erreur d'éxécution '91' variable objet ou variable bloc with non définie
0
methodmay31 Messages postés 45 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 6 mai 2006
15 mars 2006 à 15:21
meme erreur que ce dessus avec db.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source='" & CheminBase & "';" je ne compren pas tro si vous pouviez m'aider ??
0
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
15 mars 2006 à 15:28
as-tu écrit ADODB.Connection et ADODB.Recordset?
as-tu vérifié les références?

refais voir ton code intégral, pour voir où tu en es.

rvblogn
0
methodmay31 Messages postés 45 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 6 mai 2006
15 mars 2006 à 15:34
Dim baseCV As New ADODB.Connection 'connection à la base de données des CV.


Public Sub EtablirConnection()
baseCV.Provider = "Microsoft.Jet.OLEDB.4.0"
baseCV.ConnectionString = CheminBase
baseCV.Open
End Sub


Public Sub FermerConnection() ' fermeture de la base de donnée des CV.
baseCV.Close
End Sub


Sub maxkeyNumCandidat(ByRef maxcand As Integer)


Dim db As ADODB.Connection
Dim Max As ADODB.Recordset


Set db1 = New ADODB.Connection
Set Max1 = New ADODB.Recordset
Max1.CursorLocation = adUseClient
db.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source='" & CheminBase & "';"


Max1.CursorLocation = adUseClient ' sur le recordset, pas sur la connection.
Max.Open "Select (max (NumCandidat)+1) as cand from Candidat", db, adOpenStatic, adLockOptimistic
While Not Max.EOF

Candid = Max![cand]
Max.MoveNext
Wend

maxcand = Candid



End Sub


Voila mon code actuelle ....
0
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
15 mars 2006 à 15:59
Notes bien :


Sub maxkeyNumCandidat(ByRef maxcand As Integer)


Dim db As ADODB.Connection
Dim Max As ADODB.Recordset


Set db = New ADODB.Connection 'pas db1
Set Max = New ADODB.Recordset 'pas max1

db.Open "PROVIDER= Microsoft.Jet.OLEDB.4.0;Data Source='" & CheminBase & "';"


Max .CursorLocation = adUseClient 'pas max1' sur le recordset, pas sur la connection
Max.Open "Select (max (NumCandidat)+1) as cand from Candidat", db, adOpenStatic, adLockOptimistic
If Not Max.EOF then
Candid = Max.fields("cand").value
End if

maxcand = Candid
Max.Close 'n'oublie pas
Set Max = Nothing 'n'oublie pas non plus

End Sub

En plus BasicInstinct a raison, pas besoin d'itérer (while wend) tu n'as qu'une réponse dans le recordser (le max), mais vérifies quand même Not Max.EOF. Le CursorLocation sur la connection, c'est tout aussi possible, mais cela n'affecte pas le curseur du Recordset, donc aussi sur le Recordset. Enfin, dans le cadre de la portabilité VB.Net, il faut mieux spécifier Max. fields ("ezreorfozei").value.

Je ne m'attendais pas à tant de code, mais, cela fait apparaître que tu as une connection globale baseCV. Donc remplace
Set db = New ADODB.Connection
par
Set db = baseCV
et ne refait pas db.Open, elle est déjà ouverte (umm, si elle est bien ouverte).

rvblogn
0
methodmay31 Messages postés 45 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 6 mai 2006
15 mars 2006 à 16:41
G changé mon code par le tien

et donc maintenant il me di "nom de fichier incorrect "

tu pense que la ligne db.open..... n'est pa nécessaire ??
0
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
15 mars 2006 à 16:50
mets un point d'arrêt sur le db.open et vérifie ce qui se trouve dans CheminBase.
point d'arrêt = click gauche dans la barre verticale grise à gauche dans le panneau de code (jusqu'à ce qu'un point rouge apparaisse), sur la ligne concernée.

Puis tu exécutes le code, et quand il s'arrête, tu promènes ta souris sur la variable CheminBase, tu attends que l'infobulle apparaisse, et tu regardes le contenu.

il est bien possible, si on voit là tout ton code, que cette variable ne soit pas initialisée.
ne supprime pas tout de suite la ligne db.open, mais plus tard, quand cela marchera, tu vérifieras si la portion de code EtablirConnection est exécutée, et si elle ouvre bien la baseCV (mais plus tard, c'est pas le problème du moment)

rvblogn
0
BasicInstinct Messages postés 1470 Date d'inscription mardi 5 février 2002 Statut Membre Dernière intervention 20 octobre 2014 12
15 mars 2006 à 16:53
Perso je le coderai plutot comme ca :

Function maxkeyNumCandidat() as long 'renvoie le nouveau numero a attribuer ou -1 en cas d'echec

Dim Max As NEW ADODB.Recordset
on error goto Suite
Max.Open "Select (max (NumCandidat)+1) as cand from Candidat", baseCV 'pourquoi redéclarer une nouvelle connexion ?
maxkeyNumCandidat=Max(0)
Set Max = Nothing
exit function
Suite:
maxkeyNumCandidat=-1

End Sub

BasicInstinct
0
BasicInstinct Messages postés 1470 Date d'inscription mardi 5 février 2002 Statut Membre Dernière intervention 20 octobre 2014 12
15 mars 2006 à 16:54
oups : End Function au lieu de End Sub !!

BasicInstinct
0
methodmay31 Messages postés 45 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 6 mai 2006
15 mars 2006 à 17:08
J'ai vérifié dans l'infobulle le chemin séléctionné apparait bel et bien

une erreur autre Nom de fichier inconnu....

Je tenais a vous remerciez pour toutes ces réponses
0
methodmay31 Messages postés 45 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 6 mai 2006
15 mars 2006 à 17:39
incorrect pardon a la place d'inconu
0
Rejoignez-nous