We are glad to finally announce the release of version 7.0.1, thanks to the hard work of paulenandrew, ploeger and others. It includes many new features, improvements and bug fixes
There are about 150 lines in the history.txt describing changes, but we came up with this summary for the release notes to go in the announcements.... read more
------------------------
V6.9.1
- 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
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
------------------------
V6.4.8
- 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
------------------------
V6.4.7
- 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
------------------------
V6.4.6
- 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
(USE_LONG_CHAR_FIELDS)
- 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
------------------------
V6.4.4
- 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
------------------------
V6.4.3
- 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
------------------------
V6.4.2
- 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
------------------------
V6.4.1
- 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
------------------------
V1.3.4
- fixed building with BCB5 (DesignSize property in Index form)
- changed website links
- licensed the demo under GPL v2, see COPYING
------------------------
V6.4.0
- 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
-----------------------------------------------------------
V1.1
- add more examples
- add filetypes
- add expressions functions and operators overview
- add FAQ
------------------------
V6.3.9
- 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
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.
------------------------
V6.3.8
- 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
------------------------
V6.3.7
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
------------------------
V6.3.6
- fixed: crash when optimizing expression with constants
- fixed: expression parser to use variable-length string variables for non-raw
fields
- 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
Sorry people for the major crash bug in 6.3.4.
------------------------
V6.3.5
- fixed: crash when finalizing Dbf_Parser unit
------------------------
V6.3.4
- 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
------------------------
V6.3.3
- 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)
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.
------------------------
V6.3.2
- 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
No new features, but merely compiles again out of the box when used with newer tdbf versions (6.3.1).
------------------------
V1.3.3
- added 'uses' Dbf_Common unit to implementation of Index unit
------------------------
V6.3.1
- 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
------------------------
V6.3.0
- 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)
------------------------
V6.2.9
- 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