Bedragen uit listbox optellen en eraf halen...

Status
Niet open voor verdere reacties.

the_dannyboy

Gebruiker
Lid geworden
2 jan 2002
Berichten
968
Hoi allemaal !!

Weer een vraagje over vb en het progje dat ik aan 't maken ben.

Ik wil bepaalde bedragen uit een listbox (bedragen komen uit database) bij elkaar optellen en van elkaar af halen, maar ik krijg het niet voor elkaar.

Dit is de code, maar wat klopt er niet aan?? (volgens mij is het de regel: List3.List(IndexNr), maar ik kan niks anders verzinnen om ervoor in de plaats te zetten...)

Dim Totaal As Integer, IndexNr As Integer
If List3.ListCount + List3.ListCount = 0 Then
Text6 = "0"
Exit Sub
End If
Do Until IndexNr = List3.ListCount
IndexNr = IndexNr + 1
If List4.List(IndexNr) = "+" Then
Totaal = Totaal + List3.List(IndexNr)
Else
Totaal = Totaal - List3.List(IndexNr)
End If
Loop
Text6.Text = Totaal

Het progje heb ik ook nog ff bijgevoegd, voor als je het probleem niet echt begrijpt...
 

Bijlagen

Doe mijn best om zo snel mogelijk een oplosiing te geven.

Zal eerst je zip bestandje downloaden. En zal je
programma even bestuderen.

Groet.
 
Sorry zo laat.

Hallo Danny,

Even 3 punten die niet helemaal ter zake doende zijn.
Nadat ik jouw programma gerund heb, blijkt dat:
1) Alle 5 velden van je tabel, tblBonnen geheten, zowel in
Form2 als in Form3 niet met de Data control zijn verbonden.
Heb dit alsnog gedaan.
2) RecordSetType stond op Dynaset, heb op Table gezet.
3) De Connect property van de Data control had ook
gewoon op Access kunnen staan i.p.v. Access 2000.

Nu de oplossing van je 2 vragen.


Vraag 1:
Helaas heb ik jouw gewijzigde code ondergebracht in een nieuwe
knop (op Form3) met de bedoeling om de code te testen, en het
werkt. Er is namelijk iets vreemds met je programma. Na Form_
Initialize volgt er, onverklaarbaar, een Click-event op List1.
Probeer je code in Form_Load i.p.v. in Form_Initialize.

Declareer in General van Form3:
Dim Totaal As Long
Dim IndexNr As Integer

Code:
Private Sub Command2_Click()
   IndexNr = 0
   Totaal = 0
   Do Until IndexNr = List3.ListCount
      If List4.List(IndexNr) = "+" Then
          Totaal = Totaal + (Val(List3.List(IndexNr)))
          Else
          Totaal = Totaal - (Val(List3.List(IndexNr)))
      End If
      IndexNr = IndexNr + 1
   Loop
   Text6.Text = Totaal
End Sub

Bovenstaande zou ook met Sql kunnen worden opgelost.
Als ik wat meer tijd heb, zal ik er een voorbeeld
geven. Wanneer je Admin.mdb in Visdata hebt geopend,
kun je daar in een Sql-venster Sql-statements gaan
uitvoeren. bv: Select Sum( Bedrag) From tblBonnen
Je krijgt dan het Totaal aan prijzen te zien.

Vraag 2:
Als je op één v.d. drie listboxen (kolommen) op een
bepaald item klikt, dan zal de gerelateerde waarden
van dit item (op één van dezelfde regel) ook worden
geselecteerd door het volgende te gaan doen:

Code:
Private Sub List1_Click()
   List2.ListIndex = List1.ListIndex
   List3.ListIndex = List1.ListIndex
End Sub

Private Sub List2_Click()
   List1.ListIndex = List2.ListIndex
   List3.ListIndex = List2.ListIndex
End Sub

Private Sub List3_Click()
   List1.ListIndex = List3.ListIndex
   List2.ListIndex = List3.ListIndex
End Sub


Mag ik je een raad geven? Gebruik een DBGrid control i.p.v.
listboxes, je zult er echt geen spijt van hebben. Geloof mij
maar. Eenmaal dit control op het Form te hebben geplaatst,
geef dan een rechtsklik op dit control en zie wat voor
mogelijkheden het control je te bieden heeft!

Groet.
 
Laatst bewerkt:
Als eerste wil ik je ff heel erg bedanken, want het optellen en eraf halen werkt inderdaad goed !! :thumb:

Maar toch heb ik nog een paar vraagjes:

1) Alle 5 velden van je tabel, tblBonnen geheten, zowel in Form2 als in Form3 niet met de Data control zijn verbonden.
Waar vind je dit??


2) RecordSetType stond op Dynaset, heb op Table gezet.
Waar vind je dit??

Wat betekend de Val in deze code:
(Val(List3.List(IndexNr)))

En dan als laatste nog ff een opmerking: als ik Form_Initialize verander in Form_Load, krijg ik de fout: object variable or With block variable not set.
Met de verwijzing naar: Data1.Recordset.Edit
 
Ben helaas niet a la minuut beschikbaar.

Vind erg jammer, dat ik niet direct op jouw vraag kan reageren.
Zit overdag op mijn werk en heb heel lange reistijden. Ben elke
werkdag het huis uit voor ruim 12 uur.

