ODBC Interface Reference
disclaimer trademarks PERVASIVE SOFTWARE INC. LICENSES THE SOFTWARE AND DOCUMENTATION PRODUCT TO YOU OR YOUR COMPANY SOLELY ON AN AS ISBASIS AND SOLELY IN ACCORDANCE WITH THE TERMS AND CONDITIONS OF THE ACCOMPANYING LICENSE AGREEMENT. PERVASIVE SOFTWARE INC. MAKES NO OTHER WARRANTIES WHATSOEVER, EITHER EXPRESS OR IMPLIED, REGARDING THE SOFTWARE OR THE CONTENT OF THE DOCUMENTATION; PERVASIVE SOFTWARE INC. HEREBY EXPRESSLY STATES AND YOU OR YOUR COMPANY ACKNOWLEDGES THAT PERVASIVE SOFTWARE INC. DOES NOT MAKE ANY WARRANTIES, INCLUDING, FOR EXAMPLE, WITH RESPECT TO MERCHANTABILITY, TITLE, OR FITNESS FOR ANY PARTICULAR PURPOSE OR ARISING FROM COURCE OF DEALING OR USAGE OF TRADE, AMONG OTHERS. Btrieve and XQL are registered trademarks of Pervasive Software Inc. Scalable SQL, MicroKernel Database Engine, MicroKernel Database Architecture, Navigational Client/Server, Built on Btrieve, Built on Scalable SQL, Xtrieve PLUS, and Client/Server in a box are trademarks of Pervasive Software Inc. Microsoft, MS-DOS, Windows, Windows NT, Win32, Win32s, and Visual Basic are registered trademarks of Microsoft Corporation. Windows 95 is a trademark of Microsoft Corporatoin. NetWare and Novell are registered trademarks of Novell, Inc. NetWare Loadable Module, NLM, Novell DOS, Transaction Tracking System, and TTS are trademarks of Novell, Inc. All company and product names are the trademarks or registered trademarks of their respective companies. Copyright 1998 Pervasive Software Inc. All rights reserved. Reproduction, photocopying, or transmittal of this publication, or portions of this publication, is prohibited without the express prior written consent of the publisher, unless such reproduction, photocopying, or transmittal is part of a Derivative Software Product as defined in the licenses granted in conjunction with the purchase of this publication and associated software. Pervasive Software Inc. 8834 Capital of Texas Highway Austin, Texas 78759 U.S.A. ODBC Interface Reference Manual March 1998
... ix...x 1 ODBC ODBC Interface v2.0... 1-1 Windows NT Windows 95 32... 1-2... 1-2... 1-3 Microsoft Visual Basic v4.0 Enterprise Edition... 1-3 Scalable SQL v4.0... 1-4... 1-4 SQLSetPos... 1-4... 1-4 SQLForeignKeys... 1-5 SQLDescribeParam... 1-5 SQLParamOptions... 1-5 ODBC ()... 1-5 SQLMoreResults... 1-6 SQLExtendedFetch... 1-6 OEM... 1-6 SQL... 1-6 ODBC... 1-7 ODBC Interface... 1-7 / ODBC... 1-7 ODBC... 1-9 iii
WindowsWindows 95 Windows NT ODBC Interface 1-10 ODBC... 1-10 SQL... 1-10 API... 1-11... 1-12 ODBC Interface... 1-12 Scalable SQL for Windows Btrieve for Windows... 1-13 Scalable SQL for Windows NT/Windows 95 v3.01 v4.0 Btrieve for Windows NT/Windows 95... 1-13... 1-14 ODBC Interface... 1-14 (Windows NTWindows 95 Windows v3.1)... 1-14 ODBC Interface... 1-15 Windows v3.1... 1-15 Windows NT v3.51... 1-15 Windows NT v4.0 Windows 95... 1-16 BTI.INI... 1-16 ODBC Interface... 1-19 Windows NT Windows 95... 1-19 Windows v3.1... 1-20... 1-20... 1-21... 1-22... 1-22 ODBC... 1-22 2 ODBC SQL SQL... 2-1 ODBC SQL... 2-2... 2-2... 2-3... 2-4 ivodbc Interface Reference Manual
... 2-5 SQL... 2-5 Null... 2-5 ODBC AUTOINC... 2-7 NOTE LVAR... 2-7 3 ODBC... 3-1 SQLGetInfo... 3-2 SQLDriverConnect... 3-8... 3-9 DDF... 3-9 ODBC ()... 3-10 SQLRowCount SQLMoreResults... 3-10... 3-11... 3-11... 3-12... 3-12... 3-13 SQLSetPos... 3-13... 3-13... 3-14... 3-15 SQL... 3-15... 3-16 SQLExtendedFetch... 3-17 OEM... 3-17 A ODBC ODBC Scalable SQL... A-1 SQLSetConnectOption SQLGetConnectOption... A-2 Option 1000: ODBC Interface... A-3... A-3 v
... A-4... A-4 SQLGetConnectOption... A-4... A-5... A-5 Option 1001:... A-5... A-5... A-7... A-7 Option 1002: ID... A-7... A-7 ID... A-7... A-8 Option 1003: (Windows v3.1 )... A-8... A-8... A-9... A-10 SQLSetConnectOption... A-10... A-10... A-10 Option 1004:... A-10... A-11... A-12... A-12 Option 1005:... A-12... A-12... A-13... A-13 Option 1006:... A-14... A-14... A-15... A-15 Option 1007:... A-15... A-15 viodbc Interface Reference Manual
... A-16... A-16 B...B-1 SQL.H SQLEXT.H...B-1 ODBC.LIB...B-2 ODBC32.LIB...B-2 C/C++...B-2 C/C++...B-3...B-3 B-1C (ODBCSAMP.C)...B-4 vii
1-1Scalable SQL... 1-8 1-2Scalable SQL... 1-8 1-3... 1-9 2-1... 2-4 2-2Scalable SQL/Btrieve ODBC... 2-5 3-1SQLGetInfo... 3-2 3-2SQLDriverConnect... 3-8 A-1C... A-2 A-2SQLSetConnectOption SQLGetConnectOption... A-2 A-3Option 1000 SQLSetConnectOption... A-4 A-4Option 1001 SQLGetConnectOption... A-5 A-5SQLGetConnectOption Version... A-6 A-6Option 1002 SQLGetConnectOption... A-7 A-7Option 1003 SQLSetConnectOption... A-8 A-8SQLSetConnectOption Callback... A-9 A-9Option 1004 SQLGetConnectOption... A-11 A-10SQLGetConnectOption Convert... A-11 A-11Option 1005 SQLGetConnectOption... A-13 A-12SQLGetConnectOption Mask Validation A-13 A-13Option 1006 SQLGetConnectOption... A-14 viiiodbc Interface Reference Manual
A-14SQLGetConnectOption Default Mask Retrieval... A-14 A-15Option 1007 SQLGetConnectOption... A-15 A-16SQLGetConnectOption Value Validation... A-16 ix
Scalable SQL Btrieve API ODBC Interface ODBC API (Open Database Connectivity Applications Programming Interface) 1 ODBC Scalable SQL Btrieve API ODBC Interface ODBC API (Open Database Connectivity Applications Programming Interface) ODBC Interface 2 ODBC SQL ODBC (Open Database Connectivity) SQL 3 ODBC ODBC Interface ODBC API AODBC ODBC Interface ODBC API Scalable SQL Btrieve B ODBC API ODBC Interface C xi
MYPROGmyprog Myprog [ ] [logname] [filename @filename] < > /D=<5 6 7> variable filename... [parameter...] (...) ::= ::= a::=b a b xiiodbc Interface Reference Manual
1 ODBC Btrieve Scalable SQL API (Applications Programming Interface) ODBC Interface ODBC (Open Database Connectivity) API ODBC Interface v2.0 ODBC ODBC Interface ODBC ODBC Interface ODBC ODBC ODBC Interface v2.0 ODBC Interface 2.0 Windows NT Windows 95 32 Microsoft Visual Basic v4.0 Enterprise Edition Scalable SQL v4.0 SQLSetPos SQLForeignKeys ODBC 1-1
SQLDescribeParam SQLParamOptions ODBC () SQLMoreResults SQLExtendedFetch OEM SQL Windows NT Windows 95 32 ODBC Interface v1.0 for Windows 95 Windows NT 16 Windows NT Thunking ODBC Interface v2.0 32 Windows 95 Windows NT (Windows NT v3.51 v4.0) ODBC Interface v2.0 ODBC () 1 ODBC Interface ( 1 ODBC ) ODBC Interface 1-2ODBC Interface Reference Manual
ODBC API 1 ODBC Interface v2.0 Microsoft Access Visual Basic Visual FoxProBorland DelphiReportSmith Powersoft PowerBuilder ODBC ODBC Interface v1.0 ODBC Interface v2.0 Microsoft Foundation Classes (MFC) v3.0 Microsoft Visual C++ v4.0 C++ 32 3 ODBC Microsoft Visual Basic v4.0 Enterprise Edition Microsoft Visual Basic v4.0 Enterprise Edition ODBC Interface Visual Basic RDO (Remote Data Objects) RDC (Remote Data Control) Visual Basic Jet (Joint Engine Technology) Jet RDC RDO Jet RDO DBMS / RDO Scalable SQL v3.01 v4.0 Btrieve Scalable SQL ODBC 1-3
Scalable SQL v4.0 Scalable SQL v4.0 ODBC Interface v2.0 Scalable SQL v4.0 ODBC Interface v2.0 INTEGER(8) UNSIGNED(1, 2, 4, 8) CURRENCY TIMESTAMP 2 ODBC SQL Scalable SQL v4.0 SQLSetPos SQLSetPos SQLSetPos SQLSetPos 3 ODBC 1-4ODBC Interface Reference Manual
3 ODBC SQLForeignKeys (Referential Integrity) SQLForeignKeys SQLForeignKeys SQLDescribeParam SQLDescribeParam SQLDescribeParam SQL SQLDescribeParam (ODBC ) SQLParamOptions ODBC Interface v2.0 SQLParamOptions ODBC 2 SQLBindParameter 3 ODBC ODBC () ODBC (Scalable SQL ) ODBC ODBC 1-5
SELECT 3 ODBC SQLMoreResults SQLMoreResults SQLMoreResults SELECT UPDATEINSERT DELETE SQLExtendedFetch ODBC Interface SQL_FETCH_RELATIVE SQL_FETCH_ ABSOLUTE SQLExtendedFetch OEM ODBC Interface DLL ANSI OEM SQLSetConnectOption SQL SQL SELECT SELECT... FOR UPDATE OF <columns> SQLExtendedFetch SQLSetPos UPDATE... WHERE CURRENT OF <cursor-name> DELETE... WHERE CURRENT OF <cursor-name> 1-6ODBC Interface Reference Manual
ODBC ODBC (Open Database Connectivity) Microsoft SAG CLI (SQL Access Groups Call Level Interface) ODBC SAG CLIX/Open ANSI SQL-92 ODBC Microsoft ODBC 2.0 SDK (Microsoft Press) ODBC ODBC SQL ODBC Interface / ODBC Interface 2 / ODBC ODBC Interface / 2 Microsoft WindowsWindows 95Windows NT Windows NT NetWare MicroKernel Database 2 SQL ODBC Interface MicroKernel Database ODBC Interface Scalable SQL / ODBC Interface Scalable SQL SQL ODBC Interface CPU 1-8 1-1 ODBC 1-7
Scalable SQL ODBC Interface MicroKernel Database SQL Btrieve MicroKernel Database 1-2 1-1 Scalable SQL 1-2 Scalable SQL 1-8ODBC Interface Reference Manual
ODBC Microsoft WindowsWindows 95 Windows NT MicroKernel Database ODBC Interface MicroKernel Database 1-3 1-3 / MicroKernel MicroKernel Database ODBC 1-9
WindowsWindows 95 Windows NT ODBC Interface ODBC Interface v2.0 for Windows NT/Windows 95 (W32BTINT.DLL) 16 32 Windows NT/Windows 95 Windows NT Windows 95 ODBC ODBC32.DLL 16 ODBC Thunking 16 Windows ODBC Interface v2.0 for Windows (WINBTINT.DLL) Windows ODBC ODBC.DLL ODBC ODBC API SQL ODBC ODBC ODBC SQL ODBC SQL ODBC Interface SQL ODBC SQL SQL ODBC Interface MicroKernel Database Microsoft DBMS ODBC ODBC SQL ODBC Interface SQL ODBC SQL ODBC Interface SQL 1-10ODBC Interface Reference Manual
API SQL ODBC Interface SQL ODBC 1 API 2 2 SQLColumnPrivileges SQLDataSources SQLExtendedFetch (firstnextlastprevious ) SQLMoreResults SQLNativeSql SQLNumParams SQLParamOptions SQLPrimaryKeys SQLTablePrivileges SQLSetScrollOptions SQLSetPos SQLDescribeParam SQLForeignKeys (RI) 2 SQLBrowseConnect SQLProcedures SQLProcedureColumns ODBC 1-11
ODBC Interface v2.0 ODBC Interface ODBC Interface 80386 CPU ODBC Interface v2.0 for Windows 8MB RAM (12MB RAM ) ODBC Interface v2.0 for Windows NT/Windows 95 16MB RAM (20MB RAM ) 5MB ODBC Interface v2.0 for Windows PC-DOS MS-DOS v5.0 Windows v3.1 /Scalable SQL Scalable SQL v3.01 v4.0 Btrieve Btrieve v6.15 Scalable SQL for Windows v3.01 v4.0 Btrieve for Windows v6.15 ODBC Interface v2.0 for Windows NT/Windows 95 Windows NT v3.51 v4.0 Windows 95 /Scalable SQL Scalable SQL v3.01 v4.0 Btrieve Btrieve v6.15 1-12ODBC Interface Reference Manual
Scalable SQL for Windows NT/Windows 95 v3.01 v4.0 Btrieve for Windows NT/Windows 95 v6.15 Scalable SQL for Windows Btrieve for Windows ODBC Interface for Windows Scalable SQL for Windows v3.01 v4.0 Btrieve for Windows v6.15 Scalable SQL Btrieve Scalable SQL ODBC Interface ODBC Scalable SQL Btrieve ODBC Interface ODBC ODBC Interface v2.0 MicroKernel Database Scalable SQL for Windows NT/Windows 95 v4.0 Btrieve for Windows NT/Windows 95 ODBC Interface v2.0 for Windows NT/Windows 95 Btrieve for Windows NT/Windows 95 v6.15 Scalable SQL for Windows NT/Windows 95 v4.0 Btrieve for Windows NT/Windows 95 Scalable SQL v4.0 ODBC Interface ODBC ODBC Interface v2.0 MicroKernel Database /ODBC Interface ODBC 1-13
ODBC Interface Scalable SQL for Windows Windows v3.1windows 95 Windows NT Scalable SQL Btrieve (SQLScope Scalable SQL v4.0 Monitor ) ODBC Interface ODBC Interface ODBC Interface ODBC MicroKernel Database (Windows NTWindows 95 Windows v3.1) 16 Windows ODBC Interface for Windows BTI.INI (Pervasive Software ) ODBCINST.INI ( ODBC ) ODBC.INI () Windows 95 Windows NT ODBC Scalable SQL for Windows NT/Windows 95 v3.01 v4.0 Btrieve for Windows NT/Windows 95 v6.15 Scalable SQL Btrieve 1-14ODBC Interface Reference Manual
ODBC Interface ODBC Interface Windows v3.1 ODBC Interface Scalable SQL Btrieve ( BTI) Windows SYSTEM 1. Scalable SQL Btrieve 2. Disk 1 3. [] - [] [] - [ ] X: setup X 4. [OK] ODBC Interface Windows NT v3.51 ODBC Interface Scalable SQL Btrieve ( BTI) Windows SYSTEM 1. Scalable SQL Btrieve 2. Disk 1 ODBC 1-15
3. [] - [] [] - [ ] 4. X: setup X 5. [OK] ODBC Interface Windows NT v4.0 Windows 95 ODBC Interface Scalable SQL Btrieve ( Program Files BTI Win32) Windows SYSTEM 1. Scalable SQL Btrieve 2. Disk 1 3. [] - [] 4. X: setup X 5. [OK] ODBC Interface BTI.INI Windows BTI.INI BTI.INI 1-16ODBC Interface Reference Manual
() [Scalable SQL Engine] max expression length=4096 external sort path=<default Windows directory> Microsoft Access ODBC Interface 849 Scalable SQL Setup Max Expression Length 4096 10240 [Btrieve Client] trnfile=<default Windows directory> [Scalable SQL] local=yes requester=no allow Callbacks=Yes tasks 5 5 [Scalable SQL] tasks=5 logins 3 3 [Scalable SQL] logins=3 BTI.INI DBNAMES.CFG DBNAMES.CFG Windows Scalable SQL Scalable SQL for NetWare v3.01 NetWare SQLTables NetWare Scalable SQL Setup Maximum Message Length Scalable SQL for NetWare v4.0 Scalable SQL Setup Communications Buffer Size 32KB ODBC 1-17
Windows v3.1 ODBC Interface CTL3DV2.DLL Windows SYSTEM DLL Windows (Microsoft Office ) [] [] [Pervasive Software ODBC Interface] [OK] [Pervasive Software ODBC Interface] (Windows ) [Pervasive Software ODBC Interface for Windows NT/Windows 95] ODBC Interface Windows SYSTEM ODBC ODBC Interface Pervasive Software WIN BIN WindowsSYSTEM PATH AUTOEXEC.BAT PATH ODBC Interface PATH ODBC [Pervasive Software Database] [ODBC Interface Help] / Scalable SQL Scalable SQL Scalable SQL ODBC Interface MicroKernel Database 1-20 1-18ODBC Interface Reference Manual
ODBC Interface ODBC Interface Windows NT Windows 95 Windows NT Windows 95 ODBC Interface v2.0 1. ODBC Interface 2. [Pervasive Software Database] 3. Windows ODBC Interface : a. Windows NT v4.0 Windows 95 REGEDIT Windows NT v3.51 REGEDT32 b. HKEY_LOCAL_MACHINE LOCALMACHINE () c. SOFTWARE ODBC ODBCINST.INI [] - [] [ ] - [] d. ODBC Drivers ODBC 1-19
e. Pervasive Software ODBC-32 f. Pervasive Software ODBC-32 Pervasive Software OEM to ANSI g. REGEDIT REGEDT32 4. ODBC Administrator [] [Pervasive Software ODBC-32] 5. SOFTWARE/ODBC/ODBCINST.INI ODBC Windows v3.1 Windows v3.1 ODBC Interface v2.0 1. [Pervasive Software Database] ODBC Administrator 2. [] [] 3. [ ODBC ] [Pervasive Software ODBC Interface for Windows] ODBC Interface MicroKernel Database ODBC 1-20ODBC Interface Reference Manual
.DDF.DDF ODBC ODBC Interface [] (') 1. [Pervasive Software Database] 2. Windows v3.1 [ODBC Administrator] Windows NT Windows 95 [32bit ODBC Administrator] 3. [] [] 4. [] [ ODBC ] [Pervasive Software ODBC Interface] [OK] 5. [ODBC Interface] [OK] (.DDF ) ODBC 1-21
1. [Pervasive Software Database] 2. Windows v3.1 [ODBC Administrator] Windows NT Windows 95 [32bit ODBC Administrator] 3. [] [] [] 4. [ODBC Interface] [OK] 1. [Pervasive Software Database] 2. Windows v3.1 [ODBC Administrator] Windows NT Windows 95 [32bit ODBC Administrator] 3. [] [] [] 4. [] ODBC ODBC ODBC ODBC Interface Scalable SQL Scalable SQL Scalable SQL Scalable SQL 1-22ODBC Interface Reference Manual
Scalable SQL ODBC Interface Scalable SQL v3.01 Scalable SQL Btrieve ODBC ODBC Microsoft Access Microsoft Office ODBC ODBC 1. [] ( ) 2. [] () [] 3. DDF ( ) [DB ] 4. [OK] ODBC ODBC ODBC 1-23
2 ODBC SQL ODBC (Open Database Connectivity) SQL ODBC Interface SQL ODBC C ODBC ODBC Interface SQL SQL ODBC SQL Microsoft ODBC 2.0 SDK SQL ODBC SQL SQL ODBC Interface SQL ODBC SQL SQL ODBC v4.0 Scalable SQL ODBC SQL NOT Scalable SQL NOT ODBC Scalable SQL ODBC SQL 2-1
ODBC SQL Microsoft Access SELECT DISTINCTROW ODBC Scalable SQL DISTINCTROW DISTINCT SQL ODBC Scalable SQL SQL SQL SQL ODBC Interface ODBC Scalable SQL Scalable SQL Scalable SQL ODBC SQL ODBC Interface SQL ODBC SQL Scalable SQL Btrieve ODBC Interface SQL 2 CREATE TABLE T1 (Key INT(4), Memorandum NOTE(1000)) CREATE TABLE T2 (Key INT(4), Earned^value INT(4)) SELECT SELECT * FROM T1, T2 WHERE T1.Key = T2.Key 2-2ODBC Interface Reference Manual
T1 NOTE NOTE SELECT * FROM T2, T1 WHERE T1.Key = T2.Key (*) SELECT T1.Key, Earned^value, Memorandum FROM T1, T2 WHERE T1.Key = T2.Key ODBC SQL ODBC Interface DDF CREATE INDEX ODBC Interface SQL DROP INDEX Patients.FirstLast SQL DROP INDEX FirstLast Btrieve v6.15 DROP INDEX ODBC SQL 2-3
2-1 / CONCAT LCASE LEFT LENGTH LTRIM RIGHT RTRIM SUBSTRING UCASE ROUND TRUNCATE CURDATE CURTIME DAYOFMONTH DAYOFWEEK HOUR MINUTE MONTH SECOND YEAR NOW (Scalable SQL v4.0 ) LENGTH SUBSTRING NUMERIC DECIMAL SQL SQL ODBC SQL Microsoft ODBC 2.0 SDK ODBC SELECT {fn LCASE(keycol1)} FROM table1 () (_) SET BLANK = '_' SELECT {fn LCASE(first_name)} FROM PATIENTS SET BLANK = '^' 2-4ODBC Interface Reference Manual
ODBC Interface Scalable SQL Btrieve ODBC SQL Scalable SQL Btrieve Scalable SQL Btrieve ODBC SQL ODBC Interface SQL Scalable SQL v3.01 UNSIGNED BINARY Btrieve Scalable SQL v4.0 Btrieve Scalable SQL v4.0 v3.01 Null Scalable SQL/Btrieve Null WHERE COL1 IS NULL COL1 Null False Null WHERE HAVING IS NULL IS NOT NULL 2-2 Scalable SQL/Btrieve ODBC Scalable SQL/Btrieve ODBC CREATE TABLE Null AUTOINC(2) SQL_SMALLINT AUTOINC(2) AUTOINC(4) SQL_INTEGER AUTOINC(4) BFLOAT(4) SQL_REAL BFLOAT(4) BFLOAT(8) SQL_DOUBLE BFLOAT(8) BIT SQL_BIT ODBC SQL 2-5
Scalable SQL/Btrieve ODBC CREATE TABLE Null CHAR (Btrieve STRING) SQL_CHAR CURRENCY* SQL_BIGINT CURRENCY DATE SQL_DATE DECIMAL SQL_DECIMAL FLOAT(4) SQL_REAL FLOAT(4) FLOAT(8) SQL_FLOAT SQL_DOUBLE FLOAT(8) INT(1) SQL_TINYINT INT(1) INT(2) SQL_SMALLINT INT(2) INT(4) SQL_INTEGER INT(4) INT(8)* SQL_BIGINT INT(8) LOGICAL(1) SQL_BIT LOGICAL(1) LOGICAL(2) SQL_SMALLINT LOGICAL(2) LSTRING SQL_VARCHAR LVAR SQL_LONGVARBINARY MONEY SQL_DECIMAL NOTE SQL_LONGVARCHAR NUMERIC SQL_NUMERIC NUMERICSA (Btrieve NUMERIC SIGNED ASCII) NUMERICSTS (Btrieve NUMERIC SIGNED TRAILING SEPARATE) SQL_NUMERIC SQL_NUMERIC TIME SQL_TIME TIMESTAMP* SQL_TIMESTAMP UNSIGNED(1)* SQL_TINYINT UNSIGNED(1) UNSIGNED(2)* SQL_SMALLINT UNSIGNED(2) UNSIGNED(4)* SQL_INTEGER UNSIGNED(4) UNSIGNED(8)* SQL_BIGINT UNSIGNED(8) ZSTRING SQL_VARCHAR 2-6ODBC Interface Reference Manual
(*) Scalable SQL v4.0 Microsoft ODBC 2.0 SDK D ODBC SQL ODBC AUTOINC AUTOINC SQL_INTEGER SQL_SMALLINT AUTOINC INSERT UPDATE Scalable SQL Btrieve Scalable SQL AUTOINC AUTOINC 15 31 AUTOINC UPDATE NOTE LVAR Scalable SQL Btrieve NOTE LVAR 1 1 CREATE TABLE SELECT ODBC SQL 2-7
3 ODBC ODBC Interface ODBC API SQLGetInfo SQLDriverConnect ODBC () SQLSetPos SQL SQLExtendedFetch OEM ODBC API Microsoft ODBC Software Development Kit v2.10 (16 ) v2.5 (32 ) Watcom C/C++Microsoft Visual C++Symantec C++Borland C++ C C++ ODBC Interface for Windows NT/Windows 95 Windows NT Windows 95 ODBC 3-1
SQLGetInfo 3-1 finfotype C #define ODBC Interface SQLGetInfo ( 3-1 ) finfotype SQLGetInfo finfotype (SQL_MAX_TABLES _IN_SELECT ) finfotype Microsoft ODBC 2.0 SDK (Microsoft Press) 3-1 SQLGetInfo finfotype (#define) SQL_ACTIVE_CONNECTIONS SQL_ACTIVE_STATEMENTS SQL_DATA_SOURCE_NAME SQL_DRIVER_HDBC SQL_DRIVER_HENV SQL_DRIVER_HSTMT SQL_DRIVER_NAME SQL_DRIVER_VER SQL_FETCH_DIRECTION SQL_ODBC_API_CONFORMANCE SQL_ODBC_VER SQL_ROW_UPDATES Scalable SQL Setup 0 ODBC Interface for Windows "WINBTINT.DLL" ODBC Interface for Windows NT/Windows 95 "W32BTINT.DLL" SQL_FD_FETCH_NEXT SQL_FD_FETCH_FIRST SQL_FD_FETCH_LAST SQL_FD_FETCH_PRIOR SQL_FD_FETCH_ABSOLUTE SQL_FD_FETCH_RELATIVE SQL_FD_FETCH_BOOKMARK 1 SQL_OAC_LEVEL1 N 3-2ODBC Interface Reference Manual
finfotype (#define) SQL_ODBC_SAG_CLI_CONFORMANCE SAG SQL_OSCC_COMPLIANT SQL_SERVER_NAME SQL_SEARCH_PATTERN_ESCAPE SQL_ODBC_SQL_CONFORMANCE SQL_DATABASE_NAME SQL_DBMS_NAME SQL_DBMS_VER SQL_ACCESSIBLE_TABLES SQL_ACCESSIBLE_PROCEDURES SQL_PROCEDURES SQL_CONCAT_NULL_BEHAVIOR SQL SQL_OSC_CORE DBMS "03.01.0000" Scalable SQL N N Y NULL SQL_CB_NULL SQL_CURSOR_COMMIT_BEHAVIOR SQL_CB_PRESERVE SQL_CURSOR_ROLLBACK_BEHAVIOR SQL_CB_PRESERVE SQL_DATA_SOURCE_READ_ONLY SQL_DEFAULT_TXN_ISOLATION N ODBC Interface for Windows Scalable SQL Setup ODBC Interface for Windows NT/Windows 95 BTI.INI [Scalable SQL Engine] "isolation level" "cs" SQL_TXN_REPEATABLE_READ "ex" (exclusive) SQL_TXN _SERIALIZABLE SQL_EXPRESSIONS_IN_ORDERBY SQL_IDENTIFIER_CASE N SQL_IC_MIXED SQL_IDENTIFIER_QUOTE_CHAR (") SQL_MAX_COLUMN_NAME_LEN 20 SQL_MAX_CURSOR_NAME_LEN 18 SQL_MAX_OWNER_NAME_LEN 0 ODBC 3-3
finfotype (#define) SQL_MAX_PROCEDURE_NAME_LEN 30 SQL_MAX_QUALIFIER_NAME_LEN (Qualifier) 0 SQL_MAX_TABLE_NAME_LEN 20 SQL_MULT_RESULT_SETS SQL_MULTIPLE_ACTIVE_TXN SQL_OUTER_JOINS SQL_OWNER_TERM SQL_PROCEDURE_TERM Y Y Y "Stored Statements" SQL_QUALIFIER_NAME_SEPARATOR "." SQL_QUALIFIER_TERM SQL_SCROLL_CONCURRENCY SQL_SCROLL_OPTIONS SQL_TABLE_TERM SQL_TXN_CAPABLE SQL_USER_NAME SQL_SCCO_OPT_ROWVER SQL_SCCO_OPT_VALUES SQL_SCCO_READ_ONLY SQL_SCCO_LOCK SQL_SO_KEYSET_DRIVEN SQL_SO_DYNAMIC SQL_SO_FORWARD_ONLY "Table" DML SQL_TC_DML SQL_CONVERT_FUNCTIONS 0 SQL_NUMERIC_FUNCTIONS SQL_STRING_FUNCTIONS SQL_FN_NUM_ROUND SQL_FN_NUM_TRUNCATE SQL_FN_STR_CONCAT SQL_FN_STR_LEFT SQL_FN_STR_LTRIM SQL_FN_STR_LENGTH SQL_FN_STR_LCASE SQL_FN_STR_RIGHT SQL_FN_STR_RTRIM SQL_FN_STR_SUBSTRING SQL_FN_STR_UCASE SQL_SYSTEM_FUNCTIONS 0 3-4ODBC Interface Reference Manual
finfotype (#define) SQL_TIMEDATE_FUNCTIONS SQL_FN_TD_CURTIME SQL_FN_TD_HOUR SQL_FN_TD_MINUTE SQL_FN_TD_SECOND SQL_FN_TD_DAYOFWEEK SQL_FN_TD_CURDATE SQL_FN_TD_MONTH SQL_FN_TD_DAYOFMONTH SQL_FN_TD_YEAR SQL_CONVERT_BIGINT 0 SQL_CONVERT_BINARY 0 Scalable SQL 4 SQL_FN_TD_NOW SQL_CONVERT_BIT 0 SQL_CONVERT_CHAR 0 SQL_CONVERT_DATE 0 SQL_CONVERT_DECIMAL 0 SQL_CONVERT_DOUBLE 0 SQL_CONVERT_FLOAT 0 SQL_CONVERT_INTEGER 0 SQL_CONVERT_LONGVARCHAR 0 SQL_CONVERT_NUMERIC 0 SQL_CONVERT_REAL 0 SQL_CONVERT_SMALLINT 0 SQL_CONVERT_TIME 0 SQL_CONVERT_TIMESTAMP 0 SQL_CONVERT_TINYINT 0 SQL_CONVERT_VARBINARY 0 SQL_CONVERT_VARCHAR 0 SQL_CONVERT_LONGVARBINARY 0 SQL_TXN_ISOLATION_OPTION SQL_ODBC_SQL_OPT_IEF SQL_CORRELATION_NAME SQL_NON_NULLABLE_COLUMNS SQL_TXN_READ_COMMITTED SQL_TXN_SERIALIZABLE Y SQL_CN_ANY SQL_NNC_NULL ODBC 3-5
finfotype (#define) SQL_DRIVER_ODBC_VER SQL_LOCK_TYPES SQL_POS_OPERATIONS SQL_POSITIONED_STATEMENTS SQL_GETDATA_EXTENSIONS SQL_BOOKMARK_PERSISTENCE SQL_SPEC_STRING SQL_LCK_NO_CHANGE SQL_LCK_EXCLUSIVE SQL_LCK_UNLOCK SQL_POS_POSITION SQL_POS_REFRESHSQL_POS_UPDATE SQL_POS_DELETESQL_POS_ADD SQL_PS_POSITIONED_DELETE SQL_PS_POSITIONED_UPDATE SQL_PS_SELECT_FOR_UPDATE SQL_GD_ANY_COLUMN SQL_GD_ANY_ORDERSQL_GD_BLOCK SQL_BP_CLOSESQL_BP_DROP SQL_BP_SCROLL SQL_BP_TRANSACTION SQL_BP_UPDATE SQL_BP_OTHER_HSTMT SQL_STATIC_SENSITIVITY 0 SQL_FILE_USAGE SQL_NULL_COLLATION SQL_ALTER_TABLE SQL_COLUMN_ALIAS SQL_GROUP_BY SQL_KEYWORDS SQL_ORDER_BY_COLUMNS_IN_SE LECT SQL_FILE_NOT_SUPPORTED SQL_NC_LOW SQL_AT_ADD_COLUMN SQL_AT_DROP_COLUMN N SQL_GB_GROUP_BY_EQUALS_SELECT SQL Y SQL_OWNER_USAGE 0 SQL_QUALIFIER_USAGE 0 SQL_QUOTED_IDENTIFIER_CASE SQL_SPECIAL_CHARACTERS SQL_SUBQUERIES SQL_UNION SQL_IC_MIXED #$^ SQL_SQ_CORRELATED_SUBQUERIES SQL_U_UNION SQL_U_UNION_ALL 3-6ODBC Interface Reference Manual
finfotype (#define) SQL_MAX_COLUMNS_IN_GROUP_ BY SQL_MAX_COLUMNS_IN_INDEX SQL_MAX_COLUMNS_IN_ORDER_ BY SQL_MAX_COLUMNS_IN_SELECT 0 0 0 0 SQL_MAX_COLUMNS_IN_TABLE 32767 SQL_MAX_INDEX_SIZE 255 SQL_MAX_ROW_SIZE_INCLUDES_ LONG N SQL_MAX_ROW_SIZE 4088 SQL_MAX_STATEMENT_LEN 32767 SQL_MAX_TABLES_IN_SELECT Scalable SQL v3.01 20 Scalable SQL v4.0 00 SQL_MAX_USER_NAME_LEN 30 SQL_MAX_CHAR_LITERAL_LEN 255 SQL_TIMEDATE_ADD_INTERVALS 0 SQL_TIMEDATE_DIFF_INTERVALS 0 SQL_NEED_LONG_DATA_LEN N SQL_MAX_BINARY_LITERAL_LEN 255 SQL_LIKE_ESCAPE_CLAUSE Y SQL_QUALIFIER_LOCATION 0 ODBC 3-7
SQLDriverConnect DDF ODBC Interface Scalable SQL Btrieve SQLDriverConnect DDF SQLDriverConnect (=) (;) ODBC Interface 3-2 3-2 SQLDriverConnect DSN DB DDFPATH DATAPATH UID PWD () Scalable SQL Scalable SQL ( ) Scalable SQL ( ) ID 3-8ODBC Interface Reference Manual
ODBC Interface Smith IDSesame Patients ( 'Patients') ( (@) XQLLogin ) DDF DSN=Patients;DB=@PATIENTS;UID=Smith;PWD=Sesame ODBC Interface Smith IDSesame Patients (ODBC Interface for Windows C: BTI WIN DEMODATA ODBC Interface for Windows NT/Windows 95 C: Program Files BTI WIN32 DEMODATA ) ODBC Interface for Windows DSN=Patients;DDFPATH=C: BTI WIN DEMODATA; UID=Smith;PWD=Sesame ODBC Interface for Windows NT/Windows 95 DSN=Patients;DDFPATH=C: Program Files BTI WIN32 DEMODATA;UID=Smith;PWD=Sesame Windows NT Windows 95 ODBC 3-9
ODBC () ODBC Interface ODBC (Scalable SQL ) ODBC SELECT SELECT SELECTINSERTUPDATE DELETE SQL SELECT SQLRowCount SQLMoreResults INSERTUPDATE DELETE ODBC Interface SQL SELECT INSERTUPDATE DELETE SELECT SELECT SQLExecute SQLExecDirect SQL_SUCCESS 1. SQLRowCount 2. SQLRowCount SQLNumResultCols 3-10ODBC Interface Reference Manual
3. SQLRowCount SQLNumResultCols 4. ODBC ( SQLDescribeColSQLBindCol SQLFetch) 5. SQLMoreResults 6. SQLMoreResults SQL_NO_DATA_FOUND 7. SQLMoreResults SQL_SUCCESS 1 8. SQLMoreResults SQL_ERROR SQLRowCount SQLMoreResults ODBC Interface SQL INSERT 1 ODBC 3-11
1. SQLParamOptions ( ) 2. (SQLBindParameter rgbvalue ) (SQLBindParameter pcbvalue ) 3. SQLBindParameter 4. pcbvalue 5. SQLExecDirect (SQLPrepare SQLExecute) SQLParamOptions 3 32 1 1 2 2 rgbvalue pcbvalue SQLBindParameter SQLExecDirect SQLExecute 3-12ODBC Interface Reference Manual
Data-at-execution 64KB (16 ODBC Interface ) Microsoft ODBC 2.0 SDK (Microsoft Press) 22 SQLParamOptions SQLSetPos ODBC Interface SQLSetPos SQLSetPos MINMAXSUMAVG SQLExtendedFetch SQLSetPos Microsoft ODBC 2.0 SDK (Microsoft Press) 22 ODBC SQLSetPos 32 ODBC 3-13
ODBC Interface 1 close 1 1 2 1 4 1 4 4 1 SQL_BOOKMARK SQLGetStmtOption 3-14ODBC Interface Reference Manual
SQLExtendedFetch Microsoft ODBC 2.0 SDK (Microsoft Press) 22 ODBC SQLExtendedFetch SQL ODBC Interface SQL UPDATE DELETE SQL SQL SELECT SELECT [ALL DISTINCT] select-list FROM table-name FOR UPDATE OF [column-name [, column-name]...] FOR UPDATE OF SELECT SQLSetConnectOption SQL_CURSOR_DYNAMIC (Concurrency) SQL_CONCUR_ROWVER SQLExtendedFetch SQL_POSITION SQLSetPos ODBC 3-15
SQLGetCursorName SQLSetCursorName SQL (SQLPrepare SQLExecute ) (SQLExecDirect ) DELETE FROM table-name WHERE CURRENT OF cursor-name UPDATE table-name SET column-identifier = {constant-value dynamic-parameter} [, column-identifier = {constant-value dynamic-parameter}]... WHERE CURRENT OF cursor-name SELECT... FOR UPDATE OF SELECT... FOR UPDATE OF 1 MINMAXSUMAVG UPDATE SET SELECT Data-at-execution SQL Microsoft ODBC 2.0 SDK (Microsoft Press) 22 ODBC SQLSetPos 3-16ODBC Interface Reference Manual
SQLExtendedFetch ODBC Interface v2.0 SQLExtendedFetch SQL_FETCH_RELATIVE SQL_FETCH_ABSOLUTE SELECT SELECT ( ) OEM DOS Windows OEM ODBC Interface v2.0 DLL OEM Windows v3.1windows 95 Windows NT ANSI DLL DLL ODBC Administrator SQLDriverConnect [OEM/ANSI ] ODBC 3-17
A ODBC ODBC Interface ODBC API Scalable SQL Btrieve ID (Windows v3.1 ) ODBC Scalable SQL Scalable SQL API ODBC API XQLCallback XQLVersion ODBC Btrieve ODBC API SQLGetConnectOption SQLSetConnectOption ODBC Interface ID (Windows v3.1 ) AODBC A-1
A-1 C A-1 ODBC C ODBC HDBC RETCODE UDWORD UWORD C long integer long (32-bit) integer long integer short (16-bit) integer SQLSetConnectOption SQLGetConnectOption A-2 SQLSetConnectOption SQLGetConnectOption A-2 SQLSetConnectOption SQLGetConnectOption ODBC foption ODBC Interface SQLSetConnectOption 1000 SQLGetConnectOption 1001 ID SQLGetConnectOption 1002 (Windows v3.1 ) SQLSetConnectOption 1003 SQLGetConnectOption 1004 SQLGetConnectOption 1005 SQLGetConnectOption 1006 SQLGetConnectOption 1007 A-2ODBC Interface Reference Manual
SQLGetConnectOption C/C++ RETCODE SQLGetConnectOption( hdbc, foption, pvparam ) HDBC hdbc; UWORD foption; UDWORD pvparam; SQLSetConnectOption C/C++ RETCODE SQLSetConnectOption( hdbc, foption, vparam ) HDBC hdbc; UWORD foption; UDWORD vparam; Option 1000: ODBC Interface Scalable SQL Btrieve SQLSetConnectOption SQL A-3 SQLSetConnectOption AODBC A-3
A-3 Option 1000 SQLSetConnectOption hdbc SQLAllocConnect foption (1000) vparam Null ( ) SQLSetConnect Option UDWORD Scalable SQL Btrieve ODBC A-3 SQLSetConnectOption ( ID )SQLSetConnectOption SQLGetConnectOption SQLGetConnectOption ODBC ( UDWORD ) A-4ODBC Interface Reference Manual
SQLGetConnectOption SQL API SQLGetConnectOption ODBC SQLError ID SQLGetConnectOption Option 1001: Scalable SQL A-4 SQLGetConnectOption A-4 Option 1001 SQLGetConnectOption hdbc SQLAllocConnect foption (1001) vparam UDWORD AODBC A-5
A-5 A-5 SQLGetConnectOption Version 4 : XVER : XVER XVER 4 Scalable SQL 2 2 2 4 2 0 1 ID 2 3 4 ( 2 ) 2 2 2 ID 3 Null "@" server volume: Netware 2 65535 4 NWSV Scalable SQL for Netware (Server Edition) RQST Scalable SQL Requester WIN3 Scalable SQL for Windows A-6ODBC Interface Reference Manual
A-5 SQLGetConnect Option SQLGetConnectOption Option 1002: ID ODBC ID ID A-6 ID SQLGetConnectOption A-6 Option 1002 SQLGetConnectOption hdbc SQLAllocConnect foption (1002) vparam ID short integer UDWORD ID vparam short integer SQLGetConnect Option ID ( ) AODBC A-7
(Scalable SQL Btrieve ) SQLGetConnectOption Option 1003: (Windows v3.1 ) ODBC Interface for Windows Btrieve MicroKernel ODBC Interface for Windows NT / Windows 95 A-7 SQLSetConnectOption A-7 Option 1003 SQLSetConnectOption hdbc SQLAllocConnect foption (1003) vparam UDWORD A-8ODBC Interface Reference Manual
A-8 A-8 SQLSetConnectOption Callback 2 : 0 1 2 : 0 4 4 (4 ) 0 ( ) 1 0 4 4 (4 ) 0 () 1 0 Scalable SQL Programmer's Manual XQLCallback Btrieve Programmer's Manual AODBC A-9
SQLSetConnectOption SQLSetConnectOption SQLSetConnectOption 1. 2. ODBC ( UDWORD ) SQLSetConnectOption SQL API SQLSetConnectOption ODBC SQLError ( ID ) SQLSetConnectOption Option 1004: ASCII A-10ODBC Interface Reference Manual
A-9 SQLGetConnectOption A-9 Option 1004 SQLGetConnectOption hdbc SQLAllocConnect foption (1004) vparam UDWORD A-10 A-10 SQLGetConnectOption Convert 2 : ASCII 0ASCII 1 2 2 2 DECIMALMONEYNUMERICNUMERICSA NUMERICSTS 0 2 ( 0 ) ( 1 ) 4 ( 0 ) ASCII ( 1 ) AODBC A-11
4 4 0 ASCII 1 30 29 2 0: 0 1 2 1: 2-1 A-10 SQLGetConnectOption SQLGetConnectOption Option 1005: A-11 SQLGetConnectOption A-12ODBC Interface Reference Manual
A-11 Option 1005 SQLGetConnectOption hdbc SQLAllocConnect foption (1005) vparam UDWORD A-12 A-12 SQLGetConnectOption Mask Validation 2 2 2 2 4 SQLGetConnectOption SQL_SUCCESS SQLGetConnectOption AODBC A-13
Option 1006: A-13 SQLGetConnectOption A-13 Option 1006 SQLGetConnectOption hdbc SQLAllocConnect foption (1006) vparam UDWORD A-14 A-14 SQLGetConnectOption Default Mask Retrieval 2 2 2 2 4 A-14ODBC Interface Reference Manual
A-14 SQLGetConnect Option SQLGetConnectOption Option 1007: A-15 SQLGetConnectOption A-15 Option 1007 SQLGetConnectOption hdbc SQLAllocConnect foption (1007) vparam UDWORD AODBC A-15
A-16 A-16 SQLGetConnectOption Value Validation 4 short integer (2 ) 4 : : 2 4 2 1 1 A-16 SQLGetConnect Option SQLGetConnectOption SQLError A-16ODBC Interface Reference Manual
B ODBC API ODBC Interface C C/C++ C/C++ 16 32 16 32 ODBC.LIB ODBC32.LIB SQL.H SQLEXT.H Microsoft ODBC Software Development Kit (ODBC SDK) Microsoft Developer Network Microsoft Visual C++ Windows C/C++ ODBC API B-1
ODBC.LIB Microsoft ODBC SDK Windows C/C++ 16 ODBC ODBC.DLL ODBC32.LIB Microsoft ODBC SDK Windows C/C++ 32 ODBC ODBC32.DLL C/C++ ODBCSAMP.C 1. 2. (Microsoft Visual C++ QuickWin Borland C++ EasyWin ) 3. ODBCSAMP.C Windows Microsoft Visual C++ v1.52 (16 )v4.0 (32 ) Watcom C v10.5 (16 32 ) make Samples B-2ODBC Interface Reference Manual
README C/C++ ODBC ODBC.LIB ODBC32.LIB ODBC SQLAllocEnv SQLAllocConnect SQLConnect SQLAllocStmt SQLSetStmtOption SQLExecDirect SQLNumResultCols SQLDescribeCol SQLBindCol SQLExtendedFetch SQLError SQLFreeStmt SQLDisconnect SQLFreeConnect SQLFreeEnv ODBC ODBC ODBC SQL SQL ODBC ODBC ODBC ODBC B-3
B-1 C (ODBCSAMP.C) /************************************************************************* ** ** Copyright 1982-1995 Btrieve Technologies, Inc. All Rights Reserved ** *************************************************************************/ /************************************************************************* ODBCSAMP.C This program demonstrates the C/C++ ODBC interface for Scalable SQL and Btrieve under MS Windows. It uses ODBC functions to fetch records from the 'dental' database that is included with this product. IMPORTANT: Be sure to set up a data source mapped to this database; the data source name must match with the name used in the SQLConnect call. See 'IMPORTANT', below. The ODBC Software Development Kit is required for developing ODBC-enabled applications. It can be obtained from Microsoft as part of the Developer Network subscription service. The necessary components are also shipped as part of the Visual C++ product (v1.5 or greater). *************************************************************************/ #include <windows.h> #include <stdlib.h> #include <stdio.h> #include <string.h> /************************************************************************* The following files are found in the ODBC SDK, a Microsoft product. *************************************************************************/ #include <sql.h> /* ODBC SQL function prototypes, part 1 */ #include <sqlext.h> /* ODBC SQL function prototypes, part 2 */ /************************************************************************* The following pragmas allow Watcom's linker to link with the 32-bit library found in the ODBC SDK. *************************************************************************/ #if defined( WATCOMC ) && defined( BTI_WIN_32 ) #pragma aux SQLError "*"; #pragma aux SQLAllocEnv "*"; #pragma aux SQLAllocConnect "*"; #pragma aux SQLConnect "*"; #pragma aux SQLAllocStmt "*"; #pragma aux SQLSetStmtOption "*"; #pragma aux SQLExecDirect "*"; #pragma aux SQLBindCol "*"; #pragma aux SQLNumResultCols "*"; #pragma aux SQLDescribeCol "*"; #pragma aux SQLFetch "*"; #pragma aux SQLExtendedFetch "*"; #pragma aux SQLFreeStmt "*"; B-4ODBC Interface Reference Manual
B-1 () C (ODBCSAMP.C) #pragma aux SQLDisconnect "*"; #pragma aux SQLFreeConnect "*"; #pragma aux SQLFreeEnv "*"; #endif /************************************************************************* Constants *************************************************************************/ // ** IMPORTANT ** // You must have a data source called "BTI_ODBC_SAMPLEDB" configured for this // sample to work. #define BTI_SAMPLE_DATA_SOURCE "BTI_ODBC_SAMPLEDB" #define DOCTOR_LEN 12 #define DOCTOR_COL 1 #define PHONE_LEN 12 #define PHONE_COL 2 #define FIRST_LAST_LEN 33 #define FIRST_LAST_COL 3 #define ROWSET_SIZE 10 #define MAX_FIELD_LENGTH 44 typedef struct ColDescs { UCHAR szcolname[ MAX_FIELD_LENGTH + 1 ]; SWORD pcbcolname; SWORD fsqltype; UDWORD pcbcoldef; SWORD pibscale; SWORD pfnullable; } ColStruct; /************************************************************************* generic error handler *************************************************************************/ void CheckError( RETCODE status, HENV henv, HDBC hdbc, HSTMT hstmt ) { RETCODE errstat = SQL_SUCCESS ; char szsqlstate[ 8 ]; LONG fnativeerror = 0; static char szerrormsg[ 256 ]; short cberrormsg = 0; /* return directly if no error has occurred. */ if ( status == SQL_SUCCESS ) ; else if ( status == SQL_ERROR status == SQL_SUCCESS_WITH_INFO ) B-5
B-1 () C (ODBCSAMP.C) { szerrormsg[ 0 ] = 0; szsqlstate[ 0 ] = 0; /* if an error or SQL_SUCCESS-with-info occurs, there may be multiple messages associated with the problem; retrieve and print them all. */ while ( errstat == SQL_SUCCESS ) { errstat = SQLError( henv, hdbc, hstmt, szsqlstate, &fnativeerror, szerrormsg, sizeof(szerrormsg), &cberrormsg ); printf( "*** Status: %s nsqlstate: %s nmessage: " "%s nnative Error: %ld n n", status == SQL_ERROR? "Error" : "SQL_SUCCESS with info", szsqlstate, szerrormsg, fnativeerror ); } // end while loop } // end else if ( status == SQL_ERROR status == SQL_SUCCESS_WITH_INFO ) else printf( " nerror status = %ld n", status ); } // end CheckError /************************************************************************* main *************************************************************************/ void main( void ) { char userid [] = ""; char password[] = ""; char header [] = " DOCTOR PHONE NUMBER PATIENT"; ColStruct * colbuf = NULL; SWORD colposition = 0; UWORD fetchoption = 0; UDWORD recordindex = 0; B-6ODBC Interface Reference Manual
B-1 () C (ODBCSAMP.C) char statement[ 300 ]; RETCODE status = SQL_SUCCESS; SDWORD statlen = 0; UCHAR szdoctor[ ROWSET_SIZE ][ DOCTOR_LEN + 1 ]; SDWORD cbdoctor[ ROWSET_SIZE ]; UCHAR szphone[ ROWSET_SIZE ][ PHONE_LEN + 1 ]; SDWORD cbphone[ ROWSET_SIZE ]; UCHAR szfirst_last[ ROWSET_SIZE ][ FIRST_LAST_LEN + 1 ]; SDWORD cbfirst_last[ ROWSET_SIZE ]; UDWORD bufferlength = 0; SWORD numresultcols = 0; UDWORD rowlen = 0; UDWORD rowsfetched = 0; UWORD rowstatus[ ROWSET_SIZE ]; /* ODBC variables. */ HENV henv = SQL_NULL_HENV; HDBC hdbc = SQL_NULL_HDBC; HSTMT hstmt = SQL_NULL_HSTMT; printf( "SQL-Level Functions Sample Program Started n" ); /* do ODBC standard setup */ status = SQLAllocEnv( &henv ); CheckError( status, henv, hdbc, hstmt ); status = SQLAllocConnect( henv, &hdbc ); CheckError( status, henv, hdbc, hstmt ); /* login to ODBC data source */ /* Dictionary and data files are in the working directory. */ status = SQLConnect( hdbc, (UCHAR FAR *)BTI_SAMPLE_DATA_SOURCE, strlen( BTI_SAMPLE_DATA_SOURCE ), userid, SQL_NTS, password, SQL_NTS ); CheckError( status, henv, hdbc, hstmt ); /* ODBC driver sets blank character to underscore during connect */ if ( status!= SQL_SUCCESS && status!= SQL_SUCCESS_WITH_INFO ) printf( "SQLConnect failed n" ); /* allocate an ODBC statement */ if ( status == SQL_SUCCESS ) { status = SQLAllocStmt( hdbc, (HSTMT FAR *)&hstmt ); CheckError( status, henv, hdbc, hstmt ); if ( status!= SQL_SUCCESS ) B-7
B-1 () C (ODBCSAMP.C) printf( "SQLAllocStmt failed, status: %d n", status ); } // end if ( status == SQL_SUCCESS ) /* set appropriate statement options for a read-only block cursor. */ SQLSetStmtOption( hstmt, SQL_CONCURRENCY, SQL_CONCUR_READ_ONLY ); SQLSetStmtOption( hstmt, SQL_CURSOR_TYPE, SQL_CURSOR_DYNAMIC ); SQLSetStmtOption( hstmt, SQL_ROWSET_SIZE, ROWSET_SIZE ); /* execute SQL select statement */ if ( status == SQL_SUCCESS ) { strcpy( statement, "SELECT Doctor, Phone, First^Name * Last^Name FROM Patients, Appointments WHERE Patients.ID = Appointments.ID"); statlen = strlen( statement ); printf( "%s n", statement ); status = SQLExecDirect( hstmt, statement, statlen ); CheckError( status, henv, hdbc, hstmt ); if ( status!= SQL_SUCCESS ) printf( "SQLExecDirect failed, status: %d n", status ); } // end if ( status == SQL_SUCCESS ) /* allocate a buffer big enough to hold the rowset */ if ( status == SQL_SUCCESS ) { rowlen = 0; status = SQLNumResultCols( hstmt, &numresultcols ); CheckError( status, henv, hdbc, hstmt ); if ( status == SQL_SUCCESS ) colbuf = malloc( numresultcols * sizeof ( ColStruct )); if ( colbuf == NULL ) { printf( "Memory allocation failed n" ); status = SQL_ERROR; } // end if ( colbuf == NULL ) /* get column description info into colbuf */ for ( colposition = 0; (colposition < numresultcols) && (status == SQL_SUCCESS); colposition++ ) { colbuf[ colposition ].pcbcolname = MAX_FIELD_LENGTH; status = SQLDescribeCol( hstmt, colposition + 1, (UCHAR FAR *)&colbuf[ colposition ].szcolname, MAX_FIELD_LENGTH, &colbuf[ colposition ].pcbcolname, &colbuf[ colposition ].fsqltype, &colbuf[ colposition ].pcbcoldef, B-8ODBC Interface Reference Manual
B-1 () C (ODBCSAMP.C) &colbuf[ colposition ].pibscale, &colbuf[ colposition ].pfnullable ); } // end for ( colposition = 0;... } // end if ( status == SQL_SUCCESS ) /* bind columns */ if ( status == SQL_SUCCESS ) { status = SQLBindCol( hstmt, DOCTOR_COL, colbuf[ DOCTOR_COL - 1 ].fsqltype, szdoctor, DOCTOR_LEN + 1, cbdoctor ); } if ( status == SQL_SUCCESS ) { status = SQLBindCol( hstmt, PHONE_COL, colbuf[ PHONE_COL - 1 ].fsqltype, szphone, PHONE_LEN + 1, cbphone ); } if ( status == SQL_SUCCESS ) { status = SQLBindCol( hstmt, FIRST_LAST_COL, colbuf[ FIRST_LAST_COL - 1 ].fsqltype, szfirst_last, FIRST_LAST_LEN + 1, cbfirst_last ); } /* FETCH UP TO 10 RECORDS WITH A SINGLE SQLExtendedFetch() CALL */ if ( status == SQL_SUCCESS ) { printf( " n%s n", header ); fetchoption = SQL_FETCH_FIRST; while ( status == SQL_SUCCESS ) { /* Get buffers full of records. */ status = SQLExtendedFetch( hstmt, fetchoption, 1, &rowsfetched, rowstatus ); B-9
B-1 () C (ODBCSAMP.C) if (( status!= SQL_SUCCESS ) && ( status!= SQL_NO_DATA_FOUND )) { CheckError( status, henv, hdbc, hstmt ); printf ("SQLExtendedFetch failed, status: %d n", status); break; } /* Display the records in the column buffers, one record per line. */ for ( recordindex = 0; ((recordindex < rowsfetched) && ((status == SQL_SUCCESS) (status == SQL_SUCCESS_WITH_INFO))); recordindex++ ) { printf( " %-13.13s%-18.18s%s n", szdoctor[ recordindex ], szphone[ recordindex ], szfirst_last[ recordindex ]); } fetchoption = SQL_FETCH_NEXT; } // end while ( status == SQL_SUCCESS ) } // if ( status == SQL_SUCCESS ) SQLFreeStmt( hstmt, SQL_CLOSE ); SQLDisconnect( hdbc ); SQLFreeConnect( hdbc ); SQLFreeEnv( henv ); if (colbuf!= NULL) free( colbuf ); exit( 0 ); } // end main B-10ODBC Interface Reference Manual
32 ODBC B-2 Access 1-3 ANSI SQL-921-7 ANSI 1-6 API 1-11 ASCII A-10 AUTOINC 2-7 Borland 1-3 BTI.INI 1-141-16 Btrieve 1-13 C/C++ B-3 1-3 CREATE TABLE NOTE LVAR 2-7 CURRENCY 1-4 Data-at-execution 3-133-16 DDF 3-9 1-21 DELETE... WHERE CURRENT OF1-6 Delphi 1-3 INSERT AUTOINC 2-7 INTEGER(8)1-4 INTEGER 1-4 LVAR 2-7 Microsoft Foundation Classes1-3 Microsoft Visual C++1-3 Microsoft 1-3 NOTE 2-7 2-3 ODBC32.DLL1-10B-2 ODBC Administrator3-17 ODBC API 3-1 ODBC.DLL1-10 ODBC.INI 1-14 ODBCINST.INI 1-14 ODBC Interface 1-15 ODBC Interface 1-14 ODBC v2.0 1-1 ODBC 1-3 ODBC 1-3 ODBC 1-1 ODBC A-1 OEM 3-17 OEM 1-63-17 SAG CLI1-7 Scalable SQL v4.01-4 Scalable SQL 1-13 SELECT NOTE LVAR 2-7 SQL_BOOKMARK3-14 SQL_FETCH_ABSOLUTE1-6 SQL_FETCH_RELATIVE1-6 SQL_INTEGER 2-7 SQL_SMALLINT 2-7 SQLDescribeParam1-5 SQLDriverConnect3-8 1
SQLExtendedFetch1-63-17 SQLForeignKeys1-5 SQLGetConnectOption A-2 A-4 SQLGetInfo 3-2 SQLGetStmtOption3-14 SQLMoreResults1-63-11 SQLParamOptions1-5 SQLRowCount3-10 SQLSetConnectOption1-6 A-2 A-2 SQLSetPos1-43-13 1-4 1-4 1-4 SQL 1-4 SQL 1-63-15 SQL 1-10 2-1 2-2 TIMESTAMP 1-4 UNSIGNED 1-4 UNSIGNED(1, 2, 4, 8)1-4 UPDATE... WHERE CURRENT OF1-6 UPDATE AUTOINC 2-7 Visual Basic 1-3 Visual C++1-3 W32BTINT.DLL1-10 WINBTINT.DLL1-10 Windows 951-2 Windows 95 1-21-10 Windows NT1-2 Windows NT 1-21-10 Windows 1-10 X/Open1-7 1-7 1-7 1-9 B-2 B-3 1-19 3-15 3-15 SQL.HB-1 SQLEXT.HB-1 ODBC.LIBB-2 ODBC32.LIBB-2 2-3 1-4 A-3 3-11 1-3 1-10 2-2 IDA-7 /1-7 A-15 A-12 /1-7 1-7 2ODBC Interface Reference Manual
1-9 x x A-8 1-7 ODBC Interface1-19 1-22 1-5 B-1 DDF 3-9 ODBC B-3 3-9 1-1 2-4 1-53-103-13 1-2 1-2 1-2 ID ID A-7 3-8 3-8 3-17 ODBC 1-14 1-20 3-17 AUTOINC2-7 CURRENCY1-4 INTEGER(8)1-4 LVAR2-7 NOTE2-7 ODBC C A-2 Scalable SQL Btrieve ODBC 2-5 TIMESTAMP1-4 UNSIGNED1-4 1-4 1-22 1-22 1-22 1-20 1-21 1-22 1-21 1-22 A-10 2-2 2-3 A-14 DLL3-17 1-21 3-9 A-5 3-11 1-5 3-113-16 1-53-11 3
Btrieve1-13 Scalable SQL1-13 1-123-1 1-14 1-12 3-1 1-123-1 1-13 1-12 2-2 x 1-43-13 3-13 1-53-10 3-10 3-11 2-1 3-17 1-6 ix x 1-9 A-12 A-14 1-2 1-4 1 1-11 2 1-11 4ODBC Interface Reference Manual