//***************************************************************************** //*** ODBC_DRV.PKG *** //*** *** //*** Author: Ben Weijers *** //*** Data Access Nederland *** //*** 3 February 1998 *** //*** *** //*** Purpose: *** //*** Package that declares ODBC driver constants and functions. *** //**** *** //*** This package can be used by developers who want to add Data Access *** //*** ODBC Client specific code to a DataFlex application. *** //***************************************************************************** Use Cli //*** Driver Indentification #REPLACE ODBC_DRV_ID "ODBC_DRV" //*** Error number constants #REPLACE DFODBC_GENERAL_ERROR CLIERR_GENERAL_ERROR #REPLACE DFODBCERR_CANT_INITIALIZE CLIERR_CANT_INITIALIZE #REPLACE DFODBCERR_CANT_DEINITIALIZE CLIERR_CANT_DEINITIALIZE #REPLACE DFODBCERR_BAD_OR_NO_PRIMARY_INDEX_SPECIFIED CLIERR_BAD_OR_NO_PRIMARY_INDEX_SPECIFIED #REPLACE DFODBCERR_LOGIN_UNSUCCESSFUL CLIERR_LOGIN_UNSUCCESSFUL #REPLACE DFODBCERR_LOGOUT_UNSUCCESSFUL CLIERR_LOGOUT_UNSUCCESSFUL #REPLACE DFODBCERR_TABLE_NOT_IN_CONNECTION CLIERR_TABLE_NOT_IN_CONNECTION #REPLACE DFODBCERR_NULL_VALUE_NOT_ALLOWED CLIERR_NULL_VALUE_NOT_ALLOWED #REPLACE DFODBCERR_SEGMENT_NUMBER_RANGE CLIERR_SEGMENT_NUMBER_RANGE #REPLACE DFODBCERR_INDEX_NUMBER_RANGE CLIERR_INDEX_NUMBER_RANGE #REPLACE DFODBCERR_LOGIN_ATTRIBUTE_MUST_BE_SET CLIERR_LOGIN_ATTRIBUTE_MUST_BE_SET #REPLACE DFODBCERR_PHYSICAL_NAME_MUST_BE_SET CLIERR_PHYSICAL_NAME_MUST_BE_SET #REPLACE DFODBCERR_INVALID_REGISTRATION_FILE CLIERR_INVALID_REGISTRATION_FILE #REPLACE DFODBCERR_LICENSE_EXPIRED CLIERR_LICENSE_EXPIRED #REPLACE DFODBCERR_DEADLOCK_OR_TIMEOUT CLIERR_DEADLOCK_OR_TIMEOUT #REPLACE DFODBCERR_SQL_ERROR CLIERR_SQL_ERROR #REPLACE DFODBCERR_SQLINVALID_CLI_STMT_HANDLE CLIERR_SQLINVALID_CLI_STMT_HANDLE #REPLACE DFODBCERR_SQLINVALID_CLI_CONN_HANDLE CLIERR_SQLINVALID_CLI_CONN_HANDLE #REPLACE DFODBCERR_SQLINVALID_DRIVER_ID CLIERR_SQLINVALID_DRIVER_ID #REPLACE DFODBCERR_SQLINVALID_BIND_FILE CLIERR_SQLINVALID_BIND_FILE #REPLACE DFODBCERR_SQLINVALID_COLUMN CLIERR_SQLINVALID_COLUMN #REPLACE DFODBCERR_SQLINVALID_ATTRIBUTE CLIERR_SQLINVALID_ATTRIBUTE #REPLACE DFODBCERR_SQLINVALID_BUFFER CLIERR_SQLINVALID_BUFFER #REPLACE DFODBCERR_INVALID_CONFIGURATION_KEYWORD CLIERR_INVALID_CONFIGURATION_KEYWORD #REPLACE DFODBCERR_NOUNIQUEINDEX, CLIERR_NOUNIQUEINDEX, #REPLACE DFODBCERR_UCSEGMENT_NOT_SUPPORTED, CLIERR_UCSEGMENT_NOT_SUPPORTED, #REPLACE DFODBCERR_FIELDREADONLY CLIERR_FIELDREADONLY #REPLACE DFODBCERR_DBPROPERROR CLIERR_DBPROPERROR #REPLACE DFODBCERR_CANTSETRECNUMINACTIVE CLIERR_CANTSETRECNUMINACTIVE #REPLACE DFODBCERR_CANTCHANGEINACTIVECOLUMN CLIERR_CANTCHANGEINACTIVECOLUMN #REPLACE DFODBCERR_FIELDISINACTIVE CLIERR_FIELDISINACTIVE #REPLACE DFODBCERR_NOT_INSTALLED CLIERR_NOT_INSTALLED #REPLACE DFODBCERR_CANT_FIND_TERMLIST CLIERR_CANT_FIND_TERMLIST #REPLACE DFODBCERR_CANT_READ_TERMLIST CLIERR_CANT_READ_TERMLIST #REPLACE DFODBCERR_MAX_USERS_EXCEEDED CLIERR_MAX_USERS_EXCEEDED #REPLACE DFODBCERR_USER_COUNT_FILE_ERROR CLIERR_USER_COUNT_FILE_ERROR #REPLACE DFODBCERR_CANT_INIT_USER_COUNT CLIERR_CANT_INIT_USER_COUNT #REPLACE DFODBCERR_USER_COUNT_FILE_NOT_FOUND CLIERR_USER_COUNT_FILE_NOT_FOUND #REPLACE DFODBCERR_USER_COUNT_FILE_CANT_READ CLIERR_USER_COUNT_FILE_CANT_READ #REPLACE DFODBCERR_USER_COUNT_FILE_CANT_DECRYPT CLIERR_USER_COUNT_FILE_CANT_DECRYPT #REPLACE DFODBCERR_USER_COUNT_FILE_BAD_VERSION CLIERR_USER_COUNT_FILE_BAD_VERSION #REPLACE DFODBCERR_CANTCREATE_RECNUMISZERO CLIERR_CANTCREATE_RECNUMISZERO //*** Call driver function identifiers #Replace ODBC_MANAGE_DATA_SOURCES 0 #Replace ODBC_NUMBER_DATA_SOURCES 1 #Replace ODBC_DATA_SOURCE_NAME0 2 #Replace ODBC_DATA_SOURCE_NAME 3 #Replace ODBC_ENUMERATE_TABLES 4 #Replace ODBC_TABLE0 5 #Replace ODBC_TABLENAME 6 #Replace ODBC_TABLESCHEMA 7 #Replace ODBC_NUMBER_FIELDS 8 #Replace ODBC_FIELD_NAME0 9 #Replace ODBC_FIELD_NAME 10 //*** Extra ODBC commands //***************************************************************************** //*** ODBCManage *** //*** *** //*** Start the ODBC manager. *** //***************************************************************************** #COMMAND ODBCManager R . Call_driver 0 ODBC_DRV_ID Function ODBC_MANAGE_DATA_SOURCES Callback 0 Passing CLI$StrDummy CLI$StrDummy !1 Result CLI$IntDummy #ENDCOMMAND #COMMAND ODBCAdministrator R . Call_driver 0 ODBC_DRV_ID Function ODBC_MANAGE_DATA_SOURCES Callback 0 Passing CLI$StrDummy CLI$StrDummy !1 Result CLI$IntDummy #ENDCOMMAND //***************************************************************************** //*** ODBCNumberOfDataSources To *** //*** *** //*** Returns the number of data sources. *** //***************************************************************************** #COMMAND ODBCEnumerateDataSources R #IF (!0=1) Call_driver 0 ODBC_DRV_ID Function ODBC_NUMBER_DATA_SOURCES Callback 0 Passing CLI$StrDummy CLI$StrDummy 0 Result !1 #ELSE Call_driver 0 ODBC_DRV_ID Function ODBC_NUMBER_DATA_SOURCES Callback 0 Passing CLI$StrDummy CLI$StrDummy !2 Result !1 #ENDIF #ENDCOMMAND //***************************************************************************** //*** ODBCDSNName To *** //*** *** //*** Returns the name of the data source. *** //***************************************************************************** #COMMAND ODBCDSNName R To R . Move (Repeat(Character(0), 255)) To !3 GetAddress Of !3 To CLI$IntDummy Call_driver 0 ODBC_DRV_ID Function ODBC_DATA_SOURCE_NAME0 Callback 0 Passing CLI$StrDummy CLI$StrDummy CLI$IntDummy Result CLI$IntDummy Call_driver 0 ODBC_DRV_ID Function ODBC_DATA_SOURCE_NAME Callback 0 Passing CLI$StrDummy CLI$StrDummy !1 Result CLI$IntDummy Get Cstring !3 To !3 #ENDCOMMAND //***************************************************************************** //*** ODBCEnumerateTables To *** //*** *** //*** Builds internal table array and returns the number of tables in the *** //*** DSN. *** //***************************************************************************** #COMMAND ODBCEnumerateTables R To R . Call_driver 0 ODBC_DRV_ID Function ODBC_ENUMERATE_TABLES Callback 0 Passing !1 CLI$StrDummy CLI$IntDummy Result !3 #ENDCOMMAND //***************************************************************************** //*** ODBCTableName To *** //*** *** //*** Returns the name of the table. *** //***************************************************************************** #COMMAND ODBCTableName R To R . Move (Repeat(Character(0), 255)) To !3 GetAddress Of !3 To CLI$IntDummy Call_driver 0 ODBC_DRV_ID Function ODBC_TABLE0 Callback 0 Passing CLI$StrDummy CLI$StrDummy CLI$IntDummy Result CLI$IntDummy Call_driver 0 ODBC_DRV_ID Function ODBC_TABLENAME Callback 0 Passing CLI$StrDummy CLI$StrDummy !1 Result CLI$IntDummy Get Cstring !3 To !3 #ENDCOMMAND //***************************************************************************** //*** ODBCSchemaName To *** //*** *** //*** Returns the schema name of the table. *** //***************************************************************************** #COMMAND ODBCSchemaName R To R . Move (Repeat(Character(0), 255)) To !3 GetAddress Of !3 To CLI$IntDummy Call_driver 0 ODBC_DRV_ID Function ODBC_TABLE0 Callback 0 Passing CLI$StrDummy CLI$StrDummy CLI$IntDummy Result CLI$IntDummy Call_driver 0 ODBC_DRV_ID Function ODBC_TABLESCHEMA Callback 0 Passing CLI$StrDummy CLI$StrDummy !1 Result CLI$IntDummy Get Cstring !3 To !3 #ENDCOMMAND //***************************************************************************** //*** ODBCNumberOfFields To *** //*** *** //*** Returns the number of fields. *** //***************************************************************************** #COMMAND ODBCEnumerateFields R R To R . Call_driver 0 ODBC_DRV_ID Function ODBC_NUMBER_FIELDS Callback 0 Passing !1 !2 CLI$IntDummy Result !4 #ENDCOMMAND //***************************************************************************** //*** ODBCFieldName To *** //*** *** //*** Returns the name of the field. *** //***************************************************************************** #COMMAND ODBCFieldName R To R . Move (Repeat(Character(0), 255)) To !3 GetAddress Of !3 To CLI$IntDummy Call_driver 0 ODBC_DRV_ID Function ODBC_FIELD_NAME0 Callback 0 Passing CLI$StrDummy CLI$StrDummy CLI$IntDummy Result CLI$IntDummy Call_driver 0 ODBC_DRV_ID Function ODBC_FIELD_NAME Callback 0 Passing CLI$StrDummy CLI$StrDummy !1 Result CLI$IntDummy Get Cstring !3 To !3 #ENDCOMMAND //***************************************************************************** //*** ODBC_SetConstraint *** //*** *** //*** Setup a constraint for a file. *** //***************************************************************************** #COMMAND ODBC_SetConstraint R R . CLI_SetConstraint !1 !2 ODBC_DRV_ID #ENDCOMMAND //Doc/ ClassLibrary=Common Class cODBCHandler Is A cCLIHandler Procedure Construct_Object Forward Send Construct_Object Set psDriverID To ODBC_DRV_ID End_Procedure // Construct_Object //*** //*** Procedure Set: DataSourceType //*** Purpose : Setup the type of data sources returned by the datasources function //*** //Doc/ Interface=Private Procedure Set DataSourceType Integer iNewType Local String sDriver Local String sVoid Local Integer iRetval Get psDriverID To sDriver If (sDriver <> "") ; Call_Driver 0 sDRiver Function CLI_INITDATASOURCES Callback 0 Passing sVoid sVoid iNewType Result iRetval End_Procedure // Set DataSourceType //*** //*** Function: DataSources //*** Purpose : Call the driver's data sources function //*** //Doc/ Interface=Private Function DataSources Returns String Local String sDriver Local String sDataSource Local String sDescription Local Integer iLength Local Integer iRetval Get psDriverID To sDriver If (sDriver <> "") Begin Move 8192 To iLength Move (Repeat(" ", iLength)) To sDataSource Move (Repeat(" ", iLength)) To sDescription Call_Driver 0 sDRiver Function CLI_DATASOURCES Callback 0 Passing sDataSource sDescription iLength Result iRetval End If (sDataSource <> "" Or sDescription <> "") ; Function_Return (sDataSource + "," + sDescription) Else ; Function_Return "" End_Function// DataSources End_Class // cODBCHandler