see changelog

This commit is contained in:
Eddie Runia
1999-07-20 13:23:36 +00:00
parent e02057a532
commit 8b7efedb8b
13 changed files with 2253 additions and 0 deletions

View File

@@ -1,3 +1,10 @@
19990721-15:10 CET Felipe Coury
+ bldodbc.bat; hbodbc.b32; source/odbc/bld32exe.bat; source/odbc/harbour.mdb;
source/odbc/hb32.bat; source/odbc/odbc.c; source/odbc/odbc.txt;
source/odbc/odbc32.def; source/odbc/sql.ch; source/odbc/sql.h;
source/odbc/sqlext.h; source/odbc/sqltypes.h; source/odbc/testodbc.prg
First version of ODBC implemented.
19990720-14:35 CET Matthew Hamilton
* tests/working/inifiles.prg
New version installed

3
harbour/bldodbc.bat Normal file
View File

@@ -0,0 +1,3 @@
@echo off
tmake -fhbodbc.b32
implib .\libs\b32\odbc32.lib source\odbc\odbc32.def

15
harbour/hbodbc.b32 Normal file
View File

@@ -0,0 +1,15 @@
# makefile for Borland C/C++ 32 bits
# ODBC Harbor Library and Import Library makefile
.path.c = source\odbc
.path.h = source\odbc;include
.path.lib = libs\b32
.path.obj = obj
libs\b32\hbodbc.lib : odbc.obj
odbc.obj : odbc.c
.c.obj :
bcc32 -c -O2 -I.\include;.\source\hbpp -o$@ $<
tlib .\libs\b32\hbodbc.lib -+$@,,
implib .\libs\b32\odbc32.lib source\odbc\odbc32.def

View File

@@ -0,0 +1,28 @@
@echo off
IF A%1 == A GOTO :SINTAX
IF A%2 == A GOTO :NOOUTPUT
echo -O2 -e%2.exe -I..\..\include ..\..\source\vm\hvm.c %1.c > b32.bc
echo ..\..\libs\b32\harbour.lib ..\..\libs\b32\terminal.lib >> b32.bc
echo ..\..\libs\b32\hbgt.lib ..\..\libs\b32\hbpp.lib >> b32.bc
echo ..\..\libs\b32\hbodbc.lib ..\..\libs\b32\odbc32.lib >> b32.bc
bcc32 @b32.bc
del b32.bc
GOTO :END
:NOOUTPUT
echo -O2 -e%1.exe -I..\..\include ..\..\source\vm\hvm.c %1.c > b32.bc
echo ..\..\libs\b32\harbour.lib ..\..\libs\b32\terminal.lib >> b32.bc
echo ..\..\libs\b32\hbgt.lib ..\..\libs\b32\hbpp.lib >> b32.bc
echo ..\..\libs\b32\hbodbc.lib ..\..\libs\b32\odbc32.lib >> b32.bc
bcc32 @b32.bc
del b32.bc
GOTO :END
:SINTAX
ECHO syntax: BuildExe Harbour_Output_Filename [Exe_Output_Filename]
ECHO Use Harbour_Output_Filename and Exe_Output_Filename without extensions
ECHO\
:END

Binary file not shown.

158
harbour/source/odbc/odbc.c Normal file
View File

