⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vcg22.htm

📁 Visual C++与数据库的连接经典实例
💻 HTM
📖 第 1 页 / 共 5 页
字号:

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(&amp;henv);</B>

<B>    SQLAllocConnect(henv, &amp;hdbc);</B>

<B>    sprintf(szBuffer, &quot;DSN=%s&quot;, 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 *)&amp;nConStrOut,</B>

<B>        SQL_DRIVER_COMPLETE);</B>

<B>    if (RC != SQL_SUCCESS &amp;&amp; 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 &lt; (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, &amp;hstmt);</B>

<B>    if (RC != SQL_SUCCESS &amp;&amp; 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 &amp;&amp; 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), &amp;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,&amp;cbQualifier);</B>

<B>    RC = SQLBindCol(hstmt, 2,  SQL_C_CHAR, szOwner, STR_LEN, &amp;cbOwner);</B>

<B>    RC = SQLBindCol(hstmt, 3,  SQL_C_CHAR, szTableName, STR_LEN,&amp;cbTableName);</B>

<B>    RC = SQLBindCol(hstmt, 4,  SQL_C_CHAR, szColName, STR_LEN, &amp;cbColName);</B>

<B>    RC = SQLBindCol(hstmt, 5,  SQL_C_SSHORT,</B>

<B>         &amp;DataType, sizeof(DataType), &amp;cbDataType);</B>

<B>    RC = SQLBindCol(hstmt, 6,  SQL_C_CHAR, szTypeName, STR_LEN, &amp;cbTypeName);</B>

<B>    RC = SQLBindCol(hstmt, 7,  SQL_C_SLONG,</B>

<B>         &amp;Precision, sizeof(Precision), &amp;cbPrecision);</B>

<B>    RC = SQLBindCol(hstmt, 8,  SQL_C_SLONG, &amp;Length, sizeof(Length), &amp;cbLength);</B>

<B>    RC = SQLBindCol(hstmt, 9,  SQL_C_SSHORT, &amp;Scale, sizeof(Scale), &amp;cbScale);</B>

<B>    RC = SQLBindCol(hstmt, 10, SQL_C_SSHORT, &amp;Radix, sizeof(Radix), &amp;cbRadix);</B>

<B>    RC = SQLBindCol(hstmt, 11, SQL_C_SSHORT,</B>

<B>         &amp;Nullable, sizeof(Nullable), &amp;cbNullable);</B>

<B>    RC = SQLBindCol(hstmt, 12, SQL_C_CHAR, szRemarks, REM_LEN, &amp;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 &lt; 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 + -