cpmasesa
asked on
SQL Text larger than 255 characters
How can a pass an SQL text greater than 255 characters that has been stored in a table to the SQL property of a QueryDef?
In many words:
I have a table where I store the SQL to generate a report, field name is SQL2Use - a memo field as some of the SQL is quite long.
In my code I store the contents of SQL2Use in a variable sSQL2Use (declared as a variant) and later assign this to the SQL property of a qQueryDef as follows:
qdf.SQL = sSQL2Use
All works fine until I come across something with > 255 character.
My code sees only the text after the 1st 255 characters.
Can someone please help ?
TIA
Clemens
In many words:
I have a table where I store the SQL to generate a report, field name is SQL2Use - a memo field as some of the SQL is quite long.
In my code I store the contents of SQL2Use in a variable sSQL2Use (declared as a variant) and later assign this to the SQL property of a qQueryDef as follows:
qdf.SQL = sSQL2Use
All works fine until I come across something with > 255 character.
My code sees only the text after the 1st 255 characters.
Can someone please help ?
TIA
Clemens
hmm - not sure, but try declaring your variable as a string variable not a variant type...
ASKER
Thats what I did initially. String has a limitation of 255 characters. I looked fr a data type like LongChar, VarChar, Memo with no luck!
ASKER
I just went through my data, after your previous post, and realised that it actually works EXCEPT when I further need to manipulate what is in sSQL2Use
A code snippet:
'Get the relevant SQL for selected report
sSQL2Use = DLookup("SQL2Use", "_Report", "ReportID = " & cbReport.Value)
'Get user input, for what person do they want the report for
sUserInput = InputBox(sFilterField, "EDCTP Thingie", "")
'Assemble final SQL with filter as input by user
sSQL2Use = sSQL2Use & " " & sFilterVerb & " " & sFilterField & " = " & Chr(34) & sUserInput & Chr(34)
A code snippet:
'Get the relevant SQL for selected report
sSQL2Use = DLookup("SQL2Use", "_Report", "ReportID = " & cbReport.Value)
'Get user input, for what person do they want the report for
sUserInput = InputBox(sFilterField, "EDCTP Thingie", "")
'Assemble final SQL with filter as input by user
sSQL2Use = sSQL2Use & " " & sFilterVerb & " " & sFilterField & " = " & Chr(34) & sUserInput & Chr(34)
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
I think I see what your problem is. The difference between the Access/JET string data type and the VB/VBA string data type.
From VB Help:
-------------------------- ---------- ---------
String Data Type
There are two kinds of strings: variable-length and fixed-length strings.
A variable-length string can contain up to approximately 2 billion (2^31) characters.
A fixed-length string can contain 1 to approximately 64K (2^16) characters.
Note A Public fixed-length string can't be used in a class module.
-------------------------- ---------- ---------
The DLookup is a JET function and therefor defaults to the 255 limit of JET.
This is longer but the solution below.
From VB Help:
--------------------------
String Data Type
There are two kinds of strings: variable-length and fixed-length strings.
A variable-length string can contain up to approximately 2 billion (2^31) characters.
A fixed-length string can contain 1 to approximately 64K (2^16) characters.
Note A Public fixed-length string can't be used in a class module.
--------------------------
The DLookup is a JET function and therefor defaults to the 255 limit of JET.
This is longer but the solution below.
Dim DB As DAO.Database
Dim RS As DAO.Recordset
Dim SQL As String
Dim FileNum As Integer
Dim OutputLine As String
FileNum = FreeFile()
'The SQL query to open the recordset
SQL = "SELECT SQL2Use " & _
"FROM _Report " & _
"WHERE ReportID = '" & cbReport.Value & "' "
Set DB = CurrentDb() 'Use the current database
Set RS = DB.OpenRecordset(SQL) 'actually open the recordset
If RS.EOF = False Then
RS.MoveFirst
sSQL2Use = RS!SQL2Use
Else
MsgBox "No Data", vbExclamation, "Exiting Fuction"
Set RS = Nothing
Set DB = Nothing
Exit Function
End If
Set RS = Nothing
Set DB = Nothing
ASKER
Guys thank you.
I have resolved the problem.
Mostly due to therealmongoose: suggestion that I do a debug.print. I then saw where I erred and corrected it. (The stored sql string had a WHERE clause and I was also adding one in my code)
Thank you all
I have resolved the problem.
Mostly due to therealmongoose: suggestion that I do a debug.print. I then saw where I erred and corrected it. (The stored sql string had a WHERE clause and I was also adding one in my code)
Thank you all
Great - glad you have resolved - coulc you please allocate points appropriately and close the question....
Cheers,
Mongoose
Cheers,
Mongoose
ASKER
Your suggest lead to me finding the error in my code, I resolved it. Thank you