473,626 Members | 3,119 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

Looping a recordset definition based on number from array

21 New Member
Hi folks,

I am working on a routine that will select a sample of parcels from a table. Each parcel belongs to a census tract, and depending on which tract, a certain calculation is applied. The trick is that the math is only to be performed on a random sample of parcels within each tract, and the size of the sample varies for each tract. Therefore, I define a recordset with a variable where the size of the sample is a value in an array populated from another table, perform the action, and then loop back to redefine the recordset. I get a subscript out of range error, so that smells a bit like an array issue, but it is my sql string that is highlighted, down in line 44. I have option base 1 in the declarations section. Can anyone see the practical, or for that matter conceptual problem with passing a value to define how many records are requested in the sequel query?

Expand|Select|Wrap|Line Numbers
  1. Sub cycletest()
  2.  
  3.     Dim rstarray As ADODB.Recordset
  4.     Set rstarray = New ADODB.Recordset
  5.     Dim rst As ADODB.Recordset
  6.     Set rst = New ADODB.Recordset
  7.     Dim strsqlarray As String
  8.     Dim strsql As String
  9.     Dim singleunitsadd(176, 2)
  10.     Dim i As Integer
  11.     Dim j As Integer
  12.     Dim k As Integer
  13.  
  14.     '1. Populate array
  15.     strsqlarray = "SELECT comparison.tractnumber as tractnumber, comparison.d1 AS diff " & _
  16.                 "FROM comparison; "
  17.  
  18.     rstarray.ActiveConnection = CurrentProject.Connection
  19.     rstarray.CursorType = adOpenDynamic
  20.     rstarray.LockType = adLockOptimistic
  21.  
  22.     'open table to be used in array
  23.     rstarray.Open strsqlarray
  24.  
  25.     'populate first column
  26.     For i = 1 To 176
  27.         rstarray.MoveFirst
  28.         singleunitsadd(i, 1) = rstarray!diff
  29.         rstarray.MoveNext
  30.         Debug.Print singleunitsadd(i, 1)
  31.     Next
  32.     rstarray.MoveFirst
  33.     'populate second column
  34.      For j = 1 To 176
  35.         singleunitsadd(j, 2) = rstarray!tractnumber
  36.         rstarray.MoveNext
  37.         Debug.Print singleunitsadd(j, 2)
  38.     Next
  39.     rstarray.Close
  40.     Set rstarray = Nothing
  41.  
  42.  
  43.  '2. Get recordset to be updated--to be looped as a function of l   
  44. strsql = "SELECT TOP " & singleunitsadd(k, 1) & " MAPBLKLOT, c1, RESUNITS, parcelcounter, " & _
  45.              "tractcounter, tractid " & _
  46.              "FROM luse01 " & _
  47.              "ORDER BY parcelcounter;"
  48.  
  49.     rst.ActiveConnection = CurrentProject.Connection
  50.     rst.CursorType = adOpenDynamic
  51.     rst.LockType = adLockOptimistic
  52.  
  53.     'iterate one time for each tract and assign a number to all parcels in tract
  54.  
  55.     For k = 1 To 176
  56.         rst.Open strsql
  57.         rst.MoveFirst
  58.         Do Until rst.EOF
  59.             'rst!parcelcounter = lngcounter
  60.             rst!c1 = 1
  61.             rst.Update
  62.             rst.MoveNext
  63.             Debug.Print rst!MAPBLKLOT & _
  64.             "; " & rst!tractcounter & "; " & rst!tractid & "; " & rst!c1
  65.             On Error GoTo ErrorHandler
  66.         rst.Close
  67.         Set rst = Nothing
  68.  
  69.         Loop
  70.     Next k
  71.  
  72.  
  73. ErrorHandlerExit:
  74.         Exit Sub
  75. ErrorHandler:
  76.         If Err = 3021 Then    ' no current record
  77.             Resume Next
  78.         Else
  79.             MsgBox "Error No: " & Err.Number & "; Description: " & Err.Description
  80.             Resume ErrorHandlerExit
  81.         End If
  82.  
  83. End Sub
Oct 10 '07 #1
10 2408
ADezii
8,834 Recognized Expert Expert
You are trying to use an Array (singleunitsadd (dim1, dim2)) within the context of an SQL Statement that is derived from a Table not listed in the FROM Clause. I don't even think that this approach is possible, but even if it were, the Subscript out of range Error would be generated because of singleunitsadd( k, 1). From what I can see, k is not initialized up to this point and thus would contain the value of 0. The problem is that Option Base 1 has been explicitly stated so the Array Element at singleunitsadd( 0, 1) makes no sense. Hope this helps. BTW, this seems to be a very unorthodox way to populate a Multidimensiona l Array, it is customarily done within nested For...Next constructs.
Oct 10 '07 #2
akselo
21 New Member
You are trying to use an Array (singleunitsadd (dim1, dim2)) within the context of an SQL Statement that is derived from a Table not listed in the FROM Clause. I don't even think that this approach is possible, but even if it were, the Subscript out of range Error would be generated because of singleunitsadd( k, 1). From what I can see, k is not initialized up to this point and thus would contain the value of 0. The problem is that Option Base 1 has been explicitly stated so the Array Element at singleunitsadd( 0, 1) makes no sense. Hope this helps. BTW, this seems to be a very unorthodox way to populate a Multidimensiona l Array, it is customarily done within nested For...Next constructs.
I think the table you want a reference to is listed in line 16? At any rate, I eliminated the base 1 declaration and assumed 0 as the start, and the Subscript out of range Error is no more. Now I get "Error No. 91: Description; Object variable or With block variable not set". This does not come up as a runtime error, but rather as a text box without the debug option. Since I don't declare any objects, I don't see what the problem is. Any ideas?
Oct 10 '07 #3
akselo
21 New Member
I think the table you want a reference to is listed in line 16? At any rate, I eliminated the base 1 declaration and assumed 0 as the start, and the Subscript out of range Error is no more. Now I get "Error No. 91: Description; Object variable or With block variable not set". This does not come up as a runtime error, but rather as a text box without the debug option. Since I don't declare any objects, I don't see what the problem is. Any ideas?
I think I found out the problem.. I was looping the definition of a recordset, each time creating a new recordset for a new class (as based on a variable in the table) and performing calculations on that class. However, I closed and set the recordset object to nothing, so when the loop ran the next time, I got"Error No. 91: Description; Object variable or With block variable not set". Now at the end of the loop I don't set the recordset object to nothing, BUT I do close it.(the reason I re-populate the recordset each each class loop rather than using a filter method is that I want to select only a random subset of each class; hence I pass a variable to the sql statement determing exactly how many top records to return. I don't think I can specify the number of rows with the filter method)
Oct 10 '07 #4
Jim Doherty
897 Recognized Expert Contributor
I think the table you want a reference to is listed in line 16? At any rate, I eliminated the base 1 declaration and assumed 0 as the start, and the Subscript out of range Error is no more. Now I get "Error No. 91: Description; Object variable or With block variable not set". This does not come up as a runtime error, but rather as a text box without the debug option. Since I don't declare any objects, I don't see what the problem is. Any ideas?


Conceptually I see you building the SQL string as you have done for the recordset in much the same was as we build any other string 'criteria' clauses of SQL statements are prime examples built on the fly.

You are setting the TOP predicate based on your array value of k.......... problem with that is you need to keep tabs on your subscript range boundaries as Dez points out that 'k' was uninitialised at the first run in which results in an incomplete predicate 'a top blank space' in your built string

You might might want to look at the efficiency of continually opening and closing recordsets in a loop set against the performance gains of raw SQL 'Update' statements performed as a single batch. This is merely my observation from a design perspective, it might benchmark its worth...particu larly if you have large datasets?

As for you object variable problem look at your line 67 you are deinitialising its reference so it has nothing to work with on the next return in the FOR loop.

Other than I have your code working here with option base 1

Jim
Oct 10 '07 #5
akselo
21 New Member
Conceptually I see you building the SQL string as you have done for the recordset in much the same was as we build any other string 'criteria' clauses of SQL statements are prime examples built on the fly.

You are setting the TOP predicate based on your array value of k.......... problem with that is you need to keep tabs on your subscript range boundaries as Dez points out that 'k' was uninitialised at the first run in which results in an incomplete predicate 'a top blank space' in your built string

You might might want to look at the efficiency of continually opening and closing recordsets in a loop set against the performance gains of raw SQL 'Update' statements performed as a single batch. This is merely my observation from a design perspective, it might benchmark its worth...particu larly if you have large datasets?

As for you object variable problem look at your line 67 you are deinitialising its reference so it has nothing to work with on the next return in the FOR loop.

Other than I have your code working here with option base 1

Jim
Jim,

Efficiency is a concern, but I don't know any other way to select a subset using the TOP predicate besides re-creating the recordset. I don't think I can filter using TOP. Besides, if the recordset is defined from the onset, the traffic is limited to those x records, no?
Oct 10 '07 #6
ADezii
8,834 Recognized Expert Expert
Jim,

Efficiency is a concern, but I don't know any other way to select a subset using the TOP predicate besides re-creating the recordset. I don't think I can filter using TOP. Besides, if the recordset is defined from the onset, the traffic is limited to those x records, no?
Why can't you generate a Random Number to represent the number of Records to return from each Class?
Oct 10 '07 #7
Jim Doherty
897 Recognized Expert Contributor
Jim,

Efficiency is a concern, but I don't know any other way to select a subset using the TOP predicate besides re-creating the recordset. I don't think I can filter using TOP. Besides, if the recordset is defined from the onset, the traffic is limited to those x records, no?
Limited too yes, but in the scripts case the rst is being opened, traversed and closed presumably an arbitary test figure of 176 times. To SQL UPDATE on a WHERE clause seems to me to be a more efficient method?. I don't wish to sound purist or boringly critical as we all do things our own way anyway :))

Expand|Select|Wrap|Line Numbers
  1.  
  2. For k = 1 To 176
  3.         rst.Open strsql
  4.         rst.MoveFirst
  5.         Do Until rst.EOF
  6.             'rst!parcelcounter = lngcounter
  7.             rst!c1 = 1
  8.             rst.Update
  9.             rst.MoveNext
  10.             Debug.Print rst!MAPBLKLOT & _
  11.             "; " & rst!tractcounter & "; " & rst!tractid & "; " & rst!c1
  12.             On Error GoTo ErrorHandler
  13.         rst.Close
  14.         Loop
  15. Next k
  16.  
Regards

Jim
Oct 10 '07 #8
akselo
21 New Member
Limited too yes, but in the scripts case the rst is being opened, traversed and closed presumably an arbitary test figure of 176 times. To SQL UPDATE on a WHERE clause seems to me to be a more efficient method?. I don't wish to sound purist or boringly critical as we all do things our own way anyway :))

Expand|Select|Wrap|Line Numbers
  1.  
  2. For k = 1 To 176
  3.         rst.Open strsql
  4.         rst.MoveFirst
  5.         Do Until rst.EOF
  6.             'rst!parcelcounter = lngcounter
  7.             rst!c1 = 1
  8.             rst.Update
  9.             rst.MoveNext
  10.             Debug.Print rst!MAPBLKLOT & _
  11.             "; " & rst!tractcounter & "; " & rst!tractid & "; " & rst!c1
  12.             On Error GoTo ErrorHandler
  13.         rst.Close
  14.         Loop
  15. Next k
  16.  
Regards

Jim
I would love to just run an update query, the reason that doesn't seem to work in this case is that the number of records to update in each class depends on a value in another table determining how large the subset of each class will be updated. Now I have the problem that I wrap the recordset definition into a for k = 1 to 175...next expression where the k is used twice in the SQL string: first to filter only a given subset of records (stored in an array in the early part of the function) and second, to filter using WHERE. The problem, then, is that I can see in the immediate window that it actually does cycle through the K's (see below, second to last column), but judging from the recordset returned, it is the same every time. I am at my wit's end here; the fact that I can pass the constant in the query seems to me a proof of concept, but the execution doesn't do it for me.

Expand|Select|Wrap|Line Numbers
  1. Sub cycletest()
  2.  
  3.     Dim rstarray As ADODB.Recordset
  4.     Set rstarray = New ADODB.Recordset
  5.     Dim rst As ADODB.Recordset
  6.     Set rst = New ADODB.Recordset
  7.     Dim strsqlarray As String
  8.     Dim strsql As String
  9.     Dim singleunitsadd(175)
  10.     Dim i As Integer
  11.     Dim j As Integer
  12.     Dim k As Integer
  13.  
  14.     '1. Populate array
  15.     strsqlarray = "SELECT comparison.tractnumber as tractnumber, comparison.d1 AS diff " & _
  16.                 "FROM comparison " & _
  17.                 "ORDER BY tractnumber; "
  18.     rstarray.ActiveConnection = CurrentProject.Connection
  19.     rstarray.CursorType = adOpenStatic
  20.     rstarray.LockType = adLockOptimistic
  21.  
  22.     'open table to be used in array
  23.     rstarray.Open strsqlarray
  24.     Debug.Print rstarray.RecordCount
  25.  
  26.     'i = j = k = 1
  27.    ' populate first column
  28.     For i = 0 To 175
  29.         'rstarray.MoveFirst makes it go back to the first number every time..BAD!!
  30.         singleunitsadd(i) = rstarray!diff
  31.         rstarray.MoveNext
  32.         'Debug.Print singleunitsadd(i)
  33.     Next
  34.    'rstarray.MoveFirst
  35.     'populate second column
  36.    '  For j = 0 To 175
  37.    '     singleunitsadd(j, 1) = rstarray!tractnumber
  38.    '     rstarray.MoveNext
  39.    '     Debug.Print singleunitsadd(j, 1)
  40.    ' Next
  41.     rstarray.Close
  42.     Set rstarray = Nothing
  43.  
  44.     '2. Get recordset to be updated--to be looped as a function of k
  45.     strsql = "SELECT TOP  " & singleunitsadd(k) & "  luse01.MAPBLKLOT, luse01.c1, luse01.RESUNITS, " & _
  46.              "luse01.parcelcounter, luse01.tractcounter, luse01.tractid " & _
  47.              "FROM luse01 " & _
  48.              "WHERE (((luse01.tractcounter)= " & singleunitsadd(k) & " )) " & _
  49.              "ORDER BY tractcounter, randomnumber;"
  50.  
  51.     rst.ActiveConnection = CurrentProject.Connection
  52.     rst.CursorType = adOpenStatic
  53.     rst.LockType = adLockOptimistic
  54.  
  55.     'iterate one time for each tract and assign a number to all parcels in tract
  56.  
  57.    'On Error GoTo ErrorHandler
  58.      For k = 0 To 175
  59.         rst.Open strsql
  60.         'rst.Filter = "tractcounter = " & k
  61.         Debug.Print rst.RecordCount; k; singleunitsadd(k)
  62.  
  63.  
  64.         Do Until rst.EOF
  65.             'rst.MoveFirst
  66.             rst!c1 = 1
  67.  
  68.             'rst.Update
  69.             Debug.Print rst!parcelcounter & "; " & rst!MAPBLKLOT & _
  70.             "; " & rst!tractid & ": " & rst!c1 & ": " & k & "; " & singleunitsadd(k)
  71.             rst.MoveNext
  72.         Loop
  73.         rst.Close
  74.         'Set rst = Nothing
  75.     Next k
  76.     'Debug.Print lngcounter&; " records processed"
  77.     rst.Close
  78.     Set rst = Nothing
  79.  
  80. End Sub
and the immediate window...the second to last number is the K integer I use in the for k=1 to 175 statement.
Expand|Select|Wrap|Line Numbers
  1.  176 
  2.  39  0  39 
  3. 107; ; 015500: 1: 0; 39
  4. 30; ; 015500: 1: 0; 39
  5. 35; ; 015500: 1: 0; 39
  6. 69; ; 015500: 1: 0; 39
  7. 99; ; 015500: 1: 0; 39
  8. (lines omitted) 
  9. 39  1  82 
  10. 107; ; 015500: 1: 1; 82
  11. 30; ; 015500: 1: 1; 82
  12. 35; ; 015500: 1: 1; 82
  13. 69; ; 015500: 1: 1; 82
  14. (lines omitted)
Oct 11 '07 #9
Jim Doherty
897 Recognized Expert Contributor
I would love to just run an update query, the reason that doesn't seem to work in this case is that the number of records to update in each class depends on a value in another table determining how large the subset of each class will be updated. Now I have the problem that I wrap the recordset definition into a for k = 1 to 175...next expression where the k is used twice in the SQL string: first to filter only a given subset of records (stored in an array in the early part of the function) and second, to filter using WHERE. The problem, then, is that I can see in the immediate window that it actually does cycle through the K's (see below, second to last column), but judging from the recordset returned, it is the same every time. I am at my wit's end here; the fact that I can pass the constant in the query seems to me a proof of concept, but the execution doesn't do it for me.

Expand|Select|Wrap|Line Numbers
  1. Sub cycletest()
  2.  
  3. Dim rstarray As ADODB.Recordset
  4. Set rstarray = New ADODB.Recordset
  5. Dim rst As ADODB.Recordset
  6. Set rst = New ADODB.Recordset
  7. Dim strsqlarray As String
  8. Dim strsql As String
  9. Dim singleunitsadd(175)
  10. Dim i As Integer
  11. Dim j As Integer
  12. Dim k As Integer
  13.  
  14. '1. Populate array
  15. strsqlarray = "SELECT comparison.tractnumber as tractnumber, comparison.d1 AS diff " & _
  16. "FROM comparison " & _
  17. "ORDER BY tractnumber; "
  18. rstarray.ActiveConnection = CurrentProject.Connection
  19. rstarray.CursorType = adOpenStatic
  20. rstarray.LockType = adLockOptimistic
  21.  
  22. 'open table to be used in array
  23. rstarray.Open strsqlarray
  24. Debug.Print rstarray.RecordCount
  25.  
  26. 'i = j = k = 1
  27. ' populate first column
  28. For i = 0 To 175
  29. 'rstarray.MoveFirst makes it go back to the first number every time..BAD!!
  30. singleunitsadd(i) = rstarray!diff
  31. rstarray.MoveNext
  32. 'Debug.Print singleunitsadd(i)
  33. Next
  34. 'rstarray.MoveFirst
  35. 'populate second column
  36. ' For j = 0 To 175
  37. ' singleunitsadd(j, 1) = rstarray!tractnumber
  38. ' rstarray.MoveNext
  39. ' Debug.Print singleunitsadd(j, 1)
  40. ' Next
  41. rstarray.Close
  42. Set rstarray = Nothing
  43.  
  44. '2. Get recordset to be updated--to be looped as a function of k
  45. strsql = "SELECT TOP " & singleunitsadd(k) & " luse01.MAPBLKLOT, luse01.c1, luse01.RESUNITS, " & _
  46. "luse01.parcelcounter, luse01.tractcounter, luse01.tractid " & _
  47. "FROM luse01 " & _
  48. "WHERE (((luse01.tractcounter)= " & singleunitsadd(k) & " )) " & _
  49. "ORDER BY tractcounter, randomnumber;"
  50.  
  51. rst.ActiveConnection = CurrentProject.Connection
  52. rst.CursorType = adOpenStatic
  53. rst.LockType = adLockOptimistic
  54.  
  55. 'iterate one time for each tract and assign a number to all parcels in tract
  56.  
  57. 'On Error GoTo ErrorHandler
  58. For k = 0 To 175
  59. rst.Open strsql
  60. 'rst.Filter = "tractcounter = " & k
  61. Debug.Print rst.RecordCount; k; singleunitsadd(k)
  62.  
  63.  
  64. Do Until rst.EOF
  65. 'rst.MoveFirst
  66. rst!c1 = 1
  67.  
  68. 'rst.Update
  69. Debug.Print rst!parcelcounter & "; " & rst!MAPBLKLOT & _
  70. "; " & rst!tractid & ": " & rst!c1 & ": " & k & "; " & singleunitsadd(k)
  71. rst.MoveNext
  72. Loop
  73. rst.Close
  74. 'Set rst = Nothing
  75. Next k
  76. 'Debug.Print lngcounter&; " records processed"
  77. rst.Close
  78. Set rst = Nothing
  79.  
  80. End Sub
and the immediate window...the second to last number is the K integer I use in the for k=1 to 175 statement.
Expand|Select|Wrap|Line Numbers
  1.  176 
  2. 39 0 39 
  3. 107; ; 015500: 1: 0; 39
  4. 30; ; 015500: 1: 0; 39
  5. 35; ; 015500: 1: 0; 39
  6. 69; ; 015500: 1: 0; 39
  7. 99; ; 015500: 1: 0; 39
  8. (lines omitted) 
  9. 39 1 82 
  10. 107; ; 015500: 1: 1; 82
  11. 30; ; 015500: 1: 1; 82
  12. 35; ; 015500: 1: 1; 82
  13. 69; ; 015500: 1: 1; 82
  14. (lines omitted)
Hi akselo,

Please check your PM,s

Jim :)
Oct 11 '07 #10

Sign in to post your reply or Sign up for a free account.

Similar topics

23
3246
by: Rob Meade | last post by:
Lo all, Ok - this is what I was aiming to do, and then I thought - naahhh, that cant be right! query database results to recordset results to array using GetRows update values in one column in array <BOING>
1
1725
by: David | last post by:
Hi, I have a continuous form based on a query. Lets say the form displays 6 records. I also have a button against each record which sets a field to Y or N for each record. I am trying to copy partial fields only for those records where the field = Y
9
35441
ADezii
by: ADezii | last post by:
One question which pops up frequently here at TheScripts is: 'How do I retrieve data from a Recordset once I've created it?' One very efficient, and not that often used approach, is the GetRows() Method of the Recordset Object. This Method varies slightly from DAO to ADO, so for purposes of this discussion, we'll be talking about DAO Recordsets. The ADO approach will be addressed in the following Tip. We'll be using a Query, consisting of 5...
3
43472
ADezii
by: ADezii | last post by:
Last Tip, we demonstrated the technique for retrieving data from a DAO Recordset, and placing it into a 2-dimensional Array using the GetRows() Method. This week, we will cover the same exact Method (GetRows()), but only as it applies to an ADO Recordset. Although there are similarities in the 2 methodologies, the ADO Method offers 2 more Optional Arguments, is a little more complex, and of course, the syntax is different in creating the...
0
8196
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can effortlessly switch the default language on Windows 10 without reinstalling. I'll walk you through it. First, let's disable language synchronization. With a Microsoft account, language settings sync across devices. To prevent any complications,...
0
8701
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers, it seems that the internal comparison operator "<=>" tries to promote arguments from unsigned to signed. This is as boiled down as I can make it. Here is my compilation command: g++-12 -std=c++20 -Wnarrowing bit_field.cpp Here is the code in...
0
8637
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven tapestry of website design and digital marketing. It's not merely about having a website; it's about crafting an immersive digital experience that captivates audiences and drives business growth. The Art of Business Website Design Your website is...
1
8364
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For most users, this new feature is actually very convenient. If you want to control the update process,...
0
8502
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each protocol has its own unique characteristics and advantages, but as a user who is planning to build a smart home system, I am a bit confused by the choice of these technologies. I'm particularly interested in Zigbee because I've heard it does some...
0
7192
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing, and deployment—without human intervention. Imagine an AI that can take a project description, break it down, write the code, debug it, and then launch it, all on its own.... Now, this would greatly impact the work of software developers. The idea...
1
6122
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new presenter, Adolph Dupré who will be discussing some powerful techniques for using class modules. He will explain when you may want to use classes instead of User Defined Types (UDT). For example, to manage the data in unbound forms. Adolph will...
0
4196
by: adsilva | last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
2
1507
bsmnconsultancy
by: bsmnconsultancy | last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence can significantly impact your brand's success. BSMN Consultancy, a leader in Website Development in Toronto offers valuable insights into creating effective websites that not only look great but also perform exceptionally well. In this comprehensive...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.