ConnectToMicrosoftAccess
From Pickwiki
To use this you will need to setup a datasource on the client under Control Panel. The name of datasource should be what you use in the SQLConnect statement for the access database.
$INCLUDE UNIVERSE.INCLUDE ODBC.H * *----------------------------------------------------------------------- * Preparing the SQL processes *----------------------------------------------------------------------- SQL.OK = TRUE ; * error flag for sql processes SQL.STATUS = [[ClearDiagnostics]]() * setup the ODBC connection to the TEST.mdb file SQL.STATUS = [[SQLAllocConnect]](@HENV,TEST.MDB.CONNECT) IF SQL.STATUS <> SQL.SUCCESS THEN MESSAGE = "Could not establish a connection to the Access workspace: " MESSAGE := "Failed to allocate a CONNECTION environment" GOSUB ERROR.PROCESS SQL.OK = FALSE END IF SQL.OK THEN GOSUB MDB.CONNECT END ; * endif sql.ok (TEST.MDB.CONNECT) * Setup the ODBC connection to the LOCAL UV account SQL.STATUS = [[SQLAllocConnect]](@HENV,TEST.UV.CONNECT) IF SQL.STATUS <> SQL.SUCCESS THEN MESSAGE = "Could not establish a connection to the Universe Database environment: " MESSAGE := "Failed to allocate a CONNECTION environment" GOSUB ERROR.PROCESS SQL.OK = FALSE END IF SQL.OK THEN SQL.STATUS = SQLConnect(TEST.UV.CONNECT,"localuv",'','') IF SQL.STATUS <> SQL.SUCCESS THEN MESSAGE = "Could not establish a connection to the Universe Database environment: " MESSAGE := "Failed to connect to data source" GOSUB ERROR.PROCESS SQL.OK = FALSE END END ; * endif sql.ok (TEST.UV.CONNECT) * setup customer table transfer sql statement environments SQL.STATUS = [[SQLAllocStmt]](TEST.UV.CONNECT,CUSTOMER.SEL.STMT) IF SQL.STATUS <> SQL.SUCCESS THEN MESSAGE = "Could not access the CUSTOMER file in Universe: " MESSAGE := "Failed to allocate a STATEMENT environment (select)" GOSUB ERROR.PROCESS SQL.OK = FALSE END SQL.STATUS = [[SQLAllocStmt]](TEST.MDB.CONNECT,CUSTOMER.INS.STMT) IF SQL.STATUS <> SQL.SUCCESS THEN MESSAGE = "Could not access the CUSTOMER file in Universe: " MESSAGE := "Failed to allocate a STATEMENT environment (insert)" GOSUB ERROR.PROCESS SQL.OK = FALSE END * SQL statement objects to access TEST.MDB parts Allocations table SQL.STATUS = [[SQLAllocStmt]](TEST.MDB.CONNECT,TEST.PARTS) IF SQL.STATUS <> SQL.SUCCESS THEN MESSAGE = "Could not access the TEST parts allocations table in TEST.mdb: " MESSAGE := "Failed to allocate a STATEMENT environment" GOSUB ERROR.PROCESS END * SQL statement objects to access TEST.MDB Order Allocations table SQL.STATUS = [[SQLAllocStmt]](TEST.MDB.CONNECT,TEST.ORDERS) IF SQL.STATUS <> SQL.SUCCESS THEN MESSAGE = "Could not access the TEST Orders Allocations table in TEST.mdb: " MESSAGE := "Failed to allocate a STATEMENT environment" GOSUB ERROR.PROCESS END IF NOT(SQL.OK) THEN CLOSE TESTF STOP END ; * endif not(sql.ok) ... *------------------------------------------------------------------- * End of SQL Preparation *------------------------------------------------------------------- LOOP SQL.STATUS = [[ClearDiagnostics]]() SQL.OK = TRUE GOSUB RESET.SQL.STATEMENTS GOSUB PREPARE.SQL.INSERT.COMMANDS IF NOT(SQL.OK) THEN EXIT SQL.STATUS = [[ClearDiagnostics]]() ' code removed UNTIL RET.VALUE<1> = "CANCEL" DO TEST.ID = PART.NO:"*":LOCATION * get the inventory balance and part description INV = RAISE(TRANS('INV',PART.NO,-1,'X')) LOCATE(LOCATION,INV,2;LOC.VMC) THEN INV.BAL = OCONV(INV<3,LOC.VMC>,'MR4') END ELSE INV.BAL = 0 END ; * endlocat(location,inv .... PART.DESC = TRANS('PARTS',PART.NO,1,'X') * calculate header totals ALLOC = OCONV(SUM(TEST<14>),'MR4') ON.ORDER = OCONV(SUM(TEST<4>), 'MR4') BACKORDER = ON.ORDER - ALLOC NUM.ORDER = 0 NUM.CUST = 0 * select the customer data & add to TEST.mdb database SQL.STATUS = SQLExecute(CUSTOMER.SEL.STMT) IF SQL.STATUS # SQL.SUCCESS THEN SQL.ERR.STATUS = SQLError(@HENV,TEST.UV.CONNECT,CUSTOMER.SEL.STMT,SQL.STATE,DB.ERROR,SQL.MSG) MESSAGE = "Could not execute the SQL Selection of TEST Customer data! " MESSAGE := "SQL.STATE=":SQL.STATE:": DB ERROR=":DB.ERROR:": MESSAGE=":SQL.MSG SQL.OK = FALSE GOSUB ERROR.PROCESS EXIT END ; * endif sql.status # sql.success .... LOOP SQL.STATUS = SQLFetch(CUSTOMER.SEL.STMT) UNTIL SQL.STATUS = SQL.NO.DATA.FOUND DO SQL.STATUS = SQLExecute(CUSTOMER.INS.STMT) IF SQL.STATUS # SQL.SUCCESS THEN SQL.ERR.STATUS = SQLError(@HENV,TEST.MDB.CONNECT,CUSTOMER.INS.STMT,SQL.STATE,DB.ERROR,SQL.MSG) MESSAGE = "Could not insert record into the TEST.mdb DATABASE, Customer table! " MESSAGE := "SQL.STATE=":SQL.STATE:": DB ERROR=":DB.ERROR:": MESSAGE=":SQL.MSG SQL.OK = FALSE GOSUB ERROR.PROCESS EXIT END ; * endif sql.status # sql.success .... NUM.CUST += 1 REPEAT IF NOT(SQL.OK) THEN EXIT * update the TEST order allocation table (line item detail of allocations) LINE.CNT = DCOUNT(TEST<1>,@VM) SO.LIST = '' FOR IDX = 1 TO LINE.CNT ALLOC.LINE = TEST<1,IDX> SO.NO = TEST<2,IDX>["*",1,1] SO.LINO = TEST<2,IDX>["*",2,1] CUST.NO = TEST<6,IDX> SCHED.DATE = OCONV(TEST<3,IDX>,'D4\') SCHED.QTY = OCONV(TEST<4,IDX>,'MR4') ALLOC.QTY = OCONV(TEST<14,IDX>,'MR4') PRICE = OCONV(TEST<5,IDX>,'MR4') LOCATE(SO.NO,SO.LIST;DUMMY) ELSE SO.LIST<-1> = SO.NO SQL.STATUS = SQLExecute(TEST.ORDERS) IF SQL.STATUS # SQL.SUCCESS THEN SQL.ERR.STATUS = SQLError(@HENV,TEST.MDB.CONNECT,TEST.ORDERS,SQL.STATE,DB.ERROR,SQL.MSG) MESSAGE = "Could not insert orders allocation data into the TEST.MDB file! " MESSAGE := "SQL.STATE=":SQL.STATE:": DB ERROR=":DB.ERROR:": MESSAGE=":SQL.MSG GOSUB ERROR.PROCESS SQL.OK = FALSE EXIT END ; * endif sql.status # sql.success .... NEXT IDX IF NOT(SQL.OK) THEN EXIT * update TEST part allocation table data NUM.ORDER = DCOUNT(SO.LIST,@AM) * load the Parts allocation table in TEST.mdb SQL.STATUS = SQLExecute(TEST.PARTS) IF SQL.STATUS # SQL.SUCCESS THEN SQL.ERR.STATUS = SQLError(@HENV,TEST.MDB.CONNECT,TEST.PARTS,SQL.STATE,DB.ERROR,SQL.MSG) MESSAGE = "Could not insert parts allocation data into the TEST.MDB file! " MESSAGE := "SQL.STATE=":SQL.STATE:": DB ERROR=":DB.ERROR:": MESSAGE=":SQL.MSG SQL.OK = FALSE GOSUB ERROR.PROCESS EXIT END ; * endif sql.status # sql.success .... * reset just the TEST.ORDERS statement environment SQL.STATUS = [[SQLFreeStmt]](TEST.ORDERS,SQL.CLOSE) SQL.STATUS = [[SQLFreeStmt]](TEST.ORDERS,SQL.UNBIND) SQL.STATUS = [[SQLFreeStmt]](TEST.ORDERS,SQL.RESET.PARAMS) NAP 500 * ====> CALL EXTERNAL CLIENT PROGRAM IF STATUS = 1 THEN SLEEP 3 END ELSE MESSAGE = "Could not start [[TestClient]] program on workstation" MESSAGE<2> = MB.ERROR EXIT END ; * endif status = 1 (pix.win.run call) * reopen the test data source connection * retrieve updated test allocations from the mdb file GOSUB PREPARE.SQL.RESULTS.COMMANDS IF SQL.OK THEN SQL.STATUS = SQLExecute(TEST.ORDERS) IF SQL.STATUS # SQL.SUCCESS THEN SQL.ERR.STATUS = SQLError(@HENV,TEST.MDB.CONNECT,TEST.ORDERS,SQL.STATE,DB.ERROR,SQL.MSG) MESSAGE = "Could not execute the SQL Selection against TEST.mdb " MESSAGE := "[[OrderAllocations]] table data! " MESSAGE := "SQL.STATE=":SQL.STATE:": DB ERROR=":DB.ERROR:": MESSAGE=":SQL.MSG SQL.OK = FALSE GOSUB ERROR.PROCESS END ; * endif sql.status # sql.success .... IF SQL.OK THEN LOOP SQL.STATUS = SQLFetch(TEST.ORDERS) UNTIL SQL.STATUS = SQL.NO.DATA.FOUND DO LOCATE(ALLOC.LINE,TEST,1;TEST.IDX) THEN IF (SO.NO:"*":SO.LINO) = TEST<2,TEST.IDX> THEN TEST<14,TEST.IDX> = ICONV(ALLOC.QTY,'MR4') END ELSE END ; * endif (so.no:"*":so.lino) = test<2,test.idx> .... END ; * endlocate(alloc.line,.... REPEAT TEST<17> = SUM(TEST<4>) - SUM(TEST<14>) END ; * endif sql.ok (select of [[OrderAllocations]]) END ; * endif sql.ok (prepare sql results) GOSUB CLEANUP.MDB IF SINGLE.UPDATE THEN EXIT ; * break out of loop if single update only REPEAT GOSUB CLEANUP.MDB ; * insure that we have cleaned up our workspace * SQL.STATUS = [[SQLFreeStmt]](CUSTOMER.INS.STMT,SQL.DROP) SQL.STATUS = [[SQLFreeStmt]](CUSTOMER.SEL.STMT,SQL.DROP) SQL.STATUS = [[SQLFreeStmt]](TEST.PARTS,SQL.DROP) SQL.STATUS = [[SQLFreeStmt]](TEST.ORDERS,SQL.DROP) SQL.STATUS = SQLDisconnect(TEST.UV.CONNECT) SQL.STATUS = [[SQLFreeConnect]](TEST.UV.CONNECT) SQL.STATUS = SQLDisconnect(TEST.MDB.CONNECT) SQL.STATUS = [[SQLFreeConnect]](TEST.MDB.CONNECT) * STOP * * =================================================================== * <Routines>: * =================================================================== PREPARE.SQL.INSERT.COMMANDS:* Load sql statement environments appropriate * to loading TEST.MDB * Prepare UV customer file selection command for retreiving customer data to * be loaded into the Customer table in TEST.MDB SQL.STATUS = [[SQLBindParameter]](CUSTOMER.SEL.STMT,1,SQL.B.BASIC,SQL.CHAR,25,0,TEST.ID) SQL.STATUS = [[SQLBindCol]](CUSTOMER.SEL.STMT,1,SQL.B.DEFAULT, CUSTNO) SQL.STATUS = [[SQLBindCol]](CUSTOMER.SEL.STMT,2,SQL.B.DEFAULT, NAME) SQL.STATUS = [[SQLBindCol]](CUSTOMER.SEL.STMT,3,SQL.B.DEFAULT, CITY) SQL.STATUS = [[SQLBindCol]](CUSTOMER.SEL.STMT,4,SQL.B.DEFAULT, STATE) SQL.STATUS = [[SQLBindCol]](CUSTOMER.SEL.STMT,5,SQL.B.DEFAULT, ZIP) CUST.SEL.CMD = "SELECT DISTINCT [[CUST_NO]],NAME,CITY,STATE,ZIP FROM CUSTOMER " CUST.SEL.CMD := "WHERE [[CUST_NO]] IN (SELECT [[CUST_NO]] FROM [[TEST_TEST_L0]] WHERE @ID = ?)" SQL.STATUS = SQLPrepare(CUSTOMER.SEL.STMT,CUST.SEL.CMD) IF SQL.STATUS # SQL.SUCCESS THEN SQL.ERR.STATUS = SQLError(@HENV,TEST.UV.CONNECT,CUSTOMER.SEL.STMT,SQL.STATE,DB.ERROR,SQL.MSG) MESSAGE = "Could not create the SQL select command for the TEST customer data! " MESSAGE := "SQL.STATE=":SQL.STATE:": DB ERROR=":DB.ERROR:": MESSAGE=":SQL.MSG GOSUB ERROR.PROCESS SQL.OK = FALSE END ; * endif sql.status # sql.success .... * Prepare the SQL insert command to load the customer data into the Customer table * of the TEST.MDB file. Note the binding of parameters to variable names. SQL.STATUS = [[SQLBindParameter]](CUSTOMER.INS.STMT,1,SQL.B.BASIC,SQL.INTEGER,6,0,PORT.NO) SQL.STATUS = [[SQLBindParameter]](CUSTOMER.INS.STMT,2,SQL.B.BASIC,SQL.CHAR,10,0,CUSTNO) SQL.STATUS = [[SQLBindParameter]](CUSTOMER.INS.STMT,3,SQL.B.BASIC,SQL.CHAR,30,0,NAME) SQL.STATUS = [[SQLBindParameter]](CUSTOMER.INS.STMT,4,SQL.B.BASIC,SQL.CHAR,30,0,CITY) SQL.STATUS = [[SQLBindParameter]](CUSTOMER.INS.STMT,5,SQL.B.BASIC,SQL.CHAR,2,0,STATE) SQL.STATUS = [[SQLBindParameter]](CUSTOMER.INS.STMT,6,SQL.B.BASIC,SQL.CHAR,10,0,ZIP) CUST.INS.CMD = "INSERT INTO Customer ([[Port_No]],[[Customer_No]],Name,City,State,[[ZipCode]]) " CUST.INS.CMD := "VALUES (?, ?, ?, ?, ?, ?)" SQL.STATUS = SQLPrepare(CUSTOMER.INS.STMT,CUST.INS.CMD) IF SQL.STATUS # SQL.SUCCESS THEN SQL.ERR.STATUS = SQLError(@HENV,TEST.MDB.CONNECT,CUSTOMER.INS.STMT,SQL.STATE,DB.ERROR,SQL.MSG) MESSAGE = "Could not create the SQL Insert command for the customer table! " MESSAGE := "SQL.STATE=":SQL.STATE:": DB ERROR=":DB.ERROR:": MESSAGE=":SQL.MSG GOSUB ERROR.PROCESS SQL.OK = FALSE END ; * endif sql.status # sql.success .... * Prepare the SQL insert command to load the [[PartsAllocation]] Table of the * TEST.MDB file. Note the variable bindings. SQL.STATUS = [[SQLBindParameter]](TEST.PARTS,1,SQL.B.BASIC,SQL.INTEGER,6,0,PORT.NO) SQL.STATUS = [[SQLBindParameter]](TEST.PARTS,2,SQL.B.BASIC,SQL.CHAR,20,0,PART.NO) SQL.STATUS = [[SQLBindParameter]](TEST.PARTS,3,SQL.B.BASIC,SQL.SMALLINT,5,0,LOCATION) SQL.STATUS = [[SQLBindParameter]](TEST.PARTS,4,SQL.B.BASIC,SQL.CHAR,30,0,PART.DESC) SQL.STATUS = [[SQLBindParameter]](TEST.PARTS,5,SQL.B.BASIC,SQL.REAL,12,4,INV.BAL) SQL.STATUS = [[SQLBindParameter]](TEST.PARTS,6,SQL.B.BASIC,SQL.REAL,12,4,ALLOC) SQL.STATUS = [[SQLBindParameter]](TEST.PARTS,7,SQL.B.BASIC,SQL.REAL,12,4,ON.ORDER) SQL.STATUS = [[SQLBindParameter]](TEST.PARTS,8,SQL.B.BASIC,SQL.REAL,12,4,BACKORDER) SQL.STATUS = [[SQLBindParameter]](TEST.PARTS,9,SQL.B.BASIC,SQL.INTEGER,6,0,NUM.ORDER) SQL.STATUS = [[SQLBindParameter]](TEST.PARTS,10,SQL.B.BASIC,SQL.INTEGER,6,0,NUM.CUST) PART.INS.CMD = "INSERT INTO [[PartsAllocation]] ([[Port_No]],[[Part_No]],[[Inventory_Location]]," PART.INS.CMD := "[[Part_Description]],[[Inventory_Balance]], Allocated, [[On_Order]], " PART.INS.CMD := "Backorder,[[Order_Count]],[[Customer_Count]]) " PART.INS.CMD := "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" SQL.STATUS = SQLPrepare(TEST.PARTS,PART.INS.CMD) IF SQL.STATUS # SQL.SUCCESS THEN SQL.ERR.STATUS = SQLError(@HENV,TEST.MDB.CONNECT,TEST.PARTS,SQL.STATE,DB.ERROR,SQL.MSG) MESSAGE = "Could not create the SQL Insert command for the [[PartsAllocations]] table! " MESSAGE := "SQL.STATE=":SQL.STATE:": DB ERROR=":DB.ERROR:": MESSAGE=":SQL.MSG GOSUB ERROR.PROCESS SQL.OK = FALSE END ; * endif sql.status # sql.success .... * Prepare the SQL insert command to load the [[OrderAllocationS]] Table of the * TEST.MDB file. Note the variable bindings. SQL.STATUS = [[SQLBindParameter]](TEST.ORDERS,1,SQL.B.BASIC,SQL.INTEGER,6,0,PORT.NO) SQL.STATUS = [[SQLBindParameter]](TEST.ORDERS,2,SQL.B.BASIC,SQL.INTEGER,6,0,ALLOC.LINE) SQL.STATUS = [[SQLBindParameter]](TEST.ORDERS,3,SQL.B.BASIC,SQL.CHAR,20,0,PART.NO) SQL.STATUS = [[SQLBindParameter]](TEST.ORDERS,4,SQL.B.BASIC,SQL.SMALLINT,5,0,LOCATION) SQL.STATUS = [[SQLBindParameter]](TEST.ORDERS,5,SQL.B.BASIC,SQL.CHAR,6,0,SO.NO) SQL.STATUS = [[SQLBindParameter]](TEST.ORDERS,6,SQL.B.BASIC,SQL.SMALLINT,5,0,SO.LINO) SQL.STATUS = [[SQLBindParameter]](TEST.ORDERS,7,SQL.B.BASIC,SQL.CHAR,10,0,CUST.NO) SQL.STATUS = [[SQLBindParameter]](TEST.ORDERS,8,SQL.B.BASIC,SQL.DATE,10,0,SCHED.DATE) SQL.STATUS = [[SQLBindParameter]](TEST.ORDERS,9,SQL.B.BASIC,SQL.REAL,10,4,SCHED.QTY) SQL.STATUS = [[SQLBindParameter]](TEST.ORDERS,10,SQL.B.BASIC,SQL.REAL,10,4,ALLOC.QTY) SQL.STATUS = [[SQLBindParameter]](TEST.ORDERS,11,SQL.B.BASIC,SQL.REAL,10,4,PRICE) ORDER.INS.CMD = "INSERT INTO [[OrderAllocations]] ([[Port_No]],[[Alloc_Line]],[[Part_No]]," ORDER.INS.CMD := "[[Inventory_Location]],[[Sales_Order]], [[Sales_Order_Line]], [[Customer_No]]," ORDER.INS.CMD := "[[Schedule_Date]],[[Schedule_Quantity]],[[Allocated_Quantity]],[[Unit_Price]]) " ORDER.INS.CMD := "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?)" SQL.STATUS = SQLPrepare(TEST.ORDERS,ORDER.INS.CMD) IF SQL.STATUS # SQL.SUCCESS THEN SQL.ERR.STATUS = SQLError(@HENV,TEST.MDB.CONNECT,TEST.ORDERS,SQL.STATE,DB.ERROR,SQL.MSG) MESSAGE = "Could not create the SQL Insert command for the [[OrdersAllocations]] table! " MESSAGE := "SQL.STATE=":SQL.STATE:": DB ERROR=":DB.ERROR:": MESSAGE=":SQL.MSG GOSUB ERROR.PROCESS SQL.OK = FALSE END ; * endif sql.status # sql.success .... RETURN * =================================================================== PREPARE.SQL.RESULTS.COMMANDS:* Load sql statement envrionments appropriate * to retrieving the altered data from TEST.MDB * reset just the TEST.ORDERS statement environment SQL.STATUS = [[SQLFreeStmt]](TEST.ORDERS,SQL.CLOSE) SQL.STATUS = [[SQLFreeStmt]](TEST.ORDERS,SQL.UNBIND) SQL.STATUS = [[SQLFreeStmt]](TEST.ORDERS,SQL.RESET.PARAMS) * build SQL select statement to retrieve Order allocation lines to load any * allocation adjustments into the UV TEST file SQL.STATUS = [[SQLBindParameter]](TEST.ORDERS,1,SQL.B.BASIC,SQL.INTEGER,6,0,PORT.NO) SQL.STATUS = [[SQLBindParameter]](TEST.ORDERS,2,SQL.B.BASIC,SQL.CHAR,20,0,PART.NO) SQL.STATUS = [[SQLBindParameter]](TEST.ORDERS,3,SQL.B.BASIC,SQL.SMALLINT,5,0,LOCATION) SQL.STATUS = [[SQLBindCol]](TEST.ORDERS,1,SQL.B.DEFAULT, ALLOC.LINE) SQL.STATUS = [[SQLBindCol]](TEST.ORDERS,2,SQL.B.DEFAULT, SO.NO) SQL.STATUS = [[SQLBindCol]](TEST.ORDERS,3,SQL.B.DEFAULT, SO.LINO) SQL.STATUS = [[SQLBindCol]](TEST.ORDERS,4,SQL.B.DEFAULT, ALLOC.QTY) READ.ALLOC.CMD = "SELECT [[Alloc_Line]],[[Sales_Order]],[[Sales_Order_Line]],[[Allocated_Quantity]] FROM [[OrderAllocations]] " READ.ALLOC.CMD := "WHERE [[Port_No]] = ? and [[Part_No]] = ? and [[Inventory_Location]] = ?" SQL.STATUS = SQLPrepare(TEST.ORDERS,READ.ALLOC.CMD) IF SQL.STATUS # SQL.SUCCESS THEN SQL.ERR.STATUS = SQLError(@HENV,TEST.MDB.CONNECT,TEST.ORDERS,SQL.STATE,DB.ERROR,SQL.MSG) MESSAGE = "Could not create the SQL select statment to retrieve test order allocations! " MESSAGE := "SQL.STATE=":SQL.STATE:": DB ERROR=":DB.ERROR:": MESSAGE=":SQL.MSG GOSUB ERROR.PROCESS SQL.OK = FALSE END ; * endif sql.status # sql.success .... RETURN * =================================================================== RESET.SQL.STATEMENTS:* reset and clear the statement environments * reset the customer selection statement environment SQL.STATUS = [[SQLFreeStmt]](CUSTOMER.SEL.STMT,SQL.CLOSE) SQL.STATUS = [[SQLFreeStmt]](CUSTOMER.SEL.STMT,SQL.UNBIND) SQL.STATUS = [[SQLFreeStmt]](CUSTOMER.SEL.STMT,SQL.RESET.PARAMS) * reset the customer table insert statement environment SQL.STATUS = [[SQLFreeStmt]](CUSTOMER.INS.STMT,SQL.CLOSE) SQL.STATUS = [[SQLFreeStmt]](CUSTOMER.INS.STMT,SQL.UNBIND) SQL.STATUS = [[SQLFreeStmt]](CUSTOMER.INS.STMT,SQL.RESET.PARAMS) * reset the parts allocation table environment SQL.STATUS = [[SQLFreeStmt]](TEST.PARTS,SQL.CLOSE) SQL.STATUS = [[SQLFreeStmt]](TEST.PARTS,SQL.UNBIND) SQL.STATUS = [[SQLFreeStmt]](TEST.PARTS,SQL.RESET.PARAMS) * reset the order allocation table environment SQL.STATUS = [[SQLFreeStmt]](TEST.ORDERS,SQL.CLOSE) SQL.STATUS = [[SQLFreeStmt]](TEST.ORDERS,SQL.UNBIND) SQL.STATUS = [[SQLFreeStmt]](TEST.ORDERS,SQL.RESET.PARAMS) RETURN * =================================================================== CLEANUP.MDB:* commands to cleanup the TEST.mdb file for this users data * clean up order allcation data SQL.STATUS = [[SQLFreeStmt]](TEST.ORDERS,SQL.CLOSE) SQL.STATUS = SQLPrepare(TEST.ORDERS,"DELETE FROM [[OrderAllocations]] NOWAIT where [[Port_No]] = ?") IF SQL.STATUS # SQL.SUCCESS THEN SQL.ERR.STATUS = SQLError(@HENV,TEST.MDB.CONNECT,TEST.ORDERS,SQL.STATE,DB.ERROR,SQL.MSG) MESSAGE = "Could not create the SQL Delete command for the [[OrderAllocations]] table, table not cleared! " MESSAGE := "SQL.STATE=":SQL.STATE:": DB ERROR=":DB.ERROR:": MESSAGE=":SQL.MSG GOSUB ERROR.PROCESS SQL.OK = FALSE END ELSE SQL.STATUS = SQLExecute(TEST.ORDERS) IF SQL.STATUS # SQL.SUCCESS THEN SQL.ERR.STATUS = SQLError(@HENV,TEST.MDB.CONNECT,TEST.ORDERS,SQL.STATE,DB.ERROR,SQL.MSG) MESSAGE = "Could not clear the [[OrderAllocations]] table for the current user! " MESSAGE := "SQL.STATE=":SQL.STATE:": DB ERROR=":DB.ERROR:": MESSAGE=":SQL.MSG GOSUB ERROR.PROCESS SQL.OK = FALSE END ; * endif sql.status # sql.success .... END ; * endif sql.status # sql.success .... * clean up parts allcation data SQL.STATUS = [[SQLFreeStmt]](TEST.PARTS,SQL.CLOSE) SQL.STATUS = SQLPrepare(TEST.PARTS,"DELETE FROM [[PartsAllocation]] NOWAIT where [[Port_No]] = ?") IF SQL.STATUS # SQL.SUCCESS THEN SQL.ERR.STATUS = SQLError(@HENV,TEST.MDB.CONNECT,TEST.PARTS,SQL.STATE,DB.ERROR,SQL.MSG) MESSAGE = "Could not create the SQL Delete command for the [[PartsAllocation]] table, table not cleared! " MESSAGE := "SQL.STATE=":SQL.STATE:": DB ERROR=":DB.ERROR:": MESSAGE=":SQL.MSG GOSUB ERROR.PROCESS SQL.OK = FALSE END ELSE SQL.STATUS = SQLExecute(TEST.PARTS) IF SQL.STATUS # SQL.SUCCESS THEN SQL.ERR.STATUS = SQLError(@HENV,TEST.MDB.CONNECT,TEST.PARTS,SQL.STATE,DB.ERROR,SQL.MSG) MESSAGE = "Could not clear the [[PartsAllocation]] table for the current user! " MESSAGE := "SQL.STATE=":SQL.STATE:": DB ERROR=":DB.ERROR:": MESSAGE=":SQL.MSG GOSUB ERROR.PROCESS SQL.OK = FALSE END ; * endif sql.status # sql.success .... END ; * endif sql.status # sql.success .... * clean up customer data SQL.STATUS = [[SQLFreeStmt]](CUSTOMER.INS.STMT,SQL.CLOSE) SQL.STATUS = SQLPrepare(CUSTOMER.INS.STMT,"DELETE FROM Customer NOWAIT where [[Port_No]] = ?") IF SQL.STATUS # SQL.SUCCESS THEN SQL.ERR.STATUS = SQLError(@HENV,TEST.MDB.CONNECT,CUSTOMER.INS.STMT,SQL.STATE,DB.ERROR,SQL.MSG) MESSAGE = "Could not create the SQL Delete command for the customer table, table not cleared! " MESSAGE := "SQL.STATE=":SQL.STATE:": DB ERROR=":DB.ERROR:": MESSAGE=":SQL.MSG GOSUB ERROR.PROCESS END ELSE SQL.STATUS = SQLExecute(CUSTOMER.INS.STMT) IF SQL.STATUS # SQL.SUCCESS THEN SQL.ERR.STATUS = SQLError(@HENV,TEST.MDB.CONNECT,CUSTOMER.INS.STMT,SQL.STATE,DB.ERROR,SQL.MSG) MESSAGE = "Could not clear the customer table for the current user! " MESSAGE := "SQL.STATE=":SQL.STATE:": DB ERROR=":DB.ERROR:": MESSAGE=":SQL.MSG GOSUB ERROR.PROCESS END ; * endif sql.status # sql.success .... END ; * endif sql.status # sql.success .... RETURN * =================================================================== MDB.CONNECT:* routine to open a connection to the TEST data source SQL.STATUS = SQLConnect(TEST.MDB.CONNECT,"TEST",'','') IF SQL.STATUS <> SQL.SUCCESS THEN MESSAGE = "Could not (re)establish a connection to the Access workspace: " MESSAGE := "Failed to connect to data source" GOSUB ERROR.PROCESS SQL.OK = FALSE END RETURN * =================================================================== ERROR.PROCESS:* error reporting loop RETURN * * =================================================================== * * * <End>:
This was originally posted on u2-users, and the author provided a cleaned-up version for the Wiki.
http://www.mail-archive.com/u2-users%40listserver.u2ug.org/msg04593.html