📄 vcg22.htm
字号:
void CDocdbView::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDocdbView)
DDX_Control(pDX, IDC_COLUMN, m_ColumnList);
DDX_Text(pDX, IDC_CONNECT, m_Connect);
DDX_Text(pDX, IDC_DATASOURCE, m_DataSource);
DDX_Text(pDX, IDC_DATATYPE, m_DataType);
DDX_Text(pDX, IDC_NULLABLE, m_Nullable);
DDX_Text(pDX, IDC_OWNER, m_Owner);
DDX_Text(pDX, IDC_QUALIFIER, m_Qualifier);
DDX_Text(pDX, IDC_RADIX, m_Radix);
DDX_Text(pDX, IDC_REMARKS, m_Remarks);
DDX_Text(pDX, IDC_SCALE, m_Scale);
DDX_Text(pDX, IDC_TABLENAME, m_TableName);
DDX_Text(pDX, IDC_TYPENAME, m_TypeName);
DDX_Text(pDX, IDC_PRECISION, m_Precision);
DDX_Text(pDX, IDC_LENGTH, m_Length);
DDX_Text(pDX, IDC_TABLE, m_Table);
DDX_Text(pDX, IDC_DBMSVERSION, m_DbmsVersion);
//}}AFX_DATA_MAP
}
/////////////////////////////////////////////////////////////////////////////
// CDocdbView printing
BOOL CDocdbView::OnPreparePrinting(CPrintInfo* pInfo)
{
// Default preparation
return DoPreparePrinting(pInfo);
}
void CDocdbView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: Add extra initialization before printing
}
void CDocdbView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: Add cleanup after printing
}
void CDocdbView::OnPrint(CDC* pDC, CPrintInfo*)
{
// TODO: Add code to print the controls
}
/////////////////////////////////////////////////////////////////////////////
// CDocdbView diagnostics
#ifdef _DEBUG
void CDocdbView::AssertValid() const
{
CFormView::AssertValid();
}
void CDocdbView::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}
CDocdbDoc* CDocdbView::GetDocument() // Non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDocdbDoc)));
return (CDocdbDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CDocdbView message handlers
<B>typedef struct {</B>
<B> UCHAR szQualifier[STR_LEN];</B>
<B> UCHAR szOwner[STR_LEN];</B>
<B> UCHAR szTableName[STR_LEN];</B>
<B> UCHAR szColName[STR_LEN];</B>
<B> UCHAR szTypeName[STR_LEN];</B>
<B> UCHAR szRemarks[REM_LEN];</B>
<B> SDWORD Precision;</B>
<B> SDWORD Length;</B>
<B> SWORD DataType;</B>
<B> SWORD Scale;</B>
<B> SWORD Radix;</B>
<B> SWORD Nullable;</B>
<B>} COLUMN_ATTRIBUTES;</B>
<B>COLUMN_ATTRIBUTES Columns[70];</B>
void CDocdbView::OnNewdb()
{
<B>// Declare storage locations for result set data</B>
<B>UCHAR szQualifier[STR_LEN];</B>
<B>UCHAR szOwner[STR_LEN];</B>
<B>UCHAR szTableName[STR_LEN];</B>
<B>UCHAR szColName[STR_LEN];</B>
<B>UCHAR szTypeName[STR_LEN];</B>
<B>UCHAR szRemarks[REM_LEN];</B>
<B>SDWORD Precision = 0;</B>
<B>SDWORD Length = 0;</B>
<B>SWORD DataType = 0;</B>
<B>SWORD Scale = 0;</B>
<B>SWORD Radix = 0;</B>
<B>SWORD Nullable = 0;</B>
<B>// Storage locations for returned bytes stored</B>
<B>SDWORD cbQualifier;</B>
<B>SDWORD cbOwner;</B>
<B>SDWORD cbTableName;</B>
<B>SDWORD cbColName;</B>
<B>SDWORD cbRemarks;</B>
<B>SDWORD cbDataType;</B>
<B>SDWORD cbTypeName;</B>
<B>SDWORD cbPrecision;</B>
<B>SDWORD cbLength;</B>
<B>SDWORD cbScale;</B>
<B>SDWORD cbRadix;</B>
<B>SDWORD cbNullable;</B>
<B>// Declare miscellaneous variables</B>
<B>char szSource[60];</B>
<B>char szDirectory[132];</B>
<B>char szTable[60];</B>
<B>char szDSN[256];</B>
<B>char szConStrOut[256];</B>
<B>char szDbmsVersion[256];</B>
<B>char szBuffer[513];</B>
<B>int i;</B>
<B>int j;</B>
<B>HENV henv;</B>
<B>HDBC hdbc;</B>
<B>HSTMT hstmt = SQL_NULL_HSTMT;</B>
<B>RETCODE RC;</B>
<B>int nConStrOut;</B>
<B>SWORD swReturn;</B>
<B> szSource[0] = '\0';</B>
<B> szTable[0] = '\0';</B>
<B> szDirectory[0] = '\0';</B>
<B> GetODBC(</B>
<B> szSource, sizeof(szSource),</B>
<B> szTable, sizeof(szTable),</B>
<B> szDirectory, sizeof(szDirectory));</B>
<B> m_DataSource = szSource;</B>
<B> m_Table = szTable;</B>
<B> SQLAllocEnv(&henv);</B>
<B> SQLAllocConnect(henv, &hdbc);</B>
<B> sprintf(szBuffer, "DSN=%s", szSource);</B>
<B> strcpy(szDSN, szBuffer);</B>
<B>// To display ConnectDlg(), set the DSN to a null-length string:</B>
<B>// szDSN[0] = '\0';</B>
<B> RC = SQLDriverConnect(hdbc, m_hWnd,</B>
<B> (unsigned char far *)szDSN, SQL_NTS, // strlen(szDSN),</B>
<B> (unsigned char far *)szConStrOut, sizeof(szConStrOut),</B>
<B> (short far *)&nConStrOut,</B>
<B> SQL_DRIVER_COMPLETE);</B>
<B> if (RC != SQL_SUCCESS && RC != SQL_SUCCESS_WITH_INFO)</B>
<B> {</B>
<B> SQLPrintError(henv, hdbc, hstmt);</B>
<B> }</B>
<B> else</B>
<B> {// Display the connect string returned:</B>
<B> for (i = 0, j = 0; i < (int)strlen(szConStrOut); i++)</B>
<B> {// Copy and format. Add space after each ';' in string:</B>
<B> szBuffer[j++] = szConStrOut[i];</B>
<B> if (szConStrOut[i] == ';')</B>
<B> szBuffer[j++] = ' ';</B>
<B> }</B>
<B> szBuffer[j++] = '\0';</B>
<B> m_Connect = szBuffer;</B>
<B> }</B>
<B> RC = SQLAllocStmt(hdbc, &hstmt);</B>
<B> if (RC != SQL_SUCCESS && RC != SQL_SUCCESS_WITH_INFO)</B>
<B> {</B>
<B> SQLPrintError(henv, hdbc, hstmt);</B>
<B> }</B>
<B>// Get the columns in the specified table:</B>
<B> RC = SQLColumns(hstmt,</B>
<B> NULL, 0, // All qualifiers</B>
<B> NULL, 0, // All owners</B>
<B> (unsigned char __far *)szTable, SQL_NTS, // The table!</B>
<B> NULL, 0); // All columns</B>
<B> if (RC != SQL_SUCCESS && RC != SQL_SUCCESS_WITH_INFO)</B>
<B> {</B>
<B> SQLPrintError(henv, hdbc, hstmt);</B>
<B> }</B>
<B>// Get and display the DBMS version number:</B>
<B> SQLGetInfo(hdbc, SQL_DBMS_VER, szDbmsVersion,</B>
<B> sizeof(szDbmsVersion), &swReturn);</B>
<B> m_DbmsVersion = szDbmsVersion;</B>
<B>// Now bind variables to columns!</B>
<B> RC = SQLBindCol(hstmt, 1, SQL_C_CHAR, szQualifier, STR_LEN,&cbQualifier);</B>
<B> RC = SQLBindCol(hstmt, 2, SQL_C_CHAR, szOwner, STR_LEN, &cbOwner);</B>
<B> RC = SQLBindCol(hstmt, 3, SQL_C_CHAR, szTableName, STR_LEN,&cbTableName);</B>
<B> RC = SQLBindCol(hstmt, 4, SQL_C_CHAR, szColName, STR_LEN, &cbColName);</B>
<B> RC = SQLBindCol(hstmt, 5, SQL_C_SSHORT,</B>
<B> &DataType, sizeof(DataType), &cbDataType);</B>
<B> RC = SQLBindCol(hstmt, 6, SQL_C_CHAR, szTypeName, STR_LEN, &cbTypeName);</B>
<B> RC = SQLBindCol(hstmt, 7, SQL_C_SLONG,</B>
<B> &Precision, sizeof(Precision), &cbPrecision);</B>
<B> RC = SQLBindCol(hstmt, 8, SQL_C_SLONG, &Length, sizeof(Length), &cbLength);</B>
<B> RC = SQLBindCol(hstmt, 9, SQL_C_SSHORT, &Scale, sizeof(Scale), &cbScale);</B>
<B> RC = SQLBindCol(hstmt, 10, SQL_C_SSHORT, &Radix, sizeof(Radix), &cbRadix);</B>
<B> RC = SQLBindCol(hstmt, 11, SQL_C_SSHORT,</B>
<B> &Nullable, sizeof(Nullable), &cbNullable);</B>
<B> RC = SQLBindCol(hstmt, 12, SQL_C_CHAR, szRemarks, REM_LEN, &cbRemarks);</B>
<B>// Then get the column names (clear list and fill array)</B>
<B> m_ColumnList.ResetContent();</B>
<B> i = 0;</B>
<B> j = 0;</B>
<B> while(i < 70) // Maximum number of columns we allow!</B>
<B> {</B>
<B> RC = SQLFetch(hstmt);</B>
<B> if (RC == SQL_ERROR || RC == SQL_SUCCESS_WITH_INFO)</B>
<B> {</B>
<B> SQLPrintError(henv, hdbc, hstmt);</B>
<B> }</B>
<B> if (RC == SQL_SUCCESS || RC == SQL_SUCCESS_WITH_INFO)</B>
<B> {</B>
<B> // Save this column for the future!</B>
<B> strcpy((LPSTR)Columns[i].szQualifier, (LPCSTR)szQualifier);</B>
<B> strcpy((LPSTR)Columns[i].szOwner, (LPCSTR)szOwner);</B>
<B> strcpy((LPSTR)Columns[i].szTableName, (LPCSTR)szTableName);</B>
<B> strcpy((LPSTR)Columns[i].szColName, (LPCSTR)szColName);</B>
<B> strcpy((LPSTR)Columns[i].szTypeName, (LPCSTR)szTypeName);</B>
<B> strcpy((LPSTR)Columns[i].szRemarks, (LPCSTR)szRemarks);</B>
<B> Columns[i].Precision = Precision;</B>
<B> Columns[i].Length = Length;</B>
<B> Columns[i].DataType = DataType;</B>
<B> Columns[i].Scale = Scale;</B>
<B> Columns[i].Radix = Radix;</B>
<B> Columns[i].Nullable = Nullable;</B>
<B> j = m_ColumnList.AddString((LPCSTR)szColName);</B>
<B> m_ColumnList.SetItemData(j, i++);</B>
<B> }</B>
<B> else</B>
<B> {// That's all, folks...</B>
<B> break;</B>
<B> }</B>
<B> }</B>
<B> m_ColumnList.SetCurSel(0);</B>
<B> OnSelchangeColumn();</B>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -