Subject | InterBase BDE 5.2 SQL Links Update WARNING!!! |
---|---|
Author | David R. Robinson |
Post date | 2001-07-06T18:45:22Z |
FYI, I posted this on the Borland newsgroups, but thought I'd post it
here so everyone is aware of it.
David R.
------------------------------------------------------------------------
-------------------
If you use the BDE for database access for an InterBase 5.x database,
you need to be aware of the following problems introduced in the new BDE
SQL Links DLL that ships with Delphi 6:
Problem #1.) "Translate error. Value out of bounds". This occurs if
you are using IB 5.x client & server.
Problem #2.) "General SQL error. Unable to complete network request to
host 'servername'. Error writing date to the connection. An existing
connection was forcibly closed by the remote host.". This occurs if you
are using IB 6.x client & IB 5.x server.
If you use InterBase 5.x server, there is only one Date field type
(DATE). It stores both the date and time. If you want to retrieve data
for a specific date (ignoring the time portion of the field) in a
parameterized query, you would probably use AsDate. You might have code
that looks like this:
Query1.ParamByName('DATEWORKED').AsDate := DateTimePicker1.DateTime;
If you use AsDate, you will get one of the above mentioned errors if you
use the new BDE SQL Links DLL that shipped with Delphi 6.
If you install the new BDE SQL Links DLL and are using InterBase *5.x*
client and InterBase 5.x server, you will get the following error:
"Translate error. Value out of bounds".
If you install the new BDE SQL Links DLL and while you are at it, happen
to install the InterBase *6* client (which someone would probably do if
they installed Delphi 6), you potentially have a serious problem if you
have an InterBase 5.x server. The user that updated their BDE and IB
client will see the following error: "General SQL error. Unable to
complete network request to host 'servername'. Error writing date to
the connection. An existing connection was forcibly closed by the remote
host.". When you get this error, you have lost your database connection
and will most likely have to kill the executable to shut it down. Ok,
so one user gets an error, no big deal. But that isn't the case. The
next time any user that was connected to any database on that server
tries to access the database, they will get the same error as well. Yes,
ALL USERS CONNECTED TO ALL DATABASES ON THAT IB 5.x SERVER WILL GET THE
SAME ERROR AND BE DISCONNECTED FROM THE DATABASE.
I know of two people in addition to myself that have code that does
exactly this same thing, so I have a feeling it is a common practice
when using InterBase and the BDE. Both of these problems have been
reported to Borland.
Borland's so called "solution" is the first one is to use AsDateTime.
AsDateTime returns the time portion and can give inaccurate query
results due to the various values of the time portion of the field
(that's why we are using AsDate to begin with). So, IMHO, that isn't a
solution. Even if it was, the result requires that you update your
program because of Borland's bug.
Borland's response to the second (and more serious problem) is that
InterBase does not support mismatched client and server versions, so
they aren't going to do anything to address it.
In my case, how am I going to prevent the 8,000 InterBase 5.x users that
we have deployed from having one user somewhere update the BDE. Answer:
I won't be able to. Since IB 6 is now out and there are many other
applications using IB 6, there is a good chance that someone will update
both the BDE and IB client and will have all users get disconnected from
the database.
What's worse is that this isn't even really an InterBase problem, it's a
BDE problem. IMHO, the BDE team needs to update the BDE SQL Links DLL
for InterBase to resolve this problem. At this point, I see no
indication that Borland is the least bit interested in doing this, so I
decided I'd at least post this message so everyone is familiar with the
problem.
I haven't had time to test with IB 6, so I'm not sure if this is a
problem with IB 6/Dialect 1 or not.
David R. Robinson
Director of Development
Sage U.S. Holdings, Inc.
InterBase Installation Info - http://ibinstall.defined.net
P.S. I have a sample Delphi project and small database that can be
easily used to reproduce the problem if anyone is interested.
here so everyone is aware of it.
David R.
------------------------------------------------------------------------
-------------------
If you use the BDE for database access for an InterBase 5.x database,
you need to be aware of the following problems introduced in the new BDE
SQL Links DLL that ships with Delphi 6:
Problem #1.) "Translate error. Value out of bounds". This occurs if
you are using IB 5.x client & server.
Problem #2.) "General SQL error. Unable to complete network request to
host 'servername'. Error writing date to the connection. An existing
connection was forcibly closed by the remote host.". This occurs if you
are using IB 6.x client & IB 5.x server.
If you use InterBase 5.x server, there is only one Date field type
(DATE). It stores both the date and time. If you want to retrieve data
for a specific date (ignoring the time portion of the field) in a
parameterized query, you would probably use AsDate. You might have code
that looks like this:
Query1.ParamByName('DATEWORKED').AsDate := DateTimePicker1.DateTime;
If you use AsDate, you will get one of the above mentioned errors if you
use the new BDE SQL Links DLL that shipped with Delphi 6.
If you install the new BDE SQL Links DLL and are using InterBase *5.x*
client and InterBase 5.x server, you will get the following error:
"Translate error. Value out of bounds".
If you install the new BDE SQL Links DLL and while you are at it, happen
to install the InterBase *6* client (which someone would probably do if
they installed Delphi 6), you potentially have a serious problem if you
have an InterBase 5.x server. The user that updated their BDE and IB
client will see the following error: "General SQL error. Unable to
complete network request to host 'servername'. Error writing date to
the connection. An existing connection was forcibly closed by the remote
host.". When you get this error, you have lost your database connection
and will most likely have to kill the executable to shut it down. Ok,
so one user gets an error, no big deal. But that isn't the case. The
next time any user that was connected to any database on that server
tries to access the database, they will get the same error as well. Yes,
ALL USERS CONNECTED TO ALL DATABASES ON THAT IB 5.x SERVER WILL GET THE
SAME ERROR AND BE DISCONNECTED FROM THE DATABASE.
I know of two people in addition to myself that have code that does
exactly this same thing, so I have a feeling it is a common practice
when using InterBase and the BDE. Both of these problems have been
reported to Borland.
Borland's so called "solution" is the first one is to use AsDateTime.
AsDateTime returns the time portion and can give inaccurate query
results due to the various values of the time portion of the field
(that's why we are using AsDate to begin with). So, IMHO, that isn't a
solution. Even if it was, the result requires that you update your
program because of Borland's bug.
Borland's response to the second (and more serious problem) is that
InterBase does not support mismatched client and server versions, so
they aren't going to do anything to address it.
In my case, how am I going to prevent the 8,000 InterBase 5.x users that
we have deployed from having one user somewhere update the BDE. Answer:
I won't be able to. Since IB 6 is now out and there are many other
applications using IB 6, there is a good chance that someone will update
both the BDE and IB client and will have all users get disconnected from
the database.
What's worse is that this isn't even really an InterBase problem, it's a
BDE problem. IMHO, the BDE team needs to update the BDE SQL Links DLL
for InterBase to resolve this problem. At this point, I see no
indication that Borland is the least bit interested in doing this, so I
decided I'd at least post this message so everyone is familiar with the
problem.
I haven't had time to test with IB 6, so I'm not sure if this is a
problem with IB 6/Dialect 1 or not.
David R. Robinson
Director of Development
Sage U.S. Holdings, Inc.
InterBase Installation Info - http://ibinstall.defined.net
P.S. I have a sample Delphi project and small database that can be
easily used to reproduce the problem if anyone is interested.