Cheetah DB for BMax

BlitzMax Forums/BlitzMax Programming/Cheetah DB for BMax

The forum is locked. These are the original blitzbasic.com forums, kept so they can still be read. No new topics, replies or edits can be made here. To join in, head over to the Blitz3D+ forums.

I don't know if anyone is interested in using DBase format files other than myself, but I have converted a user lib for Cheetah DB written in Blitz3D by Knots a couple years ago to a BMax include file and written an example for how to use it. Maybe someone else will find this useful.

This uses cheetah2.dll available here: http://www.planetsquires.com/cheetah.htm

cheetah2.bmx
'Converted from BB code by Knotz
'
'http://blitzmax.com/codearcs/codearcs.php?code=1344
'
'Cheetah DB by Knotz	(Posted 2 years ago)
'Cheetah DB is a free DBase III compatible databse engine.
'It's robust, fast and has multi-user capabilities.
'Look at Paul Squires' website to get Cheetah:
'www.planetsquires.com

Strict
Import Pub.Win32

Private
Local lib%

Public

lib = LoadLibraryA("Cheetah2.dll")

Global xdbCreate(dbFile$z, AllFields$z) "win32" = GetProcAddress(lib, "XDBCREATE_Z")
Global xdbCreateExtended (tFileName$z, AllFields$z, MemoBlockSize%, Algorithm%, EncryptionKey$z) "win32" = GetProcAddress(lib, "XDBCREATEEXTENDED_Z")
Global xdbOpen% (dbFile$z, EncryptionKey$z) "win32" = GetProcAddress(lib, "XDBOPEN_Z")
Global xdbOpenEX%(dbFile$z, AccessMode%, ShareMode%, EncryptionKey$z) "win32" = GetProcAddress(lib, "XDBOPENEX_Z")
Global xdbAlias%(dbHandle%) "win32" = GetProcAddress(lib, "XDBALIAS_Z")
Global xdbSetAlias(dbHandle%, AliasName$z) "win32" = GetProcAddress(lib, "XDBSETALIAS_Z")
Global xdbCreateFields(mFileName$z) "win32" = GetProcAddress(lib, "XDBCREATEFIELDS_Z")
Global xdbCreateFieldsExtended(mFileName$z, MemoBlockSize%, Algorithm%, EncryptionKey$z) "win32" = GetProcAddress(lib, "XDBCREATEFIELDSEXTENDED_Z")
Global xdbAddField(FieldInfoString$z) "win32" = GetProcAddress(lib, "XDBADDFIELD_Z")
Global xdbClose(dbHandle%) "win32" = GetProcAddress(lib, "XDBCLOSE_Z")
Global xdbCloseAllIndexes(dbHandle%) "win32" = GetProcAddress(lib, "XDBCLOSEALLINDEXES_Z")
Global xdbMultiUser(TrueFalse%, NumRetries%, WaitTime%) "win32" = GetProcAddress(lib, "XDBMULTIUSER_Z")
Global xdbFailedLockInfo(DBFhandle%, zReason%, zUsername%, zWorkstation%, zLockDate%, zLockTime%) "win32" = GetProcAddress(lib, "XDBFAILEDLOCKINFO_Z")
Global xdbSetExclusiveLock%(DBFhandle%) "win32" = GetProcAddress(lib, "XDBSETEXCLUSIVELOCK_Z")
Global xdbRemoveExclusiveLock(DBFhandle%, LOCK_NUM%) "win32" = GetProcAddress(lib, "XDBREMOVEEXCLUSIVELOCK_Z")
Global xdbSetEditLock%(DBFhandle%, RecordNumber%) "win32" = GetProcAddress(lib, "XDBSETEDITLOCK_Z")
Global xdbRemoveEditLock(DBFhandle%, LOCK_NUM%) "win32" = GetProcAddress(lib, "XDBREMOVEEDITLOCK_Z")
Global xdbIsEditLock%(DBFhandle%, RecordNumber%) "win32" = GetProcAddress(lib, "XDBISEDITLOCK_Z")
Global xdbAddRecord(dbHandle%) "win32" = GetProcAddress(lib, "XDBADDRECORD_Z")
Global xdbAppendRecord(DBFhandle%) "win32" = GetProcAddress(lib, "XDBAPPENDRECORD_Z")
Global xdbClearBuffer(dbHandle%) "win32" = GetProcAddress(lib, "XDBCLEARBUFFER_Z")
Global xdbPutRecord(dbHandle%, RN%) "win32" = GetProcAddress(lib, "XDBPUTRECORD_Z")
Global xdbGetRecord(dbHandle%, RN%) "win32" = GetProcAddress(lib, "XDBGETRECORD_Z")
Global xdbDeleteRecord(DBFhandle%, RecordNumber%) "win32" = GetProcAddress(lib, "XDBDELETERECORD_Z")
Global xdbRecallRecord(DBFhandle%, RecordNumber%) "win32" = GetProcAddress(lib, "XDBRECALLRECORD_Z")
Global xdbDeleted%(DBFhandle%, RecordNumber%) "win32" = GetProcAddress(lib, "XDBDELETED_Z")
Global xdbFlushDatabase(dbHandle%) "win32" = GetProcAddress(lib, "XDBFLUSHDATABASE_Z")
Global xdbPack( DBFhandle%) "win32" = GetProcAddress(lib, "XDBPACK_Z")
Global xdbZap( DBFhandle%) "win32" = GetProcAddress(lib, "XDBZAP_Z")
Global xdbRecordBuffer%(DBFhandle%) "win32" = GetProcAddress(lib, "XDBRECORDBUFFER_Z")
Global xdbSpeedAppend(DBFhandle%, TrueFalse%) "win32" = GetProcAddress(lib, "XDBSPEEDAPPEND_Z")
Global xdbRecordCount%(dbHandle%) "win32" = GetProcAddress(lib, "XDBRECORDCOUNT_Z")
Global xdbFieldCount%(dbHandle%) "win32" = GetProcAddress(lib, "XDBFIELDCOUNT_Z")
Global xdbFieldNumber%(dbHandle%, FieldName$z) "win32" = GetProcAddress(lib, "XDBFIELDNUMBER_Z")
Global xdbRecordNumber%(DBFhandle%) "win32" = GetProcAddress(lib, "XDBRECORDNUMBER_Z")
Global xdbLastUpdated(dbHandle%, YearNr%, MonthNr%, DayNr%) "win32" = GetProcAddress(lib, "XDBLASTUPDATED_Z")
Global xdbFieldInfo(DBFhandle%, FieldNumber%, zFieldName%, zFieldType%, FieldLength%, FieldDecimals%) "win32" = GetProcAddress(lib, "XDBFIELDINFO_Z")
Global xdbFieldName%(DBFhandle%, FieldNumber%) "win32" = GetProcAddress(lib, "XDBFIELDNAME_Z")
Global xdbFieldType%(DBFhandle%, FieldNumber%) "win32" = GetProcAddress(lib, "XDBFIELDTYPE_Z")
Global xdbFieldLength%(DBFhandle%, FieldNumber%) "win32" = GetProcAddress(lib, "XDBFIELDLENGTH_Z")
Global xdbFieldDecimals%(DBFhandle%, FieldNumber%) "win32" = GetProcAddress(lib, "XDBFIELDDECIMALS_Z")
Global xdbDatabaseHandles(DBFfilename$z, CheetahHandle%, WindowsHandle%) "win32" = GetProcAddress(lib, "XDBDATABASEHANDLES_Z")
Global xdbIndexHandles(IDXfilename$z, CheetahHandle%, WindowsHandle%) "win32" = GetProcAddress(lib, "XDBINDEXHANDLES_Z")
Global xdbEOF%(DBFhandle%) "win32" = GetProcAddress(lib, "XDBEOF_Z")
Global xdbBOF%(DBFhandle%) "win32" = GetProcAddress(lib, "XDBBOF_Z")
Global xdbMoveFirst(DBFhandle%, idxHandle%) "win32" = GetProcAddress(lib, "XDBMOVEFIRST_Z")
Global xdbMoveNext(DBFhandle%, idxHandle%) "win32" = GetProcAddress(lib, "XDBMOVENEXT_Z")
Global xdbMoveLast(DBFhandle%, idxHandle%) "win32" = GetProcAddress(lib, "XDBMOVELAST_Z")
Global xdbMovePrev(DBFhandle%, idxHandle%) "win32" = GetProcAddress(lib, "XDBMOVEPREV_Z")
Global xdbSkipDeleted(DBFhandle%, TrueFalse%) "win32" = GetProcAddress(lib, "XDBSKIPDELETED_Z")
Global xdbKeyPosition%(IDXhandle%, KeyPosition%) "win32" = GetProcAddress(lib, "XDBKEYPOSITION_Z")
Global xdbAssignField(dbHandle%, FieldName$z, FieldNumber%, FieldString$z) "win32" = GetProcAddress(lib, "XDBASSIGNFIELD_Z")
Global xdbAssignFieldINT(dbHandle%, FieldName$z, FieldNumber%, FieldInteger%) "win32" = GetProcAddress(lib, "XDBASSIGNFIELDINT_Z")
Global xdbAssignFieldLNG(dbHandle%, FieldName$z, FieldNumber%, FieldLong%) "win32" = GetProcAddress(lib, "XDBASSIGNFIELDLNG_Z")
Global xdbAssignFieldSNG(dbHandle%, FieldName$z, FieldNumber%, FieldSingle#) "win32" = GetProcAddress(lib, "XDBASSIGNFIELDSNG_Z")
Global xdbFieldValue$z(DBFhandle%, FieldName$z, FieldCode%) "win32" = GetProcAddress(lib, "XDBFIELDVALUE_Z")
Global xdbFieldValueINT%(DBFhandle%, FieldName$z, FieldCode%) "win32" = GetProcAddress(lib, "XDBFIELDVALUEINT_Z")
Global xdbFieldValueLNG%(DBFhandle%, FieldName$z, FieldCode%) "win32" = GetProcAddress(lib, "XDBFIELDVALUELNG_Z")
Global xdbFieldValueSNG#(DBFhandle%, FieldName$z, FieldCode%) "win32" = GetProcAddress(lib, "XDBFIELDVALUESNG_Z")
Global xdbFieldPadding(DBFhandle%, TrueFalse%) "win32" = GetProcAddress(lib, "XDBFIELDPADDING_Z")
Global xdbCreateIndex(iFilename$z, dbHandle%, IndexExpression$z, Duplicates%) "win32" = GetProcAddress(lib, "XDBCREATEINDEX_Z")
Global xdbOpenIndex%(iFilename$z, dbHandle%) "win32" = GetProcAddress(lib, "XDBOPENINDEX_Z")
Global xdbCloseIndex(DBFhandle%, idxHandle%) "win32" = GetProcAddress(lib, "XDBCLOSEINDEX_Z")
Global xdbReindex(DBFhandle%, idxHandle%, ContinueOrError%) "win32" = GetProcAddress(lib, "XDBREINDEX_Z")
Global xdbReindexAll(DBFhandle%, ContinueOrError%) "win32" = GetProcAddress(lib, "XDBREINDEXALL_Z")
Global xdbSeek%(DBFhandle%, idxHandle%, LookForKey$z) "win32" = GetProcAddress(lib, "XDBSEEK_Z")
Global xdbSeekNext%(dbHandle%, idxHandle%, LookForKey$z) "win32" = GetProcAddress(lib, "XDBSEEKNEXT_Z")
Global xdbSeekPartial%(dbHandle%, idxHandle%, LookForKey$z) "win32" = GetProcAddress(lib, "XDBSEEKPARTIAL_Z")
Global xdbSeekPartialNext%(dbHandle%, idxHandle%, LookForKey$z) "win32" = GetProcAddress(lib, "XDBSEEKPARTIALNEXT_Z")
Global xdbSetCallback(hWnd%) "win32" = GetProcAddress(lib, "XDBSETCALLBACK_Z")
Global xdbKeyLength%(DBFhandle%, idxHandle%) "win32" = GetProcAddress(lib, "XDBKEYLENGTH_Z")
Global xdbKeyCount%(DBFhandle%, idxHandle%) "win32" = GetProcAddress(lib, "XDBKEYCOUNT_Z")
Global xdbKeyUnique%(DBFhandle%, idxHandle%) "win32" = GetProcAddress(lib, "XDBKEYUNIQUE_Z")
Global xdbKeyExpression%(DBFhandle%, idxHandle%) "win32" = GetProcAddress(lib, "XDBKEYEXPRESSION_Z")
Global xdbMKL(LongValue%) "win32" = GetProcAddress(lib, "XDBMKL_Z")
Global xdbMKI(IntegerValue%) "win32" = GetProcAddress(lib, "XDBMKI_Z")
Global xdbCreateQuery%(DBFhandle%) "win32" = GetProcAddress(lib, "XDBCREATEQUERY_Z")
Global xdbQueryCondition(QueryHandle%, JoinPhrase%, FieldName$z, Equality%, vParameter1$z, vParameter2$z) "win32" = GetProcAddress(lib, "XDBQUERYCONDITION_Z")
Global xdbQuerySort(QueryHandle%, FieldName$z, SortDirection%) "win32" = GetProcAddress(lib, "XDBQUERYSORT_Z")
Global xdbQueryExecute(QueryHandle%) "win32" = GetProcAddress(lib, "XDBQUERYEXECUTE_Z")
Global xdbQuerySUM_Z#(QueryHandle%, FieldName$z) "win32" = GetProcAddress(lib, "XDBQUERYSUM_Z")
Global xdbQueryMIN_Z#(QueryHandle%, FieldName$z) "win32" = GetProcAddress(lib, "XDBQUERYMIN_Z")
Global xdbQueryMAX_Z#(QueryHandle%, FieldName$z) "win32" = GetProcAddress(lib, "XDBQUERYMAX_Z")
Global xdbQueryAVG_Z#(QueryHandle%, FieldName$z) "win32" = GetProcAddress(lib, "XDBQUERYAVG_Z")
Global xdbQueryDistinct(QueryHandle%, DistinctFieldName$z) "win32" = GetProcAddress(lib, "XDBQUERYDISTINCT_Z")
Global xdbHtmlStripTag(QueryHandle%, TrueFalse%) "win32" = GetProcAddress(lib, "XDBHTMLSTRIPTAG_Z")
Global xdbDestroyQuery(QueryHandle%) "win32" = GetProcAddress(lib, "XDBDESTROYQUERY_Z")
Global xdbQueryIndex%(QueryHandle%) "win32" = GetProcAddress(lib, "XDBQUERYINDEX_Z")
Global xdbDaysApart%(DateFrom$z, DateTo$z) "win32" = GetProcAddress(lib, "XDBDAYSAPART_Z")
Global xdbDaysInMonth%(Year%, Month%) "win32" = GetProcAddress(lib, "XDBDAYSINMONTH_Z")
Global xdbAddDate(StartDate$z, Days%) "win32" = GetProcAddress(lib, "XDBADDDATE_Z")
Global xdbNameOfDay%(DateCheck$z) "win32" = GetProcAddress(lib, "XDBNAMEOFDAY_Z")
Global xdbTodaysDate%() "win32" = GetProcAddress(lib, "XDBTODAYSDATE_Z")
Global xdbValidDate%(DateCheck$z) "win32" = GetProcAddress(lib, "XDBVALIDDATE_Z")
Global xdbDateToJulian%(DateString$z) "win32" = GetProcAddress(lib, "XDBDATETOJULIAN_Z")
Global xdbJulianToDate%(JulianNumber%) "win32" = GetProcAddress(lib, "XDBJULIANTODATE_Z")
Global CTOD%(PBDate$z) "win32" = GetProcAddress(lib, "CTOD_Z")
Global DTOS%(xDate$z) "win32" = GetProcAddress(lib, "DTOS_Z")
Global xdbResetError() "win32" = GetProcAddress(lib, "XDBRESETERROR_Z")
Global xdbError%() "win32" = GetProcAddress(lib, "XDBERROR_Z")
Global xdbVersion%() "win32" = GetProcAddress(lib, "XDBVERSION_Z")
Global xdbRegisteredTo%() "win32" = GetProcAddress(lib, "XDBREGISTEREDTO_Z")
Global xdbDebugMode(UserMode%) "win32" = GetProcAddress(lib, "XDBDEBUGMODE_Z")
Global xdbAppPath%() "win32" = GetProcAddress(lib, "XDBAPPPATH_Z")
Global xdbActivate(ActivateNumber%) "win32" = GetProcAddress(lib, "XDBACTIVATE_Z")
Global xdbFreeDLL() "win32" = GetProcAddress(lib, "XDBFREEDLL_Z")
Global xdbIsEncrypted%(DBFhandle%) "win32" = GetProcAddress(lib, "XDBISENCRYPTED_Z")
Global xdbEncryptionMethod%(DBFhandle%) "win32" = GetProcAddress(lib, "XDBENCRYPTIONMETHOD_Z")
Global xdbTempFileName%() "win32" = GetProcAddress(lib, "XDBTEMPFILENAME_Z")

lib = 0


Example:
Import "cheetah2.bmx"

Local DBFname:String
Local AllFields:String
Local db:Int
Local sObjID:String
Local sData:String
Local i:Int
Local LastRecord:Int
Local OBJID:Int
Local DATA:Int

DBFname = "test.dbf"
AllFields = "OBJID,C,10,0;DATA,M,0,0"

Print "Delete db"
DeleteFile(DBFname)

Print "Create db"
xdbCreate(DBFname, AllFields)

Print "Open db for write " + DBFname
db = xdbOpenEx(DBFname, 2, 4, "")

OBJID = xdbFieldNumber(db, "OBJID")
DATA = xdbFieldNumber(db, "DATA")

xdbClearBuffer(db)
xdbAssignField(db, "OBJID", 0, "1")
xdbAssignField(db, "DATA", 0, "Test")
xdbAddRecord(db)

Print "Close"
xdbClose(db)

Print "Open DB for read " + DBFname
db = xdbOpenEx(DBFname, 2, 4, "")

LastRecord = xdbRecordCount(db)
Print String.FromInt(LastRecord) + " records"
For i = 1 To LastRecord
	xdbGetRecord(db, i)
	sObjID = xdbFieldValue(db, "", OBJID )
	sData = xdbFieldValue(db, "", DATA)
	Print "ID:" + sObjID + " Data:" + sData
Next

xdbClose(db)