@@ -0,0 +1,158 @@
/*
* $Id$
*
Harbour Project source code
This file contains source for first odbc routines.
Copyright (C) 1999 Antonio Linares
www - http://www.harbour-project.org
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version, with one exception:
The exception is that if you link the Harbour Runtime Library (HRL)
and/or the Harbour Virtual Machine (HVM) with other files to produce
an executable, this does not by itself cause the resulting executable
to be covered by the GNU General Public License. Your use of that
executable is in no way restricted on account of linking the HRL
and/or HVM code into it.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA (or visit
their web site at http://www.gnu.org/).
*/
#include <windows.h>
#include <limits.h>
#include <malloc.h>
#include <math.h>
#include <stdlib.h>
#include <extend.h>
#include <itemapi.h>
#include <ctype.h>
#include <init.h>
#include "harb.h"
#include <sql.h>
#include <sqlext.h>
/* ODBC32 */
HARBOUR HB_SQLALLOCEN( void );
HARBOUR HB_SQLALLOCCO( void );
HARBOUR HB_SQLDRIVERC( void );
HARBOUR HB_SQLDISCONN( void );
HARBOUR HB_SQLFREECON( void );
HARBOUR HB_SQLFREEENV( void );
HARBOUR HB_SQLALLOCST( void );
HARBOUR HB_SQLFREESTM( void );
HARBOUR HB_SQLEXECDIR( void );
HARBOUR HB_SQLFETCH( void );
HARBOUR HB_SQLGETDATA( void );
HB_INIT_SYMBOLS_BEGIN( odbc__InitSymbols )
{ "SQLALLOCEN", FS_PUBLIC, HB_SQLALLOCEN , 0 },
{ "SQLALLOCCO", FS_PUBLIC, HB_SQLALLOCCO , 0 },
{ "SQLDRIVERC", FS_PUBLIC, HB_SQLDRIVERC , 0 },
{ "SQLDISCONN", FS_PUBLIC, HB_SQLDISCONN , 0 },
{ "SQLFREECON", FS_PUBLIC, HB_SQLFREECON , 0 },
{ "SQLFREEENV", FS_PUBLIC, HB_SQLFREEENV , 0 },
{ "SQLALLOCST", FS_PUBLIC, HB_SQLALLOCST , 0 },
{ "SQLFREESTM", FS_PUBLIC, HB_SQLFREESTM , 0 },
{ "SQLEXECDIR", FS_PUBLIC, HB_SQLEXECDIR , 0 },
{ "SQLFETCH", FS_PUBLIC, HB_SQLFETCH , 0 },
{ "SQLGETDATA", FS_PUBLIC, HB_SQLGETDATA , 0 }
HB_INIT_SYMBOLS_END( odbc__InitSymbols );
#pragma odbc__InitSymbols
HARBOUR HB_SQLALLOCEN( void ) // NNECT() @hEnv --> nRetCode
{
HENV hEnv;
RETCODE ret = SQLAllocEnv( &hEnv );
hb_stornl( ( LONG ) hEnv, 1 );
hb_retni( ret );
}
HARBOUR HB_SQLALLOCCO( void ) // NNECT() hEnv, @ hDbc --> nRetCode
{
HDBC hDbc;
RETCODE ret = SQLAllocConnect( ( HENV ) hb_parnl( 1 ), &hDbc );
hb_stornl( ( LONG ) hDbc, 2 );
hb_retni( ret );
}
HARBOUR HB_SQLDRIVERC( void ) // ONNECT() hDbc, @ cConnectString, lPrompt --> nRetCode
{
BYTE bBuffer1[ 1024 ];
SWORD wLen;
RETCODE ret = SQLDriverConnect( ( HDBC ) hb_parnl( 1 ),
GetDesktopWindow(),
hb_parc( 2 ), strlen(hb_parc(2)),
bBuffer1, 1024, &wLen, SQL_DRIVER_COMPLETE ) ;
hb_storc( bBuffer1 , 3 );
hb_retni( ret );
}
HARBOUR HB_SQLDISCONN( void ) // ECT() hDbc --> nRetCode
{
hb_retni( SQLDisconnect( ( HDBC ) hb_parnl( 1 ) ) );
}
HARBOUR HB_SQLFREECON( void ) // NECT() hDbc --> nRetCode
{
hb_retni( SQLFreeConnect( ( HDBC ) hb_parnl( 1 ) ) );
}
HARBOUR HB_SQLFREEENV( void ) // hEnv --> nRetCode
{
hb_retni( SQLFreeEnv( ( HENV ) hb_parnl( 1 ) ) );
}
HARBOUR HB_SQLALLOCST() // MT() hDbc, @ hStmt --> nRetCode
{
HSTMT hStmt;
hb_retni( SQLAllocStmt( ( HDBC ) hb_parnl( 1 ), &hStmt ) );
hb_stornl( ( LONG ) hStmt, 2 );
}
HARBOUR HB_SQLFREESTM() // T() hStmt, nType --> nRetCode
{
hb_retni( SQLFreeStmt( ( HSTMT ) hb_parnl( 1 ), hb_parni( 2 ) ) );
}
HARBOUR HB_SQLEXECDIR( void ) // ECT() hStmt, cStatement --> nRetCode
{
hb_retni( SQLExecDirect( ( HSTMT ) hb_parnl( 1 ), hb_parc( 2 ), SQL_NTS ) );
}
HARBOUR HB_SQLFETCH( void ) // hStmt --> nRetCode
{
hb_retni( SQLFetch( ( HSTMT ) hb_parnl( 1 ) ) );
}
HARBOUR HB_SQLGETDATA( void ) // ( hStmt, nField, nType, nLen, @cBuffer ) --> nRetCode
{
SDWORD lLen = ( SDWORD ) hb_parnl( 4 );
PTR bBuffer = hb_xgrab( lLen );
WORD wType = hb_parni( 3 );
WORD wResult = SQLGetData( ( HSTMT ) hb_parnl( 1 ), hb_parni( 2 ),
wType, ( PTR ) bBuffer, lLen, &lLen );
if( wResult == SQL_SUCCESS || wResult == SQL_SUCCESS_WITH_INFO )
hb_storclen( ( LPSTR ) bBuffer,
( WORD ) lLen, 5 );
hb_xfree( ( PTR ) bBuffer );
hb_retni( wResult );
}

