begin process at 2010 09 06 03:38:04
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Visual Basic 6

 > 

Base de données

 > 

ADO & DAO

 > 

Exporter une table de bdd dans un tableau multidimensionnel


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Exporter une table de bdd dans un tableau multidimensionnel

jeudi 17 juillet 2008 à 17:15:32 | Exporter une table de bdd dans un tableau multidimensionnel

Stag2

Bonjour,

Je dispose d'un base de donnée avec une table "prestation" qui contient 4 champs:
Le nom de la prestation (libelle_prestation), les prix min, moy & max de la prestation (respectivement min_ht, moy_ht et max_ht)

Dans un premier temps une datalist (datalist1) récupere le champs libelle_prestation, lorsque l'utilisateur clique sur le bouton "ajouter" cella l'ajoute sur une listbox (list1).

Une fois que l'on a choisi les prestations voulues, pour chaque prestation son nom apparait dans une textbox ainsi que ces 3 prix associés (checkbox). Mais je n'arrive pas a faire apparaitre les bon prix dans les check box.

Comme je permets le choix de 6 prestations max, il y a donc 18 checkbox associées (1 min, 1 moy et 1 max pour chaque prestation)


Voici le code :

Option Explicit
Dim MaDb As String

Private Sub cmdAdd_Click()
   
    List1.AddItem DataList1.Text
    cmdCalc.Refresh

End Sub

Private Sub cmdCalc_Click()
Dim i As Integer
Dim j As Integer
Dim k As Integer

lblMin.Visible = True
lblMoy.Visible = True
lblMax.Visible = True
lblTitre2.Visible = True
   
Select Case List1.ListCount

Case "1"

    Text1(0).Visible = True
   
    For j = 0 To 2
    Check1(j).Visible = True
    Next j
   
Case "2"

    For i = 0 To 1
    Text1(i).Visible = True
    Next i
  
    For j = 0 To 5
    Check1(j).Visible = True
    Next j

Case "3"

    For i = 0 To 2
    Text1(i).Visible = True
    Next i
   
    For j = 0 To 8
    Check1(j).Visible = True
    Next j

Case "4"

    For i = 0 To 3
    Text1(i).Visible = True
    Next i
   
    For j = 0 To 11
    Check1(j).Visible = True
    Next j

Case "5"

    For i = 0 To 4
    Text1(i).Visible = True
    Next i
   
    For j = 0 To 14
    Check1(j).Visible = True
    Next j

Case "6"

    For i = 0 To 5
    Text1(i).Visible = True
    Next i

    For j = 0 To 17
    Check1(j).Visible = True
    Next j

End Select

    For i = 0 To 5
    Text1(i).Text = List1.List(i)
    Next i

 

End Sub

Private Sub cmdCalcFin_Click()
Dim j As Integer

For j = 0 To (3 * List1.ListCount - 1)
If Check1(j).Value = 1 Then
Text2.Text = Val(Text2.Text) + Val(Check1(j).Caption)
End If
'cmdCalcFin.Refresh
Next j

If Text2 <> "" Then
Text3.Text = Text2.Text * 0.804
'cmdCalcFin.Refresh
End If

 

End Sub


Private Sub CmdQuit_Click()

    Unload Me
   
End Sub


Private Sub cmdRemove_Click()

    Dim i As Variant
    For i = List1.ListCount - 1 To 0 Step -1
    If List1.Selected(i) = True Then
    List1.RemoveItem i
    Text1(i).Visible = False
    Check1(3 * i).Visible = False
    Check1(3 * i + 1).Visible = False
    Check1(3 * i + 2).Visible = False
    End If
    Next i
   
    cmdCalc.Refresh

End Sub

Private Sub Form_Load()

Dim i As Integer
Dim j As Integer

    lblMin.Visible = False
    lblMoy.Visible = False
    lblMax.Visible = False
    lblTitre2.Visible = False
   
        For i = 0 To 5
        Text1(i).Visible = False
        Next i

        For j = 0 To 17
        Check1(j).Visible = False
        Next j

