| Bug # | Delphi versions | Description |
| 311 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
Cannot create Paradox tables with zero-size Blob fields. |
| 312 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
Requesting the OldValue property of a Field throws an exception. |
| 313 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
Serious bug in BDE Paradox drivers: Long bug report |
| 314 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
It seems that there's a bug involving large fields, on Oracle databases. It gives an exception violation, but not when the user is the creator of the table. |
| 315 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
Problems with Blobs and CachedUpdates |
| 316 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
If you're using Sybase SQL Anywhere 5.x and TStoredProc on Delphi 2, you may have trouble. |
| 317 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
Locate (method of TTable and TQuery) in combination with loPartialKey doesn't always work |
| 318 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
Long query on Sybase crashes with time-out error. |
| 319 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
In Queries on Oracle tables, Delphi 2.0 always rounds the FloatField values |
| 320 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
If an error occurs while a dataset is reading records from a database, it is not reported. |
| 321 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
Using a TTable with a filter (OnFilterRecord), in combination with CachedUpdate mode, can cause loss of data. |
| 322 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
The BDE Paradox Hun 852 DC language driver in 16 bit BDE works incorrectly. |
| 323 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
Performance of database applications in Delphi 1 is better than in Delphi 2. |
| 324 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
Using secondary indexes, when data containing international characters is entered, data may be corrupted |
| 410 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
Access violation in IDSQL32.DLL |
| 421 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
When the CachedUpdates property is set to true and the Filtered property it set to true too, when you put the dataset into edit mode (i.e. Table1.edit) the contens of some fields are changed and some are deleted |
| 423 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
BDE error number 9987 - Invalid File Name |
| 477 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
Setting the TTable's Active property to true in the Object Inspector may cause "Table is busy" error mesage when calling the EmptyTable method. |
| 486 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
Packaged procedures in Oracle 8.04 using REF CURSORS no longer function. (Delphi 4; BDE v. 5) |
| 530 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
It looks like the BDE leaks memory resources each time it's started and stopped. |
| 528 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
TClientDataset The data packet of a TClientDataSet accumulates unusable data when calling SetOptionalParam more than once with the same parameter name. |
| 475 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
TQuery When using TQuery to query a Paradox table (in a peer-to-peer networking situation with a Win95 system), I get an "access violation" message from the NT 4.0 operating system. |
| 441 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
TSession TSession.NetFileDir is limited to a length of 31 characters which is rather short. |
| 450 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
Oracle -
Error calling an Oracle stored function which returns boolean using TStoredProc |
| 496 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
Oracle -
Rounding to two decimals in an Oracle (7) database goes wrong. |
| 483 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
Oracle 8.04 -
If you have a packaged or stand-alone procedure with more than 10 parameters, and you use the TStoredProc params editor, Delphi will crash (on Windows 95) or disappear (on NT). This concerns Oracle 8.04 databases. |
| 394 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
Paradox -
Secondary index becomes corrupt after a Key Violation error. |
Bug #311; last modified: before April 1998| 1.02 | 2.01 | 3.0 | 3.01 | 3.02 | 4.0 | 4.01 | 4.02 |
| Exists | Exists | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown |
Steps to reproduce the problem:
Create a new application. Drop a button and a memo on the mainform.
Add this code to the Click event of the button:
procedure TForm1.Button1Click(Sender: TObject);
var
Table: TTable;
begin
Table := TTable.Create(Self);
try
with Table do
begin
DatabaseName := 'C:\';
TableType := ttParadox;
TableName := 'TestIt.DB';
FieldDefs.Add('Blob', ftBlob, 0, false);
CreateTable;
Open;
Memo1.Lines.Add(Format('Blob.Size = %d', [FieldByName('Blob').Size]));
end;
finally
Table.Free;
end;
end;
Check(DbiTranslateRecordStructure(nil, iFldCount, FieldDescs,
GetDriverTypeName(DriverTypeName), PSQLLName, pFLDDesc, False));
{$DEFINE Fix_Paradox_ZeroSizeBlob_Bug}{$IFDEF Fix_Paradox_ZeroSizeBlob_Bug}
{ Correct a bug in the Paradox driver. This enables us to have blob fields
that use zero extra bytes in the record structure. }
if StrComp(DriverTypeName, 'PARADOX') = 0 then
for I := 0 to iFldCount-1 do
with PFieldDescList(FieldDescs)^[I] do
if (iFldType = fldBLOB) and (iUnits1 = 0) then
with PFieldDescList(TableDesc.pFLDDesc)^[I] do
begin
{ The Paradox driver has a bug in that it sets all Blob fields of
size 0 to size 1 }
Dec(iLen, iUnits1);
iUnits1 := 0;
end;
{$ENDIF}
iIdxCount := IndexDefs.Count;
Bug #312; last modified: before April 1998| 1.02 | 2.01 | 3.0 | 3.01 | 3.02 | 4.0 | 4.01 | 4.02 |
| Unknown | Exists | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown |
Bug #314; last modified: before April 1998| 1.02 | 2.01 | 3.0 | 3.01 | 3.02 | 4.0 | 4.01 | 4.02 |
| Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown |
Bug #315; last modified: before April 1998| 1.02 | 2.01 | 3.0 | 3.01 | 3.02 | 4.0 | 4.01 | 4.02 |
| Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown |
Bug #316; last modified: before April 1998| 1.02 | 2.01 | 3.0 | 3.01 | 3.02 | 4.0 | 4.01 | 4.02 |
| Unknown | Exists | Exists | Unknown | Unknown | Unknown | Unknown | Unknown |
procedure TDatamodule1.OnCreate
begin
with StroredProd1, Params
do begin
Close;
Clear;
CreateParam(ftInteger,'First',ptInput);
CreateParam(ftString,'Second',ptInputOutput);
{NEVER USE ptOuput , always ptInputOutput for results}
end;
end;
Bug #317; last modified: before April 1998| 1.02 | 2.01 | 3.0 | 3.01 | 3.02 | 4.0 | 4.01 | 4.02 |
| Unknown | Exists | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown |
procedure TForm1.Button1Click(Sender: TObject);
var
myvariant: variant;
begin
myvariant := vararraycreate([0,1], varvariant); {create 2 fields}
myvariant[0] := 'pete';
myvariant[1] := 'fish';
if query1.locate('Firstname;LastName',
{'LastName;Firstname',}
myvariant,
[loCaseInsensitive, loPartialKey])
then showmessage('Found')
else showmessage('NOT found');
end;
Bug #318; last modified: 7-Feb-99| 1.02 | 2.01 | 3.0 | 3.01 | 3.02 | 4.0 | 4.01 | 4.02 |
| Unknown | Exists | Unknown | Unknown | Unknown | Unknown | Unknown | Exists |
On 3 Feb 99 a comment to this was received:
We encountered similar problems using Delphi 4.02.
What we did was put a TDatabase component on a form, select SYBASE
as driver and put the default parameters in there. The TIMEOUT
parameter is not put in the parameter overrides.
Putting it there does nothing.
The TIMEOUT parameter can be found in the BDE administrator:
Configuration, Native, SYBASE.
The database component gets a parameter override called
MAX QUERY TIME.
This parameter is the max. query time WITHIN the timeout limit.
So if the TIMEOUT is set to 500, and in the TDatabase component
has a parameter override MAX QUERY TIME set to 3600, then the
TIMEOUT limit in the BDE administartor configuration is used.
Putting thr TIMEOUT parameter in the component's parameter
overrides does not help: the BDE configuration TIMEOUT
parameter value is used.
So the solution or workaround is:
Set the TIMEOUT to the maximum query time used for all your
TDatabase components using Sybase, and then in the component
iself limit the maximum query time for this component only
using the override MAX QUERY TIME.
I hope somebody can use this info. This solution worked for us.
Bug #319; last modified: before April 1998| 1.02 | 2.01 | 3.0 | 3.01 | 3.02 | 4.0 | 4.01 | 4.02 |
| Unknown | Exists | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown |
Bug #320; last modified: before April 1998| 1.02 | 2.01 | 3.0 | 3.01 | 3.02 | 4.0 | 4.01 | 4.02 |
| Unknown | Exists | Exists | Exists | Exists | Unknown | Unknown | Unknown |
function TDataSet.GetNextRecords: Integer;
begin
Result := 0;
try
while (FRecordCount < FBufferCount) and GetNextRecord do Inc(Result);
except
end;
end;
The try/except block has a blank handler. This will trap ALL exceptions,
giving NO indication to the user that an exception has occured.
Mark Sigerson adds:
We are using Delphi 3.02 (3.0 Build 5.83 patched up to 3.02) on NT4
stations. Our application uses TQuery components to perform complex SQL
queries on an Oracle 7 database.
We encounter the problem when a TQuery is opened using a SELECT statement which has a particular type of syntax error in its WHERE clause, that is, when the WHERE clause specifies a number value for a string field or a string value for a number field, e.g.
... WHERE StringField > 6 ...or
... WHERE NumberField = 'robert' ...The query is executed and provokes the ORACLE SQL error "ORA-10722: invalid number error". An EDBEngineError is then created in the procedure DbiError in DBTables.pas and then caught and destroyed in TDataSet.GetNextRecords in DB.pas as described in the bug report. The exception-handling code around the opening of the TQuery in our application thus never gets the chance to execute, and the application is unaware of the error.
I can't see any way around this except to remove the blank try...except handler.
Bug #321; last modified: before April 1998| 1.02 | 2.01 | 3.0 | 3.01 | 3.02 | 4.0 | 4.01 | 4.02 |
| Unknown | Exists | Exists | Exists | Unknown | Unknown | Unknown | Unknown |
unit BugBDE40;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
DBTables, DB, StdCtrls, Grids, DBGrids;
type
TfBugBDE40 = class(TForm)
MyTable: TTable;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
Button1: TButton;
MyTableSpeciesNo: TFloatField;
MyTableCategory: TStringField;
MyTableCommon_Name: TStringField;
MyTableSpeciesName: TStringField;
MyTableLengthcm: TFloatField;
MyTableLength_In: TFloatField;
MyTableNotes: TMemoField;
MyTableGraphic: TGraphicField;
procedure MyTableFilterRecord(DataSet: TDataSet; var Accept: Boolean);
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
public
end;
var
fBugBDE40: TfBugBDE40;
implementation
{$R *.DFM}
procedure TfBugBDE40.MyTableFilterRecord(DataSet: TDataSet;
var Accept: Boolean);
begin
Accept := MyTableLengthCm.AsInteger >= 100;
// or the condition (without persistent fields)
//Accept := MyTable['Length (cm)'] >= 100;
end;
procedure TfBugBDE40.Button1Click(Sender: TObject);
begin
// To enter in edit mode
MyTable.Edit;
end;
procedure TfBugBDE40.FormCreate(Sender: TObject);
begin
MyTable.Open;
end;
procedure TfBugBDE40.FormDestroy(Sender: TObject);
begin
MyTable.Close;
end;
end.
Comment from checker:
I duplicated the bug quite easily and was unable to fix the problem.
It appears that there is indeed a bug in the BDE! The error occurs when
you have BOTH cached updates AND a filter set up at the same time. I tried
a lot of different ways of turning things on and off but kept on coming
back to the same situation - caching and filtering at the same time just
don't gel! It would seem that the BDE keeps the filtered records in memory
as well as the cache information for updating changes. However when both
are used at the same time they get a little mixed and we lose the data.
Not a very nice situation at all...
First I feel a little maintenance on the data table is required. It is not good practice to name fields (or variables) with anything other than alphanumerics and the underscore character. The filtered field in question is called "Length (cm)". Change it to "Length_cm" (without quotes) using the database desktop. This simplifies the SQL string coming up.
Next - replace the table component with a query component. Also remove the MyTableFilterRecord code as it is no longer needed. Set the database property of the query to DBDEMOS as before. Change the SQL string of the query to:
select * from biofile where Length_cm > 100
This query now duplicates the table with the filter. CachedUpdates can now be turned on for the query successfully.
I tried this and it works faultlessly.
Bug #322; last modified: before April 1998| 1.02 | 2.01 | 3.0 | 3.01 | 3.02 | 4.0 | 4.01 | 4.02 |
| Exists | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown |
Bug #324; last modified: before April 1998| 1.02 | 2.01 | 3.0 | 3.01 | 3.02 | 4.0 | 4.01 | 4.02 |
| Unknown | Exists | Exists | Unknown | Unknown | Unknown | Unknown | Unknown |
December 1996
Is there any chance that you use Paradox files with one or more secondary
indexes? And, do you think some users may input one or more international
characters, beyond ASCII 127, into your tables? (like E with accents, German
umlauts, Scandinavian characters, etc...) In that case, this applies to
YOU... Read on for more details, as well as an exampe I'd like you to test.
I know it is a rather serious accuse, and everybody is invited to prove me wrong, but I believe I have isolated a bug in BDE that can make your data go corrupt any day. They may actually be corrupt already. Basically, if you have one or more secondary indexes on fields that contain international characters, major table operations like regenerating indexes, or packing the table, can corrupt the table. Funny enough, you will not notice this, until you try to delete records...
I have checked this with 16-bit BDE 2.52 (the last one) only, and I do not know if the problem applies to other versions. I guess it doesn't. (See second part, RPS) First, I assumed the problem was in my language driver, but then I tested with standard ASCII driver as well as the Norwegian Pdox Ansi Nordan40 driver, and they behaved identically with respect to the problem. Maybe you will not see the problem if you never fumbled with language drivers. Please state your BDE software version, and what sort of language driver you use (see BDECFG, front page and system page), if you respond to this post. If you don't get any problems, you could try to change to another language driver, and test again, if you are interested.
Here is a small example that I invite you to test:
1) With the Database Desktop, create a table with one field only. Let
the field be alphanumeric, one character wide. Make this the key field.
Create a secondary index on this one-character field. Let the index be
non-case sensitive (that's the default). You may name the table, field,
and index whatever you want.
2) Now we will add some data to our table. Throw up a Delphi form with
a TDBGrid, or use the Database Desktop. Simply insert international characters
in the table. Make for instance three records with variations on E with
accent. (é, è, and ê). Or Norwegian ÆØÅ,
Swedish ÄÖÅ, German öüä, or whatever you
like. One record should be enough, theoretically. If you couldn't read
all these weird chars, you get the point anyway, I hope.
3) So, we have some records of characters beyond Ascii 127. Now close
the table, and do a major table operation on it. For our example, go to
Database Desktop, choose Restructure, check "Pack Table", and Save. This
will make the BDE pack the table.
4) So far it looks good. But now try to open the table like earlier,
and try to delete all the records. Viola! Delete does not work, and you
(at least I) get the message "Corrupt index".
The table is not only corrupt - it is more or less corrupt beyond repair.
Try some TUtility app (I use the Pack.zip from DSP) - it will lie and report
the table to be completely good! A Table Repair is not the solution either,
it is part of the problem, I believe. That's because the "major table operation"
mentioned in step 3, could have been replaced with several other operations
like DbiRegenIndexes, TUtility table pack, or actually even TUtility Table
Repair. Adding another secondary index on a field containing international
chars, does the same trick. The table seems to be good at first, but turns
out to be bad as soon as you try to delete records containing indexed international
chars.
The bottom line is, I believe, that any building or rebuilding of secondary indexes goes haywire with internationel characters.
If this problem did turn up in your place, imagine the danger for real business situations. Maybe you should make a copy of all the tables you use in your current projects, and try to delete records that contain indexed internatoinal characters. This in order to see if any of your tables are already corrupted.
The fields involved may of course be wider than 1 character. The international
chars don't even have to be in the start of the words. Actually, those
fields don't even have to be the first ones to compose the secondary index.
(If they are, you will see that sorting goes bad, even before you try to
delete records.) All of this happens at least on MY machine. How am I supposed
to live with that? Have I just sitted too long in front of my Delphi windows?
Do I see ghosts in broad daylight? Fata Morgana on my own desk? After struggling
with this for weeks, should I start growing tomatoes instead? Do I need
serious help? Hey, why do I need such a white shirt with extra long arms?
Tw...Heeeeeeee-.#%
(end of original message)
Second part
Not much has been learnt since I posted the message and filed the bug
report. A danish developer reported recently that he was regularly struggling
with the same. It seems the problem can be avoided if you do not use any
non-US language drivers. Further, most reports seem to be from Scandinavia,
so it may be that the problem does not occur with french, or german drivers,
etc. More testing is desirable.
I now also believe that major table operations like reindexing are NOT necessary to produce the bug, but it will accelerate the problem. Neither is deletion of records necessary. Changes in a table forcing indexes to re-order some records containing indexed international characters will often be enough to corrupt the table.
In general, international characters together with international language drivers screw up. I have found the best solution to be to skip language drivers altogether and accept US sorting of all characters. I believe this problem is a serious one for international 16-bit developers, of which there should be significant numbers. But since Borland is not interested in responding to the problem, much less solving it, I do not know what to do more. For the moment I am considering leaving the Paradox format for the benefit of some SQL server.
Comment from checker:
I can confirm that I see the same bug running BDE 4.0 on NT 4.0 sp3.
I did the test in Database Desktop 7.0 but you would see the same problem
with any app that uses BDE.
Bug #410; last modified: 7-May-98| 1.02 | 2.01 | 3.0 | 3.01 | 3.02 | 4.0 | 4.01 | 4.02 |
| Unknown | Unknown | Unknown | Unknown | Exists | Unknown | Unknown | Unknown |
Bug #421; last modified: 11-Aug-98| 1.02 | 2.01 | 3.0 | 3.01 | 3.02 | 4.0 | 4.01 | 4.02 |
| Unknown | Unknown | Unknown | Unknown | Exists | Fixed | Fixed | Fixed |
Comment from checker:
The demo program does show the described buggy behaviour.
But I haven't checked whether this behaviour is reproducible
with other tables or what the cause may be.
Can anyone please look into this?
Bug #423; last modified: 22-Jul-98| 1.02 | 2.01 | 3.0 | 3.01 | 3.02 | 4.0 | 4.01 | 4.02 |
| N/A | Exists | Fixed | Fixed | Fixed | Fixed | Fixed | Fixed |
All the database files are present and intact, and can be read using the database desktop though.
The file to look for is FAT32.ZIP; can be found through
ftp://ftp.inprise.com/pub/devsupport/patches/index.txt
Bug #477; last modified: 8-Oct-98| 1.02 | 2.01 | 3.0 | 3.01 | 3.02 | 4.0 | 4.01 | 4.02 |
| Unknown | Unknown | Exists | Exists | Exists | Unknown | Unknown | Unknown |
Bug #486; last modified: 31-Oct-98| 1.02 | 2.01 | 3.0 | 3.01 | 3.02 | 4.0 | 4.01 | 4.02 |
| Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Exists | Fixed |
You cannot use a REF CURSOR in a package with anything other than an
input/output Cursor parameter.
Depending on which value you have for the DLL32 variable in the BDE, you
will get the following results:
Using SQLORA8.DLL, you get ORA-01036 - Illegal variable name/number.
Using SQLORA32.DLL, you get ORA-01001 - Invalid Cursor.
The net result is that packaged procedures using REF CURSORS that worked
perfectly well under Delphi 3 and BDE 4 no longer function.
This is a severe restriction in using Oracle with Delphi, since packages are an intregral part of C/S development with Oracle, and REF CURSORS are the primary way to return cursor-datasets to Delphi from within a procedure.
Bug #530; last modified: 7-Feb-99| 1.02 | 2.01 | 3.0 | 3.01 | 3.02 | 4.0 | 4.01 | 4.02 |
| Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Exists |
procedure TForm1.TimerTimer(Sender: TObject);
begin
if not Loaded
then Check (dbiinit (nil))
else Check (dbiexit);
Loaded := not Loaded
end;
procedure TForm1.check (cc:dbiresult);
begin
if cc <> dbierr_none
then raise exception.create (format ('dbi error %d',[cc]));
end;
(use unit BDE; declare Loaded as a Boolean and initialize it to False)
After activating the program follow memory usage with any monitor.
I tried this with Delphi 4 pro, patch #2, and BDE 5.01,
but I'm quite sure the bug exists with previous versions of the BDE
I've seen the bug both on win98 and Nt4 sp3
Bug #528; last modified: 7-Feb-99| 1.02 | 2.01 | 3.0 | 3.01 | 3.02 | 4.0 | 4.01 | 4.02 |
| Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Exists |
To Duplicate:
procedure TForm1.FormCreate(Sender: TObject);
begin
try
ClientDataSet1.Open;
except
ClientDataSet1.CreateDataSet;
end;
ClientDataSet1.LogChanges := false;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
StringIn, StringOut: string;
begin
StringIn := TimeToStr(Time);
ClientDataSet1.SetOptionalParam('TestData', StringIn, false);
StringOut := ClientDataSet1.GetOptionalParam('Testdata');
ShowMessage(Format('Param written in as: %s%s Param read out as: %s',
[StringIn, #13, StringOut]));
end;
Why is this a bug:
Suggested/Expected Behavior:
1) When calling SetOptionalParam, if the parameter
exists, it should be replaced by the current value. Space
in the packet from the old value should be reclaimed so
the packet won't grow unnecessarily over time. Thus,
when GetOptionalParam is called, you get the last value
that was set.
2) Provide a method of deleting optional parameters from
the data packet. (Could be as simple as passing a null
or empty variant to SetOptionalParam).
What is the behaviour you get? (See above)
How is this different and is this really wrong?
It is a problem for simple local databases that use
TClientdataset. I was hoping to store global
database info in the datapacket so it would
be saved automatically when the dataset was
streamed. With its current behavior, the
packet size and thus the file size will
continue to increase whenever optional
parameters are stored using SetOptionalParam.
Also, OptionalParam values cannot be removed
from the packet as far as I can see. Also
these values cannot be written with new
data since these cannot be retrieved.
What's the cause (if known)?
Seems to be a problem in dbclient.dll. I did not
find the source code that does the work for
TClientDataSet.SetOptionalParam.
Bug #475; last modified: 6-Oct-98| 1.02 | 2.01 | 3.0 | 3.01 | 3.02 | 4.0 | 4.01 | 4.02 |
| Unknown | Unknown | Exists | Unknown | Unknown | Unknown | Unknown | Unknown |
I am enclosing a test program. I developed and compiled this program in a computer with Windows 95. I run this program in Windows 95 and it works fine. Run it in NT 4.0 and it sends you the "access violation" message.
I am developing a program for multiuser access on a Windows network. For testing purposes I am using two computers: one with Windows 95 and the other with Windows NT 4.0. I followed the instruction about configuring the BDE for peer-to-peer networking.
I set the netdir directory to a directory on the NT workstation and set the Local Share to true on both computers.
Using the BDE admin program, configure an alias "Test". Set the path
parameter to c:\temp. Store the table "Vendor" and its index file in
this directory.
Put the TestProject.exe file wherever you want.
I don't know if this is a Delphi's bug or mine. Please review.
Thanks,
Justo Mayora
Republic of Panama
Bug #441; last modified: 13-Aug-98| 1.02 | 2.01 | 3.0 | 3.01 | 3.02 | 4.0 | 4.01 | 4.02 |
| Absent | Absent | Absent | Absent | Absent | Exists | Fixed | Fixed |
Dennis Waterman followed up to this:
I've searched in the source code and in the function
TSession.SetNetFileDir (unit dbtables) the "NetFileDir" is set using a
temporary buffer. In Delphi 4 this buffer is of type DBINAME =
array[0..31] of char. In Delphi 2 however this buffer is an
array[0..255] of char. So that is why the NetFileDir is chopped after
31 characters. I've send a bugreport about it to Borland
Bug #450; last modified: 5-Aug-98| 1.02 | 2.01 | 3.0 | 3.01 | 3.02 | 4.0 | 4.01 | 4.02 |
| Unknown | Unknown | Unknown | Unknown | Exists | Unknown | Unknown | Unknown |
If any attempt is made to execute or prepare this or any function which returns boolean, then Delphi causes an Oracle exception to be raised something alone the lines of "This is not a procedure or is invalid", yet other stored functions without boolean return types can be called using TStoredProc.
Validity Tests:
Possible causes:
I suspect the Delphi/BDE is using a query/query cursor to call the
stored proc which is why boolean is invalid, because boolean is not a
Ansi SQL reserved type allowed in query cursors. This suggests that
the Delphi/BDE implementation of TStoredProc/stored procedures is
incorrect as it should be independent of queries.
Bug #496; last modified: 9-Dec-98| 1.02 | 2.01 | 3.0 | 3.01 | 3.02 | 4.0 | 4.01 | 4.02 |
| Unknown | Exists | Exists | Exists | Exists | Unknown | Unknown | Unknown |
| Entering | Results | Should result in |
| 0,99 | 0,99 | 0,99 |
| 0,999 | 0,1 | 1 |
| 0,9999 | 0,1 | 1 |
| 0,99999 | 0,1 | 1 |
| 0,999999 | 1 | 1 |
Configuration:
Delphi 3.02; BDE 5 (with SQL-links); Oracle 7.3
BDE-Configuration:
DLL32 --> SQLORA32.DLL
VENDOR INIT --> ORA73.DLL
Glen Thompson wrote (in DDJ-thread):
A colleague reported the following confidence-shattering bug in the BDE
updating a table in Oracle 7.
A table in Oracle has a column defined as NUMBER(8,2).
Update this column with a value of 0.090 and the value changes to 0.09.
(all OK so far)
Update this column with a value of 0.095 and the value changes to 0.01.
Update this column with a value of 0.099 and the value changes to 0.01.
YES!!! The value going into Oracle is 0.01, NOT 0.10 as expected.
The fault seems to be with the BDE, as the UPDATE command in Oracle
SQL*PLUS gives the correct results.
It seems that 3 or 4 decimal place examples all work OK.
(old workaround:)
Workaround is to use the Format function in Delphi to round to the
correct number prior to hitting using DB post !!
Bug #483; last modified: 31-Oct-98| 1.02 | 2.01 | 3.0 | 3.01 | 3.02 | 4.0 | 4.01 | 4.02 |
| Unknown | Unknown | Exists | Exists | Exists | Exists | Exists | Fixed |
Bug #394; last modified: 25-Oct-98| 1.02 | 2.01 | 3.0 | 3.01 | 3.02 | 4.0 | 4.01 | 4.02 |
| Exists | Exists | Exists | Exists | Exists | Exists | Exists | Unknown |
A quick testrun with DBD32 indicates that DBD32 doesn't corrupt the index (but did throw a key violation which is only proper) so Borland have at some point had the necessary knowledge on how to deal with unique secondary indeces... :-)