| Bug # | Delphi versions | Description |
| 285 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
Expression index doesn't work |
| 515 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
TUpdateRecordEvent is declared wrong in DBTables.pas |
| 523 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
When connecting a DB control (i.e. DBGrid) to an Oracle database, the scroll bar does not proportion itself properly when the table/query being connected to has a large number of records |
| 467 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
DBLookupComboBox Problem with IntelliMouse wheel |
| 484 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
Data Controls -
DBLookupComboBox You can't type in anything in a dbLookupComboBox so that it will scroll to the next nearest character. |
| 283 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
TBCDField -
See TComponent |
| 282 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
TBooleanField -
TBooleanField.GetAsString uses Bool instead of WordBool. This can make all boolean database fields display as 'true' even when the underlying value is false. |
| 286 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
TDBCheckBox -
Changing values doesn't change the Field values. |
| 288 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
TDBComboBox -
TDBCombobox controls that are set to Style = csSimple had nothing in the display field |
| 289 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
TDBComboBox -
Changing values doesn't change the Field values. |
| 290 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
TDBEdit -
Enabled property doesn't work for all types of fields |
| 291 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
TDBEdit -
Changing values doesn't change the Field values |
| 292 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
TDBEdit -
Something goes wrong when the function MessageDlg is called in a DbEdit.Exit event. |
| 293 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
TDBGrid -
See also TCustomGrid on the VCL page |
| 294 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
TDBGrid -
The scrollbar is a three-state scrollbar It can only be at the beginning, in the middle or at the end, although there may be many records in the table. |
| 295 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
TDBGrid -
The FixedColor property does not work. |
| 296 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
TDBGrid -
There is a bug in TDBGrid with column resizing |
| 297 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
TDBGrid -
When you connect a Grid to a datasource, it appears to randomly come up with the error "Grid Index Out of Range" when it is created. Solution by Brian Wheatley. Comment by Peter Disselkoen. Solution by Morgan Martinet. |
| 298 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
TDBGrid -
The property 'TopRow' is not recognized by the compiler, although it is listed in the list of properties of TDbGrid. However, the help of the TopRow property says this property applies only to TDrawGrid and TStringGrid. |
| 299 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
TDBGrid -
The Columns property of the TDBGrid is not listed in that object's property, although the TColumn is described in the help |
| 300 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
TDBGrid -
The Scrollbar isn't always updated correctly. |
| 301 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
TDBGridInPlaceEdit -
If two lookup fields have keyfields of different data types (e.g. TSmallInt and TString), they produce a Variant conversion error when used successively. Description and Solution by Jean-Pierre Joyal and François Bleau. Giorgio Saviane pointed out that this is not really a bug. Turn off "break on exceptions" and the program runs fine. |
| 287 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
TDBLookupComboBox -
TDBLookupCombo Style values csDropDown and csDropDownList override identical values of TComboBox/TDBComboBox/TDBLookupComboBox. Use StdCtrls.csDropDown and StdCtrls.csDropDownList to change the Style property at runtime. |
| 302 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
TDBLookupComboBox -
TDBLookupCombo Style values csDropDown and csDropDownList override identical values of TComboBox/TDBComboBox/TDBLookupComboBox. Use StdCtrls.csDropDown and StdCtrls.csDropDownList to change the Style property at runtime. |
| 303 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
TDBMemo -
Changes made to a TDBMemo linked to a TStringField are discarded with Delphi 2 whereas they are correctly updated with Delphi 1. |
| 304 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
TDBMemo -
Clearing a Memo field in an Access table gives trouble |
| 305 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
TDBText -
The Caption disappears after saving and reloading with the table inactive |
| 284 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
TFloatField -
See TComponent |
| 306 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
TGridDataLink -
See TDBGrid |
| 307 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
TQuery -
TQuery can not handle table with more than 255 fields |
| 308 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
TTable -
Whenever you connect to a table you use an additional connection so one quickly runs out of available connections. TQuery does not have this problem. |
| 309 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
TTable -
TTable.Post is not enough to update the .db file |
| 310 | 1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 |
TTable -
TTable cannot access Paradox tables on Lantastic 6.0 servers. |
Bug #285; 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 |
Further investigation shows that the DbGrid component also does not
properly display a dBase table with a subset condition. This makes a lot
of sense as:
DbCombo inherits from DbEdit, but contains a TPopupGrid which inherits
from CustomDBGrid and DbLookup inherit directly from CustomDBGrid.
Bug #515; last modified: 20-Dec-98| 1.02 | 2.01 | 3.0 | 3.01 | 3.02 | 4.0 | 4.01 | 4.02 |
| N/A | Exists | Exists | Exists | Exists | Exists | Exists | Exists |
TUpdateRecordEvent = procedure(DataSet: TDataSet; UpdateKind: TUpdateKind;Should be:
TUpdateRecordEvent = procedure(DataSet: TBDEDataSet; UpdateKind: TUpdateKind;The TUpdateRecordEvent is used in the TBDEDataSet class. It is meant to represent itself when called.
Bug #523; last modified: 2-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 |
Comment by Eivind Bakkestuen on 2 Feb 1999:
I believe the problem is caused
by Oracle not supporting the concept of record numbers. I.e. it will
work for Paradox, but not for Oracle and the like (other big-gun
databases). Therefore it is not a Delphi problem.
Bug #467; 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 | Exists | Exists | Exists | Exists |
To reproduce:
Create a new form and put a DBLookupComboBox control on it. Link the
list source/field to one table/field and the data source/field to a
second table/field as you normally would. Run the program and drop
down the combobox. Now move your mouse wheel. The program goes into
some kind of infinite loop (only a Program Reset can get you back).
I'va also tried this with a regular combobox, but that seems to be ok.
Is this a known bug?
David Scheidt followed up:
This is not only a D4 bug. D3 does the exact same thing.
Bug #484; last modified: 29-Oct-98| 1.02 | 2.01 | 3.0 | 3.01 | 3.02 | 4.0 | 4.01 | 4.02 |
| Unknown | Gotcha | Gotcha | Gotcha | Gotcha | Unknown | Unknown | Unknown |
You can't type in anything in a dbLookupComboBox so that it will scroll to the next nearest character. If you try to type in anything in a dbLookupComboBox whereby the ListField is not the key field in the table, you get an error Message "Cannot evaluate key or key does not pass filter condition". To be able to type in the first few characters is very helpful especially if you have a long list and you do not wish to scroll through the long list to find the one that you need. I know MS Access is able to do so but not in Delphi and I've no idea how to make it work.
To reproduce :
Bug #282; last modified: before April 1998| 1.02 | 2.01 | 3.0 | 3.01 | 3.02 | 4.0 | 4.01 | 4.02 |
| Unknown | Unknown | Exists | Unknown | Unknown | Unknown | Unknown | Unknown |
function TBooleanField.GetAsString: string; var B: Bool; begin if GetData(@B) then Result := FTextValues[Boolean(B)] else Result := ''; end;Note that the variable B is of the type Bool which is a 4-byte boolean and that a type-cast into Boolean is made before looking up the string representation in the FTextValues array. The GetData function will retrive the raw data from the database and the number of bytes it will read is determined by the GetDataSize method of TBooleanField:
function TBooleanField.GetDataSize: Word; begin Result := SizeOf(WordBool); end;This shows that only 2 bytes of data are read into the 4-byte B variable. The upper word is thus garbage and could contain any value.
{$Q-} { Overflow checking off }
Alternatively, just make sure Overflow checking is off in the project options
whenever you recompile DB.PAS.
function TBooleanField.GetAsString: string; var B: WordBool; begin if GetData(@B) then Result := FTextValues[B] else Result := ''; end;This code will work with all compiler options and the code is identical with the versions in D1 and D2 (they don't have this problem).
Bug #286; last modified: before April 1998| 1.02 | 2.01 | 3.0 | 3.01 | 3.02 | 4.0 | 4.01 | 4.02 |
| Gotcha | Gotcha | Gotcha | Gotcha | Gotcha | Gotcha | Gotcha | Gotcha |
dbCheckBox1.Checked := True;
dbEdit1.Text := 'New';
My solution is:
tabLixo.Edit; // place TTable in edit mode
DBEdit5.Text := 'Alter'; // Now it changes value
Although my version of Delphi 2 is not the latest (it's 2.17.53.0), the behaviour I
experienced is the same as mentioned in the bug report. However, none
of the workarounds worked for me, so...
The reason why I think it makes sense is the Help page for the Edit method. It says
"Data-aware controls cannot modify existing records unless the dataset is in Edit mode."
Hope it helps.
Bug #288; last modified: before April 1998| 1.02 | 2.01 | 3.0 | 3.01 | 3.02 | 4.0 | 4.01 | 4.02 |
| Unknown | Unknown | Exists | Unknown | Unknown | Unknown | Unknown | Unknown |
procedure TDBComboBox.DataChange(Sender: TObject);
begin
if DroppedDown then Exit; /* The DroppedDown Property ALWAYS returns
true when the Style = csSimple */
if FDataLink.Field <> nil then
SetComboText(FDataLink.Field.Text)
else
if csDesigning in ComponentState then
SetComboText(Name)
else
SetComboText('');
end;
The Fix
unit StdCtrls;
function TCustomComboBox.GetDroppedDown: Boolean;
begin
Result := ( Style <> csSimple )
/* If the style is simple then it can't be dropped */
and LongBool(SendMessage(Handle, CB_GETDROPPEDSTATE, 0, 0));
end;
The Disclaimer
Bug #290; 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 #292; 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 |
procedure TForm1.DBEdit2Change(Sender: TObject); begin dbEdit2.Field.AsString:=dbEdit2.Text; end;This workaround seems not to work very well. Comment by Chris Timmons:
Bug #295; last modified: before April 1998| 1.02 | 2.01 | 3.0 | 3.01 | 3.02 | 4.0 | 4.01 | 4.02 |
| Exists | Fixed | Fixed | Fixed | Fixed | Fixed | Fixed | Fixed |
Derive a new component from TDBGrid and add the following functionality:
{...unit declaration, uses clause...}
type
TDBGridFix = class(TDBGrid)
private
procedure SetFixedFixedColor(Value: TColor);
function GetFixedFixedColor: TColor;
published
property FixedColor: TColor read GetFixedFixedColor
write SetFixedFixedColor default clBtnFace;
end;
procedure Register;
implementation
procedure TDBGridFix.SetFixedFixedColor(Value: TColor);
begin
inherited TitleColor := Value;
inherited FixedColor := Value; { Not really needed, just to be safe }
end;
function TDBGridFix.GetFixedFixedColor: TColor;
begin
Result := inherited TitleColor;
end;
procedure Register;
begin
RegisterComponents('Data Access', [TDBGridFix]);
end;
end.
Bug #296; 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 TPassthroughColumn.SetWidth(Value: Integer);
var
Grid: TCustomDBGrid;
TM: TTextMetric;
begin
Grid := GetGrid;
if Assigned(Grid) then
begin
if Grid.HandleAllocated and Assigned(Field) and Grid.FUpdateFields then
with Grid do
begin
Canvas.Font := Self.Font;
GetTextMetrics(Canvas.Handle, TM);
// Borland Bug - fixed by wrf, 1-24-97
// Getting width uses different formula than setting width
// Since this is the GetWidth call
// Result := Field.DisplayWidth * (Canvas.TextWidth('0') - TM.tmOverhang) +
// TM.tmOverhang + 4;
// The SetWidth should be...
Field.DisplayWidth := (Value - TM.tmOverhang - 4) div
(Canvas.TextWidth('0') - TM.tmOverhang);
// Old SetWidth was..
// Field.DisplayWidth := (Value + (TM.tmAveCharWidth div 2) -
// TM.tmOverhang - 3) div TM.tmAveCharWidth;
end;
if (not Grid.FLayoutFromDataset) or (cvWidth in FAssignedValues) then
inherited SetWidth(Value);
end
else
inherited SetWidth(Value);
end;
Bug #297; last modified: before April 1998| 1.02 | 2.01 | 3.0 | 3.01 | 3.02 | 4.0 | 4.01 | 4.02 |
| Fixed | Exists | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown |
if (ACol < 0) or (ARow < 0) or
(ACol >= ColCount) or (ARow >= RowCount)
then
InvalidOp(SIndexOutOfRange);
Bug #300; 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 |
with Table1 do begin DisableControls; Close; Open; EnableControls; end;
inherited LayoutChanged;
Bug #301; last modified: before April 1998| 1.02 | 2.01 | 3.0 | 3.01 | 3.02 | 4.0 | 4.01 | 4.02 |
| Unknown | Gotcha | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown |
procedure TDBGridInplaceEdit.DropDown;
....
FDataList.ListField := LookupResultField;
//add this line to correct variant error with
//two lookup of different data type
//jpj and fb
FDataList.KeyValue := Null;
//normal code continue
FDataList.ListSource := FLookupSource;
....
Bug #303; last modified: before April 1998| 1.02 | 2.01 | 3.0 | 3.01 | 3.02 | 4.0 | 4.01 | 4.02 |
| Fixed | Exists | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown |
procedure TDBMemo.CMExit(var Message: TCMExit);
begin
if not (FDataLink.Field is TBlobField) then {THIS WORKS}
.....
procedure TDBMemo.CMExit(var Message: TCMExit);
begin
if FDataLink.Field is TBlobField then {THIS DOES NOT WORK}
....
Bug #304; last modified: before April 1998| 1.02 | 2.01 | 3.0 | 3.01 | 3.02 | 4.0 | 4.01 | 4.02 |
| N/A | N/A | Exists | Unknown | Unknown | Unknown | Unknown | Unknown |
procedure TForm1.Table1BeforePost(DataSet: TDataSet);
begin
if length(dbmemo1.text)=0 then
table1.FieldByName('memo1').asstring := ' ';
end;
Bug #305; 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 #307; last modified: before April 1998| 1.02 | 2.01 | 3.0 | 3.01 | 3.02 | 4.0 | 4.01 | 4.02 |
| Exists | Exists | Exists | Unknown | Unknown | Unknown | Unknown | Unknown |
Comment from checker:
I can confirm this bug report - same behaviour in BDE 4.0, Delphi 3.0
build 5.53 running on NT 4.0 sp3. Database desktop will not even let you
create a table with more than 255 fields. So this is a restriction. However,
I do feel that if you create a table with more than 255 fields, you should
seriously reconsider your database design.
Bug #308; 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 |
Bug #309; 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 |
uses DbiProcs; ... DbiSaveChanges(MyTable.Handle); ...Additional comment by Cindy Kircher:
I understand that there are 2 levels of caching being done (BDE and Windows file system). dbiSaveChanges is for the BDE but I have not found a 16 bit API call to flush the file system buffers. In 32 bit the call is FlushFileBuffers.
Bug #310; 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 |