![]() | |
![]() |
| | Thread Tools | Search this Thread | Display Modes |
#1
| |||
| |||
|
#2
| |||
| |||
|
|
Hello all, I am using Visual Basic to open a saved query and then save information in the query to an array for later use. The problem is that the same query shows different results when opened directly vs. when opened by Visual Basic. It is as if Visual Basic is not letting the query fully evaluate before processing records. The query is a subtotal query that contains several criteria set up as "where" in the group-by box. Most of the criteria are based on one table, one criteria is based on a second joined table. When the query is opened directly this last criteria is correctly evaluated and the proper records are shown. When opened in VB it is as if this criteria did not exist. The query otherwise shows correct information except it includes records that should not be there based on the last criteria. Is there a way to force visual basic to wait until a query is fully opened before executing code that uses the resulting records. Or is there something else that I am missing. Any help would be greatly appreciated. Thanks, Vince Partial code Follows--------------------------------- Public aWork(10) as Integar Sub LoadWorkArray(WorkQuery as string) 'WorkQuery = query name Dim WorkLastRecord as Integar Dim X as Integar Set SLWork = New ADODB.Recordset SLWork.Open WorkQuery, CurrentProject.Connection, adOpenKeyset, adLockOptimistic WorkLastRecord = SLWork.RecordCount ReDim aWork(WorkLastRecord + 1) With SLWork .MoveFirst For X = 1 To WorkLastRecord aWork(X) = ![Attending Number] .MoveNext Next X .Close End With End sub |
#3
| |||
| |||
|
|
On Dec 28, 4:19 pm, Vince <VArgenzi... (AT) yahoo (DOT) com> wrote: Hello all, I am using Visual Basic to open a saved query and then save information in the query to an array for later use. The problem is that the same query shows different results when opened directly vs. when opened by Visual Basic. It is as if Visual Basic is not letting the query fully evaluate before processing records. The query is a subtotal query that contains several criteria set up as "where" in the group-by box. Most of the criteria are based on one table, one criteria is based on a second joined table. When the query is opened directly this last criteria is correctly evaluated and the proper records are shown. When opened in VB it is as if this criteria did not exist. The query otherwise shows correct information except it includes records that should not be there based on the last criteria. Is there a way to force visual basic to wait until a query is fully opened before executing code that uses the resulting records. Or is there something else that I am missing. Any help would be greatly appreciated. Thanks, Vince Partial code Follows--------------------------------- Public aWork(10) as Integar Sub LoadWorkArray(WorkQuery as string) 'WorkQuery = query name Dim WorkLastRecord as Integar Dim X as Integar Set SLWork = New ADODB.Recordset SLWork.Open WorkQuery, CurrentProject.Connection, adOpenKeyset, adLockOptimistic WorkLastRecord = SLWork.RecordCount ReDim aWork(WorkLastRecord + 1) With SLWork .MoveFirst For X = 1 To WorkLastRecord aWork(X) = ![Attending Number] .MoveNext Next X .Close End With End sub I use ADODB a lot but I can't guess why you are getting more records than yu think you should. Are you using wild cards such as "*"; generally ADODB will epxect "%". Is this a DAO saved query? If so have you Declared it as such, Initialized it and Debug.Print (ed) its SQL. Is the SQL what you think it should be? My method of getting an array of records (one field): Dim Array0fSchools$() Array0fSchools = Split(CurrentProject.Connection.Execute("SELECT [Name] FROM Schools ORDER BY Name").GetString(adClipString, , "", vbNewLine, ""), vbNewLine) The last line is all one line. If the SQL is complicated I build it and assing it to a string variable. |
#4
| |||
| |||
|
|
Hello all, I am using Visual Basic to open a saved query and then save information in the query to an array for later use. The problem is that the same query shows different results when opened directly vs. when opened by Visual Basic. It is as if Visual Basic is not letting the query fully evaluate before processing records. The query is a subtotal query that contains several criteria set up as "where" in the group-by box. Most of the criteria are based on one table, one criteria is based on a second joined table. When the query is opened directly this last criteria is correctly evaluated and the proper records are shown. When opened in VB it is as if this criteria did not exist. The query otherwise shows correct information except it includes records that should not be there based on the last criteria. Is there a way to force visual basic to wait until a query is fully opened before executing code that uses the resulting records. Or is there something else that I am missing. Any help would be greatly appreciated. Thanks, Vince Partial code Follows--------------------------------- Public aWork(10) as Integar Sub LoadWorkArray(WorkQuery as string) 'WorkQuery = query name Dim WorkLastRecord as Integar Dim X as Integar Set SLWork = New ADODB.Recordset SLWork.Open WorkQuery, CurrentProject.Connection, adOpenKeyset, adLockOptimistic WorkLastRecord = SLWork.RecordCount ReDim aWork(WorkLastRecord + 1) With SLWork .MoveFirst For X = 1 To WorkLastRecord aWork(X) = ![Attending Number] .MoveNext Next X .Close End With End sub |
#5
| |||
| |||
|
|
I'm no expert but would it not be worth adding a line before you go to the beginning of the recordset to go to the end of the recordset. I think this would force the query to be fully executed before evaluating the values returned from it. Something like: With SLWork * * .MoveLast * * .MoveFirst * * For X = 1 To WorkLastRecord * * * * aWork(X) = ![Attending Number] * * * *.MoveNext * * Next X * * .Close *End With Regards, Mark "Vince" <VArgenzi... (AT) yahoo (DOT) com> wrote in message news:463889ab-b8df-4fd7-a442-0a3b084fc89d (AT) e10g2000prf (DOT) googlegroups.com... Hello all, I am using Visual Basic to open a saved query and then save information in the query to an array for later use. *The problem is that the same query shows different results when opened directly vs. when opened by Visual Basic. *It is as if Visual Basic is not letting the query fully evaluate before processing records. The query is a subtotal query that contains several criteria set up as "where" in the group-by box. *Most of the criteria are based on one table, one criteria is based on a second joined table. *When the query is opened directly this last criteria is correctly evaluated and the proper records are shown. *When opened in VB it is as if this criteria did not exist. *The query otherwise shows correct information except it includes records that should not be there based on the last criteria. Is there a way to force visual basic to wait until a query is fully opened before executing code that uses the resulting records. *Or is there something else that I am missing. Any help would be greatly appreciated. Thanks, Vince Partial code Follows--------------------------------- Public aWork(10) as Integar Sub LoadWorkArray(WorkQuery as string) *'WorkQuery = query name Dim WorkLastRecord as Integar Dim X as Integar Set SLWork = New ADODB.Recordset SLWork.Open WorkQuery, CurrentProject.Connection, adOpenKeyset, adLockOptimistic WorkLastRecord = SLWork.RecordCount ReDim aWork(WorkLastRecord + 1) With SLWork * *.MoveFirst * *For X = 1 To WorkLastRecord * * * *aWork(X) = ![Attending Number] * * * .MoveNext * *Next X * *.Close End With End sub- Hide quoted text - - Show quoted text - |
#6
| |||
| |||
|
|
Vince <VArgenzi... (AT) yahoo (DOT) com> wrote innews:38262989-0625-449d-8d44-4ea11e4df6e5 (AT) e4g2000hsg (DOT) googlegroups.com : You got it with using an "*" vs "%". *The query was using a Not Like "*string*" expression. *Changed it to use % instead and now it works. You do not know how long I have been looking at everything but the string. *While the query opens normally from Access the ADODB apparently totally ignores an expression that uses an *. Why are you using ADO? Makes no sense to me. -- David W. Fenton * * * * * * * * *http://www.dfenton.com/ usenet at dfenton dot com * *http://www.dfenton.com/DFA/ |
#7
| |||
| |||
|
|
On Dec 28 2007, 8:23*pm, "David W. Fenton" XXXuse... (AT) dfenton (DOT) com.invalid> wrote: Vince <VArgenzi... (AT) yahoo (DOT) com> wrote innews:38262989-0625-449d-8d44-4ea11e4df6e5 (AT) e4g2000hsg (DOT) googlegroups.com : You got it with using an "*" vs "%". *The query was using a Not Like "*string*" expression. *Changed it to use % instead and now it works. You do not know how long I have been looking at everything but the string. *While the query opens normally from Access the ADODB apparently totally ignores an expression that uses an *. Why are you using ADO? Makes no sense to me. -- David W. Fenton * * * * * * * * *http://www.dfenton.com/ usenet at dfenton dot com * *http://www.dfenton.com/DFA/ Hi David, It was a way of opening a query inside VB to populate an array. *I also tried opening the query as the DAO recordset type of object and got the same results. *I had done this in a number of other queries but this is the first one I had a problem with. *I would be open to a better approach. Thanks, Vince- Hide quoted text - - Show quoted text - |
#8
| |||
| |||
|
|
Vince <VArgenzi... (AT) yahoo (DOT) com> wrote innews:58d9285f-2ae9-4bae-b05f-9fa959c8e101 (AT) e50g2000hsh (DOT) googlegroups.co m: Excuse me, *I meant to say I had tried opening the recordset as its default object type and got the same results. The default object type depends on what references your database has. Which references you get by default depends on which version of Access you created the MDB with. -- David W. Fenton * * * * * * * * *http://www.dfenton.com/ usenet at dfenton dot com * *http://www.dfenton.com/DFA/ |
![]() |
| Thread Tools | Search this Thread |
| Display Modes | |
| |