📄 tabdesc.cpp
字号:
#include "stdafx.h"
#include "sql.h"
#include "sqlext.h"
#include "FTDB.h"
#include "tabDesc.h"
CTabDesc::CTabDesc()
{
}
CTabDesc::~CTabDesc()
{
}
BOOL CTabDesc::DescTable(CFTDB* pDB,LPCSTR pszTableName)
{
if(pDB->m_hdbc==NULL)
return FALSE;
HSTMT hstmt;
RETCODE rt=SQLAllocStmt(pDB->m_hdbc,&hstmt);
SQLSetStmtOption(hstmt,SQL_CONCURRENCY,SQL_CONCUR_READ_ONLY);
SQLSetStmtOption(hstmt,SQL_CURSOR_TYPE,SQL_CURSOR_FORWARD_ONLY);
if(!SQL_SUCC(rt))
return FALSE;
//char szSQL[100];
//sprintf(szSQL,"desc %s",pszName);
//rt=SQLExecDirect(hstmt,(UCHAR*)szSQL,strlen(szSQL));
char szTName[300];
sprintf(szTName,pszTableName);
TRACE("desc table %s\n",szTName);
rt=SQLColumns(hstmt,
NULL,//qualifier
0,
NULL,//owner
0,
(UCHAR*)szTName,//table name
SQL_NTS,
NULL,
0);
int iTail=0;
if(SQL_SUCC(rt))
{
m_arrColName.RemoveAll();
m_arrColTypeName.RemoveAll();
m_arrColDataLength.RemoveAll();
m_arrColDataPrecision.RemoveAll();
m_arrColDataScale.RemoveAll();
m_arrColDataType.RemoveAll();
m_arrColNullable.RemoveAll();
char szColName[128],szTypeName[128];
SDWORD cbDataType,cbDataPrecision,cbDataScale,cbDataLength,cbNullable;
SDWORD cbT;
SQLBindCol(hstmt, 4, SQL_C_CHAR, szColName, 128, &cbT);
SQLBindCol(hstmt, 5, SQL_C_SLONG, &cbDataType, 0, &cbT);
SQLBindCol(hstmt, 6, SQL_C_CHAR, szTypeName, 128, &cbT);
SQLBindCol(hstmt, 7, SQL_C_SLONG, &cbDataPrecision, 0, &cbT);
SQLBindCol(hstmt, 8, SQL_C_SLONG, &cbDataLength, 0, &cbT);
SQLBindCol(hstmt, 9, SQL_C_SSHORT, &cbDataScale, 0, &cbT);
SQLBindCol(hstmt, 11, SQL_C_SSHORT, &cbNullable, 0, &cbT);
rt = SQLFetch(hstmt);
while (TRUE)
{
if (SQL_SUCC(rt))
{
m_arrColName.Add(szColName);
m_arrColTypeName.Add(szTypeName);
m_arrColDataType.Add((DWORD)cbDataType);
m_arrColDataPrecision.Add((DWORD)cbDataPrecision);
m_arrColDataLength.Add((DWORD)cbDataLength);
m_arrColDataScale.Add((DWORD)cbDataScale);
m_arrColNullable.Add((DWORD)cbNullable);
rt=SQLFetch(hstmt);
}
else
break;
}
}
SQLFreeStmt(hstmt,SQL_CLOSE);
return TRUE;
}
BOOL CTabDesc::GenerateDescString(CStringArray &arrRes)
{
arrRes.RemoveAll();
int iTotal=m_arrColName.GetUpperBound()+1;
CString szT;
for(int i=0;i<iTotal;i++)
{
/* DWORD dwType=m_arrColDataType.GetAt(i);
switch(dwType)
{
case(SQL_DECIMAL):
case(SQL_NUMERIC):
if(m_arrColDataScale.GetAt(i)+m_arrColDataPrecision.GetAt(i)
> m_arrColDataLength.GetAt(i)+1)
szT.Format("%s %s (%d)",
m_arrColName.GetAt(i),
m_arrColTypeName.GetAt(i),
m_arrColDataPrecision.GetAt(i));
else
szT.Format("%s %s (%d.%d)",
m_arrColName.GetAt(i),
m_arrColTypeName.GetAt(i),
m_arrColDataPrecision.GetAt(i),
m_arrColDataScale.GetAt(i));
break;
case(SQL_CHAR):
case(SQL_VARCHAR):
szT.Format("%s %s (%d)",
m_arrColName.GetAt(i),
m_arrColTypeName.GetAt(i),
m_arrColDataLength.GetAt(i));
break;
default:
szT.Format("%s %s",m_arrColName.GetAt(i),m_arrColTypeName.GetAt(i));
break;
}*/
szT.Format("%s %s",m_arrColName.GetAt(i),m_arrColTypeName.GetAt(i));
arrRes.Add(szT);
}
return iTotal;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -