Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2054 connectés 

  FORUM HardWare.fr
  Programmation

  [VB] un recordset qui merde....

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[VB] un recordset qui merde....

n°26110
trictrac
Posté le 20-04-2001 à 09:46:13  profilanswer
 

j'ai un recordset que j'appele record, que j'utilise de la maniere record!nom_du_champ, et j'aurais voulu savoir omment ca se fait que lorsque je n'exploite pas les records dans l'ordre de la table, j'ai des erreur aleatoires, parfois une, puis une autre...et ca se resout lorsque je les exploite dans l'ordre
PS: dans l'ordre, ca ne me convient pas au niveau du code.

mood
Publicité
Posté le 20-04-2001 à 09:46:13  profilanswer
 

n°26115
tom64
Posté le 20-04-2001 à 10:04:15  profilanswer
 

:??:  
est ce ke tu fais un refresh dès le début??
si tu commences en plein milieu de ta table, au bout d'un moment, tu arrives à la fin. donc là normalement tu a fait un refresh, mais comment il sait ke tu as finit?? il fait peut être une traversée de la table entière; soit donc une la "demi-traversée" (selon où tu l'a fait partir) puis le parcours total de la table

n°26116
trictrac
Posté le 20-04-2001 à 10:07:52  profilanswer
 

pas bien compris ta reponse, donc je reexplique:
J'ai une tablt avec 10 champc: c1, c2, .., c10.
Je sors un recordset de cette table, et si l'exploitation est du type
 
xxxx = record!c1
xxxx = record!c2
xxxx = record!c3
xxxx = record!c4
xxxx = record!c5
xxxx = record!c6
xxxx = record!c7
xxxx = record!c8
xxxx = record!c9
xxxx = record!c10.... ca marche bien
 
xxxx = record!c9
xxxx = record!c10
xxxx = record!c6
xxxx = record!c4
xxxx = record!c1
xxxx = record!c3
xxxx = record!c5
xxxx = record!c2
xxxx = record!c8
xxxx = record!c7.... ca marche pu bien, meme carrement pas

n°26119
tom64
Posté le 20-04-2001 à 10:11:30  profilanswer
 

tu peux me montrer ton code source?

n°26121
thegti
La constipation se soigne ...
Posté le 20-04-2001 à 10:12:17  profilanswer
 

Hummm
Je parirais pour un * dans la requête
Non ?

n°26123
tom64
Posté le 20-04-2001 à 10:15:59  profilanswer
 

g déjà eu une erreur comme ça à cause d'une * ki était collée à mon from.
mais en fait, avec un filtre, y a plus besoin de select * from

n°26128
trictrac
Posté le 20-04-2001 à 10:28:54  profilanswer
 

Voici le code source.....attention les yeux PS: je suis pres a repondre instantanement a toutes les kestions dans la mesure ou ca fais avvancer mon pb
 
