Thread: MS Access to PostgreSQL

MS Access to PostgreSQL

From
William Shatner
Date:
I have recently migrated from MS Access to PostgreSQL.Previously I had
a SQL command

      ResultSet aGroupResultSet = aGroupPathStmt.executeQuery(
          "SELECT \"groupID\",\"fullpath\" FROM \"groups\" WHERE
\"fullpath\" Like '" +
          aPath + "'");



where aPath was equal to  'folder\another folder\%'.

The field to be edited stores the full path in the format
'folder\folder1\folder2' and so on...
The purpose being to change all groups at this level of the
hieracarchy and below, this was achieved using the '%' in Access, this
however doesn't seem to work in PostgreSQL, it doesn't error out but
it just seems to see the '%' as a normal character.

How can this be done in PostgreSQL?


Many Thanks,
B

Re: [GENERAL] MS Access to PostgreSQL

From
Michael Fuhr
Date:
On Fri, Mar 11, 2005 at 05:19:35PM +0000, William Shatner wrote:
> I have recently migrated from MS Access to PostgreSQL.Previously I had
> a SQL command
>
>       ResultSet aGroupResultSet = aGroupPathStmt.executeQuery(
>           "SELECT \"groupID\",\"fullpath\" FROM \"groups\" WHERE
> \"fullpath\" Like '" +
>           aPath + "'");
>
> where aPath was equal to  'folder\another folder\%'.
>
> The field to be edited stores the full path in the format
> 'folder\folder1\folder2' and so on...
> The purpose being to change all groups at this level of the
> hieracarchy and below, this was achieved using the '%' in Access, this
> however doesn't seem to work in PostgreSQL, it doesn't error out but
> it just seems to see the '%' as a normal character.

You're running into problems with \ being the escape character in
string constants and again in patterns.  There's some discussion
of this in the "Pattern Matching" section of the "Functions and
Operators" chapter in the documentation:

http://www.postgresql.org/docs/8.0/interactive/functions-matching.html

Here are some ways to make it work (dollar quoting available only
in 8.0 and later):

fullpath LIKE 'folder\\\\another folder\\\\%'
fullpath LIKE 'folder\\another folder\\%' ESCAPE ''
fullpath LIKE $$folder\\another folder\\%$$
fullpath LIKE $$folder\another folder\%$$ ESCAPE ''

--
Michael Fuhr
http://www.fuhr.org/~mfuhr/

Re: [GENERAL] MS Access to PostgreSQL

From
Edward Macnaghten
Date:
William Shatner wrote:
> I have recently migrated from MS Access to PostgreSQL.Previously I had
> a SQL command
>
>       ResultSet aGroupResultSet = aGroupPathStmt.executeQuery(
>           "SELECT \"groupID\",\"fullpath\" FROM \"groups\" WHERE
> \"fullpath\" Like '" +
>           aPath + "'");
>
>
>
> where aPath was equal to  'folder\another folder\%'.
>

<snip>

Are you sure?  In MS-Access JET engine it uses the '*' character instead
of the '%' one as a "like" wildcard.

Two things you can try...  If you have attached the table "groups" in
MS-Access and are using it through JET (as the code you provided would
suggest) then try changing the "%" character to "*" - the JET  engine
will convert that to % for you, whereas it may escape the "%" character
you have supplied to keep the behaviour the same as JET.

The other possibility is to use the "dbPassThrough" parameter and
execute it as a pass through query, here the SQL is sent to the
PostgreSQL engine unchanged.

All in all I am sure this is an MS-Access problem rather than a Postgres
one.

Eddy



Re: [GENERAL] MS Access to PostgreSQL

From
William Shatner
Date:
Hi Edward,

Michael Fuhr's solution worked (Mar 11). I had to write a method to
insert four backslashes into the the path been searched for. For
example if the stored path in the DB was folder1\folder2\folder3\ in
order for PostgreSQL to serach against this i had to search for path
LIKE folder1\\\\folder2\\\\folder3\\\\%.

Thanks to all for help and suggestions.

WS


On Sun, 20 Mar 2005 00:21:00 +0000, Edward Macnaghten
<eddy@edlsystems.com> wrote:
> William Shatner wrote:
> > I have recently migrated from MS Access to PostgreSQL.Previously I had
> > a SQL command
> >
> >       ResultSet aGroupResultSet = aGroupPathStmt.executeQuery(
> >           "SELECT \"groupID\",\"fullpath\" FROM \"groups\" WHERE
> > \"fullpath\" Like '" +
> >           aPath + "'");
> >
> >
> >
> > where aPath was equal to  'folder\another folder\%'.
> >
>
> <snip>
>
> Are you sure?  In MS-Access JET engine it uses the '*' character instead
> of the '%' one as a "like" wildcard.
>
> Two things you can try...  If you have attached the table "groups" in
> MS-Access and are using it through JET (as the code you provided would
> suggest) then try changing the "%" character to "*" - the JET  engine
> will convert that to % for you, whereas it may escape the "%" character
> you have supplied to keep the behaviour the same as JET.
>
> The other possibility is to use the "dbPassThrough" parameter and
> execute it as a pass through query, here the SQL is sent to the
> PostgreSQL engine unchanged.
>
> All in all I am sure this is an MS-Access problem rather than a Postgres
> one.
>
> Eddy
>
>