Problems retrieving SQL_DESC_NULLABLE with SQLGetDescField

This is a discussion on Problems retrieving SQL_DESC_NULLABLE with SQLGetDescField within the ODBC forums in Framework and Interface Programming category; Hi, I've been trying to fetch description data (SQL_DESC_NULLABLE, SQL_DESC_OCTET_LENGTH) from a table with following code in VB6. So far I haven't been able to retrieve any fields of type SQL_INTEGER or SQL_SMALLINT. SQLCHAR * -fields like SQL_DESC_NAME works great. The problem is most likely in declaration, but I haven't been able to spot the problem. Database is Microsoft Access 2002 and the table in the code is greated with following SQL -command: CREATE TABLE NULLTEST ( A_NOT_NULL TEXT(50) NOT NULL, A_NULL TEXT(50) NULL ); If someone has been fighting with similar issue, please post in this NG. Best regards, ...

Go Back   Application Development Forum > Framework and Interface Programming > ODBC

Object Mix

Register FAQ Calendar Search Today's Posts Mark Forums Read
  #1  
Old 07-09-2003, 03:13 AM
Janne Ojala
Guest
 
Default Problems retrieving SQL_DESC_NULLABLE with SQLGetDescField


Hi,

I've been trying to fetch description data (SQL_DESC_NULLABLE,
SQL_DESC_OCTET_LENGTH) from a table
with following code in VB6. So far I haven't been able to retrieve any
fields of type SQL_INTEGER or SQL_SMALLINT.
SQLCHAR * -fields like SQL_DESC_NAME works great. The problem is most likely
in declaration, but I haven't been
able to spot the problem.

Database is Microsoft Access 2002 and the table in the code is greated with
following SQL -command:

CREATE TABLE NULLTEST (
A_NOT_NULL TEXT(50) NOT NULL,
A_NULL TEXT(50) NULL
);

If someone has been fighting with similar issue, please post in this NG.

Best regards, Janne Ojala

---------------8<---------------8<---------------8<---------------8<--------
-------8<---------------8<---------------8<---------------8<--
Option Explicit

Private Const SQL_HANDLE_ENV = 1&
Private Const SQL_HANDLE_DBC = 2&
Private Const SQL_HANDLE_STMT = 3&
Private Const SQL_HANDLE_DESC = 4&

Private Const SQL_NULL_HANDLE As Long = 0

Private Const SQL_SUCCESS = 0
Private Const SQL_SUCCESS_WITH_INFO = 1

Private Const SQL_NO_DATA = 100

Private Const SQL_ERROR = (-1)
Private Const SQL_INVALID_HANDLE = (-2)

Private Const SQL_STILL_EXECUTING = 2
Private Const SQL_NEED_DATA = 99

Private Const SQL_ATTR_ODBC_VERSION = 200

Private Const SQL_OV_ODBC3 As Long = 3

Private Const SQL_NTS = (-3)

Private Const SQL_DRIVER_NOPROMPT = 0

Private Const SQL_ATTR_IMP_ROW_DESC = 10012
Private Const SQL_ATTR_IMP_PARAM_DESC = 10013

Private Const SQL_IS_POINTER = (-4)
Private Const SQL_IS_UINTEGER = (-5)
Private Const SQL_IS_INTEGER = (-6)
Private Const SQL_IS_USMALLINT = (-7)
Private Const SQL_IS_SMALLINT = (-8)

Private Const SQL_DESC_COUNT = 1001
Private Const SQL_DESC_TYPE = 1002
Private Const SQL_DESC_LENGTH = 1003
Private Const SQL_DESC_OCTET_LENGTH_PTR = 1004
Private Const SQL_DESC_PRECISION = 1005
Private Const SQL_DESC_SCALE = 1006
Private Const SQL_DESC_DATETIME_INTERVAL_CODE = 1007
Private Const SQL_DESC_NULLABLE = 1008
Private Const SQL_DESC_INDICATOR_PTR = 1009
Private Const SQL_DESC_DATA_PTR = 1010
Private Const SQL_DESC_NAME = 1011
Private Const SQL_DESC_UNNAMED = 1012
Private Const SQL_DESC_OCTET_LENGTH = 1013
Private Const SQL_DESC_ALLOC_TYPE = 1099

Private Declare Function SQLDisconnect Lib "odbc32.dll" (ByVal
ConnectionHandle&) As Integer

Private Declare Function SQLFreeHandle Lib "odbc32.dll" (ByVal HandleType%,
ByVal Handle&) As Integer

Private Declare Function SQLPrepare Lib "odbc32.dll" (ByVal
StatementHandle&, ByVal StatementText$, ByVal TextLength&) As Integer

Private Declare Function SQLGetDescField Lib "odbc32.dll" (ByVal
DescriptorHandle&, ByVal RecNumber%, ByVal FieldIdentifier%, ByVal Value As
Any, ByVal BufferLength&, ByRef StringLength&) As Integer

Private Declare Function SQLGetStmtAttr Lib "odbc32.dll" (ByVal
StatementHandle&, ByVal sAttribute&, ByRef Value As Long, ByVal
BufferLength&, ByRef StringLength&) As Integer

Private Declare Function SQLAllocHandle Lib "odbc32.dll" (ByVal HandleType%,
ByVal InputHandle&, ByRef OutputHandle&) As Integer

Private Declare Function SQLSetEnvAttr Lib "odbc32.dll" (ByVal
EnvironmentHandle&, ByVal eAttribute&, ByVal Value&, ByVal StringLength&) As
Integer

Private Declare Function SQLDriverConnect Lib "odbc32.dll" (ByVal hDbc&,
ByVal hWnd&, ByVal szConnStrIn$, ByVal cbConnStrIn%, ByVal szConnStrOut$,
ByVal cbConnStrOutMax%, pcbConnStrOut%, ByVal fDriverCompletion%) As Integer

Private Sub Form_Load()
Dim rc As Integer
Dim hEnv As Long
Dim hDbc As Long
Dim hStmt As Long
Dim hDesc As Long
Dim mConnStrIn As String
Dim mConnStrOut As String
Dim cbConnStrOut As Integer
Dim cbBuffer As Long
Dim mSql As String
Dim mNullable As Long
Dim mLenght As Long

Dim mName As String * 256

' Allocate the Environment Handle
rc = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, hEnv)

If Not (rc = SQL_SUCCESS Or rc = SQL_SUCCESS_WITH_INFO) Then

GoTo CleanUP

End If

'Support for ODBC 3.0
rc = SQLSetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION, SQL_OV_ODBC3, 4)

If Not (rc = SQL_SUCCESS Or rc = SQL_SUCCESS_WITH_INFO) Then

GoTo CleanUP

End If

'Allocate the Connection Handle
rc = SQLAllocHandle(SQL_HANDLE_DBC, hEnv, hDbc)

If Not (rc = SQL_SUCCESS Or rc = SQL_SUCCESS_WITH_INFO) Then

GoTo CleanUP

End If

mConnStrIn = "DRIVER=Microsoft Access Driver (*.mdb);DBQ=D:\nulltest.mdb;"

'Connect the datasource
rc = SQLDriverConnect(ByVal hDbc, 0&, ByVal mConnStrIn, Len(mConnStrIn),
ByVal mConnStrOut, 255, cbConnStrOut, SQL_DRIVER_NOPROMPT)

If Not (rc = SQL_SUCCESS Or rc = SQL_SUCCESS_WITH_INFO) Then

GoTo CleanUP

End If

mSql = "SELECT * FROM NULLTEST"

'Allocate the Connection Handle
rc = SQLAllocHandle(SQL_HANDLE_STMT, hDbc, hStmt)

SQLPrepare hStmt, mSql, SQL_NTS

'Retrieve descriptor handle from STMT
rc = SQLGetStmtAttr(hStmt, SQL_ATTR_IMP_ROW_DESC, hDesc, SQL_IS_POINTER, 0)

rc = SQLGetDescField(hDesc, 1, SQL_DESC_NULLABLE, mNullable,
SQL_IS_UINTEGER, 0)

Debug.Print mNullable

rc = SQLGetDescField(hDesc, 2, SQL_DESC_NULLABLE, mNullable,
SQL_IS_USMALLINT, 0)

Debug.Print mNullable


rc = SQLFreeHandle(SQL_HANDLE_STMT, hStmt)

If Not (rc = SQL_SUCCESS Or rc = SQL_SUCCESS_WITH_INFO) Then

GoTo CleanUP

End If


rc = SQLDisconnect(hDbc)

If Not (rc = SQL_SUCCESS Or rc = SQL_SUCCESS_WITH_INFO) Then

GoTo CleanUP

End If


rc = SQLFreeHandle(SQL_HANDLE_DBC, hDbc)

If Not (rc = SQL_SUCCESS Or rc = SQL_SUCCESS_WITH_INFO) Then

GoTo CleanUP

End If


rc = SQLFreeHandle(SQL_HANDLE_ENV, hEnv)

If Not (rc = SQL_SUCCESS Or rc = SQL_SUCCESS_WITH_INFO) Then

GoTo CleanUP

End If

CleanUP:

'Do actually cleanup here, deal with errors...

End Sub
---------------8<---------------8<---------------8<---------------8<--------
-------8<---------------8<---------------8<---------------8<--


Reply With Quote
Reply


Thread Tools
Display Modes


All times are GMT -5. The time now is 06:47 AM.


Powered by vBulletin® Version 3.7.2
Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
vB Ad Management by =RedTyger=

In an effort to better serve ads to our visitors, cookies are used on objectmix.com. For more information, check out our Privacy Policy.