View File

@@ -0,0 +1,24 @@
First ODBC routines library
Felipe Coury <fcoury@flexsys-ci.com>
How to create ODBC libraries
There are two libraries that must be created: ODBC32.LIB,
that is an import functions and links ODBC access functions
prototypes to ODBC32.DLL and HBODBC.LIB, with the HB_*
ODBC API container functions.
In order to generate the libraries and run the test, you
need to put all files in HARBOUR\SOURCE\ODBC directory (new),
except hbodbc.b32 and bldodbc.bat that goes on HARBOUR\ root
directory.
To build the libraries, run bldodbc.bat. If everything goes
correct, you'll have HARBOUR\LIBS\ODBC32.LIB and HBODBC.LIB.
To build the sample program, go to HARBOUR\SOURCE\ODBC and
run hb32 testodbc. Then set your Harbour root directory
into HARBOUR_DIR environmental variable (ie,
SET HARBOUR_DIR=C:\HARBOUR) and run TESTODBC. If everything
goes ok, you'll see a list of functions.

View File

@@ -0,0 +1,180 @@
LIBRARY ODBC32
EXPORTS
CloseODBCPerfData @078
CollectODBCPerfData @079
CursorLibLockDbc @080
CursorLibLockDesc @081
CursorLibLockStmt @082
CursorLibTransact @084
LockHandle @086
ODBCGetTryWaitValue @083
ODBCInternalConnectW @087
ODBCQualifyFileDSNW @300
ODBCSetTryWaitValue @085
ODBCSharedHardConnect @088
ODBCSharedHardDisconnect @089
ODBCSharedPerfMon @090
ODBCSharedSoftConnect @091
ODBCSharedSoftDisconnect @092
ODBCSharedTraceFlag @299
OpenODBCPerfData @093
PostComponentError @094
PostODBCComponentError @095
PostODBCError @096
SQLAllocConnect @000
SQLAllocEnv @001
SQLAllocHandle @023
SQLAllocHandleStd @076
SQLAllocStmt @002
SQLBindCol @003
SQLBindParam @024
SQLBindParameter @071
SQLBrowseConnect @054
SQLBrowseConnectA @254
SQLBrowseConnectW @154
SQLBulkOperations @077
SQLCancel @004
SQLCloseCursor @025
SQLColAttribute @026
SQLColAttributeA @226
SQLColAttributeW @126
SQLColAttributes @005
SQLColAttributesA @205
SQLColAttributesW @105
SQLColumnPrivileges @055
SQLColumnPrivilegesA @255
SQLColumnPrivilegesW @155
SQLColumns @039
SQLColumnsA @239
SQLColumnsW @139
SQLConnect @006
SQLConnectA @206
SQLConnectW @106
SQLCopyDesc @027
SQLDataSources @056
SQLDataSourcesA @256
SQLDataSourcesW @156
SQLDescribeCol @007
SQLDescribeColA @207
SQLDescribeColW @107
SQLDescribeParam @057
SQLDisconnect @008
SQLDriverConnect @040
SQLDriverConnectA @240
SQLDriverConnectW @140
SQLDrivers @070
SQLDriversA @270
SQLDriversW @170
SQLEndTran @028
SQLError @009
SQLErrorA @209
SQLErrorW @109
SQLExecDirect @010
SQLExecDirectA @210
SQLExecDirectW @110
SQLExecute @011
SQLExtendedFetch @058
SQLFetch @012
SQLFetchScroll @029
SQLForeignKeys @059
SQLForeignKeysA @259
SQLForeignKeysW @159
SQLFreeConnect @013
SQLFreeEnv @014
SQLFreeHandle @030
SQLFreeStmt @015
SQLGetConnectAttr @031
SQLGetConnectAttrA @231
SQLGetConnectAttrW @131
SQLGetConnectOption @041
SQLGetConnectOptionA @241
SQLGetConnectOptionW @141
SQLGetCursorName @016
SQLGetCursorNameA @216
SQLGetCursorNameW @116
SQLGetData @042
SQLGetDescField @032
SQLGetDescFieldA @232
SQLGetDescFieldW @132
SQLGetDescRec @033
SQLGetDescRecA @233
SQLGetDescRecW @133
SQLGetDiagField @034
SQLGetDiagFieldA @234
SQLGetDiagFieldW @134
SQLGetDiagRec @035
SQLGetDiagRecA @235
SQLGetDiagRecW @135
SQLGetEnvAttr @036
SQLGetFunctions @043
SQLGetInfo @044
SQLGetInfoA @244
SQLGetInfoW @144
SQLGetStmtAttr @037
SQLGetStmtAttrA @237
SQLGetStmtAttrW @137
SQLGetStmtOption @045
SQLGetTypeInfo @046
SQLGetTypeInfoA @246
SQLGetTypeInfoW @146
SQLMoreResults @060
SQLNativeSql @061
SQLNativeSqlA @261
SQLNativeSqlW @161
SQLNumParams @062
SQLNumResultCols @017
SQLParamData @047
SQLParamOptions @063
SQLPrepare @018
SQLPrepareA @218
SQLPrepareW @118
SQLPrimaryKeys @064
SQLPrimaryKeysA @264
SQLPrimaryKeysW @164
SQLProcedureColumns @065
SQLProcedureColumnsA @265
SQLProcedureColumnsW @165
SQLProcedures @066
SQLProceduresA @266
SQLProceduresW @166
SQLPutData @048
SQLRowCount @019
SQLSetConnectAttr @038
SQLSetConnectAttrA @238
SQLSetConnectAttrW @138
SQLSetConnectOption @049
SQLSetConnectOptionA @249
SQLSetConnectOptionW @149
SQLSetCursorName @020
SQLSetCursorNameA @220
SQLSetCursorNameW @120
SQLSetDescField @072
SQLSetDescFieldA @272
SQLSetDescFieldW @172
SQLSetDescRec @073
SQLSetEnvAttr @074
SQLSetParam @021
SQLSetPos @067
SQLSetScrollOptions @068
SQLSetStmtAttr @075
SQLSetStmtAttrA @275
SQLSetStmtAttrW @175
SQLSetStmtOption @050
SQLSpecialColumns @051
SQLSpecialColumnsA @251
SQLSpecialColumnsW @151
SQLStatistics @052
SQLStatisticsA @252
SQLStatisticsW @152
SQLTablePrivileges @069
SQLTablePrivilegesA @269
SQLTablePrivilegesW @169
SQLTables @053
SQLTablesA @253
SQLTablesW @153
SQLTransact @022
SearchStatusCode @097
VFreeErrors @098
VRetrieveDriverErrorsRowCol @099
ValidateErrorQueue @100

View File

@@ -0,0 +1,95 @@
/*
*
* SQL.CH
* (Not Ready) Headers for ODBC
*
**/
/* RETCODEs */
#define SQL_INVALID_HANDLE (-2)
#define SQL_ERROR (-1)
#define SQL_SUCCESS 0
#define SQL_SUCCESS_WITH_INFO 1
#define SQL_NO_DATA_FOUND 100
/* Standard SQL datatypes, using ANSI type numbering */
#define SQL_CHAR 1
#define SQL_NUMERIC 2
#define SQL_DECIMAL 3
#define SQL_INTEGER 4
#define SQL_SMALLINT 5
#define SQL_FLOAT 6
#define SQL_REAL 7
#define SQL_DOUBLE 8
#define SQL_VARCHAR 12
#define SQL_TYPE_NULL 0
#define SQL_TYPE_MIN SQL_BIT
#define SQL_TYPE_MAX SQL_VARCHAR
#define SQL_ALL_TYPES 0
/* NULL status constants. These are used in SQLColumns, SQLColAttributes,
SQLDescribeCol, SQLDescribeParam, and SQLSpecialColumns to describe the
nullablity of a column in a table. */
#define SQL_NO_NULLS 0
#define SQL_NULLABLE 1
#define SQL_NULLABLE_UNKNOWN 2
/* Special length values */
#define SQL_NULL_DATA (-1)
#define SQL_DATA_AT_EXEC (-2)
#define SQL_NTS (-3)
/* SQLFreeStmt defines */
#define SQL_CLOSE 0
#define SQL_DROP 1
#define SQL_UNBIND 2
#define SQL_RESET_PARAMS 3
/* SQLTransact defines */
#define SQL_COMMIT 0
#define SQL_ROLLBACK 1
/* SQLColAttributes defines */
#define SQL_COLUMN_COUNT 0
#define SQL_COLUMN_NAME 1
#define SQL_COLUMN_TYPE 2
#define SQL_COLUMN_LENGTH 3
#define SQL_COLUMN_PRECISION 4
#define SQL_COLUMN_SCALE 5
#define SQL_COLUMN_DISPLAY_SIZE 6
#define SQL_COLUMN_NULLABLE 7
#define SQL_COLUMN_UNSIGNED 8
#define SQL_COLUMN_MONEY 9
#define SQL_COLUMN_UPDATABLE 10
#define SQL_COLUMN_AUTO_INCREMENT 11
#define SQL_COLUMN_CASE_SENSITIVE 12
#define SQL_COLUMN_SEARCHABLE 13
#define SQL_COLUMN_TYPE_NAME 14
#define SQL_COLUMN_TABLE_NAME 15
#define SQL_COLUMN_OWNER_NAME 16
#define SQL_COLUMN_QUALIFIER_NAME 17
#define SQL_COLUMN_LABEL 18
#define SQL_COLATT_OPT_MAX SQL_COLUMN_LABEL
#define SQL_COLUMN_DRIVER_START 1000
#define SQL_COLATT_OPT_MIN SQL_COLUMN_COUNT
/* SQLColAttributes subdefines for SQL_COLUMN_UPDATABLE */
#define SQL_ATTR_READONLY 0
#define SQL_ATTR_WRITE 1
#define SQL_ATTR_READWRITE_UNKNOWN 2
/* SQLColAttributes subdefines for SQL_COLUMN_SEARCHABLE */
/* These are also used by SQLGetInfo */
#define SQL_UNSEARCHABLE 0
#define SQL_LIKE_ONLY 1
#define SQL_ALL_EXCEPT_LIKE 2
#define SQL_SEARCHABLE 3
/* SQLError defines */
#define SQL_NULL_HENV 0
#define SQL_NULL_HDBC 0
#define SQL_NULL_HSTMT 0

1259
harbour/source/odbc/sql.h Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,293 @@
/*****************************************************************
** SQLEXT.H - This is the include for applications using
** the Microsoft SQL Extensions
**
** (C) Copyright 1990 - 1995 By Microsoft Corp.
**
** Updated 5/12/93 for 2.00 specification
** Updated 5/23/94 for 2.01 specification
** Updated 10/27/94 for 2.10 specification
** Updated 04/10/95 for 2.50 specification
*********************************************************************/
#ifndef __SQLEXT
#define __SQLEXT
#ifndef __SQL
#include "sql.h"
#endif
#ifdef __cplusplus
extern "C" { /* Assume C declarations for C++ */
#endif /* __cplusplus */
/* SQLBindParameter extensions */
#if (ODBCVER >= 0x0200)
#define SQL_DEFAULT_PARAM (-5)
#define SQL_IGNORE (-6)
#define SQL_LEN_DATA_AT_EXEC_OFFSET (-100)
#define SQL_LEN_DATA_AT_EXEC(length) (-length+SQL_LEN_DATA_AT_EXEC_OFFSET)
#endif /* ODBCVER >= 0x0200 */
/* Defines for SQLSetPos */
#define SQL_ENTIRE_ROWSET 0
/* Operations in SQLSetPos */
#define SQL_POSITION 0 /* 1.0 FALSE */
#define SQL_REFRESH 1 /* 1.0 TRUE */
#if (ODBCVER >= 0x0200)
#define SQL_UPDATE 2
#define SQL_DELETE 3
#define SQL_ADD 4
#endif /* ODBCVER >= 0x0200 */
/* Lock options in SQLSetPos */
#define SQL_LOCK_NO_CHANGE 0 /* 1.0 FALSE */
#define SQL_LOCK_EXCLUSIVE 1 /* 1.0 TRUE */
#if (ODBCVER >= 0x0200)
#define SQL_LOCK_UNLOCK 2
/* Macros for SQLSetPos */
#define SQL_POSITION_TO(hstmt,irow) SQLSetPos(hstmt,irow,SQL_POSITION,SQL_LOCK_NO_CHANGE)
#define SQL_LOCK_RECORD(hstmt,irow,fLock) SQLSetPos(hstmt,irow,SQL_POSITION,fLock)
#define SQL_REFRESH_RECORD(hstmt,irow,fLock) SQLSetPos(hstmt,irow,SQL_REFRESH,fLock)
#define SQL_UPDATE_RECORD(hstmt,irow) SQLSetPos(hstmt,irow,SQL_UPDATE,SQL_LOCK_NO_CHANGE)
#define SQL_DELETE_RECORD(hstmt,irow) SQLSetPos(hstmt,irow,SQL_DELETE,SQL_LOCK_NO_CHANGE)
#define SQL_ADD_RECORD(hstmt,irow) SQLSetPos(hstmt,irow,SQL_ADD,SQL_LOCK_NO_CHANGE)
#endif /* ODBCVER >= 0x0200 */
/* Level 1 Prototypes */
/* Options for SQLDriverConnect */
#define SQL_DRIVER_NOPROMPT 0
#define SQL_DRIVER_COMPLETE 1
#define SQL_DRIVER_PROMPT 2
#define SQL_DRIVER_COMPLETE_REQUIRED 3
#ifndef RC_INVOKED
SQLRETURN SQL_API SQLDriverConnect(
SQLHDBC hdbc,
SQLHWND hwnd,
SQLCHAR FAR *szConnStrIn,
SQLSMALLINT cbConnStrIn,
SQLCHAR FAR *szConnStrOut,
SQLSMALLINT cbConnStrOutMax,
SQLSMALLINT FAR *pcbConnStrOut,
SQLUSMALLINT fDriverCompletion);
#endif /* RC_INVOKED */
/* Level 2 Functions */
/* SQLExtendedFetch "fFetchType" values */
#ifndef SQL_FETCH_NEXT
#define SQL_FETCH_NEXT 1
#endif
#ifndef SQL_FETCH_FIRST
#define SQL_FETCH_FIRST 2
#endif
#define SQL_FETCH_LAST 3
#define SQL_FETCH_PRIOR 4
#define SQL_FETCH_ABSOLUTE 5
#define SQL_FETCH_RELATIVE 6
#if (ODBCVER >= 0x0200)
#define SQL_FETCH_BOOKMARK 8
#endif /* ODBCVER >= 0x0200 */
/* SQLExtendedFetch "rgfRowStatus" element values */
#define SQL_ROW_SUCCESS 0
#define SQL_ROW_DELETED 1
#define SQL_ROW_UPDATED 2
#define SQL_ROW_NOROW 3
#if (ODBCVER >= 0x0200)
#define SQL_ROW_ADDED 4
#define SQL_ROW_ERROR 5
#endif /* ODBCVER >= 0x0200 */
/* Defines for SQLForeignKeys (returned in result set) */
#define SQL_CASCADE 0
#define SQL_RESTRICT 1
#define SQL_SET_NULL 2
#if (ODBCVER >= 0x0250)
#define SQL_NO_ACTION 3
#define SQL_SET_DEFAULT 4
#endif
/* Defines for SQLBindParameter and
SQLProcedureColumns (returned in the result set) */
#define SQL_PARAM_TYPE_UNKNOWN 0
#define SQL_PARAM_INPUT 1
#define SQL_PARAM_INPUT_OUTPUT 2
#define SQL_RESULT_COL 3
#if (ODBCVER >= 0x0200)
#define SQL_PARAM_OUTPUT 4
#define SQL_RETURN_VALUE 5
#endif /* ODBCVER >= 0x0200 */
#if (ODBCVER >= 0x0200)
/* Defines for SQLProcedures (returned in the result set) */
#define SQL_PT_UNKNOWN 0
#define SQL_PT_PROCEDURE 1
#define SQL_PT_FUNCTION 2
#endif /* ODBCVER >= 0x0200 */
/* Defines used by Driver Manager when mapping SQLSetParam to SQLBindParameter
*/
#define SQL_PARAM_TYPE_DEFAULT SQL_PARAM_INPUT_OUTPUT
#define SQL_SETPARAM_VALUE_MAX (-1L)
#ifndef RC_INVOKED
/* Level 2 Prototypes */
SQLRETURN SQL_API SQLBrowseConnect(
SQLHDBC hdbc,
SQLCHAR FAR *szConnStrIn,
SQLSMALLINT cbConnStrIn,
SQLCHAR FAR *szConnStrOut,
SQLSMALLINT cbConnStrOutMax,
SQLSMALLINT FAR *pcbConnStrOut);
SQLRETURN SQL_API SQLColumnPrivileges(
SQLHSTMT hstmt,
SQLCHAR FAR *szCatalogName,
SQLSMALLINT cbCatalogName,
SQLCHAR FAR *szSchemaName,
SQLSMALLINT cbSchemaName,
SQLCHAR FAR *szTableName,
SQLSMALLINT cbTableName,
SQLCHAR FAR *szColumnName,
SQLSMALLINT cbColumnName);
SQLRETURN SQL_API SQLDescribeParam(
SQLHSTMT hstmt,
SQLUSMALLINT ipar,
SQLSMALLINT FAR *pfSqlType,
SQLUINTEGER FAR *pcbParamDef,
SQLSMALLINT FAR *pibScale,
SQLSMALLINT FAR *pfNullable);
SQLRETURN SQL_API SQLExtendedFetch(
SQLHSTMT hstmt,
SQLUSMALLINT fFetchType,
SQLINTEGER irow,
SQLUINTEGER FAR *pcrow,
SQLUSMALLINT FAR *rgfRowStatus);
SQLRETURN SQL_API SQLForeignKeys(
SQLHSTMT hstmt,
SQLCHAR FAR *szPkCatalogName,
SQLSMALLINT cbPkCatalogName,
SQLCHAR FAR *szPkSchemaName,
SQLSMALLINT cbPkSchemaName,
SQLCHAR FAR *szPkTableName,
SQLSMALLINT cbPkTableName,
SQLCHAR FAR *szFkCatalogName,
SQLSMALLINT cbFkCatalogName,
SQLCHAR FAR *szFkSchemaName,
SQLSMALLINT cbFkSchemaName,
SQLCHAR FAR *szFkTableName,
SQLSMALLINT cbFkTableName);
SQLRETURN SQL_API SQLMoreResults(
SQLHSTMT hstmt);
SQLRETURN SQL_API SQLNativeSql(
SQLHDBC hdbc,
SQLCHAR FAR *szSqlStrIn,
SQLINTEGER cbSqlStrIn,
SQLCHAR FAR *szSqlStr,
SQLINTEGER cbSqlStrMax,
SQLINTEGER FAR *pcbSqlStr);
SQLRETURN SQL_API SQLNumParams(
SQLHSTMT hstmt,
SQLSMALLINT FAR *pcpar);
SQLRETURN SQL_API SQLParamOptions(
SQLHSTMT hstmt,
SQLUINTEGER crow,
SQLUINTEGER FAR *pirow);
SQLRETURN SQL_API SQLPrimaryKeys(
SQLHSTMT hstmt,
SQLCHAR FAR *szCatalogName,
SQLSMALLINT cbCatalogName,
SQLCHAR FAR *szSchemaName,
SQLSMALLINT cbSchemaName,
SQLCHAR FAR *szTableName,
SQLSMALLINT cbTableName);
SQLRETURN SQL_API SQLProcedureColumns(
SQLHSTMT hstmt,
SQLCHAR FAR *szCatalogName,
SQLSMALLINT cbCatalogName,
SQLCHAR FAR *szSchemaName,
SQLSMALLINT cbSchemaName,
SQLCHAR FAR *szProcName,
SQLSMALLINT cbProcName,
SQLCHAR FAR *szColumnName,
SQLSMALLINT cbColumnName);
SQLRETURN SQL_API SQLProcedures(
SQLHSTMT hstmt,
SQLCHAR FAR *szCatalogName,
SQLSMALLINT cbCatalogName,
SQLCHAR FAR *szSchemaName,
SQLSMALLINT cbSchemaName,
SQLCHAR FAR *szProcName,
SQLSMALLINT cbProcName);
SQLRETURN SQL_API SQLSetPos(
SQLHSTMT hstmt,
SQLUSMALLINT irow,
SQLUSMALLINT fOption,
SQLUSMALLINT fLock);
SQLRETURN SQL_API SQLTablePrivileges(
SQLHSTMT hstmt,
SQLCHAR FAR *szCatalogName,
SQLSMALLINT cbCatalogName,
SQLCHAR FAR *szSchemaName,
SQLSMALLINT cbSchemaName,
SQLCHAR FAR *szTableName,
SQLSMALLINT cbTableName);
/* SDK 2.0 Additions */
#if (ODBCVER >= 0x0200)
SQLRETURN SQL_API SQLDrivers(
SQLHENV henv,
SQLUSMALLINT fDirection,
SQLCHAR FAR *szDriverDesc,
SQLSMALLINT cbDriverDescMax,
SQLSMALLINT FAR *pcbDriverDesc,
SQLCHAR FAR *szDriverAttributes,
SQLSMALLINT cbDrvrAttrMax,
SQLSMALLINT FAR *pcbDrvrAttr);
SQLRETURN SQL_API SQLBindParameter(
SQLHSTMT hstmt,
SQLUSMALLINT ipar,
SQLSMALLINT fParamType,
SQLSMALLINT fCType,
SQLSMALLINT fSqlType,
SQLUINTEGER cbColDef,
SQLSMALLINT ibScale,
SQLPOINTER rgbValue,
SQLINTEGER cbValueMax,
SQLINTEGER FAR *pcbValue);
#endif /* ODBCVER >= 0x0200 */
#endif /* RC_INVOKED */
#ifdef __cplusplus
} /* End of extern "C" { */
#endif /* __cplusplus */
#endif /* __SQLEXT */

