Erreur " 0 " dans insertion de dates dans MSHFlexgrid

cs_Ishtar Messages postés 1 Date d'inscription mardi 14 mai 2002 Statut Membre Dernière intervention 14 mai 2002 - 14 mai 2002 à 12:19
GhostPiwiik Messages postés 11 Date d'inscription lundi 10 mai 2004 Statut Membre Dernière intervention 28 septembre 2004 - 30 juin 2004 à 18:54
Bonjour à tous,

Je fais une appli interface VB - Access97. Dans une des forms, j'ai un MSHFlexgrid, que je remplit dynamiquement : je fais une requete sur une table, et je récupère les dates. Ensuite, je fais une autre requete, et je récupère les dates d'une autre table, en voulant les insérer au bon endroit, et en créant à chaque fois une nouvelle cellule...
Le problème, c'est qu'à l'éxécution VB me fais une erreur "0" à la fin de l'éxécution de cette commande, et dans le tableau 2 des 8 champs ne sont pas classés.
Quelqu'un sait à quoi se rapporte ce type d'erreur?
J'avoue que je suis un peu perdu, j'ai a priori vérifié toute les conversion string<=>date, pas de pb (de tte façon tt marche sauf la fin), mais la je ne sais plus ou donner de la tete...

je vous donne mon code a tout hasard...

date_fin_txt.Text = Str(date_fin)
date_debut_txt.Text = Str(date_deb)
nb_ligne = 0
grid_rech_date.Col = 0 'on se met sur la première colonne, celle des dates
' Connexion à la base de données
Call SeConnecter
trouve = False
remplace = False
' 1. Remplissage de la colonne des dates par les dates de mélange
' recherche du nombre d'enregistrements
sql = "SELECT Melange.date_debut_melange FROM Melange WHERE melange.Date_debut_melange >= #" & date_deb & "# and melange.date_debut_melange <= # " & date_fin & "# ORDER BY Melange.Date_debut_melange"
Set rs = con.Execute(sql)
Do While Not rs.EOF
If IsNull(rs!Date_debut_melange) = False Then
nb_ligne = nb_ligne + 1
End If
rs.MoveNext
Loop
rs.Close
grid_rech_date.Rows = nb_ligne + 1 ' on affecte au tableau autant de lignes que l'enregistrement contient de données, plus une pour le titre
sql = "SELECT Melange.Date_debut_melange, melange.num_ot FROM Melange WHERE melange.Date_debut_melange > #" & date_deb & "# and melange.date_debut_melange < # " & date_fin & "#"
Set rs = con.Execute(sql)
'test pour savoir si l'enregistrement existe
grid_rech_date.Row = 0
Do While Not rs.EOF
If IsNull(rs!Date_debut_melange) = False Then
datecurr = rs!Date_debut_melange
grid_rech_date.Row = grid_rech_date.Row + 1
grid_rech_date.Text = CStr(datecurr)
Else: Exit Do
End If
rs.MoveNext
Loop
rs.Close

' 2. insertion des dates supplémentaires
'******************
''PARTIE OU PROBLEMES POTENTIELS
'' Ajout des dates de remplissage
sql = "SELECT remplissage.date_debut_remplissage, remplissage.num_ot FROM Remplissage WHERE remplissage.Date_debut_remplissage > #" & date_deb & "# and remplissage.date_debut_remplissage < # " & date_fin & "#"
Set rs = con.Execute(sql)
Do While Not rs.EOF
' insertion de l'algorithme de tri / insertion de date ***
i = 0 ' on met la variable pour le parcours du tableau à 0
' init des booléens de recherche
' on met dans la variable la date à insérer
If IsNull(rs!Date_debut_remplissage) = False Then
datecurr = rs!Date_debut_remplissage
Else
MsgBox "problème de date"
Exit Sub
End If

