Code archives/Miscellaneous/Cheetah DB

This code has been declared by its author to be Public Domain code.

Download source code

Cheetah DB by Blueapples2007
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 [a www.planetsquires.com/cheetah.htm]here[/a].
'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

Comments

Blueapples2007
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, "1")
xdbAssignField(db, "", DATA, "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)



Code Archives Forum