User Guide

Programming i!-Database Plus
14
i!-Database Plus and DBWizard
packet, isolate the <struct></struct> package and remove the data contained within. The
helper function
DB_GET_XML_VALUE removes the data for a given field name and returns the string
containing the data. All you need to know is the column name from that database and this function
returns the data. If the data is not of string type, you need to convert that data to the acceptable type
using a call to
ATOI, ATOL or ATOF. Once we have processed all the data from the XML, call a
DISPLAY_ function to display the data.
(***********************************************************)
(* EVENTS GO BELOW *)
(***********************************************************)
DEFINE_EVENT
(*********************)
(*** dB CLIENT URL ***)
(*********************)
DATA_EVENT [dvDB_CLIENT]
{
ONERROR: (* EVENT - ERROR *********************)
{
(* CLEAR BUFFER *)
CLEAR_BUFFER sDB_CLIENT.strBUFF
SEND_STRING 0,dB_GET_IP_ERROR (DATA.NUMBER)
}
ONLINE: (* EVENT - ONLINE *********************)
{
(* SEND THE HTTP GET TO THE WEB SERVER... *)
CLEAR_BUFFER sDB_CLIENT.strBUFF
SEND_STRING dvDB_CLIENT, dB_BUILD_HTTP_GET(sDB_CLIENT)
}
OFFLINE: (* EVENT - OFFLINE ********************)
{
STACK_VAR
LONG lCODE (* HTTP RETURN CODE *)
INTEGER nLIST_PTR (* INDEX FOR RECORDS *)
LONG lLOOP (* LOOPS OVER RECORDS *)
INTEGER nFIRST (* POSITION OF START OF RECORD *)
INTEGER nLAST (* POSITION OF END OF RECORD *)
INTEGER nCOUNT (* CHARACTERS IN RECORD *)
CHAR strDB_RECORD[2000] (* HOLDS A RECORD *)
CHAR strDB_ITEM[100] (* ITEM OF RECORD *)
_sDB_LISTBOX sTempListBox (* A LIST BOX *)
(* GET COOKIE? *)
lCODE = DB_PROCESS_HTTP_HEADER(sDB_CLIENT)
SELECT
{
(* Bad Webserver return *)
ACTIVE (lCODE <> 200): {}
(* TITLES *)
ACTIVE(FIND_STRING(sDB_CLIENT.strBUFF,'</rsTITLES>',sDB_CLIENT.lHTML_START)):
{
(* Found an , so parse it for data *)
lLOOP = DB_PROCESS_LISTBOX (sDB_CLIENT,sTempListBox)
nLIST_PTR = 0
WHILE(lLOOP)
{
nFIRST = FIND_STRING(sDB_CLIENT.strBUFF,'<struct>',lLOOP)
nLAST = FIND_STRING(sDB_CLIENT.strBUFF,'</struct>',lLOOP)
nCOUNT = nLAST - nFIRST + LENGTH_STRING('</struct')
IF (nFIRST)
{
nLIST_PTR = nLIST_PTR + 1
strDB_RECORD = MID_STRING(sDB_CLIENT.strBUFF, nFIRST, nCOUNT)
Continued