' on recherche l'emplacement dans le grid où l'insérer
Do While i < grid_rech_date.Rows
grid_rech_date.Col = 0 ' on se place sur la colonne des dates
grid_rech_date.Row = i ' on se place sur une ligne à chaque fois
If grid_rech_date.Text <> "" Then ' Test pour savoir s'il y a quelque chose dans la cellule
' S'il y a déjà quelque chose dans la cellule(date de mélange par exemple), il faut le comparer avec la date de l'enregistrement
' 3 cas existent : + petit, + grand, même date.
date_grid = CDate(grid_rech_date.Text)
MsgBox "Datecurr : " & datecurr & " et date grid : " & date_grid
If IsNull(date_grid) = False Then ' Test pour vérifier que la date du grid n'est pas nulle
If datecurr < date_grid Then ' Si la date de l'enregistrement est plus grande que celle du grid, il faut insérer la ligne à cet endroit en décalant
' l'ensemble des cellules qui suivent.
MsgBox "datecurr < date_grid"
grid_rech_date.Rows = grid_rech_date.Rows + 1 ' On mets une ligne en plus dans le tableau pour insérer la ligne de date
' Puis on décalle les cellules du grid à partir de la cellule courante
If i <> 1 Then
j = i - 1 ' on place l'itérateur sur la cellule à remplacer
Else
j = 1 ' cas ou on est sur la première cellule
End If
Do While j <> (grid_rech_date.Rows)
grid_rech_date.Row = j ' on se positionne au niveau de la cellule
grid_rech_date.Col = 0
If grid_rech_date.Text <> "" Then ' premier test
temp = CDate(grid_rech_date.Text) ' on met la valeur cible dans une variable temporaire
End If
grid_rech_date.Text = Str(datecurr) ' on met la valeur dans la cellule
datecurr = temp ' on récupère la valeur qui était avant dans la cellule dans l'autre variable
j = j + 1
Loop
'Exit Do ' sortier de la boucle quand l'emplacement a été trouvé
ElseIf datecurr > date_grid Then ' cas ou la date courante est la plsu récente : on la positionne en bas du tableau
MsgBox "datecurr > date_grid"
grid_rech_date.Rows = grid_rech_date.Rows + 1 ' en ajoutant une colonne
grid_rech_date.Row = grid_rech_date.Rows - 1
grid_rech_date.Col = 0 ' on se positionne sur la cellule créée
grid_rech_date.Text = datecurr
Exit Do ' on sort de la boule une fois l'emplacement trouvé
ElseIf datecurr = date_grid Then
grid_rech_date.Text = Str(datecurr)
MsgBox " même date"
Exit Do
End If
' CAS OU LE GRID NE CONTIENT PAS DE DONNEES
Else
grid_rech_date.Row = i
grid_rech_date.Col = 0
grid_rech_date.Text = Str(datecurr)
Exit Do
End If
End If
i = i + 1
Loop
rs.MoveNext
Loop
rs.Close

2 réponses

GhostPiwiik Messages postés 11 Date d'inscription lundi 10 mai 2004 Statut Membre Dernière intervention 28 septembre 2004
30 juin 2004 à 18:51
[Hk]GhostPiwiik
0
GhostPiwiik Messages postés 11 Date d'inscription lundi 10 mai 2004 Statut Membre Dernière intervention 28 septembre 2004
30 juin 2004 à 18:54
Tu n'utilise pas les bonnes fonctions dans ton code, sache qu'en VB il ya des regles strictes a respecter concernant les dates:
Analyse ce petit bout de code et tu comprendras ton problème.

Private Sub Command1_Click()
Dim DTDEB As Date, DTFIN As Date

Text1.Text = Format$(Text1.Text, "dd/mm/yy")
Text2.Text = Format$(Text2.Text, "dd/mm/yy")
DTDEB = CDate(Text1.Text)
DTFIN = CDate(Text2.Text)
If CLng(DTDEB) > CLng(DTFIN) Then
lblverif.Caption = " A est plus loin que B..."
Else
lblverif.Caption = " A est avant B ..."
End If
End Sub

[Hk]GhostPiwiik
0
Rejoignez-nous