MaDb = App.Path & ".\FiiTCompta.mdb"
    With Adodc1
        .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & MaDb & ";Persist Security Info=False"
        .RecordSource = "SELECT * FROM Prestation ;"
    End With
    Adodc1.Refresh
   
    Set DataList1.DataSource = Adodc1
    Set DataList1.RowSource = Adodc1
    DataList1.DataField = Adodc1.Recordset.Fields(0).Name
    DataList1.ListField = Adodc1.Recordset.Fields(0).Name
    

    Check1(0).Caption = Adodc1.Recordset.Fields(1).Value  'correspond au prix min
    Check1(1).Caption = Adodc1.Recordset.Fields(2).Value  'correspond au prix moy
'    Check1(2).Caption = Adodc1.Recordset.Fields(3).Value  'correspond au prix max
   

End Sub


Ma table est tte bete, avec en champs1 les libelle_prestation, champs2 le prix mix, champs3 le prix moy & champs4 le prix max.


Avec Check1(0).Caption = Adodc1.Recordset.Fields(1).Value je n'obtiens que le premier élement du champs min. J'aimerais pouvoir choisir la ligne correspondante à la bonne prestation. J'ai vu qu'avec getrows je pourrais m'en tirer, mais ni mes recherches sur google, ni msdn ne m'ont permis de comprends comment m'en servir.

Mon idée c'est de faire une boucle ou je compare le contenu du text1 (0) (celui qui récupere la premiere prestation choisie) avec les noms des prestations, pour ensuite mettre les prix corespondants dans les 3 checkbox.
J'ai tenté de commencer avec ca:
 With Adodc1.Recordset
 .Find "libelle_prestation= " & Text1(0).Text & ""
mais je ne sais pas comment continuer

Sinon je pensais mettre le contenu de ma table dans un tableau a 2 dimensions. Je pourrais y naviguer plus facilement. Mais je m'y perds parmis les array etc.... (je débute)

Désolé pour ce gros pavé, mais je suis dans l'impasse et sans prendre le temps d'expliquer mon prob je doute que l'on puisse m'aider.

Merci

jeudi 17 juillet 2008 à 18:44:24 | Re : Exporter une table de bdd dans un tableau multidimensionnel

LIBRE_MAX

With Adodc1.Recordset
 .Find "libelle_prestation= " & Text1(0).Text & ""
 If .NoMatch Then
    MsgBox "Introuvable"
    'Ce qui est improbable puisque le contenu de la textbox
  ' a été initialement récupèré de la base.Mais c' est juste
   '   pour la forme.
    Exit Sub
 End If
    'Sinon tu es sur l' enregistrement recherché.
    'Tu n' as plus qu' ç récupèrer les champs.
     <Traitement>
 End With


Sinon je pensais mettre le contenu de ma table dans un tableau a 2 dimensions. Je pourrais y naviguer plus facilement. Mais je m'y perds parmis les array etc.... (je débute)
Dim NbEnr As Integer
Dim MonTableau() As Variant
NbEnr =Adodc1.RecordSet.RecordCount

Redim MonTableau(NbEnr,5)
Tu as donc un tableau de n lignes et 5 colonnes, à l' image de ta table.

Après, avec une boucle, tu recopies ta table dans ce tableau.
Tu effectueras alors ta recherche dans le tableau.
Mais si la première solution marche,ça sera pas
nécessaire de travailler avec un tableau.



 				 						 								
... Y'en a même qui disent qu'ils l'ont vu voler.
jeudi 17 juillet 2008 à 22:01:21 | Re : Exporter une table de bdd dans un tableau multidimensionnel

zen69

Dim myTable(3)
Dim myField0()
Dim myField1()
Dim myField2()
Dim myField3()
Dim i AS interger, j AS integer

i = 0
j = 0