RecordSetType vind je op het Property venster door eerst op het Data
control te selecteren (te klikken). Je hebt de keuze tussen Tabel,
Dynaset en Snapshot. In jouw geval kies je dan Table, omdat je in
je databasje een Primary Key (indxBonnr) gebruikt. Het is gewoon beter
om als RecordSetType het type Tabel te gebruiken.

VAL is de afkorting van VAL(ue), waarde dus. Bedragen representeren
cijfers en geen letters.
Ter visisualisatie: "5" is niet het cijfer 5. Om "5" daadwerkelijk
numeriek te maken gebruik je de builtin-function (ingebouwde functie)
Val, het wordt aldus Val("5") en is het geconverteerde "5" het cijfer
5 geworden. Doe je dit niet dan reken je met letters i.p.v. cijfers.

Maar het gebruik van Val is in feite niet nodig, want het veld Bedrag
van je Admin.mdb had al een datatype, namelijk Currency wat gebruikelijk
is in de financiele wereld. Het bedrag voer je in de textbox txtBedrag,
deze textbox is met je Tabel tblBonnen verbonden en zal de ingevoerde
waarden v.h. soort type Currency krijgen.

En als laatste v.w.b. Form_Initialize/Form_Load:
Je hoeft dit zelf niet te veranderen, als je geen problemen ondervindt
met je programma. Ik had dit wel en heb de code zelf nog niet eens bij
Form_Load geplaatst, want de rest werkte gewoon. Ik had gisteren weinig
tijd en had jouw programma niet volledig kunnen analyseren.
Maar, dat ik in de geest van "onverklaarbaar" zei is natuurlijk
onwaar. Bij elk programma is wel een verklaring voor te vinden waarom
het op een gegeven moment niet naar behoren wilt werken.

Groetjes.

P.S. Met DBgrid is het zo, dat wanneer je op een bepaald veld v.e. bepaalde
regel selecteert de hele regel geselecteerd wordt. Dit was ook één van je
vragen. Zou je dit control gebruiken, dan heb je het eerder genoemde probleem
niet. Het probleem dat ik had heeft eigenlijk ook te maken met het feit, dat
je het probleem (hele regel selecteren) in je gewijzigde programma middels
List1.SelCount probeerde op te lossen. Hieromtrent was ik met een ander vorstel
gekomen. Had het probleem ook niet meer.

Ben een beetje duf. Hopelijk is mijn hele verhaal wel te volgen.
 
Je verhaal is goed te volgen hoor ;)

Alleen heb ik nog geen antwoord om m'n eerste vraagje (of ik heb erover heen gelezen :rolleyes: ).

Namelijk:
1) Alle 5 velden van je tabel, tblBonnen geheten, zowel in Form2 als in Form3 niet met de Data control zijn verbonden.
Waar vind je dit ??
 
Stel de vraag maar nog een keer, als ik het niet goed begrepen heb.

Blij om te horen.

In databases spreekt men over velden of ook wel kolommen. Elk record
heeft op z'n minst één veld. Je hebt er zelf 5. En wel in de vorm
van Text Boxen. Die Text boxen vind je in Form2(Invoeren).

Als je dit niet bedoelt, probeer dan het volgende en aanschouw het:

Addd-Ins/Visual Data Manager/File/Open DataBase/Microsoft Access en
open nu (nadat Admin.mdb geselceteerd is) Admin.mdb/Rechtsklik tblBonnen/Design.

Oefen maar daarmee. Visdata is een ontwikkelomgeving voor (mdb)databases.

Hopelijk is jou vraag hiermee beantwoord. Ik hoor het anders wel.
 
Eh, nee, dat bedoelde ik niet helemaal...

In visdata heb ik m'n database trouwens gemaakt dus dat ken ik al redelijk...:)

Ik bedoel:

Jij zei in je eerste replay op deze vraag:

Hallo Danny,

Even 3 punten die niet helemaal ter zake doende zijn.
Nadat ik jouw programma gerund heb, blijkt dat:
1) Alle 5 velden van je tabel, tblBonnen geheten, zowel in
Form2 als in Form3 niet met de Data control zijn verbonden.
Heb dit alsnog gedaan.
2) RecordSetType stond op Dynaset, heb op Table gezet.
3) De Connect property van de Data control had ook
gewoon op Access kunnen staan i.p.v. Access 2000.


Wat bedoel je nou met je eerste opmerking??
 
Eigenschap DataSource v.d. textboxen waren niet aan Data1 gekoppeld.

Vergeet het maar Danny. Het is verder namelijk niet van belang
voor jou. Bij jou werkt het programma verder toch goed?
Bij mij werkte jouw programma eerst niet, maar heb het verder al
in orde gemaakt.

Wat ik in orde gemaakt heb, in dit geval wat je wilt weten
wat met de 1e opmerking bedoeld wordt, is het volgende.

Je hebt 5 textboxen in Form2(Invoeren) staan.
Deze 5 textboxen waren in het begin nog niet aan het Data1
control verbonden. Hierdoor zal het programma natuurlijk nooit
en te nimmer voor 100% gaan functioneren.

Ik heb de 5 textboxen aan de hand van hun eigenschappen(properties)
DataSource aan het control Data1 gekoppeld.

Dit is wat ik met de 1e opmerking bedoel. Dus verder niets
bijzonders hoor. Alhoewel ik ook weet, dat je over deze zaken heus wel
weet heb ik er even melding willen maken. Dit is alles en is verder
niets aan de hand.

Groet.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan