[VB6] Pb de type

Pb de type [VB6] - Programmation

Marsh Posté le 29-05-2001 à 15:05:41    

Voilà, je me suis fait une procédure dans un module dont l'en tête est la suivante :
Public Sub Récupérer(EnregCode As Recordset)
 
en gros, elle affecte à des variables les valer d'une table
 
    ' on récupère les valeurs contenues dans la table Revue de Contrat
    Code_rev = EnregCode("Code_rev" )
    Date_rev = EnregCode("date" )
    Reference_piece = EnregCode("ref_piece" )
.................
 
end sub
 
dans mon prog, g mis pour l'appeler :
 
Récupérer (EnregCode), sachant ke EnregCode est un recordset.
 
Lors de l'exécution, il me met comme erreur : typer incompatible
 
COMMENT CE FAIS-CE?? COMMENT ARRANGER çA??

Reply

Marsh Posté le 29-05-2001 à 15:05:41   

Reply

Marsh Posté le 29-05-2001 à 16:10:42    

Personne n'a une chtite idée?? :??:  :??:  :??:  
 
Je suis sûr k'en plus c tt con :hap:  :hap:  
 
Merciiiiiii

Reply

Marsh Posté le 29-05-2001 à 16:38:35    

tu as l'erreur a quel nivo??

Reply

Marsh Posté le 29-05-2001 à 16:54:33    

kand j'exécute mon programme, il s'arrête à cette ligne:
Récupérer (EnregCode)
 
et me met comme erreur typer incompatible

Reply

Marsh Posté le 29-05-2001 à 17:08:30    

Question idiote, est il possible de passer un objet de type recordset ( c'est tout de meme un objet assez complexe) ???


---------------
La bave du crapaud n'empèche pas la caravane de passer .
Reply

Marsh Posté le 29-05-2001 à 17:12:35    

oui on peut le faire car j'utilise une fonction filtre de ce type :
 
Public Function Filtre(EnregTempo As Recordset, Element As String, CodeSaisi As String) As Recordset
 
    ' Définit un filtre pour l'objet Recordset indiqué,
    ' puis ouvre un nouvel objet Recordset.
    EnregTempo.Filter = Element & " = '" & CodeSaisi & "'"
    Set Filtre = EnregTempo.OpenRecordset
 
End Function
 
puis je l'appelle sous mon prog de cette façon :  
 
Set EnregCode = Filtre(Base_Code.Recordset, "Code_rev", Code)        
 
 
en fait, en mettant tt le code de ma procédure dans mon prog, ça marche nikel!!
l'inconvénient c ke j'aurai besoin plusieurs fois de cette procédure et vu ke le code est assez long, je préférerai avoir une unike procédure et non plusieurs fois le même bloc de code

Reply

Marsh Posté le 29-05-2001 à 17:15:33    

Oui c'est possible je l'ai dejà vu
Par contre, il faut bien déclarer ta procédure et ne pas laisser EnregCode en type Variant

Reply

Marsh Posté le 29-05-2001 à 17:21:18    

ben mon EnregCode est k'en type Recorset

Reply

Marsh Posté le 30-05-2001 à 09:15:59    

Bonjourrrrrrrrr
 
ben euh la nuit n'a pas porté conseil, g tjrs pas la réponse !!
 :cry:  :cry:  :cry:  :cry:  :cry:  :cry:  :cry:  
 
Mais today, je c ke je v l'avoir  :jap:  :jap:

Reply

Marsh Posté le 30-05-2001 à 10:18:27    

:pt1cable:  :pt1cable:  :pt1cable:  
put1 je galère grave!!! g essayé plein de truc mais ça marche poooooooooo
 :cry:  :cry:  :cry:  :cry:  :sweat:  :sweat:

Reply

Marsh Posté le 30-05-2001 à 10:18:27   

Reply

Marsh Posté le 30-05-2001 à 11:08:32    

ahhhhhhh   je suis sûr ke c tt con
put1 je pète les plombs pour un truc tt con!!
 :pt1cable:  :pt1cable:  :pt1cable:  
 :crazy:  :crazy:  :crazy:  :crazy:  
help!!!!!!!

Reply

Marsh Posté le 30-05-2001 à 11:13:59    

Normalement, les structures devraient passer sous forme de pointeur lors de l'appel donc on peut "tout" passer en argument (si on met ByVal, c'est la valeur qui passe).
 
Dans Public Function Filtre(EnregTempo As Recordset, Element As String, CodeSaisi As String) As Recordset, le retour de la fonction est un Recordset mamembre .OpenRecordset de la structure Recordset
 
    ' Définit un filtre pour l'objet Recordset indiqué,
    ' puis ouvre un nouvel objet Recordset.
    EnregTempo.Filter = Element & " = '" & CodeSaisi & "'"
    Set Filtre = EnregTempo.OpenRecordset
 
End Function

Reply

Marsh Posté le 30-05-2001 à 11:21:49    

Pb clavier..
 
Normalement, les structures devraient passer sous forme de pointeur lors de l'appel donc on peut "tout" passer en argument (si on met ByVal, c'est la valeur qui passe).
 
Dans Public Function Filtre(EnregTempo As Recordset, ..., ...) As Recordset, le retour de la fonction est un Recordset. Set Filtre = correspond à EnregTempo.OpenRecordset de la structure Recordset.
 
C'est une structure imbriquée ?
 
