more info fetched in GetColumns

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_2_BRANCH@7346 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Bart A.M. Jourquin
2000-05-04 15:44:39 +00:00
parent af9bf0bc25
commit fa3a64d1ad

View File

@@ -51,7 +51,6 @@
#include "wx/ioswrap.h"
#endif
#ifdef __BORLANDC__
#pragma hdrstop
#endif //__BORLANDC__
@@ -2048,7 +2047,75 @@ wxDbColInf *wxDb::GetColumns(char *tableName, int *numCols, const char* WXUNUSED
}
wxStrcpy(colInf[colNum].tableName, tableName);
/*
More info can be found with SQLColAttributes.
columnName and the bufferLength are fetched
again because they are not always properly fetched by SQLDescribeCol (I observed this only with MS odbc drivers
for Access and SQLServer).
*/
SWORD cb;
SDWORD value;
// Column name
if (SQLColAttributes(hstmt,colNum+1, SQL_COLUMN_NAME, (UCHAR*) colInf[colNum].colName, sizeof(colInf[colNum].colName), &cb, &value) != SQL_SUCCESS)
{
DispAllErrors(henv, hdbc, hstmt);
return NULL;
}
// Buffer length
if (SQLColAttributes(hstmt,colNum+1, SQL_COLUMN_LENGTH, NULL,0, &cb, &value) != SQL_SUCCESS)
{
DispAllErrors(henv, hdbc, hstmt);
return NULL;
}
colInf[colNum].bufferLength = value;
// Column type name
if (SQLColAttributes(hstmt,colNum+1, SQL_COLUMN_TYPE_NAME, (UCHAR*) colInf[colNum].typeName, sizeof(colInf[colNum].typeName), &cb, &value) != SQL_SUCCESS)
{
DispAllErrors(henv, hdbc, hstmt);
return NULL;
}
// table name
if (SQLColAttributes(hstmt,colNum+1, SQL_COLUMN_TABLE_NAME, (UCHAR*) colInf[colNum].tableName, sizeof(colInf[colNum].tableName), &cb, &value) != SQL_SUCCESS)
{
DispAllErrors(henv, hdbc, hstmt);
return NULL;
}
// remarks (replaced here by the label)
if (SQLColAttributes(hstmt,colNum+1, SQL_COLUMN_LABEL, (UCHAR*) colInf[colNum].remarks, sizeof(colInf[colNum].remarks), &cb, &value) != SQL_SUCCESS)
{
DispAllErrors(henv, hdbc, hstmt);
return NULL;
}
// schema
if (SQLColAttributes(hstmt,colNum+1, SQL_COLUMN_OWNER_NAME, (UCHAR*) colInf[colNum].schema, sizeof(colInf[colNum].schema), &cb, &value) != SQL_SUCCESS)
{
DispAllErrors(henv, hdbc, hstmt);
return NULL;
}
// catalog
if (SQLColAttributes(hstmt,colNum+1, SQL_COLUMN_QUALIFIER_NAME, (UCHAR*) colInf[colNum].catalog, sizeof(colInf[colNum].catalog), &cb, &value) != SQL_SUCCESS)
{
DispAllErrors(henv, hdbc, hstmt);
return NULL;
}
// Get the intern datatype
switch (colInf[colNum].sqlDataType)
@@ -2056,14 +2123,14 @@ wxDbColInf *wxDb::GetColumns(char *tableName, int *numCols, const char* WXUNUSED
case SQL_VARCHAR:
case SQL_CHAR:
colInf[colNum].dbDataType = DB_DATA_TYPE_VARCHAR;
wxStrcpy(colInf[colNum].typeName, typeInfVarchar.TypeName);
//wxStrcpy(colInf[colNum].typeName, typeInfVarchar.TypeName);
break;
case SQL_TINYINT:
case SQL_SMALLINT:
case SQL_INTEGER:
colInf[colNum].dbDataType = DB_DATA_TYPE_INTEGER;
wxStrcpy(colInf[colNum].typeName, typeInfInteger.TypeName);
//wxStrcpy(colInf[colNum].typeName, typeInfInteger.TypeName);
break;
case SQL_DOUBLE:
case SQL_DECIMAL:
@@ -2071,17 +2138,19 @@ wxDbColInf *wxDb::GetColumns(char *tableName, int *numCols, const char* WXUNUSED
case SQL_FLOAT:
case SQL_REAL:
colInf[colNum].dbDataType = DB_DATA_TYPE_FLOAT;
wxStrcpy(colInf[colNum].typeName, typeInfFloat.TypeName);
//wxStrcpy(colInf[colNum].typeName, typeInfFloat.TypeName);
break;
case SQL_DATE:
colInf[colNum].dbDataType = DB_DATA_TYPE_DATE;
wxStrcpy(colInf[colNum].typeName, typeInfDate.TypeName);
// wxStrcpy(colInf[colNum].typeName, typeInfDate.TypeName);
break;
default:
wxString s;
s.sprintf("SQL Data type %d bot supported by wxWindows", colInf[colNum].sqlDataType);
wxMessageBox(wxT(s));
#ifdef __WXDEBUG__
wxString errMsg;
errMsg.sprintf("SQL Data type %d currently not supported by wxWindows", colInf[colNum].sqlDataType);
wxLogDebug(errMsg,wxT("ODBC DEBUG MESSAGE"));
#endif
return NULL;
}
}