[AccessD] Jet version sql error Try 2

Charlotte Foust cfoust at infostatsystems.com
Tue Sep 11 16:39:55 CDT 2007


A null concatenated to anything only returns a null if you use the +
operator for the concatenation.  An ampersand works differently.

Charlotte Foust 

-----Original Message-----
From: accessd-bounces at databaseadvisors.com
[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Gmail
Sent: Tuesday, September 11, 2007 2:31 PM
To: 'Access Developers discussion and problem solving'
Subject: Re: [AccessD] Jet version sql error Try 2

Hmmm,

I *think* it was returning a null, not a null terminated string.  How do
you do you trim a null "I trim one so there was an extra" ?  I do not
know of anyway to add a null to anything.

>Concatenation does not work with null terminated strings so my sql 
>string
didn't have the last semicolon and threw an error.
A null concatenated to anything returns a null.


Max



-----Original Message-----
From: accessd-bounces at databaseadvisors.com
[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Doug Murphy
Sent: Tuesday, September 11, 2007 10:06 PM
To: 'Access Developers discussion and problem solving'
Subject: Re: [AccessD] Jet version sql error Try 2

I finally figured out what the problem was. I use the GetLocalInfo API
to get the users computer country settings.  This API is supposed to
give a string length which you then use to dimension a variable into
which the api returns the country setting as a null terminated string
that designates the country, e.g., "United States" for the US.  This
works as it is supposed to for the later versions of Windows. For some
reason when I test our runtime on a Windows 98 SE computer the returned
buffer length has one extra space so I was getting the Country
designation with 2 null characters on the end.
I trim one so there was an extra. 

The sql string was just a symptom of this problem. Concatenation does
not work with null terminated strings so my sql string didn't have the
last semicolon and threw an error.

When the country setting string is not null terminated all is well. 

-----Original Message-----
From: accessd-bounces at databaseadvisors.com
[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Gustav Brock
Sent: Tuesday, September 11, 2007 10:26 AM
To: accessd at databaseadvisors.com
Subject: Re: [AccessD] Jet version sql error Try 2

Hi Doug

This may be one of those situations where you just code it differently
to skip further debugging.
You could apply a filter to the recordset:

  sSQL = "Select * From tblUserFormat"
  Set db = CurrentDb
  Set rs = db.OpenRecordset(sSQL, dbOpenDynaset)
  rs.Filter = "fldCountry = '" & sCountrySettings & "'"
  Set rs = rs.OpenRecordset

/gustav


>>> dw-murphy at cox.net 11-09-2007 19:04 >>>
Hi Gustav,

This is a runtime that I install from a test CD.  It runs correctly on
operating systems other than win 98 SE.  I know the table is populated
since I put the values in and that the recordset returns values, when it
runs correctly.

As I responded to Max on his post I suspect this is something to do with
the version of jet used on Windows 98 and later versions of windows.  My
installer checks the windows version and loads the apprpropriate version
of Jet 4 SP8.  I just can't figure out why this simple string would be
interpreted differently.

Doug 

-----Original Message-----
From: accessd-bounces at databaseadvisors.com
[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Gustav Brock
Sent: Tuesday, September 11, 2007 6:24 AM
To: accessd at databaseadvisors.com
Subject: Re: [AccessD] Jet version sql error Try 2

Hi Doug

Strange, except that sSQL is never Null and dbOpenDynaset is the default
method for attached tables.
Try with another table/database to check if the table should be corrupt.

/gustav

>>> dw-murphy at cox.net 11-09-2007 06:13 >>>
 
OK I'll try again with a simpler (?) question.

Any one see a reason why the following sql string generates an error
when used to open a recordset?

"Select * From tblUserFormat Where fldCountry = 'United States';"

Generates an error 3075 when run in the following line:

"Set rs = db.OpenRecordset(sSQL, dbOpenDynaset)"

The error message that gives the error number 3075 indicates that there
is some problem with fldCountry = 'United States'

I have modified the code slightly from my first post to use a dynaset
type recordset and added the semicolon at the end of the query string.
Same error is generated with the updated code.  The complete procedure
up to this point is as follows.

Public Sub GetCountrySettings()
Dim rs As DAO.Recordset
Dim db As DAO.Database
Dim sSQL As String
Dim sCountrySettings As String
Dim fld As Field
Dim LCID As Long

  LCID = 0  'GetSystemDefaultLCID()

   On Error GoTo GetCountrySettings_Error

      sCountrySettings = GetUserLocaleInfo(LCID, LOCALE_SCOUNTRY)
      tFM.sCountry = sCountrySettings
      
      If Not IsNull(sSQL) Then
            sSQL = "Select * From tblUserFormat Where fldCountry = '" &
sCountrySettings & "';"
            Set db = CurrentDb
            Set rs = db.OpenRecordset(sSQL, dbOpenDynaset)
            rs.MoveFirst

-- 



--
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com

--
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com

--
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com




More information about the AccessD mailing list