| | |
Help me: Procedure too large
Thread Solved |
•
•
Join Date: Dec 2008
Posts: 11
Reputation:
Solved Threads: 0
Umm, I'm a newbie in VB6, so I am currently facing the procedure being too large during the run of the program. For example:
If txt6 > 0 Then
lblItem6 = "W6~ Jane Doe"
lblItemprice6 = "9.00"
lblItemquantity6 = txt6
lblTotal6 = TotW6Price
ElseIf txt7 > 0 Then
lblItem6 = "W7~ John Doe"
lblItemprice6 = "10.50"
lblItemquantity6 = txt7
lblTotal6 = TotW7Price
(....... it goes on)
End If
(and then, again).....
If txt7 > 0 Then
lblItem7 = "W7~ John Doe"
lblItemprice7 = "10.50"
lblItemquantity7 = txt7
lblTotal7 = TotW7Price
ElseIf txt8 > 0 Then
lblItem7 = "W8~ Mary Doe"
lblItemprice7 = "10.90"
lblItemquantity7 = txt8
lblTotal7 = TotW8Price
......(it goes up to 72 ElseIf's)
End If
I have a lot of these inputted into the code, which probably explains the problem I am facing now. Could someone tell me how I solve this?
Thank you!
wookinhung
If txt6 > 0 Then
lblItem6 = "W6~ Jane Doe"
lblItemprice6 = "9.00"
lblItemquantity6 = txt6
lblTotal6 = TotW6Price
ElseIf txt7 > 0 Then
lblItem6 = "W7~ John Doe"
lblItemprice6 = "10.50"
lblItemquantity6 = txt7
lblTotal6 = TotW7Price
(....... it goes on)
End If
(and then, again).....
If txt7 > 0 Then
lblItem7 = "W7~ John Doe"
lblItemprice7 = "10.50"
lblItemquantity7 = txt7
lblTotal7 = TotW7Price
ElseIf txt8 > 0 Then
lblItem7 = "W8~ Mary Doe"
lblItemprice7 = "10.90"
lblItemquantity7 = txt8
lblTotal7 = TotW8Price
......(it goes up to 72 ElseIf's)
End If
I have a lot of these inputted into the code, which probably explains the problem I am facing now. Could someone tell me how I solve this?
Thank you!
wookinhung
Hi,
Yes, there is a Limitation of Procedure Size, in VB6..
Looking at your code, appears, there is a Lot of Repeatation,
say for example, this part :
Is repeated TWICE in the above code..
Why not Put Such Repeated Parts in another Proc / or Function and call that..?
Another way around can be, Instead of HARD_Coding,
Save In an Access Database, and Retrive Later depending on the IF Condition..
REgards
Veena
Yes, there is a Limitation of Procedure Size, in VB6..
Looking at your code, appears, there is a Lot of Repeatation,
say for example, this part :
vb Syntax (Toggle Plain Text)
ElseIf txt7 > 0 Then lblItem6 = "W7~ John Doe" lblItemprice6 = "10.50" lblItemquantity6 = txt7 lblTotal6 = TotW7Price
Why not Put Such Repeated Parts in another Proc / or Function and call that..?
Another way around can be, Instead of HARD_Coding,
Save In an Access Database, and Retrive Later depending on the IF Condition..
REgards
Veena
•
•
Join Date: Dec 2008
Posts: 11
Reputation:
Solved Threads: 0
Thanks, but thing is.... I don't really understand "Why not Put Such Repeated Parts in another Proc / or Function and call that..?" and also "Save In an Access Database, and Retrive Later depending on the IF Condition"
How can I do that? Do you know any websites that provide information or step by step tutorials? Thanks a lot!
Thanks
wookinhung
How can I do that? Do you know any websites that provide information or step by step tutorials? Thanks a lot!
Thanks
wookinhung
•
•
Join Date: Dec 2008
Posts: 11
Reputation:
Solved Threads: 0
Hi,
I hope my pictures can clear up a bit of what I'm going to tell you. I'm currently working on my school's project on a restaurant menu. The menu has 72 different dishes and it requires the patron to input the quantity of what they want in the textboxes. As you can probably see, txt1,2,6,7,etc are the textboxes that represent the number of dishes.
After they have finished choosing what they want, they click on the the billing form. Thats where the "procedure too large" comes in place because I inputted too much repetitions of (for ex.):
If txt1 > 0 Then
lblItem1 = "W1~ Black Pepper Chicken Chop"
lblItemprice1 = "RM 10.90"
lblItemquantity1 = txt1
lblTotal1 = TotW1Price
ElseIf txt2 > 0 Then
lblItem1 = "W2~ Barbequed Chicken Chop"
lblItemprice1 = "RM 10.90"
lblItemquantity1 = txt2
lblTotal1 = TotW2Price
ElseIf txt3 > 0 Then
lblItem1 = "W3~ Lamb Chop"
......... it goes on and on...... for the other labels in the billing form.
I really appreciate your help. Thanks a lot!
Regards
wookinhung
I hope my pictures can clear up a bit of what I'm going to tell you. I'm currently working on my school's project on a restaurant menu. The menu has 72 different dishes and it requires the patron to input the quantity of what they want in the textboxes. As you can probably see, txt1,2,6,7,etc are the textboxes that represent the number of dishes.
After they have finished choosing what they want, they click on the the billing form. Thats where the "procedure too large" comes in place because I inputted too much repetitions of (for ex.):
If txt1 > 0 Then
lblItem1 = "W1~ Black Pepper Chicken Chop"
lblItemprice1 = "RM 10.90"
lblItemquantity1 = txt1
lblTotal1 = TotW1Price
ElseIf txt2 > 0 Then
lblItem1 = "W2~ Barbequed Chicken Chop"
lblItemprice1 = "RM 10.90"
lblItemquantity1 = txt2
lblTotal1 = TotW2Price
ElseIf txt3 > 0 Then
lblItem1 = "W3~ Lamb Chop"
......... it goes on and on...... for the other labels in the billing form.
I really appreciate your help. Thanks a lot!
Regards
wookinhung
I hope this is in VB6 or VBA.....
On the form load event, you need to loop through all the check boxes and set all values to False (not selected):
Dim ctrl As Control
For Each ctrl In Me.Controls
If TypeName(ctrl) = "CheckBox" Then
ctrl.Value = False
End If
Next
Set ctrl = Nothing
You need to create many variables and assign them the Prices or Values first. Replace the ton of If Then statements with a Loop, and create a variable to grab each Control/Field value dynamically.
Should look something like this:
dim c1, c2, c3, c4, c5, c6 as Double (Change Double to whatever datatype you need)
'Make sure c1, c2, c3
c1 = 10.00
c2 = 3.00
c3 = 5.95
..... keep on assigning values here and make some coffee beforehand
. It appears you may have to do the same for the labels, quantity and total price also. This would be much easier if you through this data into an Access table and used queries/vb recordsets to perform the calculations.
Once you get all that done, you need the total number of checkboxes and controls (labels, quantity, etc.....) to loop through and bring it all together. I believe you said 72. Should look something like this:
Dim i as Integer
i = 1
Do Until i = 73 ' Go to 73 to make this stop looping after 72 times....
If Me("txt" & (i)).Value > 0 Then ' Me("txt" & (i)) = txt1
Me("lblItemprice" & (i)).Text = ("c" & (i)) ' is c1, which = 10.00
' Do the same as the previous line for all fields
' lblItem, lblItemprice, lblItemquantity, lblTotal
End If
Loop
c1 will only take care of the field lblItemprice. You need to Dim 3 other fields to take care of the other fields, which is four fields total times 72 items is 288 total - Wow!.
a1, b1, c1, d1 ' Use these for the first four Controls ending in 1
a2, b2, c2, d2 ' Use these for the first four Controls ending in 2
.... keep doing this till 72
If VB blows up and melts your PC, break this into seperate Sub Procedures. You can use If statements to call in different procedures.
You really need to learn how to work this with a Database, which is probably around the corner.
Hope this helps, you may have to tweek it a bit.... Happy Coding!
On the form load event, you need to loop through all the check boxes and set all values to False (not selected):
Dim ctrl As Control
For Each ctrl In Me.Controls
If TypeName(ctrl) = "CheckBox" Then
ctrl.Value = False
End If
Next
Set ctrl = Nothing
You need to create many variables and assign them the Prices or Values first. Replace the ton of If Then statements with a Loop, and create a variable to grab each Control/Field value dynamically.
Should look something like this:
dim c1, c2, c3, c4, c5, c6 as Double (Change Double to whatever datatype you need)
'Make sure c1, c2, c3
c1 = 10.00
c2 = 3.00
c3 = 5.95
..... keep on assigning values here and make some coffee beforehand
. It appears you may have to do the same for the labels, quantity and total price also. This would be much easier if you through this data into an Access table and used queries/vb recordsets to perform the calculations.Once you get all that done, you need the total number of checkboxes and controls (labels, quantity, etc.....) to loop through and bring it all together. I believe you said 72. Should look something like this:
Dim i as Integer
i = 1
Do Until i = 73 ' Go to 73 to make this stop looping after 72 times....
If Me("txt" & (i)).Value > 0 Then ' Me("txt" & (i)) = txt1
Me("lblItemprice" & (i)).Text = ("c" & (i)) ' is c1, which = 10.00
' Do the same as the previous line for all fields
' lblItem, lblItemprice, lblItemquantity, lblTotal
End If
Loop
c1 will only take care of the field lblItemprice. You need to Dim 3 other fields to take care of the other fields, which is four fields total times 72 items is 288 total - Wow!.
a1, b1, c1, d1 ' Use these for the first four Controls ending in 1
a2, b2, c2, d2 ' Use these for the first four Controls ending in 2
.... keep doing this till 72
If VB blows up and melts your PC, break this into seperate Sub Procedures. You can use If statements to call in different procedures.
You really need to learn how to work this with a Database, which is probably around the corner.
Hope this helps, you may have to tweek it a bit.... Happy Coding!
Hi,
If you Have Named all the Controls Uniformly From 1 To 72, then
You can do all that Calculation in Just 2 Steps.
Some thing Like This :
Regards
Veena
If you Have Named all the Controls Uniformly From 1 To 72, then
You can do all that Calculation in Just 2 Steps.
Some thing Like This :
VB Syntax (Toggle Plain Text)
Dim i As Integer Dim MyTot As Currency Dim ctlText As TextBox Dim ctlLabel As Label MyTot = 0 For i =1 To 72 Set ctlText = Me.Controls("txt" & i) Set ctlLabel = Me.Controls("lblItemprice" & i) MyTot = MyTot + (Val(Trim(Mid(ctlLabel.Caption,3))) * Val(ctlText.Text)) Next MsgBox MyTot
Regards
Veena
Last edited by QVeen72; Dec 19th, 2008 at 2:32 am.
![]() |
Similar Threads
- How to split a large list (Pascal and Delphi)
- Query on a large table too slow (MySQL)
- only sees 2gig of HD - Did all fixes ? Large disk Enabled (Troubleshooting Dead Machines)
Other Threads in the Visual Basic 4 / 5 / 6 Forum
- Previous Thread: VB5 interfacing to USB ?
- Next Thread: FlexGrid or Datagrid?
| Thread Tools | Search this Thread |
* 6 429 2007 access activex add age application basic beginner birth bmp calculator cd cells.find click client code college component connection connectionproblemusingvb6usingoledb copy creat ctrl+f data database datareport date delete dissertations dissertationthesis dissertationtopic edit error excel excelmacro file filename form hardware header iamthwee image inboxinvb internetfiledownload keypress label listbox listview liveperson login looping machine microsoft movingranges number objectinsert open oracle password prime program prompt range-objects readfile reading record refresh remotesqlserverdatabase report save search sendbyte sites sort sql sql2008 sqlserver subroutine tags textbox time urldownloadtofile vb vb6 vb6.0 vba visual visualbasic visualbasic6 web window windows