With rs 'le nom de ton record set
 if not .recordcount = 0 then 
  do while not .eof and not .bof
    if not i = 0 then
      redim preserve myField0(0 to i)
      redim preserve myField1(0 to i)
      redim preserve myField2(0 to i)
      redim preserve myField3(0 to i)
    end if
    myField0(i) = .field(0).value
    myField1(i) = .field(1).value
    myField2(i) = .field(2).value
    myField3(i) = .field(3).value
    i = i + 1
 loop

myTable(0) = myField0
myTable(1) = myField1
myTable(2) = myField2
myTable(3) = myField3

msgbox myTable(0)(1)


     


  zen69 aka Ortho Le Profett
  [site web]
jeudi 17 juillet 2008 à 22:01:51 | Re : Exporter une table de bdd dans un tableau multidimensionnel

zen69

oups .movenext avant loop


  zen69 aka Ortho Le Profett
  [site web]
vendredi 18 juillet 2008 à 00:15:42 | Re : Exporter une table de bdd dans un tableau multidimensionnel

LIBRE_MAX

@Zen69

On entamme jamais une boucle avec
do while not .eof and not .bof

Tu n' entreras jamais si tu es sur le premier Enr.

A supposer que tu étais sur le 2° et que tu entres

i=0
...

 if not i = 0 then 'ce qui est faux au premier tour
      redim preserve myField0(0 to i)
      redim preserve myField1(0 to i)
      redim preserve myField2(0 to i)
      redim preserve myField3(0 to i)
 end if

==>Tes tableaux ne sont pas redimensionnés encore.

Et tu fais
myField0(i) = .field(0).value
myField1(i) = .field(1).value
myField2(i) = .field(2).value

...
Est-ce que ça c' est pas plus simple

Sub Remplir()
Dim myTable() As Variant
Dim i As Integer
With rs 'le nom de ton record set
  If .Bof And .Eof Then Exit Sub
   Redim Preserve myTable(.RecordCount-1,3)
   .MoveFirst
    i=0
   Do While Not .Eof
    
       myTable(i,0)=.Fields(0)
       myTable(i,1)=.Fields(1)
       myTable(i,2)=.Fields(2)
       myTable(i,3)=.Fields(3)
     
       i=i+1
     .MoveNext
    Loop
End With

End Sub



 

 				 						 								
... Y'en a même qui disent qu'ils l'ont vu voler.
vendredi 18 juillet 2008 à 12:02:04 | Re : Exporter une table de bdd dans un tableau multidimensionnel

Stag2

Merci pour vos réponses. Je m'y mets et vous tiens au courant
++
vendredi 18 juillet 2008 à 13:37:59 | Re : Exporter une table de bdd dans un tableau multidimensionnel

Stag2

J'ai choisi de passer par un tableau:
Dim myTable() As Variant
Dim K As Integer

With Adodc1.Recordset
  If .BOF And .EOF Then Exit Sub
   ReDim Preserve myTable(.RecordCount - 1, 3)
   .MoveFirst
    k = 0
   Do While Not .EOF
    
       myTable(k, 0) = .Fields(0)
       myTable(k, 1) = .Fields(1)
       myTable(k, 2) = .Fields(2)
       myTable(k, 3) = .Fields(3)
     
       k = k + 1
     .MoveNext
    Loop
End With

Quand j'essaye de le parcourir à l'aide de ce code :

Dim l As Integer
For l = 0 To Adodc1.Recordset.RecordCount
If Text1(0).Text = myTable(l, 1) Then
Check1(0).Caption = myTable(l, 2)
End If
Next l

 
J'ai une erreur a la ligne If text1(0).text = mytable(l , 1) Then
"Subscribe out of range"
Je ne comprends pas pourquoi. Si quelqu'un avait eu un problème similaire, ou en connaitrait la raison, ca m'aiderait.

Cdt,

vendredi 18 juillet 2008 à 16:03:56 | Re : Exporter une table de bdd dans un tableau multidimensionnel

LIBRE_MAX

Dim l As Integer
For l = 0 To Adodc1.Recordset.RecordCount -1
If Text1(0).Text = myTable(l, 1) Then
Check1(0).Caption = myTable(l, 2)
End If
Next l



Tu te souviens qu' n a fait
ReDim Preserve myTable(.RecordCount - 1, 3)
Parceque tu commences à 0.Et dnc si tu as 3 enregistrements,
ton tableau sera redimentionné à (2,3)
0
1
2

)a fait 3 passages
Même chose pour le nombre de champs.
Pour 4 champs tu auras

Fields(0),Fields(1),Fields(2),Fields(3)



... Y'en a même qui disent qu'ils l'ont vu voler.
vendredi 18 juillet 2008 à 16:07:02 | Re : Exporter une table de bdd dans un tableau multidimensionnel

LIBRE_MAX

et ajoutes un Exit For .Pas la peine de continuer quand tu trouves.

For l = 0 To Adodc1.Recordset.RecordCount -1
If Text1(0).Text = myTable(l, 1) Then
Check1(0).Caption = myTable(l, 2)
Exit For
End If
Next l




... Y'en a même qui disent qu'ils l'ont vu voler.
vendredi 18 juillet 2008 à 16:12:08 | Re : Exporter une table de bdd dans un tableau multidimensionnel

LIBRE_MAX

Réponse acceptée !
Et puis si libelle_prestation est dans la première colonne de ta TABLE,c à d le premier champ, il se retrouvera à la première colonne de tn tableau.C( est donc
 myTable(l, 0)

For l = 0 To Adodc1.Recordset.RecordCount -
1
If Text1(0).Text = myTable(l, 0) Then
Check1(0).Caption = myTable(l, 1) '2° champ
Exit For
End If
Next l



... Y'en a même qui disent qu'ils l'ont vu voler.

1 2 3

Cette discussion est classée dans : visible, to, for, next, check1


Répondre à ce message

Sujets en rapport avec ce message

FICHIER SEQUENTIEL [ par alain ] Bonjour,Je réalise un carnet de contacts, j'aimerais pouvoir effectuer une recherche par nom (en utilisant input box) et afficher avec msgbox le résul PaintPicture Probleme [ par Nerdz ] Picture1.ScaleMode = 2For n = 0 To 15On Error Resume NextPicture1.PaintPicture frmMain.Image2(n), n * 16, 0, 16, 16NextFor n = 16 To 31On Error Resume Écriture/lecture de fichiers INI [ par daniellapointe01 ] Bonjour.J'utilise l'écriture et la lecture dans les fichiers INI.J'ai un fichier 02.ini qui enregistre les options choisies à partir de checkbox. Je v probleme de boucle for [ par Antony ] Bonjour à tous !voilà g créé un petit programme qui me permet de créer des tables hexadecimal. je met la lettre a et a la suite il m'ajoute la lettre minimum et maximum [ par Fleur54 ] fleur54Bonjour,j'ai crée un prog pour calculer une fonction g(x,y) pour x et y ?{0;0,1;0,2;0,3;0,4;0,5;0,6;0,7;0,8;0,8}. z=x+y x est un tableau et y minimun et maximum [ par Fleur54 ] Bonjour,je voudrais savoir comment faire tourner une listbox de son minimum a son aximum. Sachant que les valeurs de la listbox change en fonction de importer un classeur excel dans vb6 [ par feihung ] bonjour!désireux de réussir mon programme, j'ai décidé de m'encquérir de votre aide à vous collègues informaticiens!!voilà, je tente d'afficher et dan envoi de données dans un fichier excel [ par Christjp ] Bonjour,Comment faire pour envoyer des données dans un tableau Excel en faisant un enregistrement régulier sur le disque dur au bout d'un certain mome nombres combinaison [ par jjvisualbasic ] J'essaye une manière afin d'effectuer les réductions d'exemple de nombres : 10 nombres dans le cinquine à la garantie de l'esatti de 6 nombres sur les Prog Loto [ par OneManShow ] J'ai trouvé un programme en C permettant de generer toutes les combinaisons possibles du loto Francais a 6 chiffres.J'ai essayé de l'adapter a VB6 mai


Nos sponsors


Sondage...

CalendriCode

Septembre 2010
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
27282930   

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,468 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales