Example:
PrivateSubCommand1() Dima_hEnvAsLong Dima_hDBCAsLong Dims_DistrictAsLong Dimu_DistrictAsLong<p>DimQueryAsString DimaTokenAsLong DimRetAsInteger<p>Dims_parm1(256)AsByte 逆风者 Dims_parm2AsInteger Dims_parm3(256)AsByte Dims_parm4AsInteger DimaDTaxAsSingle DimaNextOrderAsInteger DimbNextOrderAsInteger DimcbValue1AsLong DimcbValue2AsLong DimcbValue3AsLong DimcbValue4AsLong DimcbValue5AsLong DimiAsInteger ’Variablesthatholdthelengthoftheparameters cbValue1=SQL_NTS cbValue2=0 cbValue3=SQL_NTS cbValue4=0 cbValue5=0 ’ConnecttoanAS/400 Ret=SQLAllocEnv(a_hEnv)’AllocatestheSQLenvironment Ret=SQLAllocConnect(a_hEnv,a_hDBC)’Allocatesconnection Ret=SQLConnect(a_hDBC,"BANANA",SQL_NTS,"SPEED",SQL_NTS,"SPEED2",SQL_NTS) ’Createapreparedstatementtoselectdata Ret=SQLAllocStmt(a_hDBC,s_District) Query="SelectDTAX,DNXTORfromQUSER.DSTRCTwhere(DWID=?andDID=?)" Ret=SQLSetStmtOption(s_District,SQL_CONCURRENCY,SQL_CONCUR_READ_ONLY) Ret=SQLPrepare(s_District,Query,SQL_NTS)
’Bindtheparametersfortheselectquery Ret=SQLBindParameter(s_District,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,4,0,s_parm1(0),0,cbValue1) Ret=SQLBindParameter(s_District,2,SQL_PARAM_INPUT,SQL_C_SSHORT,SQL_INTEGER,3,0,s_parm2,0,cbValue2) Ret=SQLBindCol(s_District,1,SQL_C_FLOAT,aDTax,0,0&) Ret=SQLBindCol(s_District,2,SQL_C_SSHORT,aNextOrder,0,0&) ’Createapreparedstatementtoupdatedata Ret=SQLAllocStmt(a_hDBC,u_District) Query="UpdateDSTRCTsetDNXTOR=?where(DWID=?andDID=?)" Ret=SQLPrepare(u_District,Query,SQL_NTS) ’BindtheparametersfortheUpdatequery Ret=SQLBindParameter(u_District,1,SQL_PARAM_INPUT,SQL_C_SSHORT,SQL_INTEGER,0,0,bNextOrder,0,cbValue5) Ret=SQLBindParameter(u_District,2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,4,0,s_parm3(0),0,cbValue3) Ret=SQLBindParameter(u_District,3,SQL_PARAM_INPUT,SQL_C_SSHORT,SQL_INTEGER,3,0,s_parm4,0,cbValue4) ’YoushouldnotpasscharacterpointerstoDLL’ssoweconvertthemto ’bytearrays(actuallyfromUnicodecharaterstringstobytearrays) CallStringToBytes("0001",256,s_parm1())’Warehouse CallStringToBytes("0001",256,s_parm3())’Warehouse ’Thisloopwillincrementafieldintendifferentrows Fori=1To10 ’Settheparameters s_parm2=i’District s_parm4=i’District ’Executetheselectquery. Ret=SQLExecute(s_District) ’Fetchresults. Ret=SQLFetch(s_District) Ret=SQLFreeStmt(s_District,SQL_CLOSE) ’Dosomeprocessingofthisrow... ’Thenincrementthefield bNextOrder=aNextOrder 1 ’Executetheupdate Ret=SQLExecute(u_District) Ret=SQLFreeStmt(u_District,SQL_CLOSE) Next ’FreetheODBCresources Ret=SQLFreeStmt(s_District,SQL_DROP) Ret=SQLFreeStmt(u_District,SQL_DROP) Ret=SQLDisconnect(a_hDBC)’Disconnectinganddeallocating. Ret=SQLFreeConnect(a_hDBC) Ret=SQLFreeEnv(a_hEnv) EndSub
PrivateFunctionBytesToString(byte_array()AsByte)AsString ’convertbytearraytostring. DimDataAsString,StrLenAsString Data=StrConv(byte_array(),VBUnicode) StrLen=InStr(Data,Chr(0))-1 BytesToString=Left(Data,StrLen) EndFunction
PrivateSubStringToBytes(DataAsString,ByteLenAsInteger,return_buffer()AsByte) ’convertstringtobytearray. DimStrLenAsInteger,CountAsInteger ForCount=0ToLen(Data)-1 return_buffer(Count)=Asc(Mid(Data,Count 1,1)) NextCount ForCount=Len(Data)ToByteLen return_buffer(Count)=0 NextCount EndSub |