tDBF component for Delphi and BCB / News: Recent posts

TDbf 6.9.1 released


- fix last memo field getting truncated (patch by dhdorrough)
- add dbf_collate unit to the packages
- fix index result too long bug
- add support for big endian
- fix non-raw string field filter
- fix index inserts/updates to be reverted on key violations
- allow lookups to ignore active filter

Posted by Micha Nelissen 2007-03-04

TDbf 6.9.0 released

This is a 7.0 beta release.

Note that indexes are not backward compatible!

Full log of changes:
- BDE compatible index collation: MDX/NDXes have to be rebuilt!
(thx sstewart for generating collation tables)
- fix use long char fields check icw foxpro (thx rpoverdijk)
- fix TDbf.GetRecNo AV when no file open
- remove UseFloatFields, delphi 3 will use float fields, others not
- fix size/precision truncation when opening foxpro B-type fields (thx nring)
- foxbase memo is 10 character index, sizes 4 and 10 are valid (thx majky)
- add int64 to string conversion in expression parser function STR
- fix nativeformat for tdbf.getfielddata(A,B) users
- allow later defined expression variables to have same name as
already defined function
- third parameter in substr function is optional now
- expression parser distinguishes between function() and variable, =no brackets
- updated bcb 4 packages files from troy dalton
- fix write blob B-type field for non-foxpro (thx leexgone)
- fix win64 compatibility

Posted by Micha Nelissen 2006-11-26

TDbf 6.4.8 released


- remove duplicate names, may cause ambiguity
- allow duplicate names in function list for expressions
- remember exprword reference for every field variable so we can remove it
- prevent possible buffer overrun when parsing expression (thx leexgone)
- fix some memory references in the parser
- add ability for locate/lookup to use alternate index than current one
- fix tdbf.copyfrom fieldname copy and fieldno index for size/precision
- make TDbf.CheckMasterRange public so master/detail can be synced manually
when for example .DisableControls is active
- allow calc/lookup fields to work in filters
- fix loosing blobs when packing table (rep by cllerici)
- support variants for freepascal
- fix (filter) parser string partial matching for "A*" strings
- make distinct index creation more robust... read more

Posted by Micha Nelissen 2006-04-29

TDbf 6.4.7 released


- fixed: 64bit compatibility
- fixed: Field.FieldNo is relative to number of FieldDefs, may be larger
- added: function Max for Delphi 3, needed by dbf_avl unit
- added: BCB3 package files (thx to pzelotti)
- fixed: add special case for copying from source TDbf in CopyFrom to retain
more precise field types
- fixed: TDbf.CopyFrom to keep Fields and FieldDefs seperate
- fixed: TDbfFieldDefs.Add to ignore size when it is zero
- added: TDbf.Lookup and as such, lookup fields, should work now
- added: defines for delphi 2006 and 2007
- fixed: some range checking errors when swapping data
- added: packages for delphi 2005 and 2006, c++ 2006 (from stan and others)
- fixed: modifying records with active range
- added: packages for kylix 3, fix casing (from jvargas)... read more

Posted by Micha Nelissen 2006-02-04

TDbf 6.4.6 released


- fixed: FPC 2.0.1 implements "backward-compatible" fielddata
for datetime fields in particular (from alexandrov)
- fixed: only allow >255 field length for creating foxpro files; prevents
range check error (rep by miguel)
- fixed: memo read: check number of bytes read, clear rest for safety
- added: support for foxpro double, fieldtype 'B'
- fixed: foxpro memo pageno is binary 4 byte integer, not ascii
- added: default values are buffered, better/faster record insert
- added: support for long character fields compiletime definable
- fixed: added boolean field support in expressions (note: breaks existing)
- fixed: compilation with USE_CACHE directive
- fixed: add my own SwapWord function, because Swap seems buggy in fpc
- fixed: VCL fieldtype ftDateTime was not translated to any native type
for non dBase VII and non FoxPro (hint by paul van helden)... read more

Posted by Micha Nelissen 2005-11-19

TDbf 6.4.4 released


