see changelog
This commit is contained in:
@@ -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
3
harbour/bldodbc.bat
Normal 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
15
harbour/hbodbc.b32
Normal 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
|
||||
28
harbour/source/odbc/bld32exe.bat
Normal file
28
harbour/source/odbc/bld32exe.bat
Normal 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
|
||||
BIN
harbour/source/odbc/harbour.mdb
Normal file
BIN
harbour/source/odbc/harbour.mdb
Normal file
Binary file not shown.
158
harbour/source/odbc/odbc.c
Normal file
158
harbour/source/odbc/odbc.c
Normal 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 );
|
||||
}
|
||||
24
harbour/source/odbc/odbc.txt
Normal file
24
harbour/source/odbc/odbc.txt
Normal 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.
|
||||
180
harbour/source/odbc/odbc32.def
Normal file
180
harbour/source/odbc/odbc32.def
Normal 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
|
||||
95
harbour/source/odbc/sql.ch
Normal file
95
harbour/source/odbc/sql.ch
Normal 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
1259
harbour/source/odbc/sql.h
Normal file
File diff suppressed because it is too large
Load Diff
293
harbour/source/odbc/sqlext.h
Normal file
293
harbour/source/odbc/sqlext.h
Normal 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 */
|
||||
138
harbour/source/odbc/sqltypes.h
Normal file
138
harbour/source/odbc/sqltypes.h
Normal 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 */
|
||||
53
harbour/source/odbc/testodbc.prg
Normal file
53
harbour/source/odbc/testodbc.prg
Normal 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 )
|
||||
|
||||
Reference in New Issue
Block a user