P__ROMEO
Messages postés294Date d'inscriptionvendredi 25 février 2005StatutMembreDernière intervention 9 mars 2006
-
20 sept. 2005 à 00:45
P__ROMEO
Messages postés294Date d'inscriptionvendredi 25 février 2005StatutMembreDernière intervention 9 mars 2006
-
21 sept. 2005 à 02:50
bonjour.
je suis sur un programme, qui prend ses données dans une base Access.
je fait ma connection, ma requete, et, il arrive que la requete ne trouve aucun tuple. (EOF)
pour gérer cette erreur, je fait comme suite.(voir le code)
mais, apparemment, lorsqu'il ya EOF, il contnue sans exécuter ce qui est dans le if.
et, comme j'utilise des valeurs de cette requette plus bas, il me met une erreur "valeure null"
(ici, une partie du code. tout cela est sur la meme form, mais, pourtant, pour la meme condition,
l'une marche, et la seconde non. je ne comprend pas.) merci de votre aide.
Set Cnn = New ADODB.ConnectionSet Rst New ADODB.Recordset<?xml:namespace prefix o ns = "urn:schemas-microsoft-com:office:office" />
Cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source= .\Base de donnée\Introx Manut.mdb;"
Rst.Open "SELECT sum(QuaPro)as SomTotQua, Sum(TonPro)as SomTotTon From [Avoir_Marchandise_Dans] Where (CodNavArr = '" & Me.TxtCodNavArr & "') and (CodSoc = '" & Me.TxtCodSoc & "')", Cnn
If Rst.EOF Then 'Ici, ca passe pas
MsgBox " La société n'a aucune marchandise sur ce navire, vbInformation, "Introx : enregistrement inexistant"
Rst.Close
Exit Sub
End If
''''Remplit tous les produits chargés, la quantité initiale, et le poid initia
(ICI, ca marche, il verifie normallement.)
Rst.Open "SELECT CodPro,sum(QuaPro) as QuaPro, sum(TonPro)as TonPro From [Avoir_Marchandise_Dans] where CodNavArr = '" & TxtCodNavArr & "' and CodSoc = '" & TxtCodSoc & "' group by CodPro order by CodPro", Cnn, adOpenKeyset, adLockReadOnly
If Not Rst.EOF Then
I = 0
Do While Not Rst.EOF
txtPro(I) = Rst!CodPro
TxtIniCol(I) = Rst!QuaPro
TxtIniTon(I) = Rst!TonPro
Rst.MoveNext
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 21 sept. 2005 à 01:49
salut,
en effet, il y a une petite incompréhension :
EOF = End Of File
si la table n'a qu'un seul enregistrement, tu peux le lire. tu es cependant en EOF
BOF = Begin Of File
la première ligne (sous réserve mais je crois que "même vide") est considérée comme le BOF
donc forcément, çà marche. mais ce n'est pas approprié
regarde si Rst.Count te retourne quelquechose (et existe).
sinon, fait une requête pour compter.
si 0, là tu sais que c'est vide.
sinon, tu te places sur le premier, tu les lis un par un -- next -- jusqu'à EOF
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 21 sept. 2005 à 02:31
voici un bout de code que j'utilise.
mes méthodes sont fiables, mais loin de moi l'idée de prétendre qu'elles valent mieux que d'autres..
'ouvre la base
On Error GoTo BASEUNFOUND 'base non-trouvée
Set db = OpenDatabase(App.Path & "\mabase.mdb", _
True, False, ";pwd=" & PassBasePref)
On Error GoTo 0 'fin de gestion d'erreur
'compte le nombre d'occurences
sql = "SELECT Count(users.USER) AS CompteDeUSER " & _
"FROM users"
Set rs = db.OpenRecordset(sql, dbOpenDynaset)
NbUsers = rs("CompteDeUSER")
Set rs = Nothing
If NbUsers = 0 Then GoTo BASEVIDE
Doro81079
Messages postés380Date d'inscriptionvendredi 22 avril 2005StatutMembreDernière intervention24 février 201556 20 sept. 2005 à 06:45
re,
et tu as oublier :adOpenKeyset, adLockReadOnly à la place des ??? dans ta 1ere requête
Rst.Open "SELECT sum(QuaPro)as SomTotQua, Sum(TonPro)as SomTotTon From [Avoir_Marchandise_Dans] Where (CodNavArr = '" & Me.TxtCodNavArr & "') and (CodSoc = '" & Me.TxtCodSoc & "')", Cnn???????????
P__ROMEO
Messages postés294Date d'inscriptionvendredi 25 février 2005StatutMembreDernière intervention 9 mars 20061 20 sept. 2005 à 13:42
bonjours.
Merci pour vos 2 réponses. Je penses que je devais preciser ce que j'avais essayé, pour ne pas vous
perdre le temps. la prochaine fois je le ferais promis.
En effet Doro, ta methode devrait marcher. c'est meme celle qui est juste en bas dans mon code.
mais, le truc, c'est que j'avais déjas essayé cela avant, ca n'avais pas marché. et, les ???? je les ai mis
mais, ca passe pas. en fait, si je ne les avais pas mis, c'est parceque je ne vais pas Modifier, ou
enregistrer de nouveaux Tuple. ma Cnn, me sert seulement pour récupérer les données.
Econs, j'ai essayé de faire Rst.MoveFirst, mais c'est pareil.
j'ai trouvé une méthode qui pourais me dépanner pour le moment, c'est de vérifier si la valeur de SomTotQua
est null. je sais, ce n'est pas la meilleur technique et c'est dangereux, mais, c'est provisoir.
P__ROMEO
Messages postés294Date d'inscriptionvendredi 25 février 2005StatutMembreDernière intervention 9 mars 20061 20 sept. 2005 à 23:42
Bonsoir
j'ai essayé de revoir ca qui n'allait pas. j'ai essayé beaucoup de combinaison.
j'ai meme essayé de faire le contraire de ce que je veux. Le combre, CA MARCHE.
je suis perdu la. soit c'est mon VB qui est fou, soit c'es mon livre de VB qui est null.
voici le code que j'avai mis en haut et qui me posait problème:
Rst.Open "SELECT sum(QuaPro)as SomTotQua, From [Avoir_Marchandise_Dans] Where (CodSoc = '" & Me.TxtCodSoc & "')", Cnn<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
If Rst.EOF Then
MsgBox " La société n'a aucune marchandise sur ce navire, vbInformation, "Introx : enregistrement inexistant"
Rst.Close
Exit Sub
End If
Dite moi, est ce que ce code ne veut pas dire que:
si ma requete ne m'a renvoyé aucun enregistrement, alors msgbox "blabla blabla...."
Si oui, donc EOF ici est juste. mais, ca passait pas.
je vient de remplacer EOF par BOF, et la, ca marche.
quesque je doit comprendre??
est ce que c'es prudent de laisser comme ca??
si je met le programme dans la boite ou je suis en stage, ca ne va pas faire l'inverse??
P__ROMEO
Messages postés294Date d'inscriptionvendredi 25 février 2005StatutMembreDernière intervention 9 mars 20061 21 sept. 2005 à 02:08
<TD id=HB_Focus_Element vAlign=top width=\"100%\" background=\"\" height=250 body UNSELECTAB<>oui, je pense que je comprend plus. mais, ca veut dir que la méthode qu'on utilisait en classe était pas bien.
pour savoir si une table est vide, EOF n'est pas fiable.
pourtant ca passait en cours. (Chaque machine ses humeurs)
OK, MAis, tu confirmes que compter le nombre d'enregidtrement dans la table, tout en sachant que si
j'ai 0, ca veut dire que ma table est vide C'est une Technique qui marche sans jouer des tours?
en fait, cette question, c'est par raport à ton expérience que je te la pose. c'est juste que j'ai eu ma dose
de ces méthodes qui fonctionent quand elles veulent, et me pourissent mes programmes quand j'en
ai vraiment pas besoin.
P__ROMEO
Messages postés294Date d'inscriptionvendredi 25 février 2005StatutMembreDernière intervention 9 mars 20061 21 sept. 2005 à 02:50
Merci.
c'est vraiment gentil de ta part. tu viens de me sortir d'un pétare. (Meme l'école que je payes chèr,
n'a pas été capable de m'expliquer cela aussi simplement et clairement, et "juste". ou l'on va la??)