Private Sub p_table_Click()
If modifier = True Then 'si on est en modification
     
    Form3.Show 'attention, form3 cree sa propore connection et ecrase les anciens records
     
    'etablissement de la connection
    connection
     
    'recherche du materiel selectionne
    requete record, "select * from _materiel where id_materiel = " & p_table.TextMatrix(p_table.Row, 0)
     
    'ouverture de la form3 et initialisation de tous les champs
    Form3.nouveau = False
    Form3.modifier = True
    Form3.p_bnumber = record!bnumber
    Form3.p_bnumber.Enabled = False
    Form3.p_cout = record!cout
    Form3.p_date_deb = record!date_rep_debut
    Form3.p_date_fin = record!date_rep_fin
    Form3.p_divers = record!divers
    Form3.p_harddisk = record!harddisk
    Form3.p_localisation = record!localisation
    Form3.p_processeur = record!processeur
    Form3.p_marque = record!marque
    Form3.p_modele = record!model
    Form3.p_ram = record!ram
    Form3.p_reference = record!reference
    Form3.p_kind.ListIndex = RTrim(record!Kind)
    Form3.p_ip1 = record!ip1
    Form3.p_ip2 = record!ip2
    Form3.p_ip3 = record!ip3
    Form3.p_ip4 = record!ip4
    Form3.p_mac1 = record!mac1
    Form3.p_mac2 = record!mac2
    Form3.p_mac3 = record!mac3
    Form3.p_mac4 = record!mac4
    'JAURAIS VOULU RAJOUTER ICI LES DEUX DERNIERS CHAMPS; POUR ETRE HOMOGENE DANS LE CODE
             
    If Not IsNull(record!id_user) Then 'si un utilisateur est defini
        For Index = 0 To Form3.p_id_user.ListCount - 1 'pour toutes les lignes de la combo box
            'si l'item data correspond a l'ID de l'user alors...
            If Form3.p_id_user.ItemData(Index) = RTrim(record!id_user) Then
                'on affcihe ce user
                Form3.p_id_user.ListIndex = Index
                Exit For
            End If
        Next
        Form3.p_id_departement.Enabled = False 'on interdit la modification du departement
    End If
     
    'idem avec la combo box des factures
    For Index = 0 To Form3.p_id_facture.ListCount - 1
        If Form3.p_id_facture.ItemData(Index) = RTrim(record!id_facture) Then
            Form3.p_id_facture.ListIndex = Index
            Exit For
        End If
    Next
    Form3.p_id_facture.Enabled = False
    Form3.p_os = record!os
     
     
    If record!Status = 0 Then 'evaluation du status pour affichage
        Form3.p_status1 = True
    ElseIf record!Status = 1 Then
        Form3.p_status2 = True
    ElseIf record!Status = 2 Then
        Form3.p_status3 = True
    Else: Form3.p_status1 = True
    End If
         
    'a cloner sur record?
    Dim rec As adodb.Recordset
    Set rec = New adodb.Recordset
    rec.ActiveConnection = connection1
     
    'remplissage de la combobox avec tous les departements ayant une cle pour ce materiel
    requete rec, "select _utilise.id_departement, nom_departement from _utilise,_departement where _utilise.id_departement = _departement.id_departement and id_materiel = " & p_table.TextMatrix(p_table.Row, 0)
    With rec
        .MoveFirst
        Form3.p_id_departement.Clear
        Do While Not .EOF
            Form3.p_id_departement.AddItem RTrim(!nom_departement)
            Form3.p_id_departement.ItemData(Form3.p_id_departement.NewIndex) = .Fields(0)
            .MoveNext
        Loop
    End With
     
     
    'recherche du departement responsable
    requete rec, "select _utilise.id_departement, nom_departement from _utilise,_departement where _utilise.id_departement = _departement.id_departement and id_materiel = " & p_table.TextMatrix(p_table.Row, 0) & " and _utilise.est_responsable = 1"
    If IsNull(record!id_user) Then 's'il existe, on l'affiche
        For Index = 0 To Form3.p_id_departement.ListCount - 1
            If Form3.p_id_departement.ItemData(Index) = RTrim(rec.Fields(0)) Then
                Form3.p_id_departement.ListIndex = Index
                Exit For
            End If
        Next
        Form3.p_id_user.Enabled = False
    End If
     
    Form3.p_ou_rep = record!ou_rep    |Voici les champs incriminé
    Form3.p_type = record!Type        |
         
    Form6.Hide
 
    deconnection
     
ElseIf attribuer = True Then
    Form6.Hide
    Form5.Show
    Form5.WindowState = 2
Else
    MsgBox msg4
End If
 
End Sub
 
Merci

n°26131
trictrac
Posté le 20-04-2001 à 10:32:10  profilanswer
 

Dans la mesure ou on parle exploitation de recordset, comment fait on pour pour exploiter une requete sur plusieur table sans passer par la propriete .fields():
 