View File

@@ -0,0 +1,138 @@
/*********************************************************************
** SQLTYPES.H - This file defines the types used in ODBC
**
** (C) Copyright 1995 By Microsoft Corp.
**
** Created 4/10/95 for 2.50 specification
*********************************************************************/
#ifndef __SQLTYPES
#define __SQLTYPES
/* if ODBCVER is not defined, assume version 2.50 */
#ifndef ODBCVER
#define ODBCVER 0x0250
#endif
/* environment specific definitions */
#ifndef EXPORT
#define EXPORT _export
#endif
/* define WINDOWS */
/* _WINDOWS_ is defined in windows.h for 32 bit */
/* _INC_WINDOWS is defined in windows.h for 16 bit */
#if (defined(_WINDOWS_) || defined(_INC_WINDOWS)) && !defined(WINDOWS)
#define WINDOWS
#endif
#ifdef WIN32
#define SQL_API __stdcall
#elif defined(WINDOWS)
#define SQL_API EXPORT CALLBACK
#else
#define SQL_API
#endif
#ifndef RC_INVOKED
#if !defined(WINDOWS) && !defined(FAR)
#define FAR
#endif
/* SQL portable types for C */
typedef unsigned char UCHAR;
typedef signed char SCHAR;
typedef long int SDWORD;
typedef short int SWORD;
typedef unsigned long int UDWORD;
typedef unsigned short int UWORD;
#if (ODBCVER >= 0x0200)
typedef signed long SLONG;
typedef signed short SSHORT;
typedef unsigned long ULONG;
typedef unsigned short USHORT;
#endif /* ODBCVER >= 0x0200 */
typedef double SDOUBLE;
#if defined(WIN32)
typedef double LDOUBLE; /* long double == short double in Win32 */
#elif defined(WINDOWS)
typedef long double LDOUBLE;
#else
typedef double LDOUBLE;
#endif
typedef float SFLOAT;
typedef void FAR * PTR;
typedef void FAR * HENV;
typedef void FAR * HDBC;
typedef void FAR * HSTMT;
typedef signed short RETCODE;
typedef UCHAR SQLCHAR;
typedef SCHAR SQLSCHAR;
typedef SDWORD SQLINTEGER;
typedef SWORD SQLSMALLINT;
typedef UDWORD SQLUINTEGER;
typedef UWORD SQLUSMALLINT;
typedef void FAR * SQLPOINTER;
#if defined(WINDOWS) || defined(WIN32)
typedef HENV SQLHENV;
typedef HDBC SQLHDBC;
typedef HSTMT SQLHSTMT;
#else
typedef SQLINTEGER SQLHENV;
typedef SQLINTEGER SQLHDBC;
typedef SQLINTEGER SQLHSTMT;
#endif
typedef SQLSMALLINT SQLRETURN;
#if defined(WINDOWS) || defined(WIN32) || defined(OS2)
typedef HWND SQLHWND;
#elif defined (UNIX)
typedef Widget SQLHWND;
#else
/* placehold for future O/S GUI window handle definition */
typedef SQLPOINTER SQLHWND;
#endif
/* transfer types for DATE, TIME, TIMESTAMP */
typedef struct tagDATE_STRUCT
{
SQLSMALLINT year;
SQLUSMALLINT month;
SQLUSMALLINT day;
} DATE_STRUCT;
typedef struct tagTIME_STRUCT
{
SQLUSMALLINT hour;
SQLUSMALLINT minute;
SQLUSMALLINT second;
} TIME_STRUCT;
typedef struct tagTIMESTAMP_STRUCT
{
SQLSMALLINT year;
SQLUSMALLINT month;
SQLUSMALLINT day;
SQLUSMALLINT hour;
SQLUSMALLINT minute;
SQLUSMALLINT second;
SQLUINTEGER fraction;
} TIMESTAMP_STRUCT;
#if (ODBCVER >= 0x0200)
typedef unsigned long int BOOKMARK;
#endif /* ODBCVER >= 0x0200 */
#endif
#endif /* #ifndef __SQLTYPES */