- fixed: delphi 3 does not have math unit
- fixed: exception in opening causes double free (thx arioch)
- fixed: copy precision for float fields
- fixed: force create index file, if index does not exist yet
- fixed: memory leak in TPagedFile.FBufferPtr
- fixed: TDbf.GetFileNames crash, more robust (rep by arioch)
- added: character conversion hungarian (from attila)
- fixed: index creation for tablelevel 7, mdx type 3
- fixed: remember cursor position when changing showdeleted setting
- fixed: findrecord to sync cursor position; endless loop or forgot records
- chang: added initializations to 0 to suppress delphi warnings... read more

Posted by Micha Nelissen 2005-07-13

TDbf 6.4.3 released


- fixed: delphi 3 compilation; dynamic array of restructure info (rep by kjteng)
- fixed: datetime index creation using delphi 4 (rep by agam)
- fixed: storage of negative numbers in integer fields (rep by agam)
- fixed: index corruption when opening, with emptytable (rep by arioch)
- fixed: index corruption on regenerateindexes (rep by piotr) ... read more

Posted by Micha Nelissen 2005-03-13

TDbf 6.4.2 released


- fixed: overflow in storing float field data (large negative number) (thx madruga)
- fixed: restructure/pack create MDX database desktop compatible;
write db filename in mdx header (rep by rusmonk)
- fixed: freepascal objfpc mode compatibility fixes (still needs some @-ies)
- fixed: upon TDbf.Delete, use internal editing/posting such that BeforeEdit
and other events are not fired; also fixes cursor position bug upon
deletion (rep by bura)
- fixed: only use float fields (UseFloatFields) if int64 not supported
- fixed: deleted records undeleted when using RestructureTable with
Pack=false (rep by scenes)
- fixed: made (hopefully) all references to units lowercase, for kylix... read more

Posted by Micha Nelissen 2004-12-31

TDbf 6.4.1 released


- fixed: restructure numeric fields correctly, try to preserve data
- fixed: read and write foxpro currency fieldtype (thx karelrys)
- fixed: when using TDbf.Insert to add a record, current record indicator does
not move to newly added record (rep by rpoverdijk)
- fixed: req. of numeric field size >= 2, it can be 1 too! (rep by rpoverdijk)
- fixed: forgot cursor position when disabling filter (rep by bobmitch/luchop)
- fixed: initialize binary field types '0' (nullflags) and 'Y' (currency)
properly (thx to karelrys)
- added: _nullflags field operation support (thx karelrys)
- fixed: when editing a record, then moving to another record, memo is not
properly cleared if memo is null (rep by versus)
- fixed: writing to a memo that also has a connected dbcontrol does not work;
quite some semantical changes, may have introduced new bugs (rep by mafro)... read more

Posted by Micha Nelissen 2004-11-29

TDbf Demo 1.3.4 released


- fixed building with BCB5 (DesignSize property in Index form)
- changed website links
- licensed the demo under GPL v2, see COPYING

Posted by Micha Nelissen 2004-11-19

TDbf 6.4.0 released


- fixed: dBase III and IV do not have date+time fields
- fixed: index search bug, not finding records (rep by peruginia)
- fixed: expression bracket pair checking; caused strange expression errors
- fixed: parse filter expression upon opening file (rep by mvc)
- added: do not resync/reparse filter if not property unchanged
- fixed: use international string functions in expressions
- fixed: index deletion and update corruption while range active (rep by ralf)... read more

Posted by Micha Nelissen 2004-09-30

TDbf documentation 1.1 released


- add more examples
- add filetypes
- add expressions functions and operators overview
- add FAQ

Posted by Micha Nelissen 2004-09-11

TDbf 6.3.9 released


- fixed: recursive loop in index first/last
- fixed: index resync current record
- fixed: resync range at eof
- fixed: index findkey finds last, deleted key in index page
- fixed: opening dbf file with numeric integer field misreads numbers
- fixed: storage of foxpro binary integer field
- fixed: only support 65535 length character fields for foxpro
(otherwise ms excel generated files can not be read)
- fixed: call CursorPosChanged whenever cursor position possibly changed
- fixed: keep cursor position when index and range active as much as possible... read more

Posted by Micha Nelissen 2004-09-03

TDbf 6.3.8 released

The warning about multi-user with ranges is now removed, however maybe not stable yet.

