DBMS MultiValue OpenQM
Posted: Tue May 26, 2015 4:29 pm
Hi people,
I want to use PureBasic with DBMS OpenQM (http://openqm.com/index.htm) is a MultiValue database, I used a similar (Pick / D3) to several years.
For over 15 years I do not do computer programs and I'm a little rusty.
I used a PureBasic, I'm starting to read the documentation.
They provide an API to connect to the database:
http://downloads.openqm.com/help/qmclient.htm
I'm doing the test on Windows 7, but the production environment should be with Fedora, my computer with Linux spoiled and I'm using Windows for initial tests. I opened the PB and reports: "In the Win32 API support," it will disrupt my tests?
They provide a library for Windows qmclilib.dll + qmclilib.lib, plus: qmclient.pb and qmclient.unicode.pb I still do not know to use. These programs have over 800 lines, so I will not be able to compile with the DEMO PB, which is restricted to programs with less than 800 lines.
I exclude comments and empty lines and is with 744 lines and do not want copilar in Demo PB, says it has more than 800 lines.
At the end of this text, the pasted qmclient.unicode.pb, will it work with SpiderBASIC? I will first test with PureBasic because it is more stable. Then I'll try to use SpiderBasic.
I think I have to use the QMConnect () to connect the SB with OpenQM
http://downloads.openqm.com/help/qmconnect.htm
There are examples with VB and C, how would I do this CONNECTION with PB?
Declare QMCall0(Subrname.s)
Declare QMCall1(Subrname.s, Arg1.s)
Declare QMCall2(Subrname.s, Arg1.s, Arg2.s)
Declare QMCall3(Subrname.s, Arg1.s, Arg2.s, Arg3.s)
Declare QMCall4(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s)
Declare QMCall5(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s)
Declare QMCall6(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s, Arg6.s)
Declare QMCall7(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s, Arg6.s, Arg7.s)
Declare QMCall8(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s, Arg6.s, Arg7.s, Arg8.s)
Declare QMCall9(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s, Arg6.s, Arg7.s, Arg8.s, Arg9.s)
Declare QMCall10(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s, Arg6.s, Arg7.s, Arg8.s, Arg9.s, Arg10.s)
Declare QMCall11(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s, Arg6.s, Arg7.s, Arg8.s, Arg9.s, Arg10.s, Arg11.s)
Declare QMCall12(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s, Arg6.s, Arg7.s, Arg8.s, Arg9.s, Arg10.s, Arg11.s, Arg12.s)
Declare QMCall13(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s, Arg6.s, Arg7.s, Arg8.s, Arg9.s, Arg10.s, Arg11.s, Arg12.s, Arg13.s)
Declare QMCall14(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s, Arg6.s, Arg7.s, Arg8.s, Arg9.s, Arg10.s, Arg11.s, Arg12.s, Arg13.s, Arg14.s)
Declare QMCall15(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s, Arg6.s, Arg7.s, Arg8.s, Arg9.s, Arg10.s, Arg11.s, Arg12.s, Arg13.s, Arg14.s, Arg15.s)
Declare QMCall16(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s, Arg6.s, Arg7.s, Arg8.s, Arg9.s, Arg10.s, Arg11.s, Arg12.s, Arg13.s, Arg14.s, Arg15.s, Arg16.s)
Declare QMCall17(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s, Arg6.s, Arg7.s, Arg8.s, Arg9.s, Arg10.s, Arg11.s, Arg12.s, Arg13.s, Arg14.s, Arg15.s, Arg16.s, Arg17.s)
Declare QMCall18(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s, Arg6.s, Arg7.s, Arg8.s, Arg9.s, Arg10.s, Arg11.s, Arg12.s, Arg13.s, Arg14.s, Arg15.s, Arg16.s, Arg17.s, Arg18.s)
Declare QMCall19(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s, Arg6.s, Arg7.s, Arg8.s, Arg9.s, Arg10.s, Arg11.s, Arg12.s, Arg13.s, Arg14.s, Arg15.s, Arg16.s, Arg17.s, Arg18.s, Arg19.s)
Declare QMCall20(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s, Arg6.s, Arg7.s, Arg8.s, Arg9.s, Arg10.s, Arg11.s, Arg12.s, Arg13.s, Arg14.s, Arg15.s, Arg16.s, Arg17.s, Arg18.s, Arg19.s, Arg20.s)
Declare.s QMChange(Src.s, Old.s, New.s, Occ.l, Start.l)
Declare QMClearFile(Fileno.l)
Declare QMClearSelect(ListNo.l)
Declare QMClose(Fileno.l)
Declare.l QMConnect(Host.s, Port.l, User.s, Password.s, Account.s)
Declare.l QMConnected()
Declare.l QMConnectLocal(Account.s)
Declare.l QMConnectPool(Host.s, Port.l, User.s, Password.s, Account.s, PoolName.s)
Declare.l QMDcount(String.s, Delim.s)
Declare QMDebug(Type.l)
Declare.s QMDecrypt(EncryptedData.s, Keystring.s)
Declare.s QMDel(Src.s, Fno.l, Vno.l, SvNo.l)
Declare QMDelete(Fileno.l, Id.s)
Declare QMDeleteu(Fileno.l, Id.s)
Declare QMDisconnect()
Declare QMDisconnectAll()
Declare.s QMEncrypt(DecryptedData.s, Keystring.s)
Declare QMEndCommand()
Declare.s QMError()
Declare.s QMEvalConv(Fileno.l, Name.s, DataStr.s, Id.s)
Declare.s QMEvaluate(Fileno.l, Name.s, DataStr.s, Id.s)
Declare.s QMExecute(Cmd.s, *Err)
Declare.s QMExtract(Src.s, Fno.l, Vno.l, SvNo.l)
Declare.s QMField(Src.s, Delim.s, Start.l, Occ.l)
Declare.s QMGetArg(n.w)
Declare.l QMGetSession()
Declare.s QMGetVar(Name.s)
Declare.s QMIConv(DataString.s, CodeString.s)
Declare.s QMIConvs(DataString.s, CodeString.s)
Declare.s QMIndices(Fno.l, Name.s)
Declare.s QMIns(Src.s, Fno.l, Vno.l, SvNo.l, New.s)
Declare.s QMLocate(Item.s, Dyn.s, Fno.l, Vno.l, SvNo.l, *Pos, Order.s)
Declare.l QMLogto(Account.s)
Declare QMMarkMapping(Fileno.l, State.l)
Declare.l QMMatch(String.s, Template.s)
Declare.s QMMatchfield(String.s, Template.s, Component.l)
Declare.s QMNextPartial(Listno.l)
Declare.s QMOConv(DataString.s, CodeString.s)
Declare.s QMOConvs(DataString.s, CodeString.s)
Declare.l QMOpen(Filename.s)
Declare QMPoolIdle()
Declare.s QMRead(Fileno.l, Id.s, *Err)
Declare.s QMReadl(Fileno.l, Id.s, Wait.l, *Err)
Declare.s QMReadList(Listno.l)
Declare.s QMReadNext(Listno.l)
Declare.s QMReadu(Fileno.l, Id.s, Wait.l, *Err)
Declare QMRecordlock(Fileno.l, Id.s, Update.l, Wait.l)
Declare.l QMRecordlocked(Fileno.l, Id.s)
Declare QMRelease(Fileno.l, Id.s)
Declare.s QMReplace(Src.s, Fno.l, Vno.l, SvNo.l, New.s)
Declare.s QMRespond(Response.s, *Err)
Declare.s QMRevision()
Declare QMSelect(Fileno.l, Listno.l)
Declare QMSelectIndex(Fileno.l, IndexName.s, IndexValue.s, Listno.l)
Declare.s QMSelectLeft(Fileno.l, IndexName.s, Listno.l)
Declare.s QMSelectPartial(Fileno.l, Listno.l)
Declare.s QMSelectRight(Fileno.l, IndexName.s, Listno.l)
Declare QMSetLeft(Fileno.l, IndexName.s)
Declare QMSetNamespace(Name.s)
Declare QMSetRight(Fileno.l, IndexName.s)
Declare.l QMSetSession(Idx.l)
Declare.l QMStatus()
Declare QMTrapCallAbort(Mode.i)
Declare QMTxn(Action.l)
Declare QMWrite(Fileno.l, Id.s, Rec.s)
Declare QMWriteu(Fileno.l, Id.s, Rec.s)
Global QMLib
Global Connected
Procedure OpenQMClientLibrary()
If QMLib = 0
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Linux
LibPath$ = "/usr/qmsys/bin/qmclilib.so"
CompilerCase #PB_OS_Windows
LibPath$ = "c:\qmsys\bin\qmclilib.dll"
CompilerEndSelect
QMLib = OpenLibrary(#PB_Any, LibPath$)
If QMLib = 0
PrintN("Cannot open " + LibPath$)
End
EndIf
EndIf
EndProcedure
Procedure CheckConnected()
If Connected = 0
PrintN("QMClient server function attempted when not connected")
End
EndIf
EndProcedure
Procedure QMCall0(Subrname.s)
CheckConnected()
CallCFunction(QMLib, "QMCallxW", @Subrname, 0)
EndProcedure
Procedure QMCall1(Subrname.s, Arg1.s)
CheckConnected()
CallCFunction(QMLib, "QMCallxW", @Subrname, 1, *Arg1)
EndProcedure
Procedure QMCall2(Subrname.s, Arg1.s, Arg2.s)
CheckConnected()
CallCFunction(QMLib, "QMCallxW", @Subrname, 2, *Arg1, *Arg2)
EndProcedure
Procedure QMCall3(Subrname.s, Arg1.s, Arg2.s, Arg3.s)
CheckConnected()
CallCFunction(QMLib, "QMCallxW", @Subrname, 3, *Arg1, *Arg2, *Arg3)
EndProcedure
Procedure QMCall4(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s)
CheckConnected()
CallCFunction(QMLib, "QMCallxW", @Subrname, 4, *Arg1, *Arg2, *Arg3, *Arg4)
EndProcedure
Procedure QMCall5(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s)
CheckConnected()
CallCFunction(QMLib, "QMCallxW", @Subrname, 5, *Arg1, *Arg2, *Arg3, *Arg4, *Arg5)
EndProcedure
Procedure QMCall6(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s, Arg6.s)
CheckConnected()
CallCFunction(QMLib, "QMCallxW", @Subrname, 6, *Arg1, *Arg2, *Arg3, *Arg4, *Arg5, *Arg6)
EndProcedure
Procedure QMCall7(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s, Arg6.s, Arg7.s)
CheckConnected()
CallCFunction(QMLib, "QMCallxW", @Subrname, 7, *Arg1, *Arg2, *Arg3, *Arg4, *Arg5, *Arg6, *Arg7)
EndProcedure
Procedure QMCall8(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s, Arg6.s, Arg7.s, Arg8.s)
CheckConnected()
CallCFunction(QMLib, "QMCallxW", @Subrname, 8, *Arg1, *Arg2, *Arg3, *Arg4, *Arg5, *Arg6, *Arg7, *Arg8)
EndProcedure
Procedure QMCall9(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s, Arg6.s, Arg7.s, Arg8.s, Arg9.s)
CheckConnected()
CallCFunction(QMLib, "QMCallxW", @Subrname, 9, *Arg1, *Arg2, *Arg3, *Arg4, *Arg5, *Arg6, *Arg7, *Arg8, *Arg9)
EndProcedure
Procedure QMCall10(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s, Arg6.s, Arg7.s, Arg8.s, Arg9.s, Arg10.s)
CheckConnected()
CallCFunction(QMLib, "QMCallxW", @Subrname, 10, *Arg1, *Arg2, *Arg3, *Arg4, *Arg5, *Arg6, *Arg7, *Arg8, *Arg9, *Arg10)
EndProcedure
Procedure QMCall11(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s, Arg6.s, Arg7.s, Arg8.s, Arg9.s, Arg10.s, Arg11.s)
CheckConnected()
CallCFunction(QMLib, "QMCallxW", @Subrname, 11, *Arg1, *Arg2, *Arg3, *Arg4, *Arg5, *Arg6, *Arg7, *Arg8, *Arg9, *Arg10, *Arg11)
EndProcedure
Procedure QMCall12(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s, Arg6.s, Arg7.s, Arg8.s, Arg9.s, Arg10.s, Arg11.s, Arg12.s)
CheckConnected()
CallCFunction(QMLib, "QMCallxW", @Subrname, 12, *Arg1, *Arg2, *Arg3, *Arg4, *Arg5, *Arg6, *Arg7, *Arg8, *Arg9, *Arg10, *Arg11, *Arg12)
EndProcedure
Procedure QMCall13(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s, Arg6.s, Arg7.s, Arg8.s, Arg9.s, Arg10.s, Arg11.s, Arg12.s, Arg13.s)
CheckConnected()
CallCFunction(QMLib, "QMCallxW", @Subrname, 13, *Arg1, *Arg2, *Arg3, *Arg4, *Arg5, *Arg6, *Arg7, *Arg8, *Arg9, *Arg10, *Arg11, *Arg12, *Arg13)
EndProcedure
Procedure QMCall14(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s, Arg6.s, Arg7.s, Arg8.s, Arg9.s, Arg10.s, Arg11.s, Arg12.s, Arg13.s, Arg14.s)
CheckConnected()
CallCFunction(QMLib, "QMCallxW", @Subrname, 14, *Arg1, *Arg2, *Arg3, *Arg4, *Arg5, *Arg6, *Arg7, *Arg8, *Arg9, *Arg10, *Arg11, *Arg12, *Arg13, *Arg14)
EndProcedure
Procedure QMCall15(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s, Arg6.s, Arg7.s, Arg8.s, Arg9.s, Arg10.s, Arg11.s, Arg12.s, Arg13.s, Arg14.s, Arg15.s)
CheckConnected()
CallCFunction(QMLib, "QMCallxW", @Subrname, 15, *Arg1, *Arg2, *Arg3, *Arg4, *Arg5, *Arg6, *Arg7, *Arg8, *Arg9, *Arg10, *Arg11, *Arg12, *Arg13, *Arg14, *Arg15)
EndProcedure
Procedure QMCall16(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s, Arg6.s, Arg7.s, Arg8.s, Arg9.s, Arg10.s, Arg11.s, Arg12.s, Arg13.s, Arg14.s, Arg15.s, Arg16.s)
CheckConnected()
CallCFunction(QMLib, "QMCallxW", @Subrname, 16, *Arg1, *Arg2, *Arg3, *Arg4, *Arg5, *Arg6, *Arg7, *Arg8, *Arg9, *Arg10, *Arg11, *Arg12, *Arg13, *Arg14, *Arg15, *Arg16)
EndProcedure
Procedure QMCall17(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s, Arg6.s, Arg7.s, Arg8.s, Arg9.s, Arg10.s, Arg11.s, Arg12.s, Arg13.s, Arg14.s, Arg15.s, Arg16.s, Arg17.s)
CheckConnected()
CallCFunction(QMLib, "QMCallxW", @Subrname, 17, *Arg1, *Arg2, *Arg3, *Arg4, *Arg5, *Arg6, *Arg7, *Arg8, *Arg9, *Arg10, *Arg11, *Arg12, *Arg13, *Arg14, *Arg15, *Arg16, *Arg17)
EndProcedure
Procedure QMCall18(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s, Arg6.s, Arg7.s, Arg8.s, Arg9.s, Arg10.s, Arg11.s, Arg12.s, Arg13.s, Arg14.s, Arg15.s, Arg16.s, Arg17.s, Arg18.s)
CheckConnected()
CallCFunction(QMLib, "QMCallxW", @Subrname, 18, *Arg1, *Arg2, *Arg3, *Arg4, *Arg5, *Arg6, *Arg7, *Arg8, *Arg9, *Arg10, *Arg11, *Arg12, *Arg13, *Arg14, *Arg15, *Arg16, *Arg17, *Arg18)
EndProcedure
;===== QMChange
Procedure.s QMChange(Src.s, Old.s, New.s, Occ.l, Start.l)
OpenQMClientLibrary()
*String = CallCFunction(QMLib, "QMChangeW", @Src, @Old, @New, Occ, Start)
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMChecksum
Procedure.l QMChecksum(Src.s)
OpenQMClientLibrary()
Cs = CallCFunction(QMLib, "QMChecksumW", @Src)
ProcedureReturn Cs
EndProcedure
;===== QMClearFile
Procedure QMClearFile(Fileno.l)
CheckConnected()
CallCFunction(QMLib, "QMClearFile", Fileno)
EndProcedure
;===== QMClearSelect
Procedure QMClearSelect(ListNo.l)
CheckConnected()
CallCFunction(QMLib, "QMClearSelect", ListNo)
EndProcedure
;===== QMClose
Procedure QMClose(Fileno.l)
CheckConnected()
CallCFunction(QMLib, "QMClose", Fileno)
EndProcedure
;===== QMConnect
Procedure.l QMConnect(Host.s, Port.l, User.s, Password.s, Account.s)
OpenQMClientLibrary()
If Connected
QMDisconnect()
EndIf
Connected = CallCFunction(QMLib, "QMConnectW", @Host, Port, @User, @Password, @Account)
ProcedureReturn Connected
EndProcedure
;===== QMConnectionType
Procedure QMConnectionType(Type.l)
CheckConnected()
CallCFunction(QMLib, "QMConnectionType", Type)
EndProcedure
;===== QMConnectLocal
Procedure.l QMConnectLocal(Account.s)
OpenQMClientLibrary()
If Connected
QMDisconnect()
EndIf
Connected = CallCFunction(QMLib, "QMConnectLocalW", @Account)
ProcedureReturn Connected
EndProcedure
;===== QMConnectPool
Procedure.l QMConnectPool(Host.s, Port.l, User.s, Password.s, Account.s, PoolName.s)
OpenQMClientLibrary()
If Connected
QMDisconnect()
EndIf
Connected = CallCFunction(QMLib, "QMConnectPoolW", @Host, Port, @User, @Password, @Account, @PoolName)
ProcedureReturn Connected
EndProcedure
;===== QMConnected
Procedure.l QMConnected()
OpenQMClientLibrary()
ProcedureReturn CallCFunction(QMLib, "QMConnected")
EndProcedure
;===== QMDcount
Procedure.l QMDcount(String.s, Delim.s)
OpenQMClientLibrary()
ProcedureReturn CallCFunction(QMLib, "QMDcountW", @String, @Delim)
EndProcedure
;===== QMDebug
Procedure QMDebug(Mode.l)
OpenQMClientLibrary()
CallCFunction(QMLib, "QMDebug", Mode)
EndProcedure
;===== QMDecrypt
Procedure.s QMDecrypt(EncryptedData.s, Keystring.s)
OpenQMClientLibrary()
*String = CallCFunction(QMLib, "QMDecrypt", @EncryptedData, @Keystring)
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMDel
Procedure.s QMDel(Src.s, Fno.l, Vno.l, SvNo.l)
OpenQMClientLibrary()
*String = CallCFunction(QMLib, "QMDelW", @Src, Fno, Vno, SvNo)
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMDelete
Procedure QMDelete(Fileno.l, Id.s)
CheckConnected()
CallCFunction(QMLib, "QMDeleteW", Fileno, @Id)
EndProcedure
;===== QMDeleteu
Procedure QMDeleteu(Fileno.l, Id.s)
CheckConnected()
CallCFunction(QMLib, "QMDeleteuW", Fileno, @Id)
EndProcedure
;===== QMDisconnect
Procedure QMDisconnect()
If Connected
CallCFunction(QMLib, "QMDisconnect")
Connected = 0
EndIf
EndProcedure
;===== QMDisconnectAll
Procedure QMDisconnectAll()
If Connected
CallCFunction(QMLib, "QMDisconnectAll")
Connected = 0
EndIf
EndProcedure
;===== QMEncrypt
Procedure.s QMEncrypt(DecryptedData.s, Keystring.s)
OpenQMClientLibrary()
*String = CallCFunction(QMLib, "QMEncrypt", @DecryptedData, @Keystring)
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMEndCommand
Procedure QMEndCommand()
CheckConnected()
CallCFunction(QMLib, "QMEndCommand")
EndProcedure
;===== QMError
Procedure.s QMError()
OpenQMClientLibrary()
*String = CallCFunction(QMLib, "QMErrorW")
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMEvalConv
Procedure.s QMEvalConv(Fileno.l, Name.s, DataStr.s, Id.s)
CheckConnected()
*String = CallCFunction(QMLib, "QMEvalConvW", Fileno, @Name, @DataStr, @Id)
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMEvaluate
Procedure.s QMEvaluate(Fileno.l, Name.s, DataStr.s, Id.s)
CheckConnected()
*String = CallCFunction(QMLib, "QMEvaluateW", Fileno, @Name, @DataStr, @Id)
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMExecute
Procedure.s QMExecute(Cmd.s, *Err)
CheckConnected()
*String = CallCFunction(QMLib, "QMExecuteW", @Cmd, *Err)
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMExtract
Procedure.s QMExtract(Src.s, Fno.l, Vno.l, SvNo.l)
OpenQMClientLibrary()
*String = CallCFunction(QMLib, "QMExtractW", @Src, Fno, Vno, SvNo)
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMField
Procedure.s QMField(Src.s, Delim.s, Start.l, Occ.l)
OpenQMClientLibrary()
*String = CallCFunction(QMLib, "QMFieldW", @Src, @Delim, Start, Occ)
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMGetArg
Procedure.s QMGetArg(n.w)
CheckConnected()
*String = CallCFunction(QMLib, "QMGetArgW", n)
If *String
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMGetSession
Procedure.l QMGetSession()
OpenQMClientLibrary()
ProcedureReturn CallCFunction(QMLib, "QMGetSession")
EndProcedure
;===== QMGetVar
Procedure.s QMGetVar(Name.s)
CheckConnected()
*String = CallCFunction(QMLib, "QMGetVarW", @Name)
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMIConv
Procedure.s QMIConv(DataString.s, CodeString.s)
OpenQMClientLibrary()
*String = CallCFunction(QMLib, "QMIConvW", @DataString, @CodeString)
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMIConvs
Procedure.s QMIConvs(DataString.s, CodeString.s)
OpenQMClientLibrary()
*String = CallCFunction(QMLib, "QMIConvsW", @DataString, @CodeString)
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMIndices
Procedure.s QMIndices(Fno.l, Name.s)
OpenQMClientLibrary()
*String = CallCFunction(QMLib, "QMIndicesW", Fno, @Name)
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMIns
Procedure.s QMIns(Src.s, Fno.l, Vno.l, SvNo.l, New.s)
OpenQMClientLibrary()
*String = CallCFunction(QMLib, "QMInsW", @Src, Fno, Vno, SvNo, @New)
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMLocate
Procedure.s QMLocate(Item.s, Dyn.s, Fno.l, Vno.l, SvNo.l, *Pos, Order.s)
OpenQMClientLibrary()
*String = CallCFunction(QMLib, "QMLocateW", @Item, @Dyn, Fno, Vno, SvNo, *Pos, @Order)
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMLogto
Procedure.l QMLogto(Account.s)
OpenQMClientLibrary()
ProcedureReturn CallCFunction(QMLib, "QMLogtoW", @Account)
EndProcedure
;===== QMMatch
Procedure.l QMMatch(String.s, Template.s)
OpenQMClientLibrary()
ProcedureReturn CallCFunction(QMLib, "QMMatchW", @String, @Template)
EndProcedure
;===== QMMatchfield
Procedure.s QMMatchfield(String.s, Template.s, Component.l)
OpenQMClientLibrary()
*String = CallCFunction(QMLib, "QMMatchfieldW", @String, @Template, Component)
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMNextPartial
Procedure.s QMNextPartial(Listno.l)
CheckConnected()
*String = CallCFunction(QMLib, "QMNextPartialW", Listno)
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMOConvs
Procedure.s QMOConvs(DataString.s, CodeString.s)
OpenQMClientLibrary()
*String = CallCFunction(QMLib, "QMOConvsW", @DataString, @CodeString)
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMOConv
Procedure.s QMOConv(DataString.s, CodeString.s)
OpenQMClientLibrary()
*String = CallCFunction(QMLib, "QMOConvW", @DataString, @CodeString)
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMOpen
Procedure.l QMOpen(Filename.s)
CheckConnected()
ProcedureReturn CallCFunction(QMLib, "QMOpenW", @Filename)
EndProcedure
;===== QMPoolIdle
Procedure QMPoolIdle()
If Connected
CallCFunction(QMLib, "QMPoolIdle")
Connected = 0
EndIf
EndProcedure
;===== QMRead
Procedure.s QMRead(Fileno.l, Id.s, *Err)
CheckConnected()
*String = CallCFunction(QMLib, "QMReadW", Fileno, @Id, *Err)
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMReadl
Procedure.s QMReadl(Fileno.l, Id.s, Wait.l, *Err)
CheckConnected()
*String = CallCFunction(QMLib, "QMReadlW", Fileno, @Id, Wait, *Err)
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMReadList
Procedure.s QMReadList(Listno.l)
CheckConnected()
*String = CallCFunction(QMLib, "QMReadListW", Listno)
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMReadNext
Procedure.s QMReadNext(Listno.l)
CheckConnected()
*String = CallCFunction(QMLib, "QMReadNextW", Listno)
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMReadu
Procedure.s QMReadu(Fileno.l, Id.s, Wait.l, *Err)
CheckConnected()
*String = CallCFunction(QMLib, "QMReaduW", Fileno, @Id, Wait, *Err)
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMRecordlock
Procedure QMRecordlock(Fileno.l, Id.s, Update.l, Wait.l)
CheckConnected()
CallCFunction(QMLib, "QMRecordlockW", Fileno, @Id, Update, Wait)
EndProcedure
; ;===== QMRecordlocked
Procedure.l QMRecordlocked(Fileno.l, Id.s)
CheckConnected()
ProcedureReturn CallCFunction(QMLib, "QMRecordlockedW", Fileno, @Id)
EndProcedure
;===== QMRelease
Procedure QMRelease(Fileno.l, Id.s)
CheckConnected()
CallCFunction(QMLib, "QMReleaseW", Fileno, @Id)
EndProcedure
;===== QMReplace
Procedure.s QMReplace(Src.s, Fno.l, Vno.l, SvNo.l, New.s)
OpenQMClientLibrary()
*String = CallCFunction(QMLib, "QMReplaceW", @Src, Fno, Vno, SvNo, @New)
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMRespond
Procedure.s QMRespond(Response.s, *Err)
CheckConnected()
*String = CallCFunction(QMLib, "QMRespondW", @Response, *Err)
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMRevision
Procedure.s QMRevision()
OpenQMClientLibrary()
*String = CallCFunction(QMLib, "QMRevisionW")
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMSelect
Procedure QMSelect(Fileno.l, Listno.l)
CheckConnected()
CallCFunction(QMLib, "QMSelect", Fileno, Listno)
EndProcedure
;===== QMSelectIndex
Procedure QMSelectIndex(Fileno.l, IndexName.s, IndexValue.s, Listno.l)
CheckConnected()
CallCFunction(QMLib, "QMSelectIndexW", Fileno, @IndexName, @IndexValue, Listno)
EndProcedure
;===== QMSelectLeft
Procedure.s QMSelectLeft(Fileno.l, IndexName.s, Listno.l)
CheckConnected()
*String = CallCFunction(QMLib, "QMSelectLeftW", Fileno, @IndexName, Listno)
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMSelectPartial
Procedure.s QMSelectPartial(Fileno.l, Listno.l)
CheckConnected()
*String = CallCFunction(QMLib, "QMSelectPartialW", Fileno, Listno)
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMSelectRight
Procedure.s QMSelectRight(Fileno.l, IndexName.s, Listno.l)
CheckConnected()
*String = CallCFunction(QMLib, "QMSelectRightW", Fileno, @IndexName, Listno)
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMSetLeft
Procedure QMSetLeft(Fileno.l, IndexName.s)
CheckConnected()
CallCFunction(QMLib, "QMSetLeftW", Fileno, @IndexName)
EndProcedure
;===== QMSetNamespace
Procedure QMSetNamespace(Name.s)
CheckConnected()
CallCFunction(QMLib, "QMSetNamespaceW", @Name)
EndProcedure
;===== QMSetRight
Procedure QMSetRight(Fileno.l, IndexName.s)
CheckConnected()
CallCFunction(QMLib, "QMSetRightW", Fileno, @IndexName)
EndProcedure
;===== QMSetSession
Procedure.l QMSetSession(Idx.l)
OpenQMClientLibrary()
ProcedureReturn CallCFunction(QMLib, "QMSetSession", Idx)
EndProcedure
;===== QMStatus
Procedure.l QMStatus()
OpenQMClientLibrary()
ProcedureReturn CallCFunction(QMLib, "QMStatus")
EndProcedure
;===== QMTrapCallAbort
Procedure QMTrapCallAbort(Mode.i)
OpenQMClientLibrary()
CallCFunction(QMLib, "QMTrapCallAbort", Mode)
ProcedureReturn Connected
EndProcedure
;===== QMTxn
Procedure QMTxn(Action.l)
CheckConnected()
CallCFunction(QMLib, "QMTxn", Action)
EndProcedure
;===== QMWrite
Procedure QMWrite(Fileno.l, Id.s, Rec.s)
CheckConnected()
CallCFunction(QMLib, "QMWriteW", Fileno, @Id, @Rec)
EndProcedure
;===== QMWriteu
Procedure QMWriteu(Fileno.l, Id.s, Rec.s)
CheckConnected()
CallCFunction(QMLib, "QMWriteuW", Fileno, @Id, @Rec)
EndProcedure
I want to use PureBasic with DBMS OpenQM (http://openqm.com/index.htm) is a MultiValue database, I used a similar (Pick / D3) to several years.
For over 15 years I do not do computer programs and I'm a little rusty.
I used a PureBasic, I'm starting to read the documentation.
They provide an API to connect to the database:
http://downloads.openqm.com/help/qmclient.htm
I'm doing the test on Windows 7, but the production environment should be with Fedora, my computer with Linux spoiled and I'm using Windows for initial tests. I opened the PB and reports: "In the Win32 API support," it will disrupt my tests?
They provide a library for Windows qmclilib.dll + qmclilib.lib, plus: qmclient.pb and qmclient.unicode.pb I still do not know to use. These programs have over 800 lines, so I will not be able to compile with the DEMO PB, which is restricted to programs with less than 800 lines.
I exclude comments and empty lines and is with 744 lines and do not want copilar in Demo PB, says it has more than 800 lines.
At the end of this text, the pasted qmclient.unicode.pb, will it work with SpiderBASIC? I will first test with PureBasic because it is more stable. Then I'll try to use SpiderBasic.
I think I have to use the QMConnect () to connect the SB with OpenQM
http://downloads.openqm.com/help/qmconnect.htm
There are examples with VB and C, how would I do this CONNECTION with PB?
Declare QMCall0(Subrname.s)
Declare QMCall1(Subrname.s, Arg1.s)
Declare QMCall2(Subrname.s, Arg1.s, Arg2.s)
Declare QMCall3(Subrname.s, Arg1.s, Arg2.s, Arg3.s)
Declare QMCall4(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s)
Declare QMCall5(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s)
Declare QMCall6(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s, Arg6.s)
Declare QMCall7(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s, Arg6.s, Arg7.s)
Declare QMCall8(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s, Arg6.s, Arg7.s, Arg8.s)
Declare QMCall9(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s, Arg6.s, Arg7.s, Arg8.s, Arg9.s)
Declare QMCall10(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s, Arg6.s, Arg7.s, Arg8.s, Arg9.s, Arg10.s)
Declare QMCall11(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s, Arg6.s, Arg7.s, Arg8.s, Arg9.s, Arg10.s, Arg11.s)
Declare QMCall12(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s, Arg6.s, Arg7.s, Arg8.s, Arg9.s, Arg10.s, Arg11.s, Arg12.s)
Declare QMCall13(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s, Arg6.s, Arg7.s, Arg8.s, Arg9.s, Arg10.s, Arg11.s, Arg12.s, Arg13.s)
Declare QMCall14(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s, Arg6.s, Arg7.s, Arg8.s, Arg9.s, Arg10.s, Arg11.s, Arg12.s, Arg13.s, Arg14.s)
Declare QMCall15(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s, Arg6.s, Arg7.s, Arg8.s, Arg9.s, Arg10.s, Arg11.s, Arg12.s, Arg13.s, Arg14.s, Arg15.s)
Declare QMCall16(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s, Arg6.s, Arg7.s, Arg8.s, Arg9.s, Arg10.s, Arg11.s, Arg12.s, Arg13.s, Arg14.s, Arg15.s, Arg16.s)
Declare QMCall17(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s, Arg6.s, Arg7.s, Arg8.s, Arg9.s, Arg10.s, Arg11.s, Arg12.s, Arg13.s, Arg14.s, Arg15.s, Arg16.s, Arg17.s)
Declare QMCall18(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s, Arg6.s, Arg7.s, Arg8.s, Arg9.s, Arg10.s, Arg11.s, Arg12.s, Arg13.s, Arg14.s, Arg15.s, Arg16.s, Arg17.s, Arg18.s)
Declare QMCall19(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s, Arg6.s, Arg7.s, Arg8.s, Arg9.s, Arg10.s, Arg11.s, Arg12.s, Arg13.s, Arg14.s, Arg15.s, Arg16.s, Arg17.s, Arg18.s, Arg19.s)
Declare QMCall20(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s, Arg6.s, Arg7.s, Arg8.s, Arg9.s, Arg10.s, Arg11.s, Arg12.s, Arg13.s, Arg14.s, Arg15.s, Arg16.s, Arg17.s, Arg18.s, Arg19.s, Arg20.s)
Declare.s QMChange(Src.s, Old.s, New.s, Occ.l, Start.l)
Declare QMClearFile(Fileno.l)
Declare QMClearSelect(ListNo.l)
Declare QMClose(Fileno.l)
Declare.l QMConnect(Host.s, Port.l, User.s, Password.s, Account.s)
Declare.l QMConnected()
Declare.l QMConnectLocal(Account.s)
Declare.l QMConnectPool(Host.s, Port.l, User.s, Password.s, Account.s, PoolName.s)
Declare.l QMDcount(String.s, Delim.s)
Declare QMDebug(Type.l)
Declare.s QMDecrypt(EncryptedData.s, Keystring.s)
Declare.s QMDel(Src.s, Fno.l, Vno.l, SvNo.l)
Declare QMDelete(Fileno.l, Id.s)
Declare QMDeleteu(Fileno.l, Id.s)
Declare QMDisconnect()
Declare QMDisconnectAll()
Declare.s QMEncrypt(DecryptedData.s, Keystring.s)
Declare QMEndCommand()
Declare.s QMError()
Declare.s QMEvalConv(Fileno.l, Name.s, DataStr.s, Id.s)
Declare.s QMEvaluate(Fileno.l, Name.s, DataStr.s, Id.s)
Declare.s QMExecute(Cmd.s, *Err)
Declare.s QMExtract(Src.s, Fno.l, Vno.l, SvNo.l)
Declare.s QMField(Src.s, Delim.s, Start.l, Occ.l)
Declare.s QMGetArg(n.w)
Declare.l QMGetSession()
Declare.s QMGetVar(Name.s)
Declare.s QMIConv(DataString.s, CodeString.s)
Declare.s QMIConvs(DataString.s, CodeString.s)
Declare.s QMIndices(Fno.l, Name.s)
Declare.s QMIns(Src.s, Fno.l, Vno.l, SvNo.l, New.s)
Declare.s QMLocate(Item.s, Dyn.s, Fno.l, Vno.l, SvNo.l, *Pos, Order.s)
Declare.l QMLogto(Account.s)
Declare QMMarkMapping(Fileno.l, State.l)
Declare.l QMMatch(String.s, Template.s)
Declare.s QMMatchfield(String.s, Template.s, Component.l)
Declare.s QMNextPartial(Listno.l)
Declare.s QMOConv(DataString.s, CodeString.s)
Declare.s QMOConvs(DataString.s, CodeString.s)
Declare.l QMOpen(Filename.s)
Declare QMPoolIdle()
Declare.s QMRead(Fileno.l, Id.s, *Err)
Declare.s QMReadl(Fileno.l, Id.s, Wait.l, *Err)
Declare.s QMReadList(Listno.l)
Declare.s QMReadNext(Listno.l)
Declare.s QMReadu(Fileno.l, Id.s, Wait.l, *Err)
Declare QMRecordlock(Fileno.l, Id.s, Update.l, Wait.l)
Declare.l QMRecordlocked(Fileno.l, Id.s)
Declare QMRelease(Fileno.l, Id.s)
Declare.s QMReplace(Src.s, Fno.l, Vno.l, SvNo.l, New.s)
Declare.s QMRespond(Response.s, *Err)
Declare.s QMRevision()
Declare QMSelect(Fileno.l, Listno.l)
Declare QMSelectIndex(Fileno.l, IndexName.s, IndexValue.s, Listno.l)
Declare.s QMSelectLeft(Fileno.l, IndexName.s, Listno.l)
Declare.s QMSelectPartial(Fileno.l, Listno.l)
Declare.s QMSelectRight(Fileno.l, IndexName.s, Listno.l)
Declare QMSetLeft(Fileno.l, IndexName.s)
Declare QMSetNamespace(Name.s)
Declare QMSetRight(Fileno.l, IndexName.s)
Declare.l QMSetSession(Idx.l)
Declare.l QMStatus()
Declare QMTrapCallAbort(Mode.i)
Declare QMTxn(Action.l)
Declare QMWrite(Fileno.l, Id.s, Rec.s)
Declare QMWriteu(Fileno.l, Id.s, Rec.s)
Global QMLib
Global Connected
Procedure OpenQMClientLibrary()
If QMLib = 0
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Linux
LibPath$ = "/usr/qmsys/bin/qmclilib.so"
CompilerCase #PB_OS_Windows
LibPath$ = "c:\qmsys\bin\qmclilib.dll"
CompilerEndSelect
QMLib = OpenLibrary(#PB_Any, LibPath$)
If QMLib = 0
PrintN("Cannot open " + LibPath$)
End
EndIf
EndIf
EndProcedure
Procedure CheckConnected()
If Connected = 0
PrintN("QMClient server function attempted when not connected")
End
EndIf
EndProcedure
Procedure QMCall0(Subrname.s)
CheckConnected()
CallCFunction(QMLib, "QMCallxW", @Subrname, 0)
EndProcedure
Procedure QMCall1(Subrname.s, Arg1.s)
CheckConnected()
CallCFunction(QMLib, "QMCallxW", @Subrname, 1, *Arg1)
EndProcedure
Procedure QMCall2(Subrname.s, Arg1.s, Arg2.s)
CheckConnected()
CallCFunction(QMLib, "QMCallxW", @Subrname, 2, *Arg1, *Arg2)
EndProcedure
Procedure QMCall3(Subrname.s, Arg1.s, Arg2.s, Arg3.s)
CheckConnected()
CallCFunction(QMLib, "QMCallxW", @Subrname, 3, *Arg1, *Arg2, *Arg3)
EndProcedure
Procedure QMCall4(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s)
CheckConnected()
CallCFunction(QMLib, "QMCallxW", @Subrname, 4, *Arg1, *Arg2, *Arg3, *Arg4)
EndProcedure
Procedure QMCall5(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s)
CheckConnected()
CallCFunction(QMLib, "QMCallxW", @Subrname, 5, *Arg1, *Arg2, *Arg3, *Arg4, *Arg5)
EndProcedure
Procedure QMCall6(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s, Arg6.s)
CheckConnected()
CallCFunction(QMLib, "QMCallxW", @Subrname, 6, *Arg1, *Arg2, *Arg3, *Arg4, *Arg5, *Arg6)
EndProcedure
Procedure QMCall7(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s, Arg6.s, Arg7.s)
CheckConnected()
CallCFunction(QMLib, "QMCallxW", @Subrname, 7, *Arg1, *Arg2, *Arg3, *Arg4, *Arg5, *Arg6, *Arg7)
EndProcedure
Procedure QMCall8(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s, Arg6.s, Arg7.s, Arg8.s)
CheckConnected()
CallCFunction(QMLib, "QMCallxW", @Subrname, 8, *Arg1, *Arg2, *Arg3, *Arg4, *Arg5, *Arg6, *Arg7, *Arg8)
EndProcedure
Procedure QMCall9(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s, Arg6.s, Arg7.s, Arg8.s, Arg9.s)
CheckConnected()
CallCFunction(QMLib, "QMCallxW", @Subrname, 9, *Arg1, *Arg2, *Arg3, *Arg4, *Arg5, *Arg6, *Arg7, *Arg8, *Arg9)
EndProcedure
Procedure QMCall10(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s, Arg6.s, Arg7.s, Arg8.s, Arg9.s, Arg10.s)
CheckConnected()
CallCFunction(QMLib, "QMCallxW", @Subrname, 10, *Arg1, *Arg2, *Arg3, *Arg4, *Arg5, *Arg6, *Arg7, *Arg8, *Arg9, *Arg10)
EndProcedure
Procedure QMCall11(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s, Arg6.s, Arg7.s, Arg8.s, Arg9.s, Arg10.s, Arg11.s)
CheckConnected()
CallCFunction(QMLib, "QMCallxW", @Subrname, 11, *Arg1, *Arg2, *Arg3, *Arg4, *Arg5, *Arg6, *Arg7, *Arg8, *Arg9, *Arg10, *Arg11)
EndProcedure
Procedure QMCall12(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s, Arg6.s, Arg7.s, Arg8.s, Arg9.s, Arg10.s, Arg11.s, Arg12.s)
CheckConnected()
CallCFunction(QMLib, "QMCallxW", @Subrname, 12, *Arg1, *Arg2, *Arg3, *Arg4, *Arg5, *Arg6, *Arg7, *Arg8, *Arg9, *Arg10, *Arg11, *Arg12)
EndProcedure
Procedure QMCall13(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s, Arg6.s, Arg7.s, Arg8.s, Arg9.s, Arg10.s, Arg11.s, Arg12.s, Arg13.s)
CheckConnected()
CallCFunction(QMLib, "QMCallxW", @Subrname, 13, *Arg1, *Arg2, *Arg3, *Arg4, *Arg5, *Arg6, *Arg7, *Arg8, *Arg9, *Arg10, *Arg11, *Arg12, *Arg13)
EndProcedure
Procedure QMCall14(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s, Arg6.s, Arg7.s, Arg8.s, Arg9.s, Arg10.s, Arg11.s, Arg12.s, Arg13.s, Arg14.s)
CheckConnected()
CallCFunction(QMLib, "QMCallxW", @Subrname, 14, *Arg1, *Arg2, *Arg3, *Arg4, *Arg5, *Arg6, *Arg7, *Arg8, *Arg9, *Arg10, *Arg11, *Arg12, *Arg13, *Arg14)
EndProcedure
Procedure QMCall15(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s, Arg6.s, Arg7.s, Arg8.s, Arg9.s, Arg10.s, Arg11.s, Arg12.s, Arg13.s, Arg14.s, Arg15.s)
CheckConnected()
CallCFunction(QMLib, "QMCallxW", @Subrname, 15, *Arg1, *Arg2, *Arg3, *Arg4, *Arg5, *Arg6, *Arg7, *Arg8, *Arg9, *Arg10, *Arg11, *Arg12, *Arg13, *Arg14, *Arg15)
EndProcedure
Procedure QMCall16(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s, Arg6.s, Arg7.s, Arg8.s, Arg9.s, Arg10.s, Arg11.s, Arg12.s, Arg13.s, Arg14.s, Arg15.s, Arg16.s)
CheckConnected()
CallCFunction(QMLib, "QMCallxW", @Subrname, 16, *Arg1, *Arg2, *Arg3, *Arg4, *Arg5, *Arg6, *Arg7, *Arg8, *Arg9, *Arg10, *Arg11, *Arg12, *Arg13, *Arg14, *Arg15, *Arg16)
EndProcedure
Procedure QMCall17(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s, Arg6.s, Arg7.s, Arg8.s, Arg9.s, Arg10.s, Arg11.s, Arg12.s, Arg13.s, Arg14.s, Arg15.s, Arg16.s, Arg17.s)
CheckConnected()
CallCFunction(QMLib, "QMCallxW", @Subrname, 17, *Arg1, *Arg2, *Arg3, *Arg4, *Arg5, *Arg6, *Arg7, *Arg8, *Arg9, *Arg10, *Arg11, *Arg12, *Arg13, *Arg14, *Arg15, *Arg16, *Arg17)
EndProcedure
Procedure QMCall18(Subrname.s, Arg1.s, Arg2.s, Arg3.s, Arg4.s, Arg5.s, Arg6.s, Arg7.s, Arg8.s, Arg9.s, Arg10.s, Arg11.s, Arg12.s, Arg13.s, Arg14.s, Arg15.s, Arg16.s, Arg17.s, Arg18.s)
CheckConnected()
CallCFunction(QMLib, "QMCallxW", @Subrname, 18, *Arg1, *Arg2, *Arg3, *Arg4, *Arg5, *Arg6, *Arg7, *Arg8, *Arg9, *Arg10, *Arg11, *Arg12, *Arg13, *Arg14, *Arg15, *Arg16, *Arg17, *Arg18)
EndProcedure
;===== QMChange
Procedure.s QMChange(Src.s, Old.s, New.s, Occ.l, Start.l)
OpenQMClientLibrary()
*String = CallCFunction(QMLib, "QMChangeW", @Src, @Old, @New, Occ, Start)
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMChecksum
Procedure.l QMChecksum(Src.s)
OpenQMClientLibrary()
Cs = CallCFunction(QMLib, "QMChecksumW", @Src)
ProcedureReturn Cs
EndProcedure
;===== QMClearFile
Procedure QMClearFile(Fileno.l)
CheckConnected()
CallCFunction(QMLib, "QMClearFile", Fileno)
EndProcedure
;===== QMClearSelect
Procedure QMClearSelect(ListNo.l)
CheckConnected()
CallCFunction(QMLib, "QMClearSelect", ListNo)
EndProcedure
;===== QMClose
Procedure QMClose(Fileno.l)
CheckConnected()
CallCFunction(QMLib, "QMClose", Fileno)
EndProcedure
;===== QMConnect
Procedure.l QMConnect(Host.s, Port.l, User.s, Password.s, Account.s)
OpenQMClientLibrary()
If Connected
QMDisconnect()
EndIf
Connected = CallCFunction(QMLib, "QMConnectW", @Host, Port, @User, @Password, @Account)
ProcedureReturn Connected
EndProcedure
;===== QMConnectionType
Procedure QMConnectionType(Type.l)
CheckConnected()
CallCFunction(QMLib, "QMConnectionType", Type)
EndProcedure
;===== QMConnectLocal
Procedure.l QMConnectLocal(Account.s)
OpenQMClientLibrary()
If Connected
QMDisconnect()
EndIf
Connected = CallCFunction(QMLib, "QMConnectLocalW", @Account)
ProcedureReturn Connected
EndProcedure
;===== QMConnectPool
Procedure.l QMConnectPool(Host.s, Port.l, User.s, Password.s, Account.s, PoolName.s)
OpenQMClientLibrary()
If Connected
QMDisconnect()
EndIf
Connected = CallCFunction(QMLib, "QMConnectPoolW", @Host, Port, @User, @Password, @Account, @PoolName)
ProcedureReturn Connected
EndProcedure
;===== QMConnected
Procedure.l QMConnected()
OpenQMClientLibrary()
ProcedureReturn CallCFunction(QMLib, "QMConnected")
EndProcedure
;===== QMDcount
Procedure.l QMDcount(String.s, Delim.s)
OpenQMClientLibrary()
ProcedureReturn CallCFunction(QMLib, "QMDcountW", @String, @Delim)
EndProcedure
;===== QMDebug
Procedure QMDebug(Mode.l)
OpenQMClientLibrary()
CallCFunction(QMLib, "QMDebug", Mode)
EndProcedure
;===== QMDecrypt
Procedure.s QMDecrypt(EncryptedData.s, Keystring.s)
OpenQMClientLibrary()
*String = CallCFunction(QMLib, "QMDecrypt", @EncryptedData, @Keystring)
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMDel
Procedure.s QMDel(Src.s, Fno.l, Vno.l, SvNo.l)
OpenQMClientLibrary()
*String = CallCFunction(QMLib, "QMDelW", @Src, Fno, Vno, SvNo)
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMDelete
Procedure QMDelete(Fileno.l, Id.s)
CheckConnected()
CallCFunction(QMLib, "QMDeleteW", Fileno, @Id)
EndProcedure
;===== QMDeleteu
Procedure QMDeleteu(Fileno.l, Id.s)
CheckConnected()
CallCFunction(QMLib, "QMDeleteuW", Fileno, @Id)
EndProcedure
;===== QMDisconnect
Procedure QMDisconnect()
If Connected
CallCFunction(QMLib, "QMDisconnect")
Connected = 0
EndIf
EndProcedure
;===== QMDisconnectAll
Procedure QMDisconnectAll()
If Connected
CallCFunction(QMLib, "QMDisconnectAll")
Connected = 0
EndIf
EndProcedure
;===== QMEncrypt
Procedure.s QMEncrypt(DecryptedData.s, Keystring.s)
OpenQMClientLibrary()
*String = CallCFunction(QMLib, "QMEncrypt", @DecryptedData, @Keystring)
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMEndCommand
Procedure QMEndCommand()
CheckConnected()
CallCFunction(QMLib, "QMEndCommand")
EndProcedure
;===== QMError
Procedure.s QMError()
OpenQMClientLibrary()
*String = CallCFunction(QMLib, "QMErrorW")
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMEvalConv
Procedure.s QMEvalConv(Fileno.l, Name.s, DataStr.s, Id.s)
CheckConnected()
*String = CallCFunction(QMLib, "QMEvalConvW", Fileno, @Name, @DataStr, @Id)
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMEvaluate
Procedure.s QMEvaluate(Fileno.l, Name.s, DataStr.s, Id.s)
CheckConnected()
*String = CallCFunction(QMLib, "QMEvaluateW", Fileno, @Name, @DataStr, @Id)
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMExecute
Procedure.s QMExecute(Cmd.s, *Err)
CheckConnected()
*String = CallCFunction(QMLib, "QMExecuteW", @Cmd, *Err)
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMExtract
Procedure.s QMExtract(Src.s, Fno.l, Vno.l, SvNo.l)
OpenQMClientLibrary()
*String = CallCFunction(QMLib, "QMExtractW", @Src, Fno, Vno, SvNo)
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMField
Procedure.s QMField(Src.s, Delim.s, Start.l, Occ.l)
OpenQMClientLibrary()
*String = CallCFunction(QMLib, "QMFieldW", @Src, @Delim, Start, Occ)
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMGetArg
Procedure.s QMGetArg(n.w)
CheckConnected()
*String = CallCFunction(QMLib, "QMGetArgW", n)
If *String
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMGetSession
Procedure.l QMGetSession()
OpenQMClientLibrary()
ProcedureReturn CallCFunction(QMLib, "QMGetSession")
EndProcedure
;===== QMGetVar
Procedure.s QMGetVar(Name.s)
CheckConnected()
*String = CallCFunction(QMLib, "QMGetVarW", @Name)
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMIConv
Procedure.s QMIConv(DataString.s, CodeString.s)
OpenQMClientLibrary()
*String = CallCFunction(QMLib, "QMIConvW", @DataString, @CodeString)
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMIConvs
Procedure.s QMIConvs(DataString.s, CodeString.s)
OpenQMClientLibrary()
*String = CallCFunction(QMLib, "QMIConvsW", @DataString, @CodeString)
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMIndices
Procedure.s QMIndices(Fno.l, Name.s)
OpenQMClientLibrary()
*String = CallCFunction(QMLib, "QMIndicesW", Fno, @Name)
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMIns
Procedure.s QMIns(Src.s, Fno.l, Vno.l, SvNo.l, New.s)
OpenQMClientLibrary()
*String = CallCFunction(QMLib, "QMInsW", @Src, Fno, Vno, SvNo, @New)
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMLocate
Procedure.s QMLocate(Item.s, Dyn.s, Fno.l, Vno.l, SvNo.l, *Pos, Order.s)
OpenQMClientLibrary()
*String = CallCFunction(QMLib, "QMLocateW", @Item, @Dyn, Fno, Vno, SvNo, *Pos, @Order)
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMLogto
Procedure.l QMLogto(Account.s)
OpenQMClientLibrary()
ProcedureReturn CallCFunction(QMLib, "QMLogtoW", @Account)
EndProcedure
;===== QMMatch
Procedure.l QMMatch(String.s, Template.s)
OpenQMClientLibrary()
ProcedureReturn CallCFunction(QMLib, "QMMatchW", @String, @Template)
EndProcedure
;===== QMMatchfield
Procedure.s QMMatchfield(String.s, Template.s, Component.l)
OpenQMClientLibrary()
*String = CallCFunction(QMLib, "QMMatchfieldW", @String, @Template, Component)
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMNextPartial
Procedure.s QMNextPartial(Listno.l)
CheckConnected()
*String = CallCFunction(QMLib, "QMNextPartialW", Listno)
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMOConvs
Procedure.s QMOConvs(DataString.s, CodeString.s)
OpenQMClientLibrary()
*String = CallCFunction(QMLib, "QMOConvsW", @DataString, @CodeString)
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMOConv
Procedure.s QMOConv(DataString.s, CodeString.s)
OpenQMClientLibrary()
*String = CallCFunction(QMLib, "QMOConvW", @DataString, @CodeString)
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMOpen
Procedure.l QMOpen(Filename.s)
CheckConnected()
ProcedureReturn CallCFunction(QMLib, "QMOpenW", @Filename)
EndProcedure
;===== QMPoolIdle
Procedure QMPoolIdle()
If Connected
CallCFunction(QMLib, "QMPoolIdle")
Connected = 0
EndIf
EndProcedure
;===== QMRead
Procedure.s QMRead(Fileno.l, Id.s, *Err)
CheckConnected()
*String = CallCFunction(QMLib, "QMReadW", Fileno, @Id, *Err)
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMReadl
Procedure.s QMReadl(Fileno.l, Id.s, Wait.l, *Err)
CheckConnected()
*String = CallCFunction(QMLib, "QMReadlW", Fileno, @Id, Wait, *Err)
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMReadList
Procedure.s QMReadList(Listno.l)
CheckConnected()
*String = CallCFunction(QMLib, "QMReadListW", Listno)
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMReadNext
Procedure.s QMReadNext(Listno.l)
CheckConnected()
*String = CallCFunction(QMLib, "QMReadNextW", Listno)
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMReadu
Procedure.s QMReadu(Fileno.l, Id.s, Wait.l, *Err)
CheckConnected()
*String = CallCFunction(QMLib, "QMReaduW", Fileno, @Id, Wait, *Err)
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMRecordlock
Procedure QMRecordlock(Fileno.l, Id.s, Update.l, Wait.l)
CheckConnected()
CallCFunction(QMLib, "QMRecordlockW", Fileno, @Id, Update, Wait)
EndProcedure
; ;===== QMRecordlocked
Procedure.l QMRecordlocked(Fileno.l, Id.s)
CheckConnected()
ProcedureReturn CallCFunction(QMLib, "QMRecordlockedW", Fileno, @Id)
EndProcedure
;===== QMRelease
Procedure QMRelease(Fileno.l, Id.s)
CheckConnected()
CallCFunction(QMLib, "QMReleaseW", Fileno, @Id)
EndProcedure
;===== QMReplace
Procedure.s QMReplace(Src.s, Fno.l, Vno.l, SvNo.l, New.s)
OpenQMClientLibrary()
*String = CallCFunction(QMLib, "QMReplaceW", @Src, Fno, Vno, SvNo, @New)
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMRespond
Procedure.s QMRespond(Response.s, *Err)
CheckConnected()
*String = CallCFunction(QMLib, "QMRespondW", @Response, *Err)
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMRevision
Procedure.s QMRevision()
OpenQMClientLibrary()
*String = CallCFunction(QMLib, "QMRevisionW")
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMSelect
Procedure QMSelect(Fileno.l, Listno.l)
CheckConnected()
CallCFunction(QMLib, "QMSelect", Fileno, Listno)
EndProcedure
;===== QMSelectIndex
Procedure QMSelectIndex(Fileno.l, IndexName.s, IndexValue.s, Listno.l)
CheckConnected()
CallCFunction(QMLib, "QMSelectIndexW", Fileno, @IndexName, @IndexValue, Listno)
EndProcedure
;===== QMSelectLeft
Procedure.s QMSelectLeft(Fileno.l, IndexName.s, Listno.l)
CheckConnected()
*String = CallCFunction(QMLib, "QMSelectLeftW", Fileno, @IndexName, Listno)
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMSelectPartial
Procedure.s QMSelectPartial(Fileno.l, Listno.l)
CheckConnected()
*String = CallCFunction(QMLib, "QMSelectPartialW", Fileno, Listno)
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMSelectRight
Procedure.s QMSelectRight(Fileno.l, IndexName.s, Listno.l)
CheckConnected()
*String = CallCFunction(QMLib, "QMSelectRightW", Fileno, @IndexName, Listno)
If *string
String$ = PeekS(*String)
CallCFunction(QMLib, "QMFree", *String)
EndIf
ProcedureReturn String$
EndProcedure
;===== QMSetLeft
Procedure QMSetLeft(Fileno.l, IndexName.s)
CheckConnected()
CallCFunction(QMLib, "QMSetLeftW", Fileno, @IndexName)
EndProcedure
;===== QMSetNamespace
Procedure QMSetNamespace(Name.s)
CheckConnected()
CallCFunction(QMLib, "QMSetNamespaceW", @Name)
EndProcedure
;===== QMSetRight
Procedure QMSetRight(Fileno.l, IndexName.s)
CheckConnected()
CallCFunction(QMLib, "QMSetRightW", Fileno, @IndexName)
EndProcedure
;===== QMSetSession
Procedure.l QMSetSession(Idx.l)
OpenQMClientLibrary()
ProcedureReturn CallCFunction(QMLib, "QMSetSession", Idx)
EndProcedure
;===== QMStatus
Procedure.l QMStatus()
OpenQMClientLibrary()
ProcedureReturn CallCFunction(QMLib, "QMStatus")
EndProcedure
;===== QMTrapCallAbort
Procedure QMTrapCallAbort(Mode.i)
OpenQMClientLibrary()
CallCFunction(QMLib, "QMTrapCallAbort", Mode)
ProcedureReturn Connected
EndProcedure
;===== QMTxn
Procedure QMTxn(Action.l)
CheckConnected()
CallCFunction(QMLib, "QMTxn", Action)
EndProcedure
;===== QMWrite
Procedure QMWrite(Fileno.l, Id.s, Rec.s)
CheckConnected()
CallCFunction(QMLib, "QMWriteW", Fileno, @Id, @Rec)
EndProcedure
;===== QMWriteu
Procedure QMWriteu(Fileno.l, Id.s, Rec.s)
CheckConnected()
CallCFunction(QMLib, "QMWriteuW", Fileno, @Id, @Rec)
EndProcedure