This code fragment sets the current connection, and accesses data stored on Adaptive Server:
EXEC SQL INCLUDE sqlca;
int rcode;
EXEC SQL BEGIN DECLARE SECTION;
char name[15];
char supplier[30];
char supplier_address[30];
int order_quantity;
EXEC SQL END DECLARE SECTION;
main()
{
char errmsg[400];
char qmsg[400];
short mlen;
EXEC SQL WHENEVER SQLERROR GOTO :errexit;
EXEC SQL WHENEVER SQLWARNING GOTO :errexit
EXEC SQL WHENEVER NOT FOUND GOTO :errexit
/* Get addressability for EIB... */
/*
** Write record to CICS temporary storage queue...
*/
/* Send the first map */
EXEC CICS SEND MAP("PANEL1") MAPSET("UXA1")
FREEKB ERASE RESP(rcode);
if (rcode != DFHRESP(NORMAL))
EXEC CICS ABEND ABCODE("X001");
/* Receive the response */
EXEC CICS RECEIVE MAP("PANEL1") MAPSET("UXA1")
RESP(rcode);
if (rcode != DFHRESP(NORMAL))
EXEC CICS ABEND ABCODE("X002");
/* Select a record from the table based on user input. */
sprintf(name, "%s", panel1.panel1i.newnamei);
EXEC SQL SET CONNECTION connection_1;
EXEC SQL SELECT name, supplier, supplier_address,order_quantity
INTO
:name, :supplier, :supplier_address, :order_quantity
FROM cheese
WHERE name = :name;
/* Handle "no rows returned" from SELECT */
if (sqlca.sqlcode == 100)
{
sprintf(panel4.panel4o.messageo, "%s",
NOCHEESE);
EXEC CICS SEND MAP("PANEL4") MAPSET("UXA1") FREEKB ERASE RESP(rcode);
if (rcode != DFHRESP(NORMAL))
EXEC CICS ABEND ABCODE("X009");
EXEC CICS SEND CONTROL FREEKB;
EXEC CICS RETURN;
}
/* Fill in and send the second map */
memset ( &panel2.panel2o, ’0’,
sizeof(panel2.panel2o));
sprintf(panel2.panel2o.nameo, "%s", name);
sprintf(panel2.panel2o.supplo, "%s",supplier);
sprintf(panel2.panel2o.addresso, "%s",
supplier_address);
sprintf(panel2.panel2o.ordero, "%d", order_quantity);
EXEC CICS SEND MAP("PANEL2") MAPSET("UXA1")
FREEKB ERASE RESP(rcode);
if (rcode != DFHRESP(NORMAL))
EXEC CICS ABEND ABCODE("X003");
/* Receive the response */
if (panel2.panel2i.questi == ’y’)
{
/* Send the third map... */
/* Receive the response... */
/* Update the database */
order_quantity = atoi(panel3.panel3i.newordi);
EXEC SQL UPDATE cheese
set order_quantity = :order_quantity
where name = :name;
/* Write a record to the temporary queue */
sprintf(qmsg, "%s", "The cheese table was updated");
mlen = strlen(qmsg);
EXEC CICS WRITEQ TS QUEUE("TEMPXAQ1")
FROM(qmsg) LENGTH(mlen) RESP(rcode);
if (rcode != DFHRESP(NORMAL))
EXEC CICS ABEND ABCODE("X010");
}
else
{
/*
** The user does not wish to update so free the keyboard and return...
*/
}
/* Commit the update */
EXEC CICS SYNCPOINT RESP(rcode);
if (rcode != DFHRESP(NORMAL))
EXEC CICS ABEND ABCODE("X011");
/*
** Send the fourth map confirming successful update...
*/
EXEC CICS RETURN;
errexit:
fprintf(stderr,"error in cheeseland %d\n",sqlca.sqlcode);
/* Handle general errors */
sprintf(errmsg, "%.60s\n",sqlca.sqlerrm.sqlerrmc);
strncpy(panel4.panel4o.messageo, errmsg, 60);
sprintf(panel4.panel4o.codeo, "%d", sqlca.sqlcode);
/*
** Send the fourth map with appropriate message...
*/
/* Rollback the transaction */
EXEC CICS SYNCPOINT ROLLBACK;
EXEC CICS SEND CONTROL FREEKB;
EXEC CICS RETURN;
}
| Copyright © 2005. Sybase Inc. All rights reserved. | ||