RecNo has a somewhat different implementation now, I hope it still works in all cases as it should.


- fixed: outdated buffer in checking found key
- fixed: createtable with memorystream; tdbf.userstream (thx andrew)
- fixed: garbage record when adding a record to empty table
- fixed: fields settings size for integer fields
- fixed: underflow buffer in GetStrFromInt when Width=0
- fixed: IndexFile.PrepareKey numeric index: encode value zero to have no digits
- added: TDbf.PrepareKey for conversion of key to numeric index key format
- fixed: set physicalrecno to non-existing recno corrupts table (rep by luchop)
- fixed: tryexclusive/packtable/endexclusive fail because of memo (rep by sysklop)
- fixed: crash when calling {un,}locktable on closed dataset (rep by sysklop)
- fixed: use correct dbf version when creating table to decide field types
- fixed: kylix compilation
- added: multi-user and insert aware ranges (req by ralf)
- chngd: made all filenames lowercase to ease usage on *nix
- added: partial matching in expressions for filters
- added: -, *, / operators in expressions
- fixed: datetime issues with fieldtype '@' and delphi 4 and lower (nobody uses
those fieldtypes? they have been horribly broken, and maybe still are)
- fixed: getting recno in oncalcfields event (rep by lutz)
- fixed: AV when checking empty binary fields
- fixed: better foxpro header writing, fieldoffset, tabletype and headersize

Posted by Micha Nelissen 2004-08-23

TDbf 6.3.7 released


Warning: backwards compatibility issue! read notes for file release.

- fixed: numeric index data exponent (rep by rpoverdijk)
- fixed: big-endian issues in dbf_idxfile
- added: spanish (thx mauricio) and brazilian portuguese translation (thx adilson)
- fixed: opening memory streams; more generic implementation
- fixed: querying ExactRecordCount on open table causes AV (rep by sikorsky)
- added: smarter Dbf_Parser initialization (thx emled)
- fixed: copy languageid and autoinc values upon restructure/pack
- added: TDbf.LanguageID to set language id of new table; set before CreateTable
- fixed: remember autoinc value after restructure
- fixed: do not try to create foxpro currency fields if creating dbase table
- speed: when reading v4 memo field, set size of stream in advance
- fixed: empty field really returns empty string in parser
- fixed: rewritten token parser, tree construction to be much simpler
- speed: reduce number of getrecordcount calls, cache recordcount if possible

Posted by Micha Nelissen 2004-07-18

TDbf 6.3.6 released


- fixed: crash when optimizing expression with constants
- fixed: expression parser to use variable-length string variables for non-raw
- added: support for opening (memory) streams as file
- fixed: numeric mdx compatibility bug; bytes instead of decimals (rep by rpoverdijk)
- fixed: integer fields store numerics padded with zeroes; now it uses spaces
- added: use new, faster assembler SwapInt64 from arioch... read more

Posted by Micha Nelissen 2004-06-21

TDbf 6.3.5 released

Sorry people for the major crash bug in 6.3.4.

- fixed: crash when finalizing Dbf_Parser unit

Posted by Micha Nelissen 2004-05-19

TDbf 6.3.4 released


- fixed: improved exception handling in expression parser
- fixed: remove temporary indexdefs at close, fixes CreateTable index creation
- added: NULLFLAGS field recognition (foxpro field)
- fixed: date field retrieval parser (rep by luchop)
- fixed: BCB5 installation needs Pascal switch to link dsgnintf unit
- fixed: avoid dependency on libc unit for freepascal target
- fixed: index open after packtable forgot tempmode; so endexclusive did not
work properly (rep by sysklop)
- chang: make TDbf.GetCurrentBuffer public
- chang: rename TVarType to TExpressionType
- chang: remove all SmallInt constructs from parser
- added: export expression functions from Dbf_Parser
- added: FFieldName to TFieldVar, to prevent need for TFieldDef to exist to get name for deletion from expression words list
- added: "<>", not equal, expression functions
- added: reference counting for TExprWord
- added: shortname functionality for each function, function can be referenced by name and shortname
- fixed: memory leak in parser upon encountering unknown variable
- fixed: when adding record write new autoinc value to header, to file

Posted by Micha Nelissen 2004-05-15

TDbf 6.3.3 released


