~ubuntu-branches/ubuntu/dapper/fpc/dapper

« back to all changes in this revision

Viewing changes to fcl/db/dbase/history.txt

  • Committer: Bazaar Package Importer
  • Author(s): Carlos Laviola
  • Date: 2005-05-30 11:59:10 UTC
  • mfrom: (1.2.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20050530115910-x5pbzm4qqta4i94h
Tags: 2.0.0-2
debian/fp-compiler.postinst.in: forgot to reapply the patch that
correctly creates the slave link to pc(1).  (Closes: #310907)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
History of TDBF:
 
2
 
 
3
------------------------
 
4
Authors:
 
5
 
 
6
- Pascal Ganaye - upto V5.002
 
7
- Micha Nelissen - from there
 
8
 
 
9
thanks to various people helping on details
 
10
 
 
11
------------------------
 
12
BUGS & WARNINGS
 
13
  (not complete)
 
14
 
 
15
- Multi-user support
 
16
  - not tested well...
 
17
- use FIXED LENGTH index expressions: an expression which will always return
 
18
  a string which is the same length. When returning a float you don't have to
 
19
  worry about this of course (always fixed #bytes). String fields also return
 
20
  fixed length expression, complete field with spaces.
 
21
- BCB4/D4 and lower:
 
22
    - restructure probably does not work correctly, because the field defs
 
23
      don't know the index of the field they have to copy from (Dbf_Fields)
 
24
- BCB3/D3 compatibility:
 
25
    - you will NOT be able to use Int64 features:
 
26
      - large numeric fields with zero precision (set UseFloatFields to true)
 
27
      - datetime fields '@'
 
28
      - double fields 'O'
 
29
      - maybe more...look in source where Int64 is used
 
30
    - no codepage conversion available other than oem<->ansi
 
31
    - storedefs is not updated automatically when fielddefs are changed
 
32
 
 
33
 
 
34
 
 
35
------------------------
 
36
V6.4.1
 
37
 
 
38
- fixed: restructure numeric fields correctly, try to preserve data
 
39
- fixed: read and write foxpro currency fieldtype (thx karelrys)
 
40
- fixed: when using TDbf.Insert to add a record, current record indicator does
 
41
    not move to newly added record (rep by rpoverdijk)
 
42
- fixed: req. of numeric field size >= 2, it can be 1 too! (rep by rpoverdijk)
 
43
- fixed: forgot cursor position when disabling filter (rep by bobmitch/luchop)
 
44
- fixed: initialize binary field types '0' (nullflags) and 'Y' (currency)
 
45
    properly (thx to karelrys)
 
46
- added: _nullflags field operation support (thx karelrys)
 
47
- fixed: when editing a record, then moving to another record, memo is not
 
48
    properly cleared if memo is null (rep by versus)
 
49
- fixed: writing to a memo that also has a connected dbcontrol does not work;
 
50
    quite some semantical changes, may have introduced new bugs (rep by mafro)
 
51
 
 
52
 
 
53
------------------------
 
54
V6.4.0
 
55
 
 
56
- fixed: dBase III and IV do not have date+time fields
 
57
- fixed: index search bug, not finding records (rep by peruginia)
 
58
- fixed: expression bracket pair checking; caused strange expression errors
 
59
- fixed: parse filter expression upon opening file (rep by mvc)
 
60
- added: do not resync/reparse filter if not property unchanged
 
61
- fixed: use international string functions in expressions
 
62
- fixed: index deletion and update corruption while range active (rep by ralf)
 
63
 
 
64
 
 
65
------------------------
 
66
V6.3.9
 
67
 
 
68
- fixed: recursive loop in index first/last
 
69
- fixed: index resync current record
 
70
- fixed: resync range at eof
 
71
- fixed: index findkey finds last, deleted key in index page
 
72
- fixed: opening dbf file with numeric integer field misreads numbers
 
73
- fixed: storage of foxpro binary integer field
 
74
- fixed: only support 65535 length character fields for foxpro
 
75
    (otherwise ms excel generated files can not be read)
 
76
- fixed: call CursorPosChanged whenever cursor position possibly changed
 
77
- fixed: keep cursor position when index and range active as much as possible
 
78
 
 
79
 
 
80
------------------------
 
81
V6.3.8
 
82
 
 
83
- fixed: outdated buffer in checking found key
 
84
- fixed: createtable with memorystream; tdbf.userstream (thx andrew)
 
85
- fixed: garbage record when adding a record to empty table
 
86
- fixed: fields settings size for integer fields
 
87
- fixed: underflow buffer in GetStrFromInt when Width=0
 
88
- fixed: IndexFile.PrepareKey numeric index: encode value zero to have no digits
 
89
- added: TDbf.PrepareKey for conversion of key to numeric index key format
 
90
- fixed: set physicalrecno to non-existing recno corrupts table (rep by luchop)
 
91
- fixed: tryexclusive/packtable/endexclusive fail because of memo (rep by sysklop)
 
92
- fixed: crash when calling {un,}locktable on closed dataset (rep by sysklop)
 
93
- fixed: use correct dbf version when creating table to decide field types
 
94
- fixed: kylix compilation
 
95
- added: multi-user and insert aware ranges (req by ralf)
 
96
- chngd: made all filenames lowercase to ease usage on *nix
 
97
- added: partial matching in expressions for filters
 
98
- added: -, *, / operators in expressions
 
99
- fixed: datetime issues with fieldtype '@' and delphi 4 and lower (nobody uses 
 
100
    those fieldtypes? they have been horribly broken, and maybe still are)
 
101
- fixed: getting recno in oncalcfields event (rep by lutz)
 
102
- fixed: AV when checking empty binary fields
 
103
- fixed: better foxpro header writing, fieldoffset, tabletype and headersize
 
104
**Version .1:
 
105
- fixed: recursive loop in setrange
 
106
 
 
107
 
 
108
------------------------
 
109
V6.3.7
 
110
 
 
111
- fixed: numeric index data exponent (rep by rpoverdijk)
 
112
- fixed: big-endian issues in dbf_idxfile
 
113
- added: spanish (thx mauricio) and brazilian portuguese translation (thx adilson)
 
114
- fixed: opening memory streams; more generic implementation
 
115
- fixed: querying ExactRecordCount on open table causes AV (rep by sikorsky)
 
116
- added: smarter Dbf_Parser initialization (thx emled)
 
117
- fixed: copy languageid and autoinc values upon restructure/pack
 
118
- added: TDbf.LanguageID to set language id of new table; set before CreateTable
 
119
- fixed: remember autoinc value after restructure
 
120
- fixed: do not try to create foxpro currency fields if creating dbase table
 
121
- speed: when reading v4 memo field, set size of stream in advance
 
122
- fixed: empty field really returns empty string in parser
 
123
- fixed: rewritten token parser, tree construction to be much simpler
 
124
- speed: reduce number of getrecordcount calls, cache recordcount if possible
 
125
 
 
126
 
 
127
------------------------
 
128
V6.3.6
 
129
 
 
130
- fixed: crash when optimizing expression with constants
 
131
- fixed: expression parser to use variable-length string variables for non-raw
 
132
    fields
 
133
- added: support for opening (memory) streams as file
 
134
- fixed: numeric mdx compatibility bug; bytes instead of decimals (rep by rpoverdijk)
 
135
- fixed: integer fields store numerics padded with zeroes; now it uses spaces
 
136
- added: use new, faster assembler SwapInt64 from arioch
 
137
 
 
138
 
 
139
------------------------
 
140
V6.3.5
 
141
 
 
142
- fixed: crash when finalizing Dbf_Parser unit
 
143
 
 
144
 
 
145
------------------------
 
146
V6.3.4
 
147
 
 
148
- fixed: improved exception handling in expression parser
 
149
- fixed: remove temporary indexdefs at close, fixes CreateTable index creation
 
150
- added: NULLFLAGS field recognition (foxpro field)
 
151
- fixed: date field retrieval parser (rep by luchop)
 
152
- fixed: BCB5 installation needs Pascal switch to link dsgnintf unit
 
153
- fixed: avoid dependency on libc unit for freepascal target
 
154
- fixed: index open after packtable forgot tempmode; so endexclusive did not
 
155
    work properly (rep by sysklop)
 
156
- chang: make TDbf.GetCurrentBuffer public
 
157
- chang: rename TVarType to TExpressionType
 
158
- chang: remove all SmallInt constructs from parser
 
159
- added: export expression functions from Dbf_Parser
 
160
- added: FFieldName to TFieldVar, to prevent need for TFieldDef to exist to get name for deletion from expression words list
 
161
- added: "<>", not equal, expression functions
 
162
- added: reference counting for TExprWord
 
163
- added: shortname functionality for each function, function can be referenced by name and shortname
 
164
- fixed: memory leak in parser upon encountering unknown variable
 
165
- fixed: when adding record write new autoinc value to header, to file
 
166
 
 
167
 
 
168
------------------------
 
169
V6.3.3
 
170
 
 
171
- fixed: compiles with freepascal, usable in lazarus
 
172
- fixed: index delete record bug (deleting not-last entry in full page)
 
173
- fixed: index delete record bug (deleting the only entry on a page)
 
174
- fixed: lazarus registration issues
 
175
- fixed: scan for $1A, not RecordSize (rep by avink)
 
176
 
 
177
 
 
178
------------------------
 
179
V6.3.2
 
180
 
 
181
- fixed: use default codepage if file codepage not installed
 
182
- fixed: range check error using swapint
 
183
- fixed: flush index header when index flushed, ie. when creating index
 
184
- fixed: update TDbf.IndexDefs when index added or deleted
 
185
- fixed: update internal index names and files list when mdx index deleted
 
186
- fixed: remove max 4000 character record length requirement
 
187
    TDbf.GetExactRecordCount (rep by dpproj)
 
188
- fixed: accept russian 'C' too as string field (rep by dpproj)
 
189
- fixed: datetime native fieldtype 'T' handling, size (rep by kjteng)
 
190
- added: support for currency field type, type 'Y' in foxpro tables
 
191
    - nativeformat handling is re-enabled due to much easier implementation
 
192
    - delphi 4 and higher only
 
193
- fixed: close,open files reset indexnames,files list (rep by paez)
 
194
- fixed: reselect index after repage, compact (rep by paez)
 
195
- added: support for foxpro datetime fields
 
196
- fixed: support for foxpro integer fields
 
197
- fixed: tdbf doesn't use default codepage when opening file with langid #0
 
198
- added: OnLanguageWarning can now specify to use default codepage (see above)
 
199
- fixed: MDX float index with decimals (rep by emled)
 
200
- fixed: removal of mdx flag in foxpro file; means cdx index
 
201
 
 
202
 
 
203
------------------------
 
204
V6.3.1
 
205
 
 
206
- added: freepascal support, needs 1.9 (or higher)
 
207
- fixed: strange bugs due to fparser not initialized correctly, for example
 
208
    with expression of different index (rep by sysklop)
 
209
- added: findrecord implemented -> find{first,next,prior,last} should now work
 
210
- fixed: index deletion bug corner case, no records left (rep by sysklop)
 
211
- fixed: repagefile creating empty index file (rep by paez)
 
212
 
 
213
 
 
214
------------------------
 
215
V6.3.0
 
216
 
 
217
- fixed: tdbf.physicalrecno not in sync with tdataset
 
218
- added: loPartialKey functionality on index search
 
219
- fixed: mdx file presence not written to dbf header; index does not work (rep by paez)
 
220
- fixed: searchkey on deleted row returns true (rep by sysklop)
 
221
- fixed: primary index creation throws "list index out of bounds(0)" (rep by sysklop)
 
222
 
 
223
 
 
224
------------------------
 
225
V6.2.9
 
226
 
 
227
- fixed: checkkeyviolation bug; should solve locking problem
 
228
- fixed: packed structures
 
229
- fixed: delphi 3 compatibility tdbf.translate, compile prob (rep by ferdok)
 
230
- fixed: numeric MDX compare, translate bugs (rep by rpoverdijk)
 
231
- fixed: GetIndexNames returns open (available) indexes
 
232
- added: TDbf.GetAllIndexFiles returns index files present in dbf directory
 
233
- added: TDbf.PhysicalRecordCount returns physical number of records present
 
234
- added: TDbf.IndexDefs ( = TDbf.Indexes) for VCL compatibility
 
235
- added: TDbfIndexDef.(Name and Expression) for VCL compatibility where
 
236
    Name = IndexFile and Expression = SortField
 
237
- fixed: memory leak expression tree
 
238
- fixed: index cache flush problem causing index corruption; triggered by,
 
239
    for example, regenerateindexes (rep by smokexjc)
 
240
 
 
241
 
 
242
------------------------
 
243
V6.2.8
 
244
 
 
245
- fixed: character fields support upto 65534 characters now
 
246
- fixed: detect, allow visual foxpro file
 
247
- chngd: getfielddata clears user field buffer is string field empty
 
248
- fixed: tdbf version number in delphi 7 package
 
249
- fixed: index update on record insert (thx kirill)
 
250
- fixed: selecting index when cursor is bof,eof; cursor moves (thx kirill)
 
251
- fixed: create first index in mdx file fails AV, file not deleted (rep by pyostrike)
 
252
 
 
253
 
 
254
------------------------
 
255
V6.2.7
 
256
 
 
257
- added: TDbf.GetKeySize, if index is active retrieves key size
 
258
- added: TDbf.ExtractKey, extracts key for current record and index
 
259
- fixed: TDbf.GetRecordCount AV when no dbf file open
 
260
- fixed: memory leak not releasing fmdxfile
 
261
- fixed: index using field datetime has time encode error (rep by paez)
 
262
- fixed: end-of-memo not found, packtable creates large files (rep by stayathome)
 
263
- fixed: distinct index, keys added while duplicate error (rep by sysklop)
 
264
- fixed: when packing a table, no files are left behind
 
265
- fixed: AV when packing while index active (rep by ltolean)
 
266
 
 
267
 
 
268
------------------------
 
269
V6.2.6
 
270
 
 
271
- fixed: fcanedit is false causing indexes not to update (rep dvdneg)
 
272
- fixed: autoinc when packing/restructuring table (rep aerceg)
 
273
- fixed: allow creation of tablelevel 25 tables (rep cherednichenko)
 
274
- fixed: delete last entry from index page caused overflowerror (rep by tekkan)
 
275
 
 
276
 
 
277
------------------------
 
278
V6.2.5
 
279
 
 
280
- fixed: foxpro memo data size is w/o record header size
 
281
- fixed: index search on extended ASCII values
 
282
- added: filter options; caseinsensitive works; partialmatch does not
 
283
    filter expressions never have partial matching
 
284
- fixed: filter field strings compare with extended ASCII values
 
285
- added: TDbf.GetFileNames, retrieves file names in use with current dbf
 
286
- fixed: open exclusive, close, open exclusive triggers 'can not open'
 
287
    happens ie. when calling PackTable (rep by tekkan)
 
288
- added: getfilenamesstring function to retrieve filenames in a string
 
289
- fixed: Blank memo returns data (thx aerceg)
 
290
- fixed: no inherited call on indexdef assign (thx kirill)
 
291
- fixed: international issue with locate (thx kirill)
 
292
 
 
293
 
 
294
------------------------
 
295
V6.2.4
 
296
 
 
297
- fixed: setting memo contents overwrites only first x bytes, not all (rep by avink)
 
298
- fixed: possible corruption in writememo, wrong offset (thx aerceg)
 
299
- fixed: indexname truncated causing inability to select index v7 (thx delphiguru)
 
300
- fixed: (includetrailingpathdelimiter) delphi 4 compatibility (thx bobmitch)
 
301
- fixed: (dbffile.openindex) open NDX file fails due to empty field (thx wschenk)
 
302
- fixed: codepage problems with dbase3 (thx arioch)
 
303
- fixed: result of boolean fields is string type (rep by delphiguru)
 
304
- fixed: blobstreams delphi 3 compatibility
 
305
- fixed: remove automatically detected indexdefs of previous file at design time
 
306
- fixed: index MDX numeric search (rep by arioch)
 
307
- fixed: index navigation when having a lot of records with the same key
 
308
    (rep by ledoux)
 
309
- fixed: try harder to find a matching locale / codepage combination; any
 
310
    codepage will do if no specific codepage is found
 
311
 
 
312
 
 
313
------------------------
 
314
V6.2.3
 
315
 
 
316
- added: new assembler implementation for swapint, swapint64 (thx arioch)
 
317
    - NOTE: 486+ if you need old, remove USE_ASSEMBLER_486_UP define
 
318
- fixed: datetime handling in index, eg. DTOS(DATE_FIELD)
 
319
- added: FilePathFull, this is path where the dbf is going to be opened (arioch)
 
320
    - is not stored, only relative path is stored
 
321
    - when set, overwrites relative path too, and relative path sets full path
 
322
- fixed: possible AV when executing (get|set)fielddata with nil buffer
 
323
- fixed: reading dbase 7 index tags, new structure, long index names supported
 
324
- fixed: bug storedefs = true after .open; indirect fielddefs.update
 
325
- fixed: index version bug causing AV; caused by new DB7 support (rep by arioch)
 
326
- fixed: SearchKey in Edit without Post -> record twice (thx ralf)
 
327
- fixed: TDataSet.(InsertRecord | AppendRecord) now really work instead of doing
 
328
   nothing. NOTE: they do the same thing, as you cannot insert a record in DBF,
 
329
   only append.
 
330
- fixed: index bug; insert in wrong page sometimes causing various assert fails
 
331
- added: a bunch of freeandnil instead of [x.Free; x := nil;]; should be safer
 
332
- added: more language / locale combinations; now combinations using windows
 
333
    codepages (1250,1251,1253,...) and (russian, greek, etc) should be possible
 
334
- fixed: delphi 3 compatibility
 
335
- fixed: cancel memo bug; when memo modified, release focus, cancel record then
 
336
    memo has already written contents to file
 
337
- chngd: absolute/relativepath properties use same handler (thx arioch)
 
338
- fixed: AV when SearchKey called with NULL variant
 
339
- fixed: when creating dbf, tablelevel = 25 indicates foxpro
 
340
    NOTE: dbfglobals.defaultcreatefoxpro removed
 
341
- added: SetIndexName throws exception when try to select non-existing index
 
342
- fixed: index needs to convert strings OEM->ANSI before comparing; I think
 
343
    the sorting works very nicely now, eg.: e, E, e-accent-grave, etc all same
 
344
    NOTE: you need to rebuild all indexes because of this change
 
345
- fixed: when creating dbf: also foxpro langids will be used and the
 
346
    other way around...increases number of combinations
 
347
- fixed: index bugs; first record insert in distinct index, EOF insert caused
 
348
    AV on closing app (report thx germain)
 
349
- fixed: memo bug; memo files with large pages (>512) had incorrect calculation
 
350
    of position, reading false data (rep by kjteng)
 
351
 
 
352
 
 
353
------------------------
 
354
V6.2.2
 
355
 
 
356
- added: IndexFieldNames property to set current index by fieldname
 
357
- added: foxpro memo files (.fpt) support
 
358
- fixed: indexing bug, when inserting same key at end
 
359
- fixed: more indexing bugs...
 
360
    - NOTE: non-leaf keys assume searchkey < nodekey
 
361
        - this is default B+ tree
 
362
        - previously tdbf assumed searchkey <= nodekey
 
363
        - you may have to recreate indexes
 
364
- chngd: FinishCreate does not need memo extension anymore
 
365
- chngd: PackTable uses different filename now abc_1.dbf etc
 
366
- chngd: Dbf_PgFile.pas: renamed LockFile to LockAllPages;
 
367
    -> Kylix users should be able to compile with LockFile from Dbf_Wtil.pas
 
368
- chngd: default locale now retrieved from GetUserDefaultLCID
 
369
- fixed: when closing/opening dbf file, reopens indexes too (thx oleg)
 
370
    -> fixed an AV when packtable is done and you try access an index
 
371
- fixed: (caused by above index bug) does not find last record in index
 
372
    -> caused dbgrid to display records twice or not at all
 
373
- fixed: packindex now properly selects single index, so that it can be edited
 
374
    -> previously no expression was parsed creating empty indexes (thx oleg)
 
375
- fixed: insert/modify/delete/find records while index range active (thx paul)
 
376
    -> findnearest function rewritten
 
377
- fixed: foxpro table level less than dBase7 table level, now reads fields
 
378
    correctly in dBaseIII alike format
 
379
- fixed: when reading memo, negative blockno return empty memo instead of crash
 
380
- fixed: using AnsiUppercase instead of Uppercase, better internalization
 
381
- fixed: ignore addindex calls with empty index names / fields
 
382
- fixed: Get/SetFieldData NativeFormat issue with DB7:datetime fields (thx tophet)
 
383
- fixed: tdbfindexdef; name and field now stored uppercase to prevent
 
384
    differences in case (thx arioch)
 
385
- chngd: tablename property editor starts in project directory not delphi/bin
 
386
    directory when no filepath given; if you want filepath to be current path
 
387
    at startup of app: use '.' or '.\' as filepath (current dir)
 
388
- chngd: dbf_globals.defaultopencode changed to getacp, seems to be more
 
389
    compatible, especially when your codepage is not supported by dbase
 
390
- fixed: fix for empty path in IncludeTrailingPathDelim
 
391
 
 
392
 
 
393
------------------------
 
394
V6.2.1
 
395
 
 
396
- added: BeforeAutoCreate event: set DoCreate to false to prevent autocreate
 
397
- added: polish + french message strings up to date, thx tophet+lecho
 
398
- added: fielddefs, storedefs published property alike ttable
 
399
    WARNING: ALPHA feature, not tested well
 
400
- added: error handling for dbf creation, fields now checked before creating dbf
 
401
- added: fieldtypestr in error invalid_field_type, better error string
 
402
- fixed: preparing numeric index search, Move function had parameters wrong
 
403
    way around....arrggh
 
404
- fixed: error message invalid field type had invalid format type
 
405
- fixed: index out of bounds checking better (SetEntryNo, RecurPrev)
 
406
- fixed: lost designtime MDX indexes when opening
 
407
- fixed: numeric indexes changes to database were not detected well causing
 
408
    index corruption (thx ralf)
 
409
 
 
410
 
 
411
------------------------
 
412
V6.2
 
413
 
 
414
- added: table level locking (TDbf.LockTable / TDbf.UnlockTable)
 
415
    NOTE: if you're still editing a record, then LockTable will fail. Post or
 
416
      cancel changes before trying to lock table.
 
417
- added: filter expressions (thx paul)
 
418
    - WARNING: feature is currently in ALPHA state !
 
419
    - TDbf.Filter := 'your dbase expression';
 
420
    - index functions available for filter too
 
421
- added: expressions operators implemented: '=,<,>,<=,>=,and,or,not'
 
422
    - you can use these for filter (but for index too)
 
423
- added: more types for operator '+'
 
424
- added: GetIndexNames, retrieves indexes from MDX or NDX's in dbf directory
 
425
- added: TDbf.RegenerateIndexes, recreates all indexes active for table
 
426
- added: index expression length checking in parser
 
427
    new error message: STRING_INDEX_EXPRESSION_TOO_LONG
 
428
- added: polish error messages in Dbf_Str_PL.pas
 
429
- fixed: pass index options from object inspector to createindex (thx germain)
 
430
- fixed: now when closing dbf file, at runtime MDX indexes are removed from
 
431
  indexes list, but not at design time, to keep indexes from disappearing from
 
432
  list. You should always add/remove NDX indexes yourself! (because the dbf
 
433
  file does not know about them).
 
434
- fixed: bug '0.0 is not valid timestamp' is fixed (thx felipe)
 
435
    - I now understand VCL TDataSet..NativeFormat better -> TDbf retrieves in
 
436
      native format, then VCL translates to destination format
 
437
    - it'll be a little slower, but more compatible
 
438
    - get/setfielddata override in TDbf removed
 
439
 
 
440
 
 
441
 
 
442
------------------------
 
443
V6.1.4
 
444
 
 
445
- fixed: it now compiles (shame on me)
 
446
- note:  experimental new index insert order to check first before
 
447
    inserting record into database
 
448
 
 
449
 
 
450
------------------------
 
451
V6.1.3
 
452
 
 
453
- chnge: same functionality, clearer implementation of autocreate in
 
454
    TDbf.InternalOpen
 
455
- fixed: automagic creation of MDX indexes in TDbf.Indexes property if not exist
 
456
- added: on creation of MDX indexes now automagically tries exclusive mode
 
457
    itself, if fails, then same as old behaviour (exception)
 
458
- fixed: order autoinc assignment to new record and updating index, previously
 
459
    empty index. Now first autoinc is assigned, then indexes updated.
 
460
- fixed: auto-detect non-present index in MDX file and create it
 
461
- fixed: crash on master/detail range when no index or no field selected
 
462
- fixed: try exclusive when creating, reopened creating causing filesize = 0
 
463
    now it reopens non-create, ie normally
 
464
- added: checking whether field type okay for specified table level;
 
465
    new error string: 'STRING_INVALID_FIELD_TYPE'
 
466
- fixed: searchkey (using variants) on numeric MDX index; code inserted to
 
467
    convert to bcd
 
468
 
 
469
 
 
470
------------------------
 
471
V6.1.2
 
472
 
 
473
- fixed: delphi 3 compatibility issues
 
474
- fixed: bug in check exclusive access (thx martin)
 
475
- fixed: correct dbf version when creating dbf from fielddefs (thx martin)
 
476
- fixed: correct dbf version when creating memo file along with dbf ( " )
 
477
- added: set method for physicalrecno
 
478
- fixed: when using masterlink on non-string field, proper field conversion
 
479
- fixed: master/detail bug, empty range at start of file
 
480
 
 
481
 
 
482
------------------------
 
483
V6.1.1
 
484
 
 
485
- fixed: bug when opening dbf file with index in indexes property that does
 
486
  not yet exist. Now it will create index.
 
487
- fixed: delphi 4 compatibility (thx dayman)
 
488
- fixed: readonly mode now also shared access, bug not showing new records
 
489
- fixed: bug when reading past EOF in memo results in crash or garbage
 
490
- fixed: bug when index somewhat corrupt ( = record duplicate in index),
 
491
  - bug caused repeats of the same record
 
492
  - now skips records which are the same; based on recno
 
493
- fixed: bug in IDE, when table open, clicking on IndexName caused table to
 
494
  close, (internal exception was generated)
 
495
 
 
496
 
 
497
------------------------
 
498
V6.1
 
499
 
 
500
- added: project file for BCB6 (tdbf_c6*)
 
501
- added: polish mazovia support (db4 id $69, codepage 620, locale LANG_POLISH,
 
502
    dbase7 id: 'DB620PO1')
 
503
- added: Locate uses index search if simple index
 
504
- fixed: bug 'divide by zero', in 1024b memo (thx ltolean)
 
505
- fixed: bug in decimal separator, read & not write field (thx michaelbelling)
 
506
- fixed: bug in indexing: extracting string field values from database
 
507
- NOTE: index function UPPERCASE/LOWERCASE introduced, but you should use
 
508
    UPPER/LOWER for dbase compatibility
 
509
- fixed: dbase 7 files, if no extra properties present, don't read them
 
510
- added: buffering & caching
 
511
  - disabled by default, see Dbf_Common.Inc 'USE_CACHE'
 
512
  - you will need to add 'dbf_avl.pas' and 'dbf_pgcfile.pas' to tdbf project
 
513
    to be able to use them (already done in tdbf_c5r.bpk)
 
514
  - buffering: read & write ahead for files
 
515
  - caching: of index pages in memory
 
516
  - can improve indexing speed over network connections A LOT, especially
 
517
    if you have some memory to spare, to save the new index in
 
518
 
 
519
 
 
520
------------------------
 
521
V6.0.3
 
522
 
 
523
- fixed: bug in pagefile, writerecord not increasing recordcount well (arghh)
 
524
- fixed: bug in SetRange (empty range) (thx jenswahl)
 
525
- fixed: bug when appending records, header record count not updated (thx ron)
 
526
- fixed: bug when translating empty memo, AV (thx vern baker)
 
527
- fixed: bug when indexing empty table, unusable index (thx nogueira)
 
528
- fixed: bugs in RegenerateIndexes, index header 'lost'
 
529
- chang: handling of making valid key in SearchKey -> could solve bug stefano?
 
530
    - now use StringOfChar, instead of manual fill with spaces
 
531
- added: zap, emptytable (you can guess what it does ;-))
 
532
- added: dutch error messages (Dbf_Str_NL.pas)
 
533
 
 
534
 
 
535
------------------------
 
536
V6.0.2
 
537
 
 
538
- fixed: bug in TryExclusive
 
539
- fixed: bug in SearchKey, wrong array index causing searches to fail
 
540
- fixed: bug in TPageFile, chopping file size on multipage record (MDX indexes)
 
541
- fixed: bug in RepageFile, crashes when deleting/reindexing MDX index
 
542
- chang: speed optimisation in TPagedFile.WriteRecord, calc new record count
 
543
- fixed: specifying indexname for MDX longer than 10 characters, now truncates
 
544
 
 
545
 
 
546
------------------------
 
547
V6.0.1
 
548
 
 
549
- added: french strings in Dbf_Str_FR.pas
 
550
- added: index functions uppercase and lowercase
 
551
- fixed: index bug using dbase III files
 
552
- fixed: re-indexing existing (NDX) file fails
 
553
- fixed: index bug (NDX) concerning expression index
 
554
- chnge: TPagedFile.GetRecordCount now only retrieves file size if not in
 
555
    multi-user share mode, to speed up things a little bit
 
556
- fixed: index bug splitting pages
 
557
- fixed: page file set record count, now using pageoffset next page
 
558
- fixed: reading of type III memos
 
559
- added: translation of memo text fields (transliterate = true). Handling of
 
560
    translation should now be consistent between memo fields and char fields.
 
561
 
 
562
 
 
563
------------------------
 
564
V6.0
 
565
 
 
566
- fixed: ftDateTime handling field size
 
567
- fixed: writing memo version byte
 
568
- added: VCL ftFixedChar will be converted to 'C' (character) field
 
569
- added: property DateTimeHandling (dtDateTime, dtBDETimeStamp)
 
570
 
 
571
  Up to now TDbf used to store values in '@' (ftDateTime) fields as Delphi
 
572
  type TDateTime. To be compatible with the BDE, however, datetimes need to be
 
573
  stored as BDE type TimeStamp (which is milliseconds elapsed since 01/01/0001
 
574
  plus one day). To provide backward compatibility you can use this property
 
575
  to determine whether TDbf will read and write datetime values as TDateTime
 
576
  or as BDE TimeStamp. Default now is dtBDETimeStamp but in order to read
 
577
  values in existing TDbf tables you need to choose dtDateTime. If you want to
 
578
  convert your data to be BDE compatible have a look at the new procedure
 
579
  CopyFrom.
 
580
 
 
581
- added: procedure CopyFrom(DataSet: TDataSet; FileName: string;
 
582
            DateTimeAsString: boolean; Level: Integer);
 
583
 
 
584
  Use this procedure to copy the contents of a given DataSet into a new TDbf
 
585
  table. DataSet is the TDataSet you want to copy from, FileName is the
 
586
  complete (including path and extension) filename of the new table.
 
587
  DateTimeAsString determines whether datetime fields should be converted to
 
588
  string fields in the target table. This is especially useful if you want to
 
589
  use TDbf to create mailing sources for a text processor for example. If this
 
590
  parameter is set True an event OnCopyDateTimeAsString is triggered where you
 
591
  can override the default datetime-to-string conversion which is based on
 
592
  your current local settings. Level determines the TableLevel of the target
 
593
  table.
 
594
 
 
595
  In order to convert existing datetime values into a BDE compatible format
 
596
  use this procedure as follows: drop two instances of TDbf on a form, set
 
597
  DateTimeHandling of TDbf1 to dtDateTime and connect it with the existing
 
598
  table. Make sure TDbf2 is set to dtBDETimeStamp and call CopyFrom with
 
599
  DataSet = TDbf1 and DateTimeAsString = False. You can then replace the old
 
600
  table with the new one and use TDbf in dtBDETimeStamp mode in your
 
601
  application.
 
602
 
 
603
 
 
604
------------------------
 
605
V5.9.9
 
606
 
 
607
- added: TryExclusive method to 'try go exclusive' eg.:
 
608
    ...
 
609
    Dbf1.TryExclusive;
 
610
    if Dbf1.Exclusive then
 
611
    begin
 
612
      Dbf1.AddIndex(....);
 
613
      Dbf1.EndExclusive;
 
614
    end else begin
 
615
      ShowMessage('somebody else is using file');
 
616
    end;
 
617
    ...
 
618
- fixed bug: adding records while string index active don't show up
 
619
- fixed bug: clear field when backspace hit
 
620
- fixed bug: not saving memo byte in version data correctly
 
621
- fixed bug: sometimes crash when opening empty database
 
622
- fixed bug: DB desktop writes index type 'F' instead of 'N'
 
623
- fixed bug: writing negative integer values to fields
 
624
- fixed bug: assertion failure when adding a lot of the same data in index
 
625
- changed: default open mode is now normal instead of autocreate
 
626
 
 
627
 
 
628
------------------------
 
629
V5.9.8
 
630
 
 
631
- added integer and smallint support to STR() in expression indexes
 
632
- fixed bug: creating dbf files, index field not found, due to uppercase names
 
633
- fixed bug: float conversion in STR() more alike dbase
 
634
- fixed bug: parser crashes while removing constants in optional parameters
 
635
 
 
636
 
 
637
------------------------
 
638
V5.9.7
 
639
 
 
640
- added Variant support to SearchKey & SetRange
 
641
- fixed bug: NDX index split
 
642
- fixed bug: DeleteIndex could not find index
 
643
- fixed bug: MDX with dBaseIII locale problem
 
644
- fixed bug: descending sort index
 
645
- demo app v1.3 will compile with this package
 
646
- much thanks to Paul v.H. for help on this release
 
647
 
 
648
 
 
649
------------------------
 
650
V5.9.6
 
651
 
 
652
- added Int64 support for index expressions
 
653
- updates to support for Kylix (dbf_wtil.pas)
 
654
- fixed bug: Parser.GetResultType for single field indexes
 
655
- fixed bug: IndexFile.ExtractKeyFromBuffer integer -> numeric conversion
 
656
- fixed bug: creating NDX index crashes
 
657
- fixed bug: creating NDX index wrong locale
 
658
- fixed bug: while filtering wrong memo contents retrieved
 
659
 
 
660
 
 
661
------------------------
 
662
V5.9.5
 
663
 
 
664
- added: beta support for Kylix (2)
 
665
- fixed: last field missing (reported by wimb and many others)
 
666
- fixed: Delphi 3 compatibility problem in Dbf_Fields.pas
 
667
- fixed: calculated fields bug (sometimes not show data)
 
668
 
 
669
 
 
670
------------------------
 
671
V5.9.4
 
672
 
 
673
- added: beta support for numeric indexes in MDX
 
674
- changes Delphi 3 compatible (as reported by crest)
 
675
- change Delphi 4 compatible: .Items[I].Free instead of .Delete(I)
 
676
- fixed store that an index is an expression index -> indexes read from
 
677
  file are 'always' tagged as expression index...will keep you updated
 
678
- change TDbf_D6*.dpk -> they work now...dbf.dcr problem resolved
 
679
- fixed bug: detect end of header, invalid dbf
 
680
 
 
681
 
 
682
------------------------
 
683
V5.9.3
 
684
 
 
685
- added IndexName property list...listing MDX / NDX indexes
 
686
- added distinct index support
 
687
  - use ixPrimary in IndexOptions to create
 
688
  - checks key violations
 
689
- removed RES file requirement from CB packages
 
690
- fixed NDX index bug: opening index fails (out of bounds) (report by thx)
 
691
- fixed MDX open dBase VII index bug...language id mismatch
 
692
- fixed MDX multiple index bug: key was calculated before selection
 
693
  instead of after, oops :-(
 
694
 
 
695
 
 
696
------------------------
 
697
V5.9.2
 
698
 
 
699
- added support for creating tables in different locales/codepages
 
700
  - default is ANSI / Western European (= ENGLISH_UK currently)
 
701
  - eg. to create table in US locale
 
702
      DbfGlobals.CodePage := 437;
 
703
      DbfGlobals.Locale := LANG_ENGLISH or (SUBLANG_ENGLISH_US shl 10);
 
704
- changed structure: Mdx & Ndx implemented as descendants of TIndexPage
 
705
- new (public) DisableResyncOnPost property, if enabled, will suppress resync
 
706
  after post -> will increase speed. Use it if you are editing all records.
 
707
- removed global variable FDbfExePath
 
708
- fixed memory leak: expression record
 
709
- fixed setfielddata.string bug (reported by atilla)
 
710
 
 
711
 
 
712
------------------------
 
713
V5.9.1
 
714
 
 
715
- added duplicate field name handling
 
716
- fixed index close bug
 
717
- added TDbfIndexDef.Assign
 
718
- added TDbf.TableLevel property, indicates table level like TTable
 
719
- added support for creating dBase7 databases
 
720
  - set TTable.TableLevel to 7 before calling CreateTable
 
721
- added fieldlist copy feature VCL->DBF
 
722
  - eg.:
 
723
    FieldDefs: TFieldDefs;
 
724
    DbfFieldDefs: TDbfFieldDefs;
 
725
    ...
 
726
    DbfFieldDefs.Assign(FieldDefs);
 
727
  - float/integer fields will get a default size / precision
 
728
  - CopyFrom will get index of field that is assigned
 
729
- added restructure procedure
 
730
  - probably still buggy -> TEST WELL before using
 
731
  - table needs to be closed before calling restructuretable
 
732
  - create TDbfFieldDefs list
 
733
  - TDbfFieldDef.CopyFrom
 
734
    - is index of current table field to copy
 
735
    - CopyFrom = -1 means add
 
736
  - eg.:
 
737
    NewFieldDefs: TDbfFieldDefs;
 
738
    NewFieldDef: TDbfFieldDef;
 
739
    Dbf1: TDbf;
 
740
    ...
 
741
    // create new field list
 
742
    NewFieldDefs := TDbfFieldDefs.Create(Self);
 
743
    // assign current list
 
744
    NewFieldDefs.Assign(Dbf1.DbfFieldDefs);
 
745
    // assume first field is string, 20 wide, make larger to 40
 
746
    NewFieldDefs.Items[0].Size := 40;
 
747
    // rename second field to 'RENAMED'
 
748
    NewFieldDefs.Items[1].FieldName := 'RENAMED';
 
749
    // add a float field
 
750
    NewFieldDef := NewFieldDefs.AddFieldDef;
 
751
    NewFieldDef.FieldName := 'NEW_FLOAT';
 
752
    NewFieldDef.FieldType := ftFloat;
 
753
    NewFieldDef.Size := 10;
 
754
    NewFieldDef.Precision := 3;
 
755
    // restructure table and pack
 
756
    Dbf1.Restructure(NewFieldDefs, true);
 
757
    // restructure table and not pack
 
758
    //Dbf1.Restructure(NewFieldDefs, false);
 
759
    // free mem
 
760
    NewFieldDefs.Free;
 
761
 
 
762
 
 
763
------------------------
 
764
V5.9
 
765
 
 
766
- Master / detail supported!
 
767
  - NOTE: TDbf can only have another TDbf as master!
 
768
  - MasterFields is an expression
 
769
- TableName / FilePath handling changed...bug fixed
 
770
  if FilePath is non-empty then a file assigned to TableName without path
 
771
  will not clear FilePath -> bug fixed reading from DFM
 
772
- expression with variables: 'function/operand has too many arguments' fixed
 
773
- memory leaks fixed
 
774
- index repaging fixed
 
775
- index cursor move next fixed (possible problem at EOF)
 
776
 
 
777
 
 
778
------------------------
 
779
V5.8.2
 
780
 
 
781
- SetTableName simplified, extract full path
 
782
- IsDeleted fixed
 
783
- PackTable fixed
 
784
- Grouping of files in TDbfDatabase removed
 
785
  -> each TDbf has it's own TDbfFile, no sharing -> some bugs fixed
 
786
- Renamed global DbfDefaultDatabase to DbfGlobals
 
787
- Renamed files to Dbf_* to distinguish a little from others, note:
 
788
  - FieldDef -> Dbf_Fields
 
789
  - Index* -> Dbf_Idx*
 
790
  - Parse* -> Dbf_Prs*; except Parser -> Dbf_Parser
 
791
- AutoInc field bugs fixed:
 
792
  - generate value at post
 
793
  - multi-user share aware
 
794
- IncludeTrailingBackslash added for D4 and earlier
 
795
 
 
796
 
 
797
------------------------
 
798
V5.8.1
 
799
 
 
800
- field types: size=1..4, prec=0 is always smallint
 
801
 
 
802
 
 
803
------------------------
 
804
V5.8
 
805
 
 
806
- MAJOR COOL: field default values are supported!
 
807
  - you can't create table with default values yet, (dBase 7 only)
 
808
  - if table is made with DB2K, dBase 7, default values are read from header
 
809
- exclusive access is required for PackTable to avoid corruption
 
810
- automatically add last backslash in FilePath, now really works
 
811
- sorry, 5.7.7 didn't compile
 
812
- renamed MSWINDOWS defs to WIN32, which is more standard
 
813
- DBF locking is now BDE compatible, not sure about index & memo
 
814
- Added TDbf.UseFloatFields, when dbffieldtype = 'N', then UseFloatFields
 
815
  will force ftFloat fields, otherwise when precision is zero an integer field
 
816
  will be used, NOTE: UseFloatFields is default true
 
817
- structure change: passing data via constructor to assigning through
 
818
  properties (cleaner)
 
819
 
 
820
 
 
821
------------------------
 
822
V5.7.7
 
823
 
 
824
- Italian message strings in Strings_ITA.pas (thanks delphiguru)
 
825
- D7 project files
 
826
- automatically add last backslash in FilePath
 
827
- deleted records are now checked with (= '*') instead of (<> ' ')
 
828
  -> slightly different runtime behaviour if another character is present
 
829
 
 
830
 
 
831
------------------------
 
832
V5.7.6
 
833
 
 
834
- _DBASELOCK field can now be in any position
 
835
- locking bug fixed
 
836
- ShowDeleted bug fixed
 
837
- Delete method bug fixed
 
838
- Inserting a record will return physical recno: -1
 
839
 
 
840
 
 
841
------------------------
 
842
V5.7.5
 
843
 
 
844
- _DBASELOCK field is hidden from normal view
 
845
- changes from Paul van Helden applied:
 
846
  - assigning Filtered property
 
847
  - default size/precision float field
 
848
- Int64 support enabled for Delphi 4
 
849
- AutoInc fields enabled for Delphi 4
 
850
 
 
851
 
 
852
------------------------
 
853
V5.7.4
 
854
 
 
855
- Delphi 4 date field bug, worked on, untested, I hope it works now
 
856
- Delphi 7: dbf_reg needs ExptIntf as unit
 
857
- constructing field list bug fixed...more dbase 7 compatible
 
858
  now reads until field termination character found
 
859
- various memory leaks fixed
 
860
- when last field is named _DBASELOCK it will update it when start edit:
 
861
  - first 2 bytes: change count is incremented
 
862
  - next  3 bytes: current time hour,minute,second
 
863
  - next  3 bytes: current date year,month,day
 
864
  - next  0..16 bytes: name of user who locked the record
 
865
 
 
866
 
 
867
------------------------
 
868
V5.7.3
 
869
 
 
870
- unique indexes supported
 
871
- descending indexes supported
 
872
- parser bugs fixed:
 
873
  - clearing expression
 
874
  - resulting length from simple field
 
875
 
 
876
 
 
877
------------------------
 
878
V5.7.2
 
879
 
 
880
- striving for delphi 4 and older compatibility.... (thanks don)
 
881
  - TDbf.GetFieldData/SetFieldData seems D5 only
 
882
 
 
883
 
 
884
------------------------
 
885
V5.7.1
 
886
 
 
887
- parser core bugs fixed:
 
888
  - multiple arguments
 
889
  - integer arguments
 
890
- float fields bug fixed: storing data
 
891
- index bugs fixed:
 
892
  - auto detecting float result from expression
 
893
  - updating index when record edited
 
894
- parser will now only accept a dot as decimal separator whatever your
 
895
  DecimalSeparator character is. A comma will always be the argument separator.
 
896
 
 
897
 
 
898
------------------------
 
899
V5.7.0
 
900
 
 
901
- Dbf.dcr added
 
902
- Packages added
 
903
  - all named tdbf_..., see package.txt
 
904
  - I hope they all work...I haven't been able to test them
 
905
- GetFieldData method: boolean field type widened to Word length
 
906
- Index Expression Support !!!
 
907
  - used FWS expression parser from torry.net
 
908
  - still adding functions but basic STR() and DTOS() and '+' are implemented
 
909
- Languages replaced by own LCID list so that it can compile under D4/C4 and older
 
910
 
 
911
 
 
912
------------------------
 
913
V5.6.5
 
914
 
 
915
- fixed indexing bugs
 
916
  - locale mismatch
 
917
  - opening ndx files corrupted them
 
918
- demo works again!
 
919
- some help on new events:
 
920
  - OnLanguageWarning: when a specified codepage in dbf file is not present
 
921
    on computer, then this event is fired, you can force a different codepage
 
922
    or just OEM or ANSI
 
923
  - OnLocaleError: when locale used in index is not present on computer this
 
924
    event is fired. When using wrong locale, you can mess up the index!!!
 
925
    Again, you can force to use the index, default is to close.
 
926
  - OnIndexMissing: when dbf file has flag that there is a MDX index attached
 
927
    to this dbf file, then when this MDX file is not present, this event is fired.
 
928
    You need to override it if you want to copy another MDX index to this database,
 
929
    default is to break link to MDX file.
 
930
 
 
931
 
 
932
------------------------
 
933
V5.6.4
 
934
 
 
935
- fixed 'CloseDbf' bug (thanks Paul, Eugeny) when opening / closing tables many times
 
936
- Delphi 3 supported again (removed Int64 reference & recoding) (test compile D3, anyone?)
 
937
 
 
938
 
 
939
------------------------
 
940
V5.6.3
 
941
 
 
942
- fixed CreateTable bug (thanks Eugeny)
 
943
  - there seemed heavy need for this fix :-)
 
944
- fixed Memo bug (thanks Christian)
 
945
 
 
946
 
 
947
------------------------
 
948
V5.6.2
 
949
 
 
950
- fixed stupid Undelete bug (thanks Gvido)
 
951
- fixed NDX index list bugs
 
952
- fixed indexing bugs
 
953
- included dbflang.inc in package
 
954
 
 
955
 
 
956
------------------------
 
957
V5.6.1
 
958
 
 
959
- language support...continued (locale support added). index sorting is now
 
960
  done using locale-dependent CompareString from Windows. However, it seems
 
961
  to be always case insensitive.
 
962
- FIndexes bug fixed, indexfile always created as NDX index, now it is created
 
963
  based only as NDX if .NDX added, otherwise in MDX file. (thanks thiaux for pointing it out)
 
964
- new FOnIndexMissing event, when an MDX index is missing, it will notify you asking to delete
 
965
  the link or close file
 
966
- new ExactRecordCount property, it will give #records you are viewing:
 
967
    RecordCount - #deleted records - #records not in filter
 
968
  warning: this will visit the whole dataset each time you request the property,
 
969
  so it will be very slow on larger tables
 
970
 
 
971
 
 
972
------------------------
 
973
V5.6
 
974
 
 
975
- language support (codepages)
 
976
  - NOTE: this is Win32 compatible only, whole project is now Win32 compatible only for sure
 
977
    can anyone translate the codepages to linux? to make it linux compatible again
 
978
- TTranslateEvent changed, you have to return an Integer with length of Dest, or -1 to let it be calculated automatically
 
979
 
 
980
 
 
981
------------------------
 
982
V5.5
 
983
 
 
984
- Parser now in separate class: potential to parse more complex expressions, including multi-field indexes and such
 
985
- Linux compatible support...test anyone...I don't have Kylix...
 
986
- Bugfixes in InternalDelete and PackTable, thanks jimcampbel
 
987
 
 
988
 
 
989
------------------------
 
990
V5.4
 
991
 
 
992
- Multi-user support
 
993
- Some indexing bugs resolved
 
994
 
 
995
 
 
996
------------------------
 
997
V5.3.1
 
998
 
 
999
- TIndexPage.FindNearest uses binary search instead of linear
 
1000
 
 
1001
 
 
1002
------------------------
 
1003
V5.3
 
1004
 
 
1005
- SearchKey method searches on index for a given key
 
1006
    SearchKeyType: stEqual, stGreaterEqual, stGreater
 
1007
- MDX index support: index names with no extension now create a MDX index
 
1008
    belonging to dbf file
 
1009
- SetRange method instead of BracketLow/BracketHigh, rewritten range support
 
1010
- Index.SetPhysicalRecNo much faster, using Find instead of searching recno
 
1011
 
 
1012
 
 
1013
------------------------
 
1014
V5.002 and older
 
1015
 
 
1016
- see original TDbf website?