redrad
Messages postés8Date d'inscriptionjeudi 24 avril 2003StatutMembreDernière intervention10 août 2007
-
27 déc. 2005 à 13:11
redrad
Messages postés8Date d'inscriptionjeudi 24 avril 2003StatutMembreDernière intervention10 août 2007
-
29 déc. 2005 à 10:22
Bonjour
Voici mon problème
Sur un programme Vba Access j'utilise une fonction récursive que voici qui fonctionne très bien :
Function Nomenclature(Article As String, Rang As Long, Variante As String)
Set Db = CurrentDb
Sql = "SELECT * FROM Nomenclature" & " WHERE [Article]='" & Article & "' " & "AND [Variante]='" & Variante & "' ORDER BY [Composant]"
Set Rs = Db.OpenRecordset(Sql)
With Rs
If .RecordCount > 0 Then
.MoveFirst
Do While Not .EOF
MsgBox .Fields("Composant")
Call Nomenclature(.Fields("Composant"), Rang + 1, .Fields("Variante_Comp"))
.MoveNext
Loop
End If
.Close
End With
Rang = Rang - 1
End Function
j'ai traduit cette même fonction en delphi
que voici :
Sql :='Select * From Nomenclature Where [Article]=' +
QuotedStr(Article) + ' And [Variante]=' + QuotedStr(Variante) + ' ORDER BY [Composant]';
Rs:=CoRecordset.Create
RS.Open(Sql, Cnx, adOpenStatic, adLockOptimistic, adCmdText );
With RS do Begin
if (RecordCount > 0) then begin
MoveFirst;
While Not EOF DO Begin
Showmessage (Fields['Composant'].Value + '///'+ Article);
Nomenclature(Fields['Composant'].Value, Rang + 1,Fields['Variante_Comp'].Value) ;
MoveNext;
end ;
end ;
Close ;
end ;
Rang:=Rang - 1
end ;
mais le problème c'est que elle ne fonctionne pas de la même façon au niveau du recordset
redrad
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 28 déc. 2005 à 17:19
pourrait tu nous preciser de quelle façon elle ne fonctionne pas ?
resultat erroné ?
erreur de compilation ?
erreur d'execution ?
debordement de memoire ?
<hr size="2" width="100%">La theorie c'est quand on sait tout, mais que rien ne fonctionne.
La pratique c'est quand tout fonctionne, mais que personne ne sait pourquoi.
<hr>
Sql :='Select * From Nomenclature Where [Article]=' +
QuotedStr(Article) + ' And [Variante]=' + QuotedStr(Variante) + ' ORDER BY [Composant]';
Rs:=CoRecordset.Create
RS.Open(Sql, Cnx, adOpenStatic, adLockOptimistic, adCmdText );
With RS do Begin
if (RecordCount > 0) then begin
MoveFirst;
While Not EOF DO Begin
Nomenclature(Fields['Composant'].Value, Rang + 1,Fields['Variante_Comp'].Value) ;
//LE PROBLEME SE TROUVE ICI SUR LE MOVENEXT
//IL M'EST IMPOSSIBLE DE PASSER A L'ENREGISTREMENT
//SUIVANT CAR LE RECORDSET EST FERMER
//ALORS QU'EN VB JE POUVAIS PASSER A L'ENREGISTREMENT SUIVANT UNE FOIS LA PREMIERE RECURSIVITE FINI
MoveNext;
end ;
end ;
Close ;
end ;
Rang:=Rang - 1
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 29 déc. 2005 à 04:18
deja je pense que tu ne devrais pas créer RS dans ta procedure ... cela semble illogique et peu posé probleme avec la recursivitée.
a moins de faire un truc genre :
if RS = nil then RS := CoRecordSet.Create;
a part cela ... tout a l'air bon j'ai l'impression.
<hr size="2" width="100%">La theorie c'est quand on sait tout, mais que rien ne fonctionne.
La pratique c'est quand tout fonctionne, mais que personne ne sait pourquoi.
<hr>
Vous n’avez pas trouvé la réponse que vous recherchez ?
redrad
Messages postés8Date d'inscriptionjeudi 24 avril 2003StatutMembreDernière intervention10 août 2007 29 déc. 2005 à 10:22
j'ai essayé est toujours le même problème
Ma base de donnée est une Nomenclature voici un exmple
//Structure de ma base de donnée
Champ Composé Champ Composant
15-811655 501-811655
15-811655 502-811655
501-811655 0043-0010
501-811655 0044-0010
502-811655 0040-0050
//Le résultat que je veux obtenir est celui ci :
Rang Article
1 15-811655
2 501-811655
3 0043-0010
3 0044-0010
2 502-811655
3 0040-0050