- fixed: compiles with freepascal, usable in lazarus
- fixed: index delete record bug (deleting not-last entry in full page)
- fixed: index delete record bug (deleting the only entry on a page)
- fixed: lazarus registration issues
- fixed: scan for $1A, not RecordSize (rep by avink)

Posted by Micha Nelissen 2004-03-20

TDbf 6.3.2 released

Hi all,

I have released version 6.3.2 as Win32/Linux release. So to all users that are monitoring 'Win32 only' only ;-), monitor the other one too from now on.


- fixed: use default codepage if file codepage not installed
- fixed: range check error using swapint
- fixed: flush index header when index flushed, ie. when creating index
- fixed: update TDbf.IndexDefs when index added or deleted
- fixed: update internal index names and files list when mdx index deleted
- fixed: remove max 4000 character record length requirement
TDbf.GetExactRecordCount (rep by dpproj)
- fixed: accept russian 'C' too as string field (rep by dpproj)
- fixed: datetime native fieldtype 'T' handling, size (rep by kjteng)
- added: support for currency field type, type 'Y' in foxpro tables
- nativeformat handling is re-enabled due to much easier implementation
- delphi 4 and higher only
- fixed: close,open files reset indexnames,files list (rep by paez)
- fixed: reselect index after repage, compact (rep by paez)
- added: support for foxpro datetime fields
- fixed: support for foxpro integer fields
- fixed: tdbf doesn't use default codepage when opening file with langid #0
- added: OnLanguageWarning can now specify to use default codepage (see above)
- fixed: MDX float index with decimals (rep by emled)
- fixed: removal of mdx flag in foxpro file; means cdx index... read more

Posted by Micha Nelissen 2004-02-13

TDbf Demo 1.3.3 released

No new features, but merely compiles again out of the box when used with newer tdbf versions (6.3.1).


- added 'uses' Dbf_Common unit to implementation of Index unit

Posted by Micha Nelissen 2004-01-14

TDbf 6.3.1 released


- added: freepascal support, needs 1.9 (or higher)
- fixed: strange bugs due to fparser not initialized correctly, for example
with expression of different index (rep by sysklop)
- added: findrecord implemented -> find{first,next,prior,last} should now work
- fixed: index deletion bug corner case, no records left (rep by sysklop)
- fixed: repagefile creating empty index file (rep by paez)... read more

Posted by Micha Nelissen 2003-12-13

TDbf 6.3.0 released


- fixed: tdbf.physicalrecno not in sync with tdataset
- added: loPartialKey functionality on index search
- fixed: mdx file presence not written to dbf header; index does not work (rep by paez)
- fixed: searchkey on deleted row returns true (rep by sysklop)
- fixed: primary index creation throws "list index out of bounds(0)" (rep by sysklop)

Posted by Micha Nelissen 2003-11-02

TDbf 6.2.9 released


- fixed: checkkeyviolation bug; should solve locking problem
- fixed: packed structures
- fixed: delphi 3 compatibility tdbf.translate, compile prob (rep by ferdok)
- fixed: numeric MDX compare, translate bugs (rep by rpoverdijk)
- fixed: GetIndexNames returns open (available) indexes
- added: TDbf.GetAllIndexFiles returns index files present in dbf directory
- added: TDbf.PhysicalRecordCount returns physical number of records present
- added: TDbf.IndexDefs ( = TDbf.Indexes) for VCL compatibility
- added: TDbfIndexDef.(Name and Expression) for VCL compatibility where
Name = IndexFile and Expression = SortField
- fixed: memory leak expression tree
- fixed: index cache flush problem causing index corruption; triggered by,
for example, regenerateindexes (rep by smokexjc)... read more

Posted by Micha Nelissen 2003-09-26

TDbf 6.2.8 released

NOTE: ugly bug when inserting a record with index


- fixed: character fields support upto 65534 characters now
- fixed: detect, allow visual foxpro file
- chngd: getfielddata clears user field buffer is string field empty
- fixed: tdbf version number in delphi 7 package
- fixed: index update on record insert (thx kirill)
- fixed: selecting index when cursor is bof,eof; cursor moves (thx kirill)... read more

Posted by Micha Nelissen 2003-08-22