View File

@@ -0,0 +1,53 @@
#include "sql.ch"
#xcommand GET ROW <nRow> INTO <cVar> => ;
<cVar> := space( 128 ) ;;
SQLGetData( hStmt, <nRow>, SQL_CHAR, len( <cVar> ), @<cVar> )
FUNCTION Main()
LOCAL hEnv := 0
LOCAL hDbc := 0
LOCAL hStmt := 0
LOCAL cConstrin := "DBQ=" + GetEnv( "HARBOUR_DIR" ) + ;
"\source\odbc\harbour.mdb;Driver={Microsoft Access Driver (*.mdb)}"
LOCAL cConstrout := SPACE(1024)
LOCAL nRows := 0
LOCAL cCode, cFunc, cState, cComm
? padc( "*** ODBC ACCESS TEST ***", 80 )
?
? "Allocating environment... "
SQLAllocEn( @hEnv )
? "Allocating connection... "
SQLAllocCo( hEnv, @hDbc )
? "Connecting to driver " + cConstrin + "... "
SQLDriverC( hDbc, cConstrin, @cConstrout )
? "Allocating statement... "
SQLAllocSt( hDbc, @hStmt )
?
? "SQL: SELECT * FROM FUNCTIONS"
SQLExecDir( hStmt, "select * from functions" )
?
WHILE SQLFetch( hStmt ) == 0
nRows++
GET ROW 1 INTO cCode
GET ROW 2 INTO cFunc
GET ROW 3 INTO cState
GET ROW 4 INTO cComm
? cCode, padr( cFunc, 20 ), cState, cComm
ENDDO
? "------------------------------------------------------------------------------"
? str( nRows, 4 ), " row(s) affected."
SQLFreeStm( hStmt, SQL_DROP )
SQLDisconn( hDbc )
SQLFreeCon( hDbc )
SQLFreeEnv( hEnv )
RETURN( NIL )