Faut peut-être faire Set Filtre = EnregTempo; (si c'est un Recordset, et qu'un membre de la structure l'est aussi : pb).
 
Les instructions
Code_rev = EnregCode("Code_rev" )  
Date_rev = EnregCode("date" )
signifient que EnregCode est une fonction, pas un type de variable .... (à moins que cela soit autorisé de "mélanger les types" ).

Reply

Marsh Posté le 30-05-2001 à 11:28:38    

Le ByVal n'a pas marché hier.
 
euh en fait le EnregCode("code_rev" ) est la même chose ke EnregCode.field="Code_rev"
 
Mais le pb, c ke g une proc"dure dans un module ki a pour en tête:
Public Sub Récupérer(EnregCode As Recordset)  
 
lors de l'appel dans mon prog, je fais :  Récupérer(MonEnregCode)
sachant ke plus haut g défini MonEregCode as Recordset.
 
Mais euh en fait, j'utilise ma fonction Filtre, donc serait il possible ke celle-ci change le type de MonEnregCode et ainsi kd j'appelle le procédure Récupérer, je ne passerai plus un type Recordset mais otre chose :??:  :??:

Reply

Marsh Posté le 30-05-2001 à 12:08:14    

y'a un truc qui me chifone :
"lors de l'appel dans mon prog, je fais :  Récupérer(MonEnregCode)"
 
VB a de droles de syntaxe lors de l'appel de fonctions :
 
Récupérer MonEnregCode 'OK
Call Récupérer(MonEnregCode) 'OK
Récupérer (MonEnregCode) 'WARNING
 
on remarque l'espace entre le nom de la fonction et les parenthèse
si tu faits ca, VB empeche toute modification du contenu des parenthèses !!! :lol:
donc soit tu rajoutes un call (moi je te le conseille, on pige bien que c'est un appel de fonction) soit tu vires ces parentheses mais n'utilise pas cette syntaxe de merde qui provoque souvent des erreurs ;)


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 30-05-2001 à 12:09:46    

:D"tu faits":D
vous aurez corrigé : tu fé !! ;)


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 30-05-2001 à 12:21:55    

put1 kd je disai ke c'était un truc tt con!!
 :pt1cable:  :pt1cable:  :pt1cable:  :pt1cable:  :pt1cable:  :pt1cable:  :pt1cable:  :pt1cable:  
 
Merci ça marche nikel!! :hap:  :hap:  :hap:  
 
PS: VIVE MICROSOFT :gun:

Reply

Marsh Posté le 30-05-2001 à 15:08:06    

lol
 
ahahah
 
lol
 
ahahah
 
je suis plié de rire !!!!
 
HeloWorld une fois de plus tu sauve tom ahahahahahahah
 
 
Tom arrete avec les smileys on dirait un gosse de 10 ans qui voit un forum avec smileys pour le première fois !

Reply

Marsh Posté le 30-05-2001 à 15:54:56    

qd tu ecrit:
Récupérer (MonEnregCode)  c'est une synthaxe spéciale pour quand il y a une valeur retournée...
 
l'exemple le plus concret c'est MsgBox
on écrit:
Msgbox "Coucou",vbok
Mais
If MsgBox("Oui ou non",vbyesno)= vbyes then
 
c'est vrai que VB fait tres fort au niveau de la synthaxe des appels de fcts...

Reply

Marsh Posté le 30-05-2001 à 16:26:43    

"qd tu ecrit:  
Récupérer (MonEnregCode)  c'est une synthaxe spéciale pour quand il y a une valeur retournée...  
 
l'exemple le plus concret c'est MsgBox  
on écrit:  
Msgbox "Coucou",vbok  
Mais  
If MsgBox("Oui ou non",vbyesno)= vbyes then "
 
je suis pas trop sur de ca ...
si tu fais :
MsgBox ("Oui ou non",vbyesno)
If MsgBox("Oui ou non",vbyesno) then ...
je suis pas sur qu'il l'interprete de la meme facon :
deja il rajoute un espace entre le MsgBox et la parenthese dans le premier cas
mais surtout le premier cas ne passe pas (erreur lors compile)
le seul cas ou ca marche c'est qd y'a 1 seul parametre :
MsgBox ("Oui ou non" )
donc quand tu faits
If MsgBox("Oui ou non",vbyesno) then ...
il l'interprete bien de la meme maniere que le call
la difference (je l'avais lu dans l'aide je crois) c'est que le Call provoque la perte de la valeur de retour ...
Tout ca pour dire que si MsgBox modifiait un des parametres (le premier par exemple), pour
MsgBox ("Oui ou non" ) ca marcherait pas (j'ai deja eu des erreurs lors de l'execution "type de param incorrect" je crois parseke j'avais oublié le call)
mais If MsgBox("Oui ou non" ) then ... marcherait ...
on m'a dit sur ce forum que cette syntaxe biscornue était acceptée afin de protéger le parametre ... mais elle est vraiment etrange (1 seul param ?) et piege facilement (BASIC ... pour les Beginers ??? avec des piege comme ca ?)


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 31-05-2001 à 09:41:41    

Comme dit HelloWorld, si le Basic autorise des écarts permettant des pièges, c'est dommage. MsgBox est fonction, et aussi subroutine (selon qu'avec ou sans parenthèses)..
 
Je trouve, pour la lisibilité (et comprendre quand on n'a pas les spécif (suis resté à VB3)) que si  
EnregCode("code_rev" ) est la même chose ke EnregCode.field="Code_rev"
 
il vaudrait mieux écrire EnregCode.field="Code_rev" qui est plus "long" à taper mais plus lisible. Il me semble qu'en VB3, on peut aussi écrire Bouton = "blabla", car c'est le champ .text qui est pris par défaut. Illisible...
 
J'ai déja transcrit un programme (à moi) VB3 en BC3 (16 bits) et le copier/coller du source évite des refontes, c'est "presque" direct (surtout quand c'est du code pas lié aux interfaces, boutons, etc !!).

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed