SAP Adaptive
Server Enterprise SQL functions
You can use any function that Adaptive Server Enterprise supports
(such as aggregate or mathematical functions) in SQL statements.
This example shows how to use the Adaptive Server Enterprise
function UPPER in a SELECT statement:
|
1 2 3 |
SELECT UPPER(emp_name) INTO :emp_name_var FROM employee; |
Calling Client Library
functions
While PowerBuilder provides access to a large percentage of the
features within Adaptive Server Enterprise, in some cases you may decide
that you need to call one or more Client Library (CT-Lib) functions
directly for a particular application. PowerBuilder provides access to any
Windows DLL by using external function declarations.
CT-Lib calls require a pointer to one of the following structures as
their first parameter:
-
CS_CONNECTION
-
CS_CONTEXT
-
CS_COMMAND
You can obtain the current CS_CONNECTION pointer by using the
PowerScript DBHandle function.
Using DBHandle to obtain the CS_CONNECTION
pointer
DBHandle takes a transaction object as a parameter and returns a
long variable, which is the CS_CONNECTION pointer that PowerBuilder uses
internally to communicate with the database. You can pass this value as
one of the parameters to your external function.
This example shows how to use DBHandle. Assume a successful
connection has occurred using the default transaction object
(SQLCA):
|
1 2 3 4 5 6 7 8 9 |
// Define a variable to hold our DB handle. long SQLServerHandle // Go get the handle. SQLServerHandle = SQLCA.DBHandle( ) // Now that you have the CS_CONNECTION pointer, // call the DLL function. MyDLLFunction( SQLServerHandle, parm1, parm2, ... ) |
In your DLL, cast the incoming long value into a pointer to a
CS_CONNECTION structure:
|
1 2 3 4 5 6 7 8 |
MyDLLFunction( long 1SQLServerHandle, parm1_type parm1, parm2_type Parm2, ... ) { CS_CONNECTION * pConnect; pConnect = (CS_CONNECTION *) 1SQLServerHandle; // CT-LIB functions can be called using pConnect. } |
Obtaining the CS_CONTEXT
pointer
Within your external function, you can obtain the CS_CONTEXT pointer
with the following function call:
|
1 2 3 4 5 6 7 |
CS_RETCODE RC; CS_CONNECTION * PConnect; CS_INT outlen; CS_CONTEXT * pContext; rc = ct_con_props (pConnect,CS_GET,CS_PARENT_HANDLE, (CS_VOID *) &pContext, CS_UNUSED, &outlen); |
Allocating a new command
pointer
Likewise, you can allocate a new command pointer with the following
code:
|
1 2 |
CS_COMMAND * pCommand; rc = ct_cmd_alloc(pConnect, &pCommand); |