IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

[Base Access] Stocker une Table dans un tableau


Sujet :

VB 6 et antérieur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de La Praline
    Inscrit en
    Mars 2007
    Messages
    592
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2007
    Messages : 592
    Par défaut [Base Access] Stocker une Table dans un tableau
    Bonsoir à toutes et à tous,

    Me voici revenu avec mes ignorances ô combien nmobreuse en ce qui concerne la gestion de base de donnée...

    Et pour ne pas changer, je vais vous parler de patates...

    Je résume ma situation.
    Je possede deux tables dans une base de donnée Access.
    La première se nomme t_Reference_Patate. Elle contient des champs tels que la date de l'expérience, le numero de l'expérience et l'Id_Reference_Expérience... Ca ira dans un premier temps !
    La seconde se nomme t_Resultat_Patate. Elle contient notement un champ nommé Temps et un autre nommé Pression. Ces champs contenant respectivement la pression en fonction du temps(données issues d'une carte d'acquisition...)... L'autre champs très important dans cette table est Id_Ref_Expérience, qui correspond au numéro de l'expérience, qui lui même correspond à la date etc... C'est un moyen d'obtenir les valeurs de temps et de pression qui correspondent à l'expérience souhaitée (en effet, il n'y aura qu'une seule table pour stocker toutes les expériences, donc cet Id_Ref_Expérience permet de distinguer les expériences...)
    Le but de mon prgramme, vous l'aurez compris, est d'afficher la courbe de pression en fonction du temps.
    La partie graphique(PictureBox, etc...) est faites (encore merci à vous ), et il ne me reste plus qu'à rapatrier les champs Temps et Pression dans un tableau à deux dimensions...

    J'ai bien essayé de mettre en application ce que j'ai pu lire/voir/tester durant mes recherches passés sur les ADO mais en vain(ca aussi vous l'aurez deviné...)...


    Alors j'ai entendu parlé, en fait j'ai vu sur quelques posts, de GetRow qui à priori est fait pour... cependant ni ni n'a pu m'en apprendre d'avantage... *frustré*


    Donc voici ce que j'ai pour l'instant...
    Je précise avant de vous proposer le code que j'ai, dans un premier temps, essayé de me simplifier les choses...
    J'entends par là que je veux seulement stocker les champs dans un tableau... rien de plus dans un premier temps...
    Ensuite je verrais pour le reste (c'est à dire selectionner les champs utilise suivant la valeur de Id_Ref_Expérience)...


    Voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Private Sub Form_Load()
     
    Dim tabtrace(1000)
    Dim rs As Recordset
    Dim i As Integer
    Dim strConnex As String
    Dim SQL As String
     
    Set cn = New ADODB.Connection
    Set rs = New ADODB.Recordset
    strConnex = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Documents and Settings\Admin\Bureau\vb\Graph_Visual\BD_Tirs.mdb;Mode=ReadWrite|Share Deny None;Persist Security Info=False"
    SQL = " SELECT temps FROM t_resultats_patate WHERE id_ref_expérience=1" 'là on ne veut que les informations du premier tir donc...
     
    cn.Open strConnex
    rs.Open SQL, cn, adOpenDynamic, adLockOptimistic, adCmdText
    rs.MoveFirst 'on se place au début...
     
    For i = 1 To 300 '300 étant le nombre de points de temps disons... => simplification
    tabtrace(i) = ??????? 'voilà, c'est ici que je ne sais pas quoi mettre pour remplir mon tableau...
    rs.MoveNext 'et on passe au suivant...
    Next i 'tant qu'il y en a...
    End Sub

    Alors j'entends déjà les "hô mais t'as vraiment fait n'importe quoi mec' !!! Vas t'acheter un cerveau, etc etc..."...
    Et vous auriez raison

    Alors si mise en boite il y a, j'en serais honoré si explication il y a... vous voyez


    D'avance merci à vous...
    Bonne soirée



    Cordialement


    ~~ La Praline ~~
    ... un choco "gné ?!"

  2. #2
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 132
    Par défaut
    tabtrace(i) = NomDelaTable!NomDuChamp
    Donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim tabtrace() 'on dimensionnera pour chaque resultat d'ouverture de la table
    'dimensionnement du tableau
    redim tabtrace(rs.RecordCount)
    For i = 1 To rs.RecordCount
     tabtrace(i) = rs!temps
     rs.MoveNext 'et on passe au suivant...
     DoEvents
    Next i
    rs.Close: DoEvents
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  3. #3
    Membre chevronné Avatar de La Praline
    Inscrit en
    Mars 2007
    Messages
    592
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2007
    Messages : 592
    Par défaut
    Okay merci bien mon cher ProgElecT

    Finalement je n'était pas si loin ^^

    Merci beaucoup !!!
    Amicalement

  4. #4
    Membre Expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Par défaut
    Et une autre syntaxe, qui a ma preférence d'ailleurs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tabtrace(i) = rs("temps")

  5. #5
    Membre chevronné Avatar de La Praline
    Inscrit en
    Mars 2007
    Messages
    592
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2007
    Messages : 592
    Par défaut
    Après test, ca n'étonnera personne si je dis que ton bout de code fonctionne...


    il me reste tout de même deux trois détails à régler... Deux en fait...

    Le premier concerne le rs.RecordCount qui reste à -1 :s (vais tacher de comprendre pourquoi...)
    Et le second point concerne l'affichage...
    J'arrive à stocker les valeurs de ma table dons mon tableau, c'est déjà une très bonne chose.

    J'arrive à l'afficher dans ma PictureBox, rien d'étonnant non plus.

    Par contre dès que je touche aux zoom... plus rien !!!
    Enfin, j'écris "plus rien"... en apparence plus rien. Mais si on balade la souris sur le graphique, les curseurs suivent une courbe invisible...

    Cette courbe invisible est bel et bien l'image du zooom que je veux effectuer mais, je ne sais pas pourquoi elle ne s'affiche plus...
    Mais ça aussi je vais tacher d'y remédier..




    Encore merci, je tâche de vous tenir au courant


    Amicalement

  6. #6
    Membre Expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Par défaut
    le rs.RecordCount qui reste à -1
    Vi, on a tous buté sur cette annomalie. Il faut faire un rs.movelast pour que le recordcount retourne la bonne valeur, et on fait un rs.movefirst , pour revenir au premier enregistrement.

    Pour l'autre probleme, sans garantie, essaye de mettre la propriété du picture box AutoRedraw à true. Ou encore faire un Picture1.Refresh à la fin de ton dessin

  7. #7
    Membre chevronné Avatar de La Praline
    Inscrit en
    Mars 2007
    Messages
    592
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2007
    Messages : 592
    Par défaut
    Citation Envoyé par Delbeke
    Il faut faire un rs.movelast pour que le recordcount retourne la bonne valeur, et on fait un rs.movefirst , pour revenir au premier enregistrement.
    Je vais tester ça de ce pas... *décidé*

    Citation Envoyé par Delbeke
    Pour l'autre probleme, sans garantie, essaye de mettre la propriété du picture box AutoRedraw à true. Ou encore faire un Picture1.Refresh à la fin de ton dessin
    Alors c'est à ce problème que je me suis attaqué en premier...
    Et j'ai trouvé peut être pas "la" solution... THE solution... mais au moins je vois mes courbes apparaitre maintenant

    En fait ce qu'il se passait c'est que durant mes tests, j'avais mis 100 points à tracer(par convenances) sur un ScaleWidth de 100...
    Histoire de voir l'évolution de ma courbe en placant un point d'arrêt dans une boucle for i=1 to 100...
    J'avais donc un pas d'incrément de 1.

    Maintenant, avec ma vraie courbe, j'ai un pas d'incrément de 0.2... et ce jusqu'à la valeur 100... Soit 500 valeurs différentes...


    Donc en résumé j'ai toujours un ScaleWidth de 100 mais avec 500 valeurs à afficher...
    De fait lorsque je faisais un zoom j'appelais ma procédure de tracage en passant ScaleWidth en paramètre... donc il ne m'afficher que 100 points grand max au lieu de 500.
    Et étant donné que les premier 100 points de ma courbes se confondent avec l'axe des abscisses, je ne les voyais pas !

    Le fin mot de l'histoire est assez idiot!
    Il m'a donc suffit de modifier mes appels de tracage et le tour était joué
    (je précise au passage que le problème se posait bien évidement pour les défilements... "ca va de soit !"comme dirait Brassens)



    D'ailleurs tant que j'y suis, je vais tout de même essayer un refresh parce que certaines fois, après un zoom, il manque un petit bout de courbe. Quelques millimètres seulement. Mais étant perfectionniste, il faut que je trouve d'où cela vient et surtout pourquoi !

    Et pour finir je me demandais si il est possible de changer la couleur de la courbe ???
    jusqu'à présent je ne m'étais servis que de lignes crées dynamiquement pour tracer des courbes, j'avais donc accès à leurs propriété .BackColor.

    Mais avec un PictureBox, on se sert de PictureBox.Line (x,y)-(x,y) pour tracer les courbes... As-t-on accès à une propriété qui pourrait définir la couleur, la taille, etc ???




    Voilà ca en est tout de mes petits problèmes...
    Enfin je ne vous dis pas tout bien sûr...
    Par exemple hier en partant du boulot j'ai failli poutrer un chevreuil... il s'en est fallu de peu qu'il finisse dans mon assiette celui là !!! Et puis ensuite avec mon AX qui ne freine plus beaucoup et qui n'a pas de cligno.....ZZZZzzzzzz ZZZZZZzzzzzzz



    ~~ La Praline ~~
    ... un choco soporifique...

  8. #8
    Membre chevronné Avatar de La Praline
    Inscrit en
    Mars 2007
    Messages
    592
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2007
    Messages : 592
    Par défaut
    Citation Envoyé par Delbeke
    Vi, on a tous buté sur cette annomalie. Il faut faire un rs.movelast pour que le recordcount retourne la bonne valeur, et on fait un rs.movefirst , pour revenir au premier enregistrement.
    Je dois être un crétin...

    J'ai compris le principe, mais il me retourne encore -1...

    Voici mon code (enfin l'extrait qui va bien...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Set cn = New ADODB.Connection
    Set rs = New ADODB.Recordset
    strConnex = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Documents and Settings\Admin\Bureau\vb\Graph_Visual\BD_Tirs.mdb;Mode=ReadWrite|Share Deny None;Persist Security Info=False"
    SQL = " SELECT temps FROM t_resultats_patate WHERE id_ref_expérience=1" 'là on ne veut que les informations du premier tir donc...
     
    cn.Open strConnex
    rs.Open SQL, cn, adOpenDynamic, adLockOptimistic, adCmdText
    rs.MoveLast 'on va donc à la fin...
    rs.MoveFirst 'puis on se place au début...
    NbrPoints=rs.RecordCount
    Avec un point d'arrêt, je constate que NbrPoints vaut -1...

    J'ai aussi essayé ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Set rs = New ADODB.Recordset
    strConnex = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Documents and Settings\Admin\Bureau\vb\Graph_Visual\BD_Tirs.mdb;Mode=ReadWrite|Share Deny None;Persist Security Info=False"
    SQL = " SELECT temps FROM t_resultats_patate WHERE id_ref_expérience=1" 'là on ne veut que les informations du premier tir donc...
     
    cn.Open strConnex
    rs.Open SQL, cn, adOpenDynamic, adLockOptimistic, adCmdText
     
    rs.MoveFirst 'on se met au début
    rs.MoveLast 'puis on va donc à la fin...
    rs.MoveFirst 'et pour finir on se replace au début...
    NbrPoints=rs.RecordCount
    Mais rien n'y fait... toujours -1...


    Suis-je l roi des boulet ? ou suis le malchanceux de la jounrée ???
    Amicalement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 17/01/2008, 18h06
  2. Réponses: 2
    Dernier message: 04/06/2007, 14h45
  3. Réponses: 1
    Dernier message: 04/05/2007, 17h59
  4. Réponses: 9
    Dernier message: 19/03/2007, 11h46
  5. [MySQL] Lister le contenu d'une table dans un tableau HTML
    Par carmen256 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 03/04/2006, 20h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo