Referring to Variable Value in Query Assembly

I've been using "Data Driven" query assembly for some time. This allows me to maintain the fields I want to include in a query in a table and then assemble the query by using fields in the table, like this:

strAppendSQL = "SELECT " & rsAppendFields!Source_Field

and then continue with this until the end of the recordset

strAppendSQL = strAppendSQL & rsAppendFields!Source_Field

The recordset rsAppendFields contains the fields that are being appended. Obviously, there is some intervening code to add enclosure characters like the apostrophe (for text) and the pound sign (for dates) if the field type requires it.

Now I want to have some of the fields in the rsAppendFields refer to VARIABLES that were populated earlier in the code. So for the particular record from rsAppendSource fields, the variable name might be "strValue". I want whatever is in the variable "strValue" to get added to the query. So if "strValue" had "Report1" in the variable, the first piece of the query I would want to read "SELECT 'Report1' As Expr1.

My problem is that when I refer to the 'strValue' variable as a field from the recordset, the query assembles like this:

SELECT 'strValue' As Expr1 instead of SELECT 'Report1' As Expr1. So the variable name - rather than its contents - is going into the query.

I tried using

strAppendSQL = strAppendSQL & rsAppendFields.Fields(rsAppendFields.Source_Field)

and

strAppendSQL = strAppendSQL & rsAppendFields.Fields(Source_Field)

The first throws "Item not found in this collection" error and the second just puts "strValue" in the query as before.

It works fine when I explicitly refer to the variable like this:

SELECT '" & strValue & "' AS Expr1,

But I would like to be able to use the recordset to populate the variables as well as the actual appended fields.

Any suggestions appreciated.


SELECT 'strValue' instead of the contents of the variable strValue.
Buck_BeasomDatabase DesignerAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Rey Obrero (Capricorn1)Commented:
how do you set the value for variable "strValue" ?

this should work

Dim strValue As String, sql As String
strValue = "Report1"

sql = "Select '" & strValue & "' As Expr1 From TableX"

Debug.Print sql
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
Buck_BeasomDatabase DesignerAuthor Commented:
This is the same as my "explicit" code and it works. But when "strValue" is pulled from a table into a recordset and I refer to the value from the recordset, it puts "strValue" into the query instead of the CONTENTS of the variable strValue. So I need something to tell the code that what I want in the query is the CONTENTS of the variable strValue rather than just the string "strValue."

Thanks.
0
Rey Obrero (Capricorn1)Commented:
<But when "strValue" is pulled from a table into a recordset and I refer to the value from the recordset >

how are you doing this?
0
Buck_BeasomDatabase DesignerAuthor Commented:
I have a table that contains the Import Routine number, the row order, the Source_Field, The Destination_Field, the Field Type, a variable so I can use conversion functions like "Cdbl(Value) As Expr1" in the import, and a field identifying the last row.

The query is assembled in a loop like this:

strAppendSQL = "INSERT INTO [" & strDestinationTable & "] ( "
           
            Do Until rsAppendFields.EOF
                strAppendSQL = strAppendSQL & "[" & rsAppendFields!Dest_Field & "] "
                If rsAppendFields!LastField = True Then
                    strAppendSQL = strAppendSQL & " )"
                Else
                    strAppendSQL = strAppendSQL & ", "
                End If
                rsAppendFields.MoveNext
            Loop 'rsAppendFields - Insert Section

This is the first section the specifies the insert fields (destination.) The second part is longer because it has all the code for handling enclosure characters based on field type: Apostrophes for strings, # for dates and so forth. It works fine for everything EXCEPT when this line of code:

strAppendSQL = strAppendSQL & rsAppendFields!Source_Field

Encounters a VARIABLE in rsAppendFields!Source_Field instead of a field name in the source table. What I need is a way to tell it that if rsAppendFields!Source_Field is a VARIABLE, I want the CONTENTS of the variable and not the NAME of the variable in the  SQL. Coding it explicitly - as you suggested above - works, but when I try to use rsAppendFields!Source_Field to insert the CONTENTS of strValue ("Report1") it puts "strValue" in instead of "Report1."

Thanks for your assistance.
0
Rey Obrero (Capricorn1)Commented:
you posted a lot of words without answering the question..
where is the code that opens the recordset "rsAppendFields" ?

where is the code that sets the value for the variable "strValue"?
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Microsoft Access

From novice to tech pro — start learning today.