Generer un identifiant vb probleme : impossible de trouver lobjet

Signaler
Messages postés
17
Date d'inscription
mercredi 4 janvier 2006
Statut
Membre
Dernière intervention
26 janvier 2007
-
Messages postés
17
Date d'inscription
mercredi 4 janvier 2006
Statut
Membre
Dernière intervention
26 janvier 2007
-
voila je vien en dernier recours et jai besoin daide : voici ma fonction ...
Public Function get_id(marequete As String, nomchamp As String) As Integer
'mes variables
Dim recordset As New ADODB.recordset
Dim bool As Boolean



If recordset.ActiveConnection Is Nothing Then recordset.ActiveConnection = SQLSRVDATA.EASYMED.ConnectionString

recordset.Source = marequete
recordset.Open , , adOpenStatic, adLockReadOnly
MsgBox (recordset.RecordCount)
recordset.MoveLast

If recordset.RecordCount = -1 Then
get_id = 1
Else
recordset.MoveFirst
'trouver le nom du champ


'---- le probleme est a ce niveau il ne trouve pa l'objet----
get_id = recordset!nomchamp
recordset.MoveNext
'---parourir le recordset
Do While recordset.EOF False And bool False
If get_id + 1 = recordset!nomchamp Then
get_id = recordset!nomchamp
Else
get_id = get_id + 1
bool = True
End If
recordset.MoveNext
Loop
End If
End Function

sil vous plait de laide ou une piste, merci davance

10 réponses

Messages postés
77
Date d'inscription
lundi 5 septembre 2005
Statut
Membre
Dernière intervention
14 février 2008

Salut, je suis pas sur de pouvoir t'aider, mais au cas ou (parce que je vais essayer quand meme), j'aurais une question.

Quand tu dis qu'il ne trouve pas l'objet, de quel objet parle tu?
C'est nomchamp qui trove pas??
Messages postés
77
Date d'inscription
lundi 5 septembre 2005
Statut
Membre
Dernière intervention
14 février 2008

Est ce que t'as testé un truc du genre :

recordset.fields![nomchamps]
Messages postés
17
Date d'inscription
mercredi 4 janvier 2006
Statut
Membre
Dernière intervention
26 janvier 2007

je te remercie de ton oui c bien sur recordset!nomchamp kil ne fonctionne pas..qu'il ne trouve pa d'objet..j'ai essayer ta solution ..mai c pa la bonne merci quand même..pour ton aide .
Messages postés
4172
Date d'inscription
mercredi 30 juillet 2003
Statut
Membre
Dernière intervention
9 juin 2006
21
recordset!nomchamp ne peut pas être valable !!! nomchamp est une variable de type string !! Avec cette notation, tu lui demande de retroiuver dans le recordset un chmp nommé "nomchamp", pas un champ dont le nom est stocké dans la var nomchamp !!!
Pour retrouver ton champ, il faut que tu parcours la colelction Fields de ton recordset pour retrouver le bon champ ...
dim chpId as long
Dim i as long
chpId = -1
For i =0 to recordset.fields
if lcase$(recordset.fields(i).name) = lcase$(nomchamp) then
chpId = i
exit for
End if
next
if chpId = -1 then
Msgbox "Champ " & nomchamp & " inexistant dans le recordset"
exit function
endif
' Maintenant tu peux faire ta boucle avec "recordset.fields(chpId)" au lieu de "recordset!nomchamp"
Do While recordset.EOF False And bool False
If get_id + 1 = recordset.fields(chpId) Then
get_id = recordset!nomchamp
Else
get_id = get_id + 1
bool = True
End If
recordset.MoveNext
Loop


J'ai pas testé mais ca devrait être OK comme ca

CR
Messages postés
4172
Date d'inscription
mercredi 30 juillet 2003
Statut
Membre
Dernière intervention
9 juin 2006
21
PArdon !! Je corrige la boucle ...

Do While recordset.EOF False And bool False
If get_id + 1 = recordset.fields(chpId) Then
get_id = recordset.fields(chpId)
Else
get_id = get_id + 1
bool = True
End If
recordset.MoveNext
Loop

CR
Messages postés
17
Date d'inscription
mercredi 4 janvier 2006
Statut
Membre
Dernière intervention
26 janvier 2007

oui je l'ai compris ensuite, jai essayé ta solution il me parle dicompatibilité de type...du coup je tente autre chose mais g encore un souci voici mon code :


Public Function get_id(recordset, nomchamp As String) As Integer
'mes variables

Dim bool As Boolean

recordset.MoveFirst

'récupération du premier identifiant
get_id = nomchamp
get_id = get_id + 1

recordset.MoveNext

'---parourir le recordset

Do While recordset.EOF False And bool False


If get_id = nomchamp Then
get_id = nomchamp + 1
Else
get_id = get_id + 1
bool = True
End If
recordset.MoveNext
Loop


End Function
cette fois je n'ai plus de souci d'objet par contre le recordset.movenext ne fonctionne pas et je peux ne réaliser que 3 enregistrement et là je comprends pas...merci de votre aide..
Messages postés
77
Date d'inscription
lundi 5 septembre 2005
Statut
Membre
Dernière intervention
14 février 2008

Excuse moi mais je comprend pas trop ce que tu fais......

deja à la place de faire :
'récupération du premier identifiant
get_id = nomchamp
get_id = get_id + 1

tu peux faire
get_id = nomchamp + 1
Ta le meme resultat.....

Bon, j'essaie de t'aider (moi pas etre Admin et moi pas etre MVP), ca serai cool que t'explique un peu ce que tu fais dans ta boucle.....avec ton if

Mais si un moment ton movenext (dans la boucle) ne marche plus, c'est ptet que la variable bool est passée à true...... dans ce cas la tu sortirai de la boucle

Enfin bon, j'dis ca comme ca........
Sinon ben bon courage (on en a besoin qd ca veut pas faire ce qu'on veut)
Messages postés
17
Date d'inscription
mercredi 4 janvier 2006
Statut
Membre
Dernière intervention
26 janvier 2007

oui tu as raison cetait pour ma reflexion le get_id = nomchamp lol
alors la boucle :
je parcours un recordset normalemen a partir du 2eme enregistremen dou le 1er movenext au dessus
donc je compare l'id qui vaut 2 et jla compare a lid du 2eme enregistremen
s'ils st egaux get_id = nomchamp+1
sinon get_id = get_id+1 pui on sort de la boucle
le 'sinon' sert a "boucher" les vides car les ids sont dans lordre des enregistrements..
le truc bizarre mtn c ke je narrive pa atteindre le 2 eme enregistremen
merci pour ton aide
c vrai kil en faut du courage ^^
S.
Messages postés
77
Date d'inscription
lundi 5 septembre 2005
Statut
Membre
Dernière intervention
14 février 2008

Bon, tout ce que je peux te dire c'est que le movenext doit fctionné.
Est ce que tu entre dans la boucle au moins.....???
Tu devrai initialiser la variable bool a false (pour etre sur que cette condition soit vérifier.)
Messages postés
17
Date d'inscription
mercredi 4 janvier 2006
Statut
Membre
Dernière intervention
26 janvier 2007

oui oui jentre ds la boucle..on ma dit ke cetai une fonction risquée ds la durée car les données etait temporairemen enregistrées je vai essayer otre chose jpourrai mettre ici ce ke jai trouver si vous voulez enfin jle metrai suremen bonne soirée