record!table.champ ne marche po :-(

n°26140
godbout
Génial.
Posté le 20-04-2001 à 10:48:19  profilanswer
 

Eh c'est marrant Trictrac je fais la meme chose que toi sauf que dans ma boite personne ne vole plus haut que les macros access !!
 
Encore heureux que j'ai de l'aide sur le net :D:D:p
 
Merci a Waybee en passant

n°26150
trictrac
Posté le 20-04-2001 à 11:11:48  profilanswer
 

Tu fais aussi ton stage pour l'iut a nancy me semble-t-il
???
C'est koi exactement le libelle de ton stage, tu m'interresse (langage utilise??)

mood
Publicité
Posté le 20-04-2001 à 11:11:48  profilanswer
 

n°26152
thegti
La constipation se soigne ...
Posté le 20-04-2001 à 11:14:07  profilanswer
 

Enlève l'étoile de la requête et remplace par les noms des champs dont tu a besoin
 
record!table.champ ne marche pas parce que la syntaxe c'est record!champ
Une requête sur plusieurs tables n'est "vu" que comme une table à la sortie
Quand ton * inclu deux noms de hamps identiques mais provenant de deux tables différentes et bah à la sortie tu n'aura plus ton champ
 
De toute facon, le * est à déconseiller

n°26158
tom64
Posté le 20-04-2001 à 11:31:54  profilanswer
 

Pour faire une requête, g modifié une fonction onnée en exempe dans msdn
 
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
 
essai donc de passer par un filtre.
ensuite dans ton source, ça donne ça:
 
' Ouvre un objet Recordset filtré : où le code de la table Articles est égal au code saisi
        Set EnregCode = Filtre(Base_de_donnees_helios.Recordset, "REFERENCE", Code)
         
        With Base_de_donnees_helios.Recordset
            ' Edite le nombre d'enregistrements pour l'objet Recordset original
            ' et pour l'objet Recordset filtré.
            ' Enumère le Recordset.
            Message = "CODE =  " & Txt_num_piece.Text & vbCr & "Commandes dans le Recordset original : " & Indice & vbCr & "Commandes dans le Recordset filtré : " & EnregCode.RecordCount
            MsgBox Message
            .Close
        End With
 
ça c le prog ke g fait moi. essai de l'adapter au tien.
et surtout n'oublie pas de faire des refresh

n°26159
godbout
Génial.
Posté le 20-04-2001 à 11:38:37  profilanswer
 

Ben je suis a Luneville en fait
 
Je dois faire une base pour pouvoir rentre des documents et faire une rechercher dessus, les ouvrir et tout et tout.
 
Je fais du vba, et pis la je me met a voir tout ce qui est ado, dao etc...
 
D'ailleurs si quelqu'un sait comment faire un record sur un champ d'un formulaire
 
Explication:
 
 
Dim MyDB As Database
Dim MyRst As DAO.Recordset
Dim MyVar As String
 
Set MyDB = CurrentDb
MyVar = "SELECT Document.numident, Document.nomredac FROM Document WHERE Document.nomredac Like 'alain*';"
 
Set MyRst = MyDB.OpenRecordset(MyVar)
 
MyRst.MoveLast 'Charge complètement l'objet
 
A la place de alain je voudrais mettre un truc du genre [Forms]![Rechercher des documents]![controle]
 
thx

n°26163
trictrac
Posté le 20-04-2001 à 11:51:50  profilanswer
 

Tom64 a écrit a écrit :

et surtout n'oublie pas de faire des refresh




Pourkoi?? ca fais koi les refresh surun record set

n°26168
tom64
Posté le 20-04-2001 à 12:09:34  profilanswer
 

déjà, il faut verifier ke ta table contient un élément.
le refresh permet de mettre le "pointeur" de la table sur le premier élément de celle-ci.
 
moi g vérifier le record.count en faisant un record.last puis après fait un refresh pour revenir au début.
 
now je me rend compte ke pour ton cas, ce n'est pas nécessaire. mais bon, essai toujours

n°26181
thegti
La constipation se soigne ...
Posté le 20-04-2001 à 13:03:56  profilanswer
 

Pourquoi sous VB vous utiliser DAO ?
Ce vieux truc a été remplacé depuis longtemps par ADO

n°26184
trictrac
Posté le 20-04-2001 à 13:11:38  profilanswer
 

jutilise un recordset ADODB, et non DAO...
Ou alors je n'est pas compris ta remarque...
PS: ODBC exclus, car trop de contraintes liées au poste...

n°26188
mid
Posté le 20-04-2001 à 13:24:39  profilanswer
 

Moi je met toujours des [] : record![nomdechamps]
J'ai jamais de problème d'ordre et j'utilise souvent *.
Est-tu sure d'avoir des noms pour tous les champs?

n°26193
thegti
La constipation se soigne ...
Posté le 20-04-2001 à 13:47:59  profilanswer
 

Ok ok  
Non parce que le refresh c'est en DAO que c'est utile
En ADO, tu choisit le bon type de recordet ca suffit
Et pis y'a pas de propriété Count, c'est RecordCount, à utiliser avec prudence d'ailleurs.
Bon de toute facon, les * ca fout la merde j'ai déjà eut des bugs avec
Et sinon utilise les propriétés standard notamment Fields

n°26198
trictrac
Posté le 20-04-2001 à 14:00:45  profilanswer
 

le probleme avec les fields(), c'est pour la maintenance, car si qqun rajoute un champs, ca peut foutre la merde... et sur ma table de 25+ champs, ca devient vite assez bordelique...

n°26204
thegti
La constipation se soigne ...
Posté le 20-04-2001 à 14:11:35  profilanswer
 

Deux possibilités avec la propriété Fields:
- Fields(index)  
  -> index: position du champ dans le recordset
- Fields(NomduChamp)
  -> équivalent à ton ! et mettre le nom du champ entre "
 
Méthode 1 est plus rapide en terme d'éxécution (pas de recherche de nom de champ dans le recordset)
Méthode 2 plus lente
 
Et de plus, je te précise que si quelqu'un rajoute un champ dans les deux cas y'a pas de souci, sauf avec l'utilisation du *
 
T'as essayé en virant le * ?
Moi je bosse depuis peu, mais sur des grosses tables et déjà deux ou trois merdes avec le *

 

[edit]--Message édité par thegti--[/edit]

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [VB] un recordset qui merde....

 

Sujets relatifs
[ASP/VB/ActiveX] Help je comprends rien du tout à cette merde ![VB6] Filtrer un recordset ou le réouvrir ?
[VB6] màj d'un Recordset[VB6] ListeBox et Recordset
[VB6] ouverture / fermeture d'un RecordsetRecordset sur ASP et Update
Le COLD FUSION c de la merde 
Plus de sujets relatifs à : [VB] un recordset qui merde....


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR