Is anybody using Cheetah in 4.1? - now 4.2?
- Rook Zimbabwe
- Addict
- Posts: 4322
- Joined: Tue Jan 02, 2007 8:16 pm
- Location: Cypress TX
- Contact:
Is anybody using Cheetah in 4.1? - now 4.2?
OK I have Cheetah working. Just cannot figure out how to pass a statement to th server... I cannot locate a commands list for Cheetah. Does anybody know where docs might be found?
Last edited by Rook Zimbabwe on Fri Jul 18, 2008 5:53 am, edited 1 time in total.
- electrochrisso
- Addict
- Posts: 989
- Joined: Mon May 14, 2007 2:13 am
- Location: Darling River
Here's the latest Cheetah download right from Paul Squires site:
http://planetsquires.com/cheetah.htm
I checked and the CHM file is in the zip. If you scroll down this page you'll see a couple of Purebasic support files.
--blueb
Note: A new "test" version "Cheetah 4" source is at Sourceforge:
http://sourceforge.net/project/showfile ... _id=183536
http://planetsquires.com/cheetah.htm
I checked and the CHM file is in the zip. If you scroll down this page you'll see a couple of Purebasic support files.
--blueb
Note: A new "test" version "Cheetah 4" source is at Sourceforge:
http://sourceforge.net/project/showfile ... _id=183536
- It was too lonely at the top.
System : PB 6.21(x64) and Win 11 Pro (x64)
Hardware: AMD Ryzen 9 5900X w/64 gigs Ram, AMD RX 6950 XT Graphics w/16gigs Mem
System : PB 6.21(x64) and Win 11 Pro (x64)
Hardware: AMD Ryzen 9 5900X w/64 gigs Ram, AMD RX 6950 XT Graphics w/16gigs Mem
- Rook Zimbabwe
- Addict
- Posts: 4322
- Joined: Tue Jan 02, 2007 8:16 pm
- Location: Cypress TX
- Contact:
cheetah in PB4.2
I am updating an older program to PB4.2, but can't seem to get cheetah to work.
Here is a simple test program:
Get an error : [Specified address is null!!]
And points to the following code in the wrapper:
Any body using cheetah2 in PB4.2?
Thanks.
Here is a simple test program:
Code: Select all
;-Begin-----------------------------------------------------------------
IncludeFile "CheetahInc.pb"
;-Occupy resources----------------------------------------------------
xdbUseDLL()
;-FileName------------------------------------------------------------
FileName.s = "Example1.dbf"
;-Create database-----------------------------------------------------
xdbCreate(FileName, "ID,N,9,0;NAME,C,50,0;VORNAME,C,50,0")
;-Open database-------------------------------------------------------
hdb.l = xdbOpen(FileName, "")
;-Add an index--------------------------------------------------------
xdbCreateIndex("Name.idx", hdb, "NAME + VORNAME", #XDBTRUE)
;-Open the index------------------------------------------------------
hidx.l = xdbOpenIndex("Name.idx", hdb)
;-Add 20 records with a name------------------------------------------
For i = 1 To 20
xdbClearBuffer(hdb)
Loop.s = Str(i)
xdbAssignField(hdb, "ID", 0, Loop)
xdbAssignField(hdb, "NAME", 0, "Mustermann")
xdbAssignField(hdb, "VORNAME", 0, "Max")
xdbAppendRecord(hdb)
Next
;-Change record 6 to 10 to another name-------------------------------
For i = 6 To 10
xdbClearBuffer(hdb)
xdbGetRecord(hdb, i)
xdbAssignField(hdb, "NAME", 0, "Musterfrau")
xdbAssignField(hdb, "VORNAME", 0, "Susan")
xdbPutRecord(hdb, i)
Next
;-Delete records 4 To 7-----------------------------------------------
For i = 4 To 7
xdbDeleteRecord(hdb, i)
Next
xdbPack(hdb)
;-Read records 1 To 10 And print--------------------------------------
OpenConsole()
For i = 1 To 10
xdbClearBuffer(hdb)
xdbGetRecord(hdb, i)
PrintN("ID: " + xdbFieldValue(hdb, "ID", 0))
PrintN("Name: " + xdbFieldValue(hdb, "NAME", 0))
PrintN("Vorname: " + xdbFieldValue(hdb, "VORNAME", 0))
Next
PrintN("")
PrintN("Press any key to exit...")
Input()
CloseConsole()
;-Close index---------------------------------------------------------
xdbCloseIndex(hdb, hidx)
;-Close database------------------------------------------------------
xdbClose(hdb)
;-Free resources------------------------------------------------------
xdbFreeDLL()
;-End-------------------------------------------------------------------
End
And points to the following code in the wrapper:
Code: Select all
Procedure.s xdbFieldValue(DBFhandle.l, FieldName.s, FieldNumber.l)
ProcedureReturn PeekS(CallFunction(xdbhDLL, "XDBFIELDVALUE_Z", DBFhandle, @FieldName, FieldNumber))
EndProcedure
Thanks.
Hmm... works with my version of the wrapper. I think it's the latest version available.
Cheetah2.pbi
Cheetah2.pbi
Code: Select all
; Begin-----------------------------------------------------------------
;
; Use Cheetah2.dll with PureBASIC Wrapper
;
; Simply add this file to your program with the command:
; XIncludeFile "Cheetah2.pbi"
;
; Created by Bob Houle (blueb) & Stefan Schnell
; Last Modified... Feb 17, 2007
; ----------------------------------------------------------------------
; Global variables----------------------------------------------------
Global xdbhDLL.l
; Cheetah database constants------------------------------------------
Enumeration
#XDBTRUE = 1
#XDBFALSE = 0
#MAX_INDEXES = 100
#MAX_FIELDS = 1000
#MAX_CONDITIONS = 50
#MAX_INDEXKEYS = 6
#MAX_CHARFIELD_SIZE = 256
#MAX_NUMFIELD_SIZE = 20
#ENCRYPT_NONE = 0
#ENCRYPT_RC4 = 1
#ENCRYPT_KEYEDXOR = 2
#ENCRYPT_SUPERSCRAMBLE = 3
#QUERY_AND = 1
#QUERY_OR = 2
#EQUAL_TO = 1
#NOT_EQUAL_TO = 2
#LESS_THAN = 3
#GREATER_THAN = 4
#LESS_THAN_EQUAL_TO = 5
#GREATER_THAN_EQUAL_TO = 6
#CONTAINS = 7
#BETWEEN = 8
#SUM = 9
#MINIMUM = 10
#MAXIMUM = 11
#AVERAGE = 12
#WILDCARD = 13
#SORT_ASCEND = 1
#SORT_DESCEND = 0
#XDBREADONLY = 0
#XDBWRITEONLY = 1
#XDBREADWRITE = 2
#XDBDENYREADWRITE = 1
#XDBDENYWRITE = 2
#XDBDENYREAD = 3
#XDBDENYNONE = 4
#XDBUNIQUE_CONTINUE = 0
#XDBUNIQUE_ERROR = 1
; Errors----------------------------------------------------------
#FILE_ACCESS_ERROR = 4000
#INVALID_DATE_FORMAT = 4001
#FILE_READ_ONLY = 4002
#FILE_WRITE_ONLY = 4003
#INVALID_FILENAME = 4004
#ENGINE_NOT_INITIALIZED = 5000
#FILE_NOT_FOUND = 5001
#TOO_MANY_FILES_OPEN = 5002
#INVALID_STRUCTURE = 5003
#FILE_NOT_OPEN = 5004
#RECORD_OUT_OF_RANGE = 5005
#FIELD_NOT_FOUND = 5006
#INVALID_FILE_HANDLE = 5007
#INVALID_FIELD_LENGTH = 5008
#DUPLICATE_ALIAS_NAME = 5009
#INVALID_ACCESSMODE = 5010
#INVALID_SHAREMODE = 5011
#RECORD_BUSY = 5012
#INCOMPATIBLE_MEMO_FIELDS = 5013
#RECORDSIZE_EXCEEDED = 5014
#INVALID_ENCRYPTIONKEY = 5015
#DATABASE_NOT_OPEN = 7000
#TOO_MANY_INDEXES_OPEN = 7002
#INVALID_KEY_EXPRESSION = 7003
#INDEX_NOT_OPEN = 7004
#INDEX_UNIQUE_KEYS_ONLY = 7005
#SEEK_NO_INDEX_SET = 7006
#INDEX_NOT_FOUND = 7007
#QUERY_NOT_GENERATED = 9000
#QUERY_INVALID_FIELDNAME = 9001
#QUERY_INVALID_COMPARISON = 9002
#QUERY_MISSING_DELIMITERS = 9003
#QUERY_MISSING_SEARCHSTRING = 9004
#QUERY_TOO_MANY_EXPRESSIONS = 9005
#QUERY_EXPECTED_NUMERIC_STRING = 9006
#QUERY_ERROR_GETRECORD = 9007
#QUERY_INVALID_HANDLE = 9008
#QUERY_INVALID_JOINPHRASE = 9009
#QUERY_NO_WILDCARD_FOUND = 9010
#QUERY_INVALID_PARENTHESIS = 9011
#DLL_EXPIRED = 99999
EndEnumeration
; Cheetah database functions------------------------------------------
; ------------------------------------------------------------------
Procedure.s xdbCToD(BASICdate.s)
ProcedureReturn PeekS(CallFunction(xdbhDLL, "CTOD_Z", @BASICdate))
EndProcedure
; ------------------------------------------------------------------
Procedure.s xdbDToS(CheetahDate.s)
ProcedureReturn PeekS(CallFunction(xdbhDLL, "DTOS_Z", @CheetahDate))
EndProcedure
; ------------------------------------------------------------------
Procedure.s xdbAddDate(StartDate.s, NumDays.l)
ProcedureReturn PeekS(CallFunction(xdbhDLL, "XDBADDDATE_Z", @StartDate, NumDays))
EndProcedure
; ------------------------------------------------------------------
Procedure xdbAddField(FieldInfo.s)
CallFunction(xdbhDLL, "XDBADDFIELD_Z", @FieldInfo)
EndProcedure
; ------------------------------------------------------------------
Procedure xdbAddRecord(DBFhandle.l)
CallFunction(xdbhDLL, "XDBADDRECORD_Z", DBFhandle)
EndProcedure
; ------------------------------------------------------------------
Procedure.s xdbAlias(DBFhandle.l)
ProcedureReturn PeekS(CallFunction(xdbhDLL, "XDBALIAS_Z", DBFhandle))
EndProcedure
; ------------------------------------------------------------------
Procedure xdbAppendRecord(DBFhandle.l)
CallFunction(xdbhDLL, "XDBAPPENDRECORD_Z", DBFhandle)
EndProcedure
; ------------------------------------------------------------------
Procedure.s xdbAppPath()
ProcedureReturn PeekS(CallFunction(xdbhDLL, "XDBAPPPATH_Z"))
EndProcedure
; ------------------------------------------------------------------
Procedure xdbAssignField(DBFhandle.l, FieldName.s, FieldNumber.l, FieldString.s)
CallFunction(xdbhDLL, "XDBASSIGNFIELD_Z", DBFhandle, @FieldName, FieldNumber, @FieldString)
EndProcedure
; Currency: 8byte float---------------------------------------------
;
; This function does not work with PureBASIC, because PureBASIC
; supports only 4byte floating point
;
; ------------------------------------------------------------------
;Procedure xdbAssignFieldCUR(DBFhandle.l, FieldName.s, FieldNumber.l, CurrencyValue.f)
; CallFunction(xdbhDLL, "XDBASSIGNFIELDCUR_Z", DBFhandle, @FieldName, FieldNumber, @CurrencyValue)
;EndProcedure
; Double: 8byte float-----------------------------------------------
;
; This function does not work with PureBASIC, because PureBASIC
; supports only 4byte floating point
;
; ------------------------------------------------------------------
;Procedure xdbAssignFieldDBL(DBFhandle.l, FieldName.s, FieldNumber.l, DoubleValue.f)
; CallFunction(xdbhDLL, "XDBASSIGNFIELDDBL_Z", DBFhandle, @FieldName, FieldNumber, @DoubleValue)
;EndProcedure
; Integer: From -32768 to +32767------------------------------------
Procedure xdbAssignFieldINT(DBFhandle.l, FieldName.s, FieldNumber.l, IntValue.w)
CallFunction(xdbhDLL, "XDBASSIGNFIELDINT_Z", DBFhandle, @FieldName, FieldNumber, IntValue)
EndProcedure
; Long: From -2147483648 to +2147483647-----------------------------
Procedure xdbAssignFieldLNG(DBFhandle.l, FieldName.s, FieldNumber.l, LongValue.l)
CallFunction(xdbhDLL, "XDBASSIGNFIELDLNG_Z", DBFhandle, @FieldName, FieldNumber, LongValue)
EndProcedure
; Single: 4byte float-----------------------------------------------
Procedure xdbAssignFieldSNG(DBFhandle.l, FieldName.s, FieldNumber.l, SingleValue.f)
CallFunction(xdbhDLL, "XDBASSIGNFIELDSNG_Z", DBFhandle, @FieldName, FieldNumber, @SingleValue)
EndProcedure
; ------------------------------------------------------------------
Procedure xdbAssignMemo(DBFhandle.l, FieldName.s, FieldNumber.l, MemAddress.l, StringLength.l)
CallFunction(xdbhDLL, "XDBASSIGNMEMO_Z", DBFhandle, @FieldName, FieldNumber, MemAddress, StringLength)
EndProcedure
; ------------------------------------------------------------------
Procedure.l xdbBOF(DBFhandle.l)
ProcedureReturn CallFunction(xdbhDLL, "XDBBOF_Z", DBFhandle)
EndProcedure
; ------------------------------------------------------------------
Procedure _xdbClearBuffer(DBFhandle.l)
CallFunction(xdbhDLL, "XDBCLEARBUFFER_Z", DBFhandle)
EndProcedure
; ------------------------------------------------------------------
Procedure xdbClose(DBFhandle.l)
CallFunction(xdbhDLL, "XDBCLOSE_Z", DBFhandle)
EndProcedure
; ------------------------------------------------------------------
Procedure xdbCloseAllIndexes(DBFhandle.l)
CallFunction(xdbhDLL, "XDBCLOSEALLINDEXES_Z", DBFhandle)
EndProcedure
; ------------------------------------------------------------------
Procedure xdbCloseIndex(DBFhandle.l, idxHandle.l)
CallFunction(xdbhDLL, "XDBCLOSEINDEX_Z", DBFhandle, idxHandle)
EndProcedure
; ------------------------------------------------------------------
Procedure xdbCreate(FileName.s, FieldArray.s)
CallFunction(xdbhDLL, "XDBCREATE_Z", @FileName, @FieldArray)
EndProcedure
; ------------------------------------------------------------------
Procedure xdbCreateExtended(FileName.s, FieldArray.s, MemoBlockSize.l, Algorithm.l, EncryptionKey.s)
CallFunction(xdbhDLL, "XDBCREATEEXTENDED_Z", @FileName, @FieldArray, MemoBlockSize, Algorithm, @EncryptionKey)
EndProcedure
; ------------------------------------------------------------------
Procedure xdbCreateFields(DBFname.s)
CallFunction(xdbhDLL, "XDBCREATEFIELDS_Z", @DBFname)
EndProcedure
; ------------------------------------------------------------------
Procedure xdbCreateFieldsExtended(FileName.s, MemoBlockSize.l, Algorithm.l, EncryptionKey.s)
CallFunction(xdbhDLL, "XDBCREATEFIELDSEXTENDED_Z", @FileName, MemoBlockSize, Algorithm, @EncryptionKey)
EndProcedure
; ------------------------------------------------------------------
Procedure xdbCreateIndex(IndexFileName.s, DBFhandle.l, IndexExpression.s, Duplicates.l)
CallFunction(xdbhDLL, "XDBCREATEINDEX_Z", @IndexFileName, DBFhandle, @IndexExpression, Duplicates)
EndProcedure
; ------------------------------------------------------------------
Procedure.l xdbCreateQuery(DBFhandle.l)
ProcedureReturn CallFunction(xdbhDLL, "XDBCREATEQUERY_Z", DBFhandle)
EndProcedure
; ------------------------------------------------------------------
Procedure xdbDatabaseHandles(DBFileName.s, CheetahHandle.l, WindowsHandle.l)
CallFunction(xdbhDLL, "XDBDATABASEHANDLES_Z", @DBFileName, CheetahHandle, WindowsHandle)
EndProcedure
; ------------------------------------------------------------------
Procedure.l xdbDateToJulian(DateString.s)
ProcedureReturn CallFunction(xdbhDLL, "XDBDATETOJULIAN_Z", @DateString)
EndProcedure
; ------------------------------------------------------------------
Procedure.l xdbDaysApart(DateFrom.s, DateTo.s)
ProcedureReturn CallFunction(xdbhDLL, "XDBDAYSAPART_Z", @DateFrom, @DateTo)
EndProcedure
; ------------------------------------------------------------------
Procedure.l xdbDaysInMonth(Year.l, Month.l)
ProcedureReturn CallFunction(xdbhDLL, "XDBDAYSINMONTH_Z", Year, Month)
EndProcedure
; ------------------------------------------------------------------
Procedure xdbDebugMode(TrueFalse.l)
CallFunction(xdbhDLL, "XDBDEBUGMODE_Z", TrueFalse)
EndProcedure
; ------------------------------------------------------------------
Procedure.l xdbDeleted(DBFhandle.l, RecordNumber.l)
ProcedureReturn CallFunction(xdbhDLL, "XDBDELETED_Z", DBFhandle, RecordNumber)
EndProcedure
; ------------------------------------------------------------------
Procedure xdbDeleteRecord(DBFhandle.l, RecordNumber.l)
CallFunction(xdbhDLL, "XDBDELETERECORD_Z", DBFhandle, RecordNumber)
EndProcedure
; ------------------------------------------------------------------
Procedure xdbDestroyQuery(QueryHandle.l)
CallFunction(xdbhDLL, "XDBDESTROYQUERY_Z", QueryHandle)
EndProcedure
; ------------------------------------------------------------------
Procedure.l xdbEncryptionMethod(DBFhandle.l)
ProcedureReturn CallFunction(xdbhDLL, "XDBENCRYPTIONMETHOD_Z", DBFhandle)
EndProcedure
; ------------------------------------------------------------------
Procedure.l xdbEOF(DBFhandle.l)
ProcedureReturn CallFunction(xdbhDLL, "XDBEOF_Z", DBFhandle)
EndProcedure
; ------------------------------------------------------------------
Procedure xdbError()
ProcedureReturn CallFunction(xdbhDLL, "XDBERROR_Z")
EndProcedure
; ------------------------------------------------------------------
Procedure xdbFailedLockInfo(DBFhandle.l, Reason.s, Username.s, Workstation.s, LockDate.s, LockTime.s)
CallFunction(xdbhDLL, "XDBFAILEDLOCKINFO_Z", DBFhandle, @Reason, @Username, @Workstation, @LockDate, @LockTime)
EndProcedure
; ------------------------------------------------------------------
Procedure.l xdbFieldCount(DBFhandle.l)
ProcedureReturn CallFunction(xdbhDLL, "XDBFIELDCOUNT_Z", DBFhandle)
EndProcedure
; ------------------------------------------------------------------
Procedure xdbFieldDecimals(DBFhandle.l, FieldNumber.l)
ProcedureReturn CallFunction(xdbhDLL, "XDBFIELDDECIMALS_Z", DBFhandle, FieldNumber)
EndProcedure
; ------------------------------------------------------------------
Procedure xdbFieldInfo(DBFhandle.l, FieldNumber.l, FieldName.s, FieldType.s, FieldLength.l, FieldDecimals.l)
;CallFunction(xdbhDLL, "XDBFIELDINFO_Z", DBFhandle, FieldNumber, @FieldName, @FieldType, FieldLength, FieldDecimals)
CallFunction(xdbhDLL, "XDBFIELDINFO_Z", DBFhandle, FieldNumber, @FieldName, @FieldType, @FieldLength, @FieldDecimals)
EndProcedure
; ------------------------------------------------------------------
Procedure.l xdbFieldLength(DBFhandle.l, FieldNumber.l)
ProcedureReturn CallFunction(xdbhDLL, "XDBFIELDLENGTH_Z", DBFhandle, FieldNumber)
EndProcedure
; ------------------------------------------------------------------
Procedure.s xdbFieldName(DBFhandle.l, FieldNumber.l)
ProcedureReturn PeekS(CallFunction(xdbhDLL, "XDBFIELDNAME_Z", DBFhandle, FieldNumber))
EndProcedure
; ------------------------------------------------------------------
Procedure.l xdbFieldNumber(DBFhandle.l, FieldName.s)
ProcedureReturn CallFunction(xdbhDLL, "XDBFIELDNUMBER_Z", DBFhandle, @FieldName)
EndProcedure
; ------------------------------------------------------------------
Procedure xdbFieldPadding(DBFhandle.l, TrueFalse.l)
CallFunction(xdbhDLL, "XDBFIELDPADDING_Z", DBFhandle, TrueFalse)
EndProcedure
; ------------------------------------------------------------------
Procedure.s xdbFieldType(DBFhandle.l, FieldNumber.l)
ProcedureReturn PeekS(CallFunction(xdbhDLL, "XDBFIELDTYPE_Z", DBFhandle, FieldNumber))
EndProcedure
; ------------------------------------------------------------------
Procedure.s xdbFieldValue(DBFhandle.l, FieldName.s, FieldNumber.l)
ProcedureReturn PeekS(CallFunction(xdbhDLL, "XDBFIELDVALUE_Z", DBFhandle, @FieldName, FieldNumber))
EndProcedure
; Currency: 8byte float---------------------------------------------
;
; This function does not work with PureBASIC, because PureBASIC
; supports only 4byte floating point
;
; ------------------------------------------------------------------
;Procedure.f xdbFieldValueCUR(DBFhandle.l, FieldName.s, FieldNumber.l)
; ProcedureReturn CallFunction(xdbhDLL, "XDBFIELDVALUECUR_Z", DBFhandle, @FieldName, FieldNumber)
;EndProcedure
; Double: 8byte float-----------------------------------------------
;
; This function does not work with PureBASIC, because PureBASIC
; supports only 4byte floating point
;
; ------------------------------------------------------------------
;Procedure.f xdbFieldValueDBL(DBFhandle.l, FieldName.s, FieldNumber.l)
; ProcedureReturn CallFunction(xdbhDLL, "XDBFIELDVALUEDBL_Z", DBFhandle, @FieldName, FieldNumber)
;EndProcedure
; Integer: From -32768 to +32767------------------------------------
Procedure.w xdbFieldValueINT(DBFhandle.l, FieldName.s, FieldNumber.l)
ProcedureReturn CallFunction(xdbhDLL, "XDBFIELDVALUEINT_Z", DBFhandle, @FieldName, FieldNumber)
EndProcedure
; Long: From -2147483648 to +2147483647-----------------------------
Procedure.l xdbFieldValueLNG(DBFhandle.l, FieldName.s, FieldNumber.l)
ProcedureReturn CallFunction(xdbhDLL, "XDBFIELDVALUELNG_Z", DBFhandle, @FieldName, FieldNumber)
EndProcedure
; Single: 4byte float-----------------------------------------------
Procedure.f xdbFieldValueSNG(DBFhandle.l, FieldName.s, FieldNumber.l)
ProcedureReturn CallFunction(xdbhDLL, "XDBFIELDVALUESNG_Z", DBFhandle, @FieldName, FieldNumber)
EndProcedure
; ------------------------------------------------------------------
Procedure xdbFlushDatabase(DBFhandle.l)
CallFunction(xdbhDLL, "XDBFLUSHDATABASE_Z", DBFhandle)
EndProcedure
; ------------------------------------------------------------------
Procedure xdbGetRecord(DBFhandle.l, RecordNumber.l)
CallFunction(xdbhDLL, "XDBGETRECORD_Z", DBFhandle, RecordNumber)
EndProcedure
; ------------------------------------------------------------------
Procedure xdbHtmlStripTag(QueryHandle.l, TrueFalse.l)
CallFunction(xdbhDLL, "XDBHTMLSTRIPTAG_Z", QueryHandle, TrueFalse)
EndProcedure
; ------------------------------------------------------------------
Procedure xdbIndexHandles(IndexFileName.s, CheetahHandle.l, WindowsHandle.l)
CallFunction(xdbhDLL, "XDBINDEXHANDLES_Z", @IndexFileName, CheetahHandle, WindowsHandle)
EndProcedure
; ------------------------------------------------------------------
Procedure.l xdbIsEditLock(DBFhandle.l, RecordNumber.l)
ProcedureReturn CallFunction(xdbhDLL, "XDBISEDITLOCK_Z", DBFhandle, RecordNumber)
EndProcedure
; ------------------------------------------------------------------
Procedure.l xdbIsEncrypted(DBFhandle.l)
ProcedureReturn CallFunction(xdbhDLL, "XDBISENCRYPTED_Z", DBFhandle)
EndProcedure
; ------------------------------------------------------------------
Procedure.s xdbJulianToDate(JulianNumber.l)
ProcedureReturn PeekS(CallFunction(xdbhDLL, "XDBJULIANTODATE_Z", JulianNumber))
EndProcedure
; ------------------------------------------------------------------
Procedure.l xdbKeyCount(DBFhandle.l, idxHandle.l)
ProcedureReturn CallFunction(xdbhDLL, "XDBKEYCOUNT_Z", DBFhandle, idxHandle)
EndProcedure
; ------------------------------------------------------------------
Procedure.s xdbKeyExpression(DBFhandle.l, idxHandle.l)
ProcedureReturn PeekS(CallFunction(xdbhDLL, "XDBKEYEXPRESSION_Z", DBFhandle, idxHandle))
EndProcedure
; ------------------------------------------------------------------
Procedure.l xdbKeyLength(DBFhandle.l, idxHandle.l)
ProcedureReturn CallFunction(xdbhDLL, "XDBKEYLENGTH_Z", DBFhandle, idxHandle)
EndProcedure
; ------------------------------------------------------------------
Procedure.l xdbKeyPosition(idxHandle.l, KeyPosition.l)
ProcedureReturn CallFunction(xdbhDLL, "XDBKEYPOSITION_Z", idxHandle, KeyPosition)
EndProcedure
; ------------------------------------------------------------------
Procedure.l xdbKeyUnique(DBFhandle.l, idxHandle.l)
ProcedureReturn CallFunction(xdbhDLL, "XDBKEYUNIQUE_Z", DBFhandle, idxHandle)
EndProcedure
; ------------------------------------------------------------------
Procedure xdbLastUpdated(DBFhandle.l, YearNr.l, MonthNr.l, DayNr.l)
CallFunction(xdbhDLL, "XDBLASTUPDATED_Z", YearNr, MonthNr, DayNr)
EndProcedure
; ------------------------------------------------------------------
Procedure.l xdbMemoValueAddr(DBFhandle.l, FieldName.s, FieldCode.l)
ProcedureReturn CallFunction(xdbhDLL, "XDBMEMOVALUEADDR_Z", DBFhandle, @FieldName, FieldCode)
EndProcedure
; ------------------------------------------------------------------
Procedure.l xdbMemoValueLen(DBFhandle.l, FieldName.s, FieldCode.l)
ProcedureReturn CallFunction(xdbhDLL, "XDBMEMOVALUELEN_Z", DBFhandle, @FieldName, FieldCode)
EndProcedure
; ------------------------------------------------------------------
Procedure.s xdbMKI(IntValue.w)
ProcedureReturn PeekS(CallFunction(xdbhDLL, "XDBMKI_Z", IntValue))
EndProcedure
; ------------------------------------------------------------------
Procedure.s xdbMKL(LongValue.l)
ProcedureReturn PeekS(CallFunction(xdbhDLL, "XDBMKL_Z", LongValue))
EndProcedure
; ------------------------------------------------------------------
Procedure xdbMoveFirst(DBFhandle.l, idxHandle.l)
CallFunction(xdbhDLL, "XDBMOVEFIRST_Z", DBFhandle, idxHandle)
EndProcedure
; ------------------------------------------------------------------
Procedure xdbMoveLast(DBFhandle.l, idxHandle.l)
CallFunction(xdbhDLL, "XDBMOVELAST_Z", DBFhandle, idxHandle)
EndProcedure
; ------------------------------------------------------------------
Procedure xdbMoveNext(DBFhandle.l, idxHandle.l)
CallFunction(xdbhDLL, "XDBMOVENEXT_Z", DBFhandle, idxHandle)
EndProcedure
; ------------------------------------------------------------------
Procedure xdbMovePrev(DBFhandle.l, idxHandle.l)
CallFunction(xdbhDLL, "XDBMOVEPREV_Z", DBFhandle, idxHandle)
EndProcedure
; ------------------------------------------------------------------
Procedure xdbMultiUser(TrueFalse.l, NumRetries.l, WaitTimes.l)
CallFunction(xdbhDLL, "XDBMULTIUSER_Z", TrueFalse, NumRetries, WaitTimes)
EndProcedure
; ------------------------------------------------------------------
Procedure.s xdbNameOfDay(DateCheck.s)
ProcedureReturn PeekS(CallFunction(xdbhDLL, "XDBNAMEOFDAY_Z", @DateCheck))
EndProcedure
; ------------------------------------------------------------------
Procedure.l xdbOpen(FileName.s, EncryptionKey.s)
ProcedureReturn CallFunction(xdbhDLL, "XDBOPEN_Z", @FileName, @EncryptionKey)
EndProcedure
; ------------------------------------------------------------------
Procedure.l xdbOpenEx(FileName.s, AccessMode.l, ShareMode.l, EncryptionKey.s)
ProcedureReturn CallFunction(xdbhDLL, "XDBOPENEX_Z", @FileName, AccessMode, ShareMode, @EncryptionKey)
EndProcedure
; ------------------------------------------------------------------
Procedure.l xdbOpenIndex(IndexFilename.s, DBFhandle.l)
ProcedureReturn CallFunction(xdbhDLL, "XDBOPENINDEX_Z", @IndexFilename, DBFhandle)
EndProcedure
; ------------------------------------------------------------------
Procedure xdbPack(DBFhandle.l)
CallFunction(xdbhDLL, "XDBPACK_Z", DBFhandle)
EndProcedure
; ------------------------------------------------------------------
Procedure xdbPutRecord(DBFhandle.l, RecordNumber.l)
CallFunction(xdbhDLL, "XDBPUTRECORD_Z", DBFhandle, @RecordNumber)
EndProcedure
; ------------------------------------------------------------------
Procedure.l xdbQueryAVG(QueryHandle.l, FieldName.s)
ProcedureReturn CallFunction(xdbhDLL, "XDBQUERYAVG_Z", QueryHandle, @FieldName)
EndProcedure
; ------------------------------------------------------------------
Procedure xdbQueryCondition(QueryHandle.l, JoinPhrases.l, FieldName.s, Equality.l, vParameter1.s, vParameter2.s)
CallFunction(xdbhDLL, "XDBQUERYCONDITION_Z", QueryHandle, JoinPhrases, @FieldName, Equality, @vParameter1, @vParameter2)
EndProcedure
; ------------------------------------------------------------------
Procedure xdbQueryDistinct(QueryHandle.l, FieldName.s)
CallFunction(xdbhDLL, "XDBQUERYDISTINCT_Z", QueryHandle, @FieldName)
EndProcedure
; ------------------------------------------------------------------
Procedure xdbQueryExecute(QueryHandle.l)
CallFunction(xdbhDLL, "XDBQUERYEXECUTE_Z", QueryHandle)
EndProcedure
; ------------------------------------------------------------------
Procedure xdbQueryIndex(QueryHandle.l)
CallFunction(xdbhDLL, "XDBQUERYINDEX_Z", QueryHandle)
EndProcedure
; ------------------------------------------------------------------
Procedure.l xdbQueryMAX(QueryHandle.l, FieldName.s)
ProcedureReturn CallFunction(xdbhDLL, "XDBQUERYMAX_Z", QueryHandle, @FieldName)
EndProcedure
; ------------------------------------------------------------------
Procedure.l xdbQueryMIN(QueryHandle.l, FieldName.s)
ProcedureReturn CallFunction(xdbhDLL, "XDBQUERYMIN_Z", QueryHandle, @FieldName)
EndProcedure
; ------------------------------------------------------------------
Procedure xdbQuerySort(QueryHandle.l, FieldName.s, SortDirection.l)
CallFunction(xdbhDLL, "XDBQUERYSORT_Z", QueryHandle, @FieldName, SortDirection)
EndProcedure
; ------------------------------------------------------------------
Procedure.l xdbQuerySUM(QueryHandle.l, FieldName.s)
ProcedureReturn CallFunction(xdbhDLL, "XDBQUERYSUM_Z", QueryHandle, @FieldName)
EndProcedure
; ------------------------------------------------------------------
Procedure xdbRecallRecord(DBFhandle.l, RecordNumber.l)
CallFunction(xdbhDLL, "XDBRECALLRECORD_Z", DBFhandle, RecordNumber)
EndProcedure
; ------------------------------------------------------------------
Procedure.s xdbRecordBuffer(DBFhandle.l)
ProcedureReturn PeekS(CallFunction(xdbhDLL, "XDBRECORDBUFFER_Z", DBFhandle))
EndProcedure
; ------------------------------------------------------------------
Procedure.l xdbRecordCount(DBFhandle.l)
ProcedureReturn CallFunction(xdbhDLL, "XDBRECORDCOUNT_Z", DBFhandle)
EndProcedure
; ------------------------------------------------------------------
Procedure.l xdbRecordNumber(DBFhandle.l)
ProcedureReturn CallFunction(xdbhDLL, "XDBRECORDNUMBER_Z", DBFhandle)
EndProcedure
; ------------------------------------------------------------------
Procedure.s xdbRegisteredTo()
ProcedureReturn PeekS(CallFunction(xdbhDLL, "XDBREGISTEREDTO_Z"))
EndProcedure
; ------------------------------------------------------------------
Procedure xdbReindex(DBFhandle.l, idxHandle.l, UniqueContinueOrError.l)
CallFunction(xdbhDLL, "XDBREINDEX_Z", DBFhandle, idxHandle, UniqueContinueOrError)
EndProcedure
; ------------------------------------------------------------------
Procedure xdbReindexAll(DBFhandle.l, UniqueContinueOrError.l)
CallFunction(xdbhDLL, "XDBREINDEXALL_Z", DBFhandle, UniqueContinueOrError)
EndProcedure
; ------------------------------------------------------------------
Procedure xdbRemoveEditLock(DBFhandle.l, Lock_Num.l)
CallFunction(xdbhDLL, "XDBREMOVEEDITLOCK_Z", DBFhandle, Lock_Num)
EndProcedure
; ------------------------------------------------------------------
Procedure xdbRemoveExclusiveLock(DBFhandle.l, Lock_Num.l)
CallFunction(xdbhDLL, "XDBREMOVEEXCLUSIVELOCK_Z", DBFhandle, Lock_Num)
EndProcedure
; ------------------------------------------------------------------
Procedure xdbResetError()
CallFunction(xdbhDLL, "XDBRESETERROR_Z")
EndProcedure
; ------------------------------------------------------------------
Procedure.l xdbSeek(DBFhandle.l, idxHandle.l, KeyToLookFor.s)
ProcedureReturn CallFunction(xdbhDLL, "XDBSEEK_Z", DBFhandle, idxHandle, @KeyToLookFor)
EndProcedure
; ------------------------------------------------------------------
Procedure.l xdbSeekNext(DBFhandle.l, idxHandle.l, KeyToLookFor.s)
ProcedureReturn CallFunction(xdbhDLL, "XDBSEEKNEXT_Z", DBFhandle, idxHandle, @KeyToLookFor)
EndProcedure
; ------------------------------------------------------------------
Procedure.l xdbSeekPartial(DBFhandle.l, idxHandle.l, PartialKeyToLookFor.s)
ProcedureReturn CallFunction(xdbhDLL, "XDBSEEKPARTIAL_Z", DBFhandle, idxHandle, @PartialKeyToLookFor)
EndProcedure
; ------------------------------------------------------------------
Procedure.l xdbSeekPartialNext(DBFhandle.l, idxHandle.l, PartialKeyToLookFor.s)
ProcedureReturn CallFunction(xdbhDLL, "XDBSEEKPARTIALNEXT_Z", DBFhandle, idxHandle, @PartialKeyToLookFor)
EndProcedure
; ------------------------------------------------------------------
Procedure xdbSetAlias(DBFhandle.l, NewAliasName.s)
CallFunction(xdbhDLL, "XDBSETALIAS_Z", DBFhandle, @NewAliasName)
EndProcedure
; ------------------------------------------------------------------
Procedure xdbSetCallBack(hWnd.l)
CallFunction(xdbhDLL, "XDBSETCALLBACK_Z", hWnd)
EndProcedure
; ------------------------------------------------------------------
Procedure.l xdbSetEditLock(DBFhandle.l, RecordNumber.l)
ProcedureReturn CallFunction(xdbhDLL, "XDBSETEDITLOCK_Z", DBFhandle, RecordNumber)
EndProcedure
; ------------------------------------------------------------------
Procedure xdbSetExclusiveLock(DBFhandle.l)
CallFunction(xdbhDLL, "XDBSETEXCLUSIVELOCK_Z", DBFhandle)
EndProcedure
; ------------------------------------------------------------------
Procedure xdbSkipDeleted(DBFhandle.l, OnOff.l)
CallFunction(xdbhDLL, "XDBSKIPDELETED_Z", DBFhandle, OnOff)
EndProcedure
; ------------------------------------------------------------------
Procedure xdbSpeedAppend(DBFhandle.l, OnOff.l)
CallFunction(xdbhDLL, "XDBSPEEDAPPEND_Z", DBFhandle, OnOff)
EndProcedure
; ------------------------------------------------------------------
Procedure.s xdbTempFileName()
ProcedureReturn PeekS(CallFunction(xdbhDLL, "XDBTEMPFILENAME_Z"))
EndProcedure
; ------------------------------------------------------------------
Procedure.s xdbTodaysDate()
ProcedureReturn PeekS(CallFunction(xdbhDLL, "XDBTODAYSDATE_Z"))
EndProcedure
; ------------------------------------------------------------------
Procedure.l xdbValidDate(DateCheck.s)
ProcedureReturn CallFunction(xdbhDLL, "XDBVALIDDATE_Z", @DateCheck)
EndProcedure
; ------------------------------------------------------------------
Procedure.s xdbVersion()
ProcedureReturn PeekS(CallFunction(xdbhDLL, "XDBVERSION_Z"))
EndProcedure
; ------------------------------------------------------------------
Procedure xdbZap(DBFhandle.l)
CallFunction(xdbhDLL, "XDBZAP_Z", DBFhandle)
EndProcedure
; Procedure xdbClearBuffer------------------------------------------
;
; Procedure to correct Cheetah xdbClearBuffer bug
; Thanks to Bruce Brown
;
; ------------------------------------------------------------------
Procedure xdbClearBuffer(DBFhandle.l)
_xdbClearBuffer(DBFhandle)
For i = 1 To xdbFieldCount(DBFhandle)
Select xdbFieldType(DBFhandle, i)
Case "I" ; Integer
xdbAssignFieldINT(DBFhandle, "", i, 0)
Case "W" ; Long
xdbAssignFieldLNG(DBFhandle, "", i, 0)
Case "S" ; Single
xdbAssignFieldSNG(DBFhandle, "", i, 0)
;Case "X" ; Double, not supported by PureBASIC
; xdbAssignFieldDBL(DBFhandle, "", i, 0)
;Case "Y" ; Currency, not supported by PureBASIC
; xdbAssignFieldCUR(DBFhandle, "", i, 0)
EndSelect
Next
EndProcedure
; Procedure xdbUseDLL-------------------------------------------------
;
; Procedure to load CHEETAH2.DLL permanently
;
; --------------------------------------------------------------------
Procedure xdbUseDLL()
xdbhDLL = OpenLibrary(#PB_Any, "CHEETAH2.DLL")
EndProcedure
; Procedure xdbFreeDLL------------------------------------------------
;
; Procedure to unload CHEETAH2.DLL after xdbUseDLL
;
; --------------------------------------------------------------------
Procedure xdbFreeDLL()
CloseLibrary(xdbhDLL)
EndProcedure
; Procedure AnyErrors-------------------------------------------------
;
; Returns the error number
;
; --------------------------------------------------------------------
Procedure AnyErrors()
ErrorReturn = xdbError()
If ErrorReturn
Select ErrorReturn
; System errors-----------------------------------------------
Case #FILE_ACCESS_ERROR
ErrorAns.s = "FILE ACCESS ERROR"
Case #INVALID_DATE_FORMAT
ErrorAns.s = "INVALID DATE FORMAT"
Case #FILE_READ_ONLY
ErrorAns.s = "FILE READ ONLY"
Case #FILE_WRITE_ONLY
ErrorAns.s = "FILE WRITE ONLY"
Case #INVALID_FILENAME
ErrorAns.s = "INVALID FILENAME"
; Database errors---------------------------------------------
Case #ENGINE_NOT_INITIALIZED
ErrorAns.s = "ENGINE NOT INITIALIZED"
Case #FILE_NOT_FOUND
ErrorAns.s = "FILE NOT FOUND"
Case #TOO_MANY_FILES_OPEN
ErrorAns.s = "TOO MANY FILES OPEN"
Case #INVALID_STRUCTURE
ErrorAns.s = "INVALID STRUCTURE"
Case #FILE_NOT_OPEN
ErrorAns.s = "FILE NOT OPEN"
Case #RECORD_OUT_OF_RANGE
ErrorAns.s = "RECORD OUT OF RANGE"
Case #FIELD_NOT_FOUND
ErrorAns.s = "FIELD NOT FOUND"
Case #INVALID_FILE_HANDLE
ErrorAns.s = "INVALID FILE HANDLE"
Case #INVALID_FIELD_LENGTH
ErrorAns.s = "INVALID FIELD LENGTH"
Case #DUPLICATE_ALIAS_NAME
ErrorAns.s = "DUPLICATE ALIAS NAME"
Case #INVALID_ACCESSMODE
ErrorAns.s = "INVALID ACCESSMODE"
Case #INVALID_SHAREMODE
ErrorAns.s = "INVALID SHAREMODE"
Case #RECORD_BUSY
ErrorAns.s = "RECORD BUSY"
Case #INCOMPATIBLE_MEMO_FIELDS
ErrorAns.s = "INCOMPATIBLE MEMO FIELDS"
Case #RECORDSIZE_EXCEEDED
ErrorAns.s = "RECORDSIZE EXCEEDED"
Case #INVALID_ENCRYPTIONKEY
ErrorAns.s = "INVALID ENCRYPTIONKEY"
; Index errors------------------------------------------------
Case #DATABASE_NOT_OPEN
ErrorAns.s = "DATABASE NOT OPEN"
Case #TOO_MANY_INDEXES_OPEN
ErrorAns.s = "TOO MANY INDEXES OPEN"
Case #INVALID_KEY_EXPRESSION
ErrorAns.s = "INVALID KEY EXPRESSION"
Case #INDEX_NOT_OPEN
ErrorAns.s = "INDEX NOT OPEN"
Case #INDEX_UNIQUE_KEYS_ONLY
ErrorAns.s = "INDEX UNIQUE KEYS ONLY"
Case #SEEK_NO_INDEX_SET
ErrorAns.s = "SEEK NO INDEX_SET"
Case #INDEX_NOT_FOUND
ErrorAns.s = "INDEX NOT FOUND"
; Query errors------------------------------------------------
Case #QUERY_NOT_GENERATED
ErrorAns.s = "QUERY NOT GENERATED"
Case #QUERY_INVALID_FIELDNAME
ErrorAns.s = "QUERY INVALID FIELDNAME"
Case #QUERY_INVALID_COMPARISON
ErrorAns.s = "QUERY INVALID COMPARISON"
Case #QUERY_MISSING_DELIMITERS
ErrorAns.s = "QUERY MISSING DELIMITERS"
Case #QUERY_MISSING_SEARCHSTRING
ErrorAns.s = "QUERY MISSING SEARCHSTRING"
Case #QUERY_TOO_MANY_EXPRESSIONS
ErrorAns.s = "QUERY TOO MANY EXPRESSIONS"
Case #QUERY_EXPECTED_NUMERIC_STRING
ErrorAns.s = "QUERY EXPECTED NUMERIC STRING"
Case #QUERY_ERROR_GETRECORD
ErrorAns.s = "QUERY ERROR GETRECORD"
Case #QUERY_INVALID_HANDLE
ErrorAns.s = "QUERY INVALID HANDLE"
Case #QUERY_INVALID_JOINPHRASE
ErrorAns.s = "QUERY INVALID JOINPHRASE"
Case #QUERY_NO_WILDCARD_FOUND
ErrorAns.s = "QUERY NO WILDCARD FOUND"
Case #QUERY_INVALID_PARENTHESIS
ErrorAns.s = "QUERY INVALID PARENTHESIS"
; DLL errors--------------------------------------------------
Case #DLL_EXPIRED
ErrorAns.s = "DLL has expired (unregistered users)"
; Now not define errors---------------------------------------
Default
ErrorAns.s = "Cheetah DLL Error: " + Str(ErrorReturn) + Chr(13) + Chr(10) + "Look at Cheetah help file for the actual error list"
EndSelect
MessageRequester("Cheetah DBF", ErrorAns, #MB_OK | #MB_ICONERROR)
xdbResetError()
EndIf
EndProcedure
; End-------------------------------------------------------------------
- It was too lonely at the top.
System : PB 6.21(x64) and Win 11 Pro (x64)
Hardware: AMD Ryzen 9 5900X w/64 gigs Ram, AMD RX 6950 XT Graphics w/16gigs Mem
System : PB 6.21(x64) and Win 11 Pro (x64)
Hardware: AMD Ryzen 9 5900X w/64 gigs Ram, AMD RX 6950 XT Graphics w/16gigs Mem
Here are a version for PB4 and above with prototype and so on:
Not tested at all but should work
If required the memorymodule so tell me i will make a download available.
greetings
Thomas
Code: Select all
; ----------------------------------------------------------------------------------------------------
;{ EQUATES - General And Error Codes
; ----------------------------------------------------------------------------------------------------
#XDBTRUE = 1
#XDBFALSE = 0
#MAX_INDEXES = 100
#MAX_FIELDS = 1000
#MAX_CONDITIONS = 50
#MAX_INDEXKEYS = 6
#MAX_CHARFIELD_SIZE = 256
#MAX_NUMFIELD_SIZE = 20
#ENCRYPT_NONE = 0
#ENCRYPT_RC4 = 1
#ENCRYPT_KEYEDXOR = 2
#ENCRYPT_SUPERSCRAMBLE = 3
#QUERY_AND = 1
#QUERY_OR = 2
#EQUAL_TO = 1
#NOT_EQUAL_TO = 2
#LESS_THAN = 3
#GREATER_THAN = 4
#LESS_THAN_EQUAL_TO = 5
#GREATER_THAN_EQUAL_TO = 6
#CONTAINS = 7
#BETWEEN = 8
#SUM = 9
#MINIMUM = 10
#MAXIMUM = 11
#AVERAGE = 12
#WILDCARD = 13
#SORT_ASCEND = 1
#SORT_DESCEND = 0
#XDBREADONLY = 0
#XDBWRITEONLY = 1
#XDBREADWRITE = 2
#XDBDENYREADWRITE = 1
#XDBDENYWRITE = 2
#XDBDENYREAD = 3
#XDBDENYNONE = 4
#XDBUNIQUE_CONTINUE = 0
#XDBUNIQUE_ERROR = 1
#FILE_ACCESS_ERROR = 4000
#INVALID_DATE_FORMAT = 4001
#FILE_READ_ONLY = 4002
#FILE_WRITE_ONLY = 4003
#INVALID_FILENAME = 4004
#ENGINE_NOT_INITIALIZED = 5000
#FILE_NOT_FOUND = 5001
#TOO_MANY_FILES_OPEN = 5002
#INVALID_STRUCTURE = 5003
#FILE_NOT_OPEN = 5004
#RECORD_OUT_OF_RANGE = 5005
#FIELD_NOT_FOUND = 5006
#INVALID_FILE_HANDLE = 5007
#INVALID_FIELD_LENGTH = 5008
#DUPLICATE_ALIAS_NAME = 5009
#INVALID_ACCESSMODE = 5010
#INVALID_SHAREMODE = 5011
#RECORD_BUSY = 5012
#INCOMPATIBLE_MEMO_FIELDS = 5013
#RECORDSIZE_EXCEEDED = 5014
#INVALID_ENCRYPTIONKEY = 5015
#DATABASE_NOT_OPEN = 7000
#TOO_MANY_INDEXES_OPEN = 7002
#INVALID_KEY_EXPRESSION = 7003
#INDEX_NOT_OPEN = 7004
#INDEX_UNIQUE_KEYS_ONLY = 7005
#SEEK_NO_INDEX_SET = 7006
#INDEX_NOT_FOUND = 7007
#QUERY_NOT_GENERATED = 9000
#QUERY_INVALID_FIELDNAME = 9001
#QUERY_INVALID_COMPARISON = 9002
#QUERY_MISSING_DELIMITERS = 9003
#QUERY_MISSING_SEARCHSTRING = 9004
#QUERY_TOO_MANY_EXPRESSIONS = 9005
#QUERY_EXPECTED_NUMERIC_STRING = 9006
#QUERY_ERROR_GETRECORD = 9007
#QUERY_INVALID_HANDLE = 9008
#QUERY_INVALID_JOINPHRASE = 9009
#QUERY_NO_WILDCARD_FOUND = 9010
#QUERY_INVALID_PARENTHESIS = 9011
;}
; ----------------------------------------------------------------------------------------------------
;{ DATABASE ROUTINES - Creation/Opening/Closing
; ----------------------------------------------------------------------------------------------------
Prototype xdbCreate(FileName.p-ascii, AllFields.p-ascii)
Prototype xdbCreateExtended(FileName.p-ascii, AllFields.p-ascii, MemoBlockSize.l, Algorithm.l, EncryptionKey.p-ascii)
Prototype.l xdbOpen(FileName.p-ascii, EncryptionKey.p-ascii = 0)
Prototype.l xdbOpenEX(FileName.p-ascii, AccessMode.l, ShareMode.l, EncryptionKey.p-ascii = 0)
Prototype.l xdbAlias(DBFhandle.l)
Prototype xdbSetAlias(DBFhandle.l, NewAliasName.p-ascii)
Prototype xdbCreateFields(FileName.p-ascii)
Prototype xdbCreateFieldsExtended(FileName.p-ascii, MemoBlockSize.l, Algorithm.l, EncryptionKey.p-ascii = 0)
Prototype xdbAddField(FieldInfo.p-ascii)
Prototype xdbClose(DBFhandle.l)
Prototype xdbCloseAllIndexes(DBFhandle.l)
;}
; ----------------------------------------------------------------------------------------------------
;{ DATABASE ROUTINES - MultiUser & Locking
; ----------------------------------------------------------------------------------------------------
Prototype xdbMultiUser(TrueFalse.l, NumRetries.l, WaitTime.l)
Prototype xdbFailedLockInfo(DBFhandle.l, *Reason.p-ascii, *Username.p-ascii, *Workstation.p-ascii, *LockDate.p-ascii, *LockTime.p-ascii)
Prototype.l xdbSetExclusiveLock(DBFhandle.l)
Prototype xdbRemoveExclusiveLock(DBFhandle.l, LOCK_NUM.l)
Prototype.l xdbSetEditLock(DBFhandle.l, RecordNumber.l)
Prototype xdbRemoveEditLock(DBFhandle.l, LOCK_NUM.l)
Prototype.l xdbIsEditLock(DBFhandle.l, RecordNumber.l)
;}
; ----------------------------------------------------------------------------------------------------
;{ DATABASE ROUTINES - Adding/Deleting Records
; ----------------------------------------------------------------------------------------------------
Prototype xdbAddRecord(DBFhandle.l)
Prototype xdbAppendRecord(DBFhandle.l)
Prototype xdbClearBuffer(DBFhandle.l)
Prototype xdbPutRecord(DBFhandle.l, RecordNumber.l)
Prototype xdbGetRecord(DBFhandle.l, RecordNumber.l)
Prototype xdbDeleteRecord(DBFhandle.l, RecordNumber.l)
Prototype xdbRecallRecord(DBFhandle.l, RecordNumber.l)
Prototype.l xdbDeleted(DBFhandle.l, RecordNumber.l)
Prototype xdbFlushDatabase(DBFhandle.l)
Prototype xdbPack(DBFhandle.l)
Prototype xdbZap(DBFhandle.l)
Prototype.l xdbRecordBuffer(DBFhandle.l)
Prototype xdbSpeedAppend(DBFhandle.l, OnOff.l)
;}
; ----------------------------------------------------------------------------------------------------
;{ DATABASE ROUTINES - Database Information
; ----------------------------------------------------------------------------------------------------
Prototype.l xdbRecordCount(DBFhandle.l)
Prototype.l xdbFieldCount(DBFhandle.l)
Prototype.l xdbFieldNumber(DBFhandle.l, FieldName.p-ascii)
Prototype.l xdbRecordNumber(DBFhandle.l)
Prototype xdbLastUpdated(DBFhandle.l, *YearNr.l, *MonthNr.l, *DayNr.l)
Prototype xdbFieldInfo(DBFhandle.l, FieldNumber.l, *FieldName.p-ascii, *FieldType.p-ascii, *FieldLength.l, *FieldDecimals.l)
Prototype.l xdbFieldName(DBFhandle.l, FieldNumber.l)
Prototype.l xdbFieldType(DBFhandle.l, FieldNumber.l)
Prototype.l xdbFieldLength(DBFhandle.l, FieldNumber.l)
Prototype.l xdbFieldDecimals(DBFhandle.l, FieldNumber.l)
Prototype xdbDatabaseHandles(DatabaseFilename.p-ascii, *CheetahHandle.l, *WindowsHandle.l)
Prototype xdbIndexHandles(IndexFilename.p-ascii, *CheetahHandle.l, *WindowsHandle.l)
;}
; ----------------------------------------------------------------------------------------------------
;{ DATABASE ROUTINES - Navigating the Database
; ----------------------------------------------------------------------------------------------------
Prototype.l xdbEOF(DBFhandle.l)
Prototype.l xdbBOF(DBFhandle.l)
Prototype xdbMoveFirst(DBFhandle.l, idxHandle.l)
Prototype xdbMoveNext(DBFhandle.l, idxHandle.l)
Prototype xdbMoveLast(DBFhandle.l, idxHandle.l)
Prototype xdbMovePrev(DBFhandle.l, idxHandle.l)
Prototype xdbSkipDeleted(DBFhandle.l, OnOff.l)
Prototype.l xdbKeyPosition(DBFhandle.l, idxHandle.l, KeyPosition.l)
;}
; ----------------------------------------------------------------------------------------------------
;{ DATABASE ROUTINES - Assigning Field Values
; ----------------------------------------------------------------------------------------------------
Prototype xdbAssignField(DBFhandle.l, FieldName.p-ascii, FieldNumber.l, FieldString.p-ascii = 0)
Prototype xdbAssignMemo(DBFhandle.l, FieldName.p-ascii, FieldNumber.l, MemAddress.l, StringLength.l)
Prototype xdbAssignFieldINT(DBFhandle.l, FieldName.p-ascii, FieldNumber.l, IntValue.w)
Prototype xdbAssignFieldLNG(DBFhandle.l, FieldName.p-ascii, FieldNumber.l, LongValue.l)
Prototype xdbAssignFieldSNG(DBFhandle.l, FieldName.p-ascii, FieldNumber.l, SingleValue.f)
Prototype xdbAssignFieldDBL(DBFhandle.l, FieldName.p-ascii, FieldNumber.l, DoubleValue.d)
Prototype xdbAssignFieldCUR(DBFhandle.l, FieldName.p-ascii, FieldNumber.l, CurrencyValue.q)
;}
; ----------------------------------------------------------------------------------------------------
;{ DATABASE ROUTINES - Retrieving Field Values
; ----------------------------------------------------------------------------------------------------
Prototype.l xdbMemoValueLen(DBFhandle.l, FieldName.p-ascii, FieldCode.l = 0)
Prototype.l xdbMemoValueAddr(DBFhandle.l, FieldName.p-ascii, FieldCode.l = 0)
Prototype.l xdbFieldValue(DBFhandle.l, FieldName.p-ascii, FieldCode.l = 0)
Prototype.w xdbFieldValueINT(DBFhandle.l, FieldName.p-ascii, FieldCode.l = 0)
Prototype.l xdbFieldValueLNG(DBFhandle.l, FieldName.p-ascii, FieldCode.l = 0)
Prototype.f xdbFieldValueSNG(DBFhandle.l, FieldName.p-ascii, FieldCode.l = 0)
Prototype.d xdbFieldValueDBL(DBFhandle.l, FieldName.p-ascii, FieldCode.l = 0)
Prototype.q xdbFieldValueCUR(DBFhandle.l, FieldName.p-ascii, FieldCode.l = 0)
Prototype xdbFieldPadding(DBFhandle.l, TrueFalse.l)
;}
; ----------------------------------------------------------------------------------------------------
;{ INDEX ROUTINES - Creation/Opening/Closing
; ----------------------------------------------------------------------------------------------------
Prototype xdbCreateIndex(IndexFilename.p-ascii, DBFhandle.l, IndexExpression.p-ascii, Duplicates.l)
Prototype.l xdbOpenIndex(IndexFilename.p-ascii, DBFhandle.l)
Prototype xdbCloseIndex(DBFhandle.l, idxHandle.l)
Prototype xdbReindex(DBFhandle.l, idxHandle.l, UniqueContinueOrError.l = 0)
Prototype xdbReindexAll(DBFhandle.l, UniqueContinueOrError.l = 0)
Prototype.l xdbSeek(DBFhandle.l, idxHandle.l, KeyToLookFor.p-ascii)
Prototype.l xdbSeekNext(DBFhandle.l, idxHandle.l, KeyToLookFor.p-ascii)
Prototype.l xdbSeekPartial(DBFhandle.l, idxHandle.l, PartialKeyToLookFor.p-ascii)
Prototype.l xdbSeekPartialNext(DBFhandle.l, idxHandle.l, PartialKeyToLookFor.p-ascii)
Prototype xdbSetCallback(hWnd.l)
;}
; ----------------------------------------------------------------------------------------------------
;{ INDEX ROUTINES - Index information
; ----------------------------------------------------------------------------------------------------
Prototype.l xdbKeyLength(DBFhandle.l, idxHandle.l)
Prototype.l xdbKeyCount(DBFhandle.l, idxHandle.l)
Prototype.l xdbKeyUnique(DBFhandle.l, idxHandle.l)
Prototype.l xdbKeyExpression(DBFhandle.l, idxHandle.l)
Prototype.l xdbMKL(LongValue.l)
Prototype.l xdbMKI(IntegerValue.w)
;}
; ----------------------------------------------------------------------------------------------------
;{ QUERY ROUTINES
; ----------------------------------------------------------------------------------------------------
Prototype.l xdbCreateQuery(DBFhandle.l)
Prototype xdbQueryCondition(QueryHandle.l, JoinPhrase.l, FieldName.p-ascii, Equality.l, vParameter1.p-ascii, vParameter2.p-ascii)
Prototype xdbQuerySort(QueryHandle.l, FieldName.p-ascii, SortDirection.l)
Prototype xdbQueryExecute(QueryHandle.l)
Prototype.d xdbQuerySUM(QueryHandle.l, FieldName.p-ascii)
Prototype.d xdbQueryMIN(QueryHandle.l, FieldName.p-ascii)
Prototype.d xdbQueryMAX(QueryHandle.l, FieldName.p-ascii)
Prototype.d xdbQueryAVG(QueryHandle.l, FieldName.p-ascii)
Prototype xdbQueryDistinct(QueryHandle.l, FieldName.p-ascii)
Prototype xdbHtmlStripTag(QueryHandle.l, TrueFalse.l)
Prototype xdbDestroyQuery(QueryHandle.l)
Prototype.l xdbQueryIndex(QueryHandle.l)
;}
; ----------------------------------------------------------------------------------------------------
;{ DATE ROUTINES
; ----------------------------------------------------------------------------------------------------
Prototype.l xdbDaysApart(DateFrom.p-ascii, DateTo.p-ascii)
Prototype.l xdbDaysInMonth(Year.l, Month.l)
Prototype.l xdbAddDate(StartDate.p-ascii, Days.l)
Prototype.l xdbNameOfDay(DateCheck.p-ascii)
Prototype.l xdbTodaysDate()
Prototype.l xdbValidDate(DateCheck.p-ascii)
Prototype.l xdbDateToJulian(DateString.p-ascii)
Prototype.l xdbJulianToDate(JulianNumber.l)
;}
; ----------------------------------------------------------------------------------------------------
;{ MISCELLANEOUS ROUTINES
; ----------------------------------------------------------------------------------------------------
Prototype xdbResetError()
Prototype.l xdbError()
Prototype.l xdbVersion()
Prototype xdbDebugMode(TrueFalse.l)
Prototype.l xdbIsEncrypted(DBFhandle.l)
Prototype.l xdbEncryptionMethod(DBFhandle.l)
Prototype.l xdbTempFileName()
;}
; ----------------------------------------------------------------------------------------------------
CompilerIf Defined(CheetahFromMem, #PB_Variable) = #True
XIncludeFile #PB_Compiler_Home + "Includes\Imports\MemoryModule_Import.pbi"
Macro M_GetFunction
MemoryGetProcAddress_
EndMacro
Procedure xdbEnd()
Shared Cheetah2hWnd.l
If Cheetah2hWnd
MemoryFreeLibrary_(Cheetah2hWnd)
Cheetah2hWnd = 0
EndIf
EndProcedure
Procedure xdbInit(MemoryPointer.l)
Shared Cheetah2hWnd.l
If MemoryPointer
Cheetah2hWnd = MemoryLoadLibrary_(MemoryPointer)
EndIf
CompilerElse
Macro M_GetFunction
GetFunction
EndMacro
Procedure xdbEnd()
Shared Cheetah2hWnd.l
If Cheetah2hWnd
CloseLibrary(Cheetah2hWnd)
Cheetah2hWnd = 0
EndIf
EndProcedure
Procedure xdbInit(DLLFileName.s = "")
Shared Cheetah2hWnd.l
If DLLFileName
Cheetah2hWnd = OpenLibrary(#PB_Any, DLLFileName)
Else
Cheetah2hWnd = OpenLibrary(#PB_Any, "cheetah2.dll")
EndIf
CompilerEndIf
If Cheetah2hWnd
;DATABASE ROUTINES - Creation/Opening/Closing
Global xdbCreate.xdbCreate = M_GetFunction(Cheetah2hWnd, "XDBCREATE_Z")
Global xdbCreateExtended.xdbCreateExtended = M_GetFunction(Cheetah2hWnd, "XDBCREATEEXTENDED_Z")
Global xdbOpen.xdbOpen = M_GetFunction(Cheetah2hWnd, "XDBOPEN_Z")
Global xdbOpenEX.xdbOpenEX = M_GetFunction(Cheetah2hWnd, "XDBOPENEX_Z")
Global xdbAlias.xdbAlias = M_GetFunction(Cheetah2hWnd, "XDBALIAS_Z")
Global xdbSetAlias.xdbSetAlias = M_GetFunction(Cheetah2hWnd, "XDBSETALIAS_Z")
Global xdbCreateFields.xdbCreateFields = M_GetFunction(Cheetah2hWnd, "XDBCREATEFIELDS_Z")
Global xdbCreateFieldsExtended.xdbCreateFieldsExtended = M_GetFunction(Cheetah2hWnd, "XDBCREATEFIELDSEXTENDED_Z")
Global xdbAddField.xdbAddField = M_GetFunction(Cheetah2hWnd, "XDBADDFIELD_Z")
Global xdbClose.xdbClose = M_GetFunction(Cheetah2hWnd, "XDBCLOSE_Z")
Global xdbCloseAllIndexes.xdbCloseAllIndexes = M_GetFunction(Cheetah2hWnd, "XDBCLOSEALLINDEXES_Z")
;DATABASE ROUTINES - MultiUser & Locking
Global xdbMultiUser.xdbMultiUser = M_GetFunction(Cheetah2hWnd, "XDBMULTIUSER_Z")
Global xdbFailedLockInfo.xdbFailedLockInfo = M_GetFunction(Cheetah2hWnd, "XDBFAILEDLOCKINFO_Z")
Global xdbSetExclusiveLock.xdbSetExclusiveLock = M_GetFunction(Cheetah2hWnd, "XDBSETEXCLUSIVELOCK_Z")
Global xdbRemoveExclusiveLock.xdbRemoveExclusiveLock = M_GetFunction(Cheetah2hWnd, "XDBREMOVEEXCLUSIVELOCK_Z")
Global xdbSetEditLock.xdbSetEditLock = M_GetFunction(Cheetah2hWnd, "XDBSETEDITLOCK_Z")
Global xdbRemoveEditLock.xdbRemoveEditLock = M_GetFunction(Cheetah2hWnd, "XDBREMOVEEDITLOCK_Z")
Global xdbIsEditLock.xdbIsEditLock = M_GetFunction(Cheetah2hWnd, "XDBISEDITLOCK_Z")
; DATABASE ROUTINES - Adding/Deleting Records
Global xdbAddRecord.xdbAddRecord = M_GetFunction(Cheetah2hWnd, "XDBADDRECORD_Z")
Global xdbAppendRecord.xdbAppendRecord = M_GetFunction(Cheetah2hWnd, "XDBAPPENDRECORD_Z")
Global xdbClearBuffer.xdbClearBuffer = M_GetFunction(Cheetah2hWnd, "XDBCLEARBUFFER_Z")
;Global xdbPutRecord.xdbPutRecord = M_GetFunction(Cheetah2hWnd, "XDBPUTRECORD_Z")
Global xdbGetRecord.xdbGetRecord = M_GetFunction(Cheetah2hWnd, "XDBGETRECORD_Z")
Global xdbDeleteRecord.xdbDeleteRecord = M_GetFunction(Cheetah2hWnd, "XDBDELETERECORD_Z")
Global xdbRecallRecord.xdbRecallRecord = M_GetFunction(Cheetah2hWnd, "XDBRECALLRECORD_Z")
Global xdbDeleted.xdbDeleted = M_GetFunction(Cheetah2hWnd, "XDBDELETED_Z")
Global xdbFlushDatabase.xdbFlushDatabase = M_GetFunction(Cheetah2hWnd, "XDBFLUSHDATABASE_Z")
Global xdbPack.xdbPack = M_GetFunction(Cheetah2hWnd, "XDBPACK_Z")
Global xdbZap.xdbZap = M_GetFunction(Cheetah2hWnd, "XDBZAP_Z")
;Global xdbRecordBuffer.xdbRecordBuffer = M_GetFunction(Cheetah2hWnd, "XDBRECORDBUFFER_Z")
Global xdbSpeedAppend.xdbSpeedAppend = M_GetFunction(Cheetah2hWnd, "XDBSPEEDAPPEND_Z")
; DATABASE ROUTINES - Database Information
Global xdbRecordCount.xdbRecordCount = M_GetFunction(Cheetah2hWnd, "XDBRECORDCOUNT_Z")
Global xdbFieldCount.xdbFieldCount = M_GetFunction(Cheetah2hWnd, "XDBFIELDCOUNT_Z")
Global xdbFieldNumber.xdbFieldNumber = M_GetFunction(Cheetah2hWnd, "XDBFIELDNUMBER_Z")
Global xdbRecordNumber.xdbRecordNumber = M_GetFunction(Cheetah2hWnd, "XDBRECORDNUMBER_Z")
Global xdbLastUpdated.xdbLastUpdated = M_GetFunction(Cheetah2hWnd, "XDBLASTUPDATED_Z")
Global xdbFieldInfo.xdbFieldInfo = M_GetFunction(Cheetah2hWnd, "XDBFIELDINFO_Z")
;Global xdbFieldName.xdbFieldName = M_GetFunction(Cheetah2hWnd, "XDBFIELDNAME_Z")
;Global xdbFieldType.xdbFieldType = M_GetFunction(Cheetah2hWnd, "XDBFIELDTYPE_Z")
Global xdbFieldLength.xdbFieldLength = M_GetFunction(Cheetah2hWnd, "XDBFIELDLENGTH_Z")
Global xdbFieldDecimals.xdbFieldDecimals = M_GetFunction(Cheetah2hWnd, "XDBFIELDDECIMALS_Z")
Global xdbDatabaseHandles.xdbDatabaseHandles = M_GetFunction(Cheetah2hWnd, "XDBDATABASEHANDLES_Z")
Global xdbIndexHandles.xdbIndexHandles = M_GetFunction(Cheetah2hWnd, "XDBINDEXHANDLES_Z")
; DATABASE ROUTINES - Navigating the Database
Global xdbEOF.xdbEOF = M_GetFunction(Cheetah2hWnd, "XDBEOF_Z")
Global xdbBOF.xdbBOF = M_GetFunction(Cheetah2hWnd, "XDBBOF_Z")
Global xdbMoveFirst.xdbMoveFirst = M_GetFunction(Cheetah2hWnd, "XDBMOVEFIRST_Z")
Global xdbMoveNext.xdbMoveNext = M_GetFunction(Cheetah2hWnd, "XDBMOVENEXT_Z")
Global xdbMovePrev.xdbMovePrev = M_GetFunction(Cheetah2hWnd, "XDBMOVEPREV_Z")
Global xdbSkipDeleted.xdbSkipDeleted = M_GetFunction(Cheetah2hWnd, "XDBSKIPDELETED_Z")
Global xdbKeyPosition.xdbKeyPosition = M_GetFunction(Cheetah2hWnd, "XDBKEYPOSITION_Z")
; DATABASE ROUTINES - Assigning Field Values
Global xdbAssignField.xdbAssignField = M_GetFunction(Cheetah2hWnd, "XDBASSIGNFIELD_Z")
Global xdbAssignMemo.xdbAssignMemo = M_GetFunction(Cheetah2hWnd, "XDBASSIGNMEMO_Z")
Global xdbAssignFieldINT.xdbAssignFieldINT = M_GetFunction(Cheetah2hWnd, "XDBASSIGNFIELDINT_Z")
Global xdbAssignFieldLNG.xdbAssignFieldLNG = M_GetFunction(Cheetah2hWnd, "XDBASSIGNFIELDLNG_Z")
Global xdbAssignFieldSNG.xdbAssignFieldSNG = M_GetFunction(Cheetah2hWnd, "XDBASSIGNFIELDSNG_Z")
Global xdbAssignFieldDBL.xdbAssignFieldDBL = M_GetFunction(Cheetah2hWnd, "XDBASSIGNFIELDDBL_Z")
Global xdbAssignFieldCUR.xdbAssignFieldCUR = M_GetFunction(Cheetah2hWnd, "XDBASSIGNFIELDCUR_Z")
; DATABASE ROUTINES - Retrieving Field Values
Global xdbMemoValueLen.xdbMemoValueLen = M_GetFunction(Cheetah2hWnd, "XDBMEMOVALUELEN_Z")
Global xdbMemoValueAddr.xdbMemoValueAddr = M_GetFunction(Cheetah2hWnd, "XDBMEMOVALUEADDR_Z")
;Global xdbFieldValue.xdbFieldValue = M_GetFunction(Cheetah2hWnd, "XDBFIELDVALUE_Z")
Global xdbFieldValueINT.xdbFieldValueINT = M_GetFunction(Cheetah2hWnd, "XDBFIELDVALUEINT_Z")
Global xdbFieldValueLNG.xdbFieldValueLNG = M_GetFunction(Cheetah2hWnd, "XDBFIELDVALUELNG_Z")
Global xdbFieldValueSNG.xdbFieldValueSNG = M_GetFunction(Cheetah2hWnd, "XDBFIELDVALUESNG_Z")
Global xdbFieldValueDBL.xdbFieldValueDBL = M_GetFunction(Cheetah2hWnd, "XDBFIELDVALUEDBL_Z")
Global xdbFieldValueCUR.xdbFieldValueCUR = M_GetFunction(Cheetah2hWnd, "XDBFIELDVALUECUR_Z")
Global xdbFieldPadding.xdbFieldPadding = M_GetFunction(Cheetah2hWnd, "XDBFIELDPADDING_Z")
; INDEX ROUTINES - Creation/Opening/Closing
Global xdbCreateIndex.xdbCreateIndex = M_GetFunction(Cheetah2hWnd, "XDBCREATEINDEX_Z")
Global xdbOpenIndex.xdbOpenIndex = M_GetFunction(Cheetah2hWnd, "XDBOPENINDEX_Z")
Global xdbCloseIndex.xdbCloseIndex = M_GetFunction(Cheetah2hWnd, "XDBCLOSEINDEX_Z")
Global xdbReindex.xdbReindex = M_GetFunction(Cheetah2hWnd, "XDBREINDEX_Z")
Global xdbReindexAll.xdbReindexAll = M_GetFunction(Cheetah2hWnd, "XDBREINDEXALL_Z")
Global xdbSeek.xdbSeek = M_GetFunction(Cheetah2hWnd, "XDBSEEK_Z")
Global xdbSeekNext.xdbSeekNext = M_GetFunction(Cheetah2hWnd, "XDBSEEKNEXT_Z")
Global xdbSeekPartial.xdbSeekPartial = M_GetFunction(Cheetah2hWnd, "XDBSEEKPARTIAL_Z")
Global xdbSeekPartialNext.xdbSeekPartialNext = M_GetFunction(Cheetah2hWnd, "XDBSEEKPARTIALNEXT_Z")
Global xdbSetCallback.xdbSetCallback = M_GetFunction(Cheetah2hWnd, "XDBSETCALLBACK_Z")
; INDEX ROUTINES - Index information
Global xdbKeyLength.xdbKeyLength = M_GetFunction(Cheetah2hWnd, "XDBKEYLENGTH_Z")
Global xdbKeyCount.xdbKeyCount = M_GetFunction(Cheetah2hWnd, "XDBKEYCOUNT_Z")
Global xdbKeyUnique.xdbKeyUnique = M_GetFunction(Cheetah2hWnd, "XDBKEYUNIQUE_Z")
;Global xdbKeyExpression.xdbKeyExpression = M_GetFunction(Cheetah2hWnd, "XBKYEXPRESSION_Z")
;Global xdbMKL.xdbMKL = M_GetFunction(Cheetah2hWnd, "XDBMKL_Z")
;Global xdbMKI.xdbMKI = M_GetFunction(Cheetah2hWnd, "XDBMKI_Z")
; QUERY ROUTINES
Global xdbCreateQuery.xdbCreateQuery = M_GetFunction(Cheetah2hWnd, "XDBCREATEQUERY_Z")
Global xdbQueryCondition.xdbQueryCondition = M_GetFunction(Cheetah2hWnd, "XDBQUERYCONDITION_Z")
Global xdbQuerySort.xdbQuerySort = M_GetFunction(Cheetah2hWnd, "XDBQUERYSORT_Z")
Global xdbQueryExecute.xdbQueryExecute = M_GetFunction(Cheetah2hWnd, "XDBQUERYEXECUTE_Z")
Global xdbQuerySUM.xdbQuerySUM = M_GetFunction(Cheetah2hWnd, "XDBQUERYSUM_Z")
Global xdbQueryMIN.xdbQueryMIN = M_GetFunction(Cheetah2hWnd, "XDBQUERYMIN_Z")
Global xdbQueryMAX.xdbQueryMAX = M_GetFunction(Cheetah2hWnd, "XDBQUERYMAX_Z")
Global xdbQueryAVG.xdbQueryAVG = M_GetFunction(Cheetah2hWnd, "XDBQUERYAVG_Z")
Global xdbQueryDistinct.xdbQueryDistinct = M_GetFunction(Cheetah2hWnd, "XDBQUERYDISTINCT_Z")
Global xdbHtmlStripTag.xdbHtmlStripTag = M_GetFunction(Cheetah2hWnd, "XDBHTMLSTRIPTAG_Z")
Global xdbDestroyQuery.xdbDestroyQuery = M_GetFunction(Cheetah2hWnd, "XDBDESTROYQUERY_Z")
Global xdbQueryIndex.xdbQueryIndex = M_GetFunction(Cheetah2hWnd, "XDBQUERYINDEX_Z")
; DATE ROUTINES
Global xdbDaysApart.xdbDaysApart = M_GetFunction(Cheetah2hWnd, "XDBDAYSAPART_Z")
Global xdbDaysInMonth.xdbDaysInMonth = M_GetFunction(Cheetah2hWnd, "XDBDAYSINMONTH_Z")
;Global xdbAddDate.xdbAddDate = M_GetFunction(Cheetah2hWnd, "XDBADDDATE_Z")
;Global xdbNameOfDay.xdbNameOfDay = M_GetFunction(Cheetah2hWnd, "XDBNAMEOFDAY_Z")
;Global xdbTodaysDate.xdbTodaysDate = M_GetFunction(Cheetah2hWnd, "XDBTODAYSDATE_Z")
Global xdbValidDate.xdbValidDate = M_GetFunction(Cheetah2hWnd, "XDBVALIDDATE_Z")
Global xdbDateToJulian.xdbDateToJulian = M_GetFunction(Cheetah2hWnd, "XDBDATETOJULIAN_Z")
;Global xdbJulianToDate.xdbJulianToDate = M_GetFunction(Cheetah2hWnd, "XDBJULIANTODATE_Z")
; MISCELLANEOUS ROUTINES
Global xdbResetError.xdbResetError = M_GetFunction(Cheetah2hWnd, "XDBRESETERROR_Z")
Global xdbError.xdbError = M_GetFunction(Cheetah2hWnd, "XDBERROR_Z")
;Global xdbVersion.xdbVersion = M_GetFunction(Cheetah2hWnd, "XDBVERSION_Z")
Global xdbDebugMode.xdbDebugMode = M_GetFunction(Cheetah2hWnd, "XDBDEBUGMODE_Z")
Global xdbIsEncrypted.xdbIsEncrypted = M_GetFunction(Cheetah2hWnd, "XDBISENCRYPTED_Z")
Global xdbEncryptionMethod.xdbEncryptionMethod = M_GetFunction(Cheetah2hWnd, "XDBENCRYPTIONMETHOD_Z")
;Global xdbTempFileName.xdbTempFileName = M_GetFunction(Cheetah2hWnd, "XDBTEMPFILENAME_Z")
ProcedureReturn Cheetah2hWnd
EndIf
EndProcedure
;}
; DATABASE ROUTINES - Adding/Deleting Records
Procedure.l xdbPutRecord(DBFhandle.l, RecordNumber.l)
Shared Cheetah2hWnd.l
Protected xdbPutRecord_.xdbPutRecord = M_GetFunction(Cheetah2hWnd, "XDBPUTRECORD_Z")
ProcedureReturn xdbPutRecord_(DBFhandle, @RecordNumber)
EndProcedure
Procedure.s xdbRecordBuffer(DBFhandle.l)
Shared Cheetah2hWnd.l
Protected xdbRecordBuffer_.xdbRecordBuffer = M_GetFunction(Cheetah2hWnd, "XDBRECORDBUFFER_Z")
ProcedureReturn PeekS(xdbRecordBuffer_(DBFhandle), #PB_Any, #PB_Ascii)
EndProcedure
; DATABASE ROUTINES - Database Information
Procedure.s xdbFieldName(DBFhandle.l, FieldNumber.l)
Shared Cheetah2hWnd.l
Protected xdbFieldName_.xdbFieldName = M_GetFunction(Cheetah2hWnd, "XDBFIELDNAME_Z")
ProcedureReturn PeekS(xdbFieldName_(DBFhandle, FieldNumber), #PB_Any, #PB_Ascii)
EndProcedure
Procedure.s xdbFieldType(DBFhandle.l, FieldNumber.l)
Shared Cheetah2hWnd.l
Protected xdbFieldType_.xdbFieldType = M_GetFunction(Cheetah2hWnd, "XDBFIELDTYPE_Z")
ProcedureReturn PeekS(xdbFieldType_(DBFhandle, FieldNumber), #PB_Any, #PB_Ascii)
EndProcedure
; DATABASE ROUTINES - Retrieving Field Values
Procedure.s xdbFieldValue(DBFhandle.l, FieldName.s, FieldCode.l = 0)
Shared Cheetah2hWnd.l
Protected xdbFieldValue_.xdbFieldValue = M_GetFunction(Cheetah2hWnd, "XDBFIELDVALUE_Z")
ProcedureReturn PeekS(xdbFieldValue_(DBFhandle, FieldName, FieldCode), #PB_Any, #PB_Ascii)
EndProcedure
; INDEX ROUTINES - Index information
Procedure.s xdbKeyExpression(DBFhandle.l, idxHandle.l)
Shared Cheetah2hWnd.l
Protected xdbKeyExpression_.xdbKeyExpression = M_GetFunction(Cheetah2hWnd, "XBKYEXPRESSION_Z")
ProcedureReturn PeekS(xdbKeyExpression_(DBFhandle, idxHandle), #PB_Any, #PB_Ascii)
EndProcedure
Procedure.s xdbMKL(LongValue.l)
Shared Cheetah2hWnd.l
Protected xdbMKL_.xdbMKL = M_GetFunction(Cheetah2hWnd, "XDBMKL_Z")
ProcedureReturn PeekS(xdbMKL_(LongValue), #PB_Any, #PB_Ascii)
EndProcedure
Procedure.s xdbMKI(IntegerValue.w)
Shared Cheetah2hWnd.l
Protected xdbMKI_.xdbMKI = M_GetFunction(Cheetah2hWnd, "XDBMKI_Z")
ProcedureReturn PeekS(xdbMKI_(IntegerValue), #PB_Any, #PB_Ascii)
EndProcedure
; DATE ROUTINES
Procedure.s xdbAddDate(StartDate.s, Days.l)
Shared Cheetah2hWnd.l
Protected xdbAddDate_.xdbAddDate = M_GetFunction(Cheetah2hWnd, "XDBADDDATE_Z")
ProcedureReturn PeekS(xdbAddDate_(StartDate, Days), #PB_Any, #PB_Ascii)
EndProcedure
Procedure.s xdbNameOfDay(DateCheck.s)
Shared Cheetah2hWnd.l
Protected xdbNameOfDay_.xdbNameOfDay = M_GetFunction(Cheetah2hWnd, "XDBNAMEOFDAY_Z")
ProcedureReturn PeekS(xdbNameOfDay_(DateCheck), #PB_Any, #PB_Ascii)
EndProcedure
Procedure.s xdbTodaysDate()
Shared Cheetah2hWnd.l
Protected xdbTodaysDate_.xdbTodaysDate = M_GetFunction(Cheetah2hWnd, "XDBTODAYSDATE_Z")
ProcedureReturn PeekS(xdbTodaysDate_(), #PB_Any, #PB_Ascii)
EndProcedure
Procedure.s xdbJulianToDate(JulianNumber.l)
Shared Cheetah2hWnd.l
Protected xdbJulianToDate_.xdbJulianToDate = M_GetFunction(Cheetah2hWnd, "XDBJULIANTODATE_Z")
ProcedureReturn PeekS(xdbJulianToDate_(JulianNumber), #PB_Any, #PB_Ascii)
EndProcedure
; MISCELLANEOUS ROUTINES
Procedure.s xdbVersion()
Shared Cheetah2hWnd.l
Protected xdbVersion_.xdbVersion = M_GetFunction(Cheetah2hWnd, "XDBVERSION_Z")
ProcedureReturn PeekS(xdbVersion_(), #PB_Any, #PB_Ascii)
EndProcedure
Procedure.s xdbTempFileName()
Shared Cheetah2hWnd.l
Protected xdbTempFileName_.xdbTempFileName = M_GetFunction(Cheetah2hWnd, "XDBTEMPFILENAME_Z")
ProcedureReturn PeekS(xdbTempFileName_(), #PB_Any, #PB_Ascii)
EndProcedure

If required the memorymodule so tell me i will make a download available.
greetings
Thomas
PureBasic 5.73 | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Old bugs good, new bugs bad! Updates are evil: might fix old bugs and introduce no new ones.

Old bugs good, new bugs bad! Updates are evil: might fix old bugs and introduce no new ones.

the code doesn't work with 4.20 but you have pm
greetings
Thomas
greetings
Thomas
PureBasic 5.73 | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Old bugs good, new bugs bad! Updates are evil: might fix old bugs and introduce no new ones.

Old bugs good, new bugs bad! Updates are evil: might fix old bugs and introduce no new ones.

This Code using the static lib compiled from memorymodule.c from J. Bauch.
PBOSL uses the same Source with some namechanges
PBOSL uses the same Source with some namechanges
PureBasic 5.73 | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Old bugs good, new bugs bad! Updates are evil: might fix old bugs and introduce no new ones.

Old bugs good, new bugs bad! Updates are evil: might fix old bugs and introduce no new ones.
