| Register | FAQ | Calendar | Search | Today's Posts | Mark Forums Read |
|
#1
| |||
| |||
| 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<-- |
![]() |
| Thread Tools | |
| Display Modes | |
In an effort to better serve ads to our visitors, cookies are used on objectmix.com. For more information, check out our Privacy Policy.