亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? chap10_9.htm

?? VC++編程實例。非常詳細
?? HTM
字號:
<html>

<head>
<title>10.9 自動注冊DSN和創建表</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 3.0">
<link rel="stylesheet" href="../../../cpcw.css"></head>

<body link="#3973DE" alink="#3973DE" background="../../bg.gif">
<div align="center"><center>
    <table width="85%" border="0">
      <tr bgcolor="#FFFFFF"> 
        <td> 
          <div align="center">
            <center>
            </center>
          </div>
          <p align="CENTER"><b><font face="Times New Roman" color="red">10.9 </font><font color="red">自動注冊</font><font face="Times New Roman" color="red">DSN</font><font color="red">和創建表</font></b></p>
          <p align="JUSTIFY"> <font face="Times New Roman" size="4"></font>  在開始編寫自己的數據庫應用程序時,讀者很快會遇到兩個令人頭痛的問題。一是在訪問ODBC數據源前,必須在ODBC管理器中手工注冊DSN(數據源名)。這樣的應用程序要求用戶作額外的工作,顯得很不專業。另一個問題是AppWizard和ClassWizard并不支持表的創建,程序員似乎必須先用DBMS創建好表,然后才能使用。如果一個數據庫應用程序不能自己創建表,那么它的功能將大打折扣。</p>
          <p align="JUSTIFY">  事實上,通過一些技巧,可以使應用程序能夠對用戶透明地注冊DSN并任意創建表。本節的目的就是教會讀者如何解決這兩個問題。在下面幾個小節中,分別提供了ODBC和DAO的解決方案。</p>
          <p align="JUSTIFY"><b></b><font color="#3973DE" face="Times New Roman">10.9.1 
            </font><font color="#3973DE">自動注冊</font><font color="#3973DE" face="Times New Roman">DSN</font></p>
          <p align="JUSTIFY"><b></b>  無論是用ODBC還是DAO類,在訪問ODBC數據源以前,都必須先注冊DSN。通過調用函數SQLConfigDataSource,可以實現自動注冊DSN。當然,用DAO可以直接訪問一些常用的數據庫,而不必通過ODBC來訪問(參見10.8.3)。</p>
          <p align="JUSTIFY">  清單10.14的代碼演示了注冊DSN的過程。該段代碼先用SQLConfigDataSource注冊一個名為MYDB的FoxPro 
            2.5數據源,然后調用CDatabase::Open函數與該數據源連接。注意在使用這段代碼時,要包含afxdb.h頭文件,讀者可以把該文件放到stdafx.h中。</p>
          <p align="JUSTIFY"><b> </b></p>
          <b> 
          <p align="JUSTIFY">清單10.14 自動注冊DSN</p>
          </b> 
          <p align="JUSTIFY">#include “afxdb.h”</p>
          <p align="JUSTIFY"><b>. . .</b></p>
          <p align="JUSTIFY">CDatabase db;</p>
          <p align="JUSTIFY">if(!SQLConfigDataSource(NULL,ODBC_ADD_DSN, &quot;Microsoft 
            FoxPro Driver (*.dbf)&quot;, </p>
          <p align="JUSTIFY">&quot;DSN=MYDB\0&quot;</p>
          <p align="JUSTIFY">&quot;DefaultDir=c:\\mydir\0&quot;</p>
          <p align="JUSTIFY">&quot;FIL=FoxPro 2.5\0&quot;</p>
          <p align="JUSTIFY">&quot;DriverId=280\0&quot;))</p>
          <p align="JUSTIFY">{</p>
          <p align="JUSTIFY">AfxMessageBox(&quot;Can't add DSN!&quot;);</p>
          <p align="JUSTIFY">return ;</p>
          <p align="JUSTIFY">}</p>
          <p align="JUSTIFY">TRY</p>
          <p align="JUSTIFY">{</p>
          <p align="JUSTIFY">db.Open(&quot;MYDB&quot;);</p>
          <p align="JUSTIFY">}</p>
          <p align="JUSTIFY">CATCH(CDBException, e)</p>
          <p align="JUSTIFY">{</p>
          <p align="JUSTIFY">AfxMessageBox(e-&gt;m_strError);</p>
          <p align="JUSTIFY">return;</p>
          <p align="JUSTIFY">}</p>
          <p align="JUSTIFY">END_CATCH</p>
          <p align="JUSTIFY">  在注冊DSN時,SQLConfigDataSource函數的第二個參數應該是ODBC_ADD_DSN,第三個參數指定了ODBC驅動程序,它的寫法可以參照ODBC管理器的驅動程序頁。第四個參數說明了數據源的各種屬性,它是由一系列子串構成,每個子串的末尾必須有一個“\0”。最重要的屬性是“DSN=數據源名”,其它屬性包括缺省目錄以及驅動程序版本信息。在上例中,使用FoxPro 
            2.5的版本,所以DriverId應該是280,對應地,FoxPro 2.6的DriverId是536,FoxPro 2.0的是24。</p>
          <p align="JUSTIFY">  如果讀者對SQLConfigDataSource函數的第四個參數的設置方法不清楚,那么可以打開Windows的注冊表看一看已注冊過的DSN的各項屬性。運行RegEdit可以打開注冊表,然后依次打開HKEY_CURRENT_USER-&gt;Software-&gt;ODBC-&gt;ODBC.INI,就可以看到已注冊的DSN,打開各DSN,則可以看到該DSN的各項屬性,讀者可以仿照DSN屬性來設置第四個參數。</p>
          <p align="JUSTIFY">DSN的名字必須唯一,因此如果要注冊的DSN已被注冊過,那么SQLConfigDataSource就修改原來DSN的屬性。</p>
          <p align="JUSTIFY"> </p>
          <p align="JUSTIFY"><font color="#3973DE" face="Times New Roman">10.9.2 
            </font><font color="#3973DE">用ODBC創建表</font></p>
          <p align="JUSTIFY">  由于ODBC類不支持DDL,所以只有通過ODBC API來創建表。程序需要調用Cdatabase 
            :: ExecuteSQL來直接執行SQL語句。</p>
          <p align="JUSTIFY">  清單10.15給出了創建表的一個例子,該程序先自動注冊了一個名為MYDB的FoxPro 2.5數據源,然后創建了一個名為OFFICES的表(OFFICES.DBF文件),在這個表中有OfficeID和OfficeName兩個TEXT型字段,長度分別為4和10個字節。注意,如果要使用這段代碼,則需要包含afxdb.h和odbcinst.h。</p>
          <p align="JUSTIFY">清單10.15 ODBC創建表的例子</p>
          <b></b> 
          <p align="JUSTIFY">#include “afxdb.h”</p>
          <p align="JUSTIFY">#include &quot;odbcinst.h&quot;</p>
          <p align="JUSTIFY"><b>. . .</b></p>
          <p align="JUSTIFY">CDatabase db;</p>
          <p align="JUSTIFY">if(!SQLConfigDataSource(NULL,ODBC_ADD_DSN, &quot;Microsoft 
            FoxPro Driver (*.dbf)&quot;, </p>
          <p align="JUSTIFY">&quot;DSN=MYDB\0&quot;</p>
          <p align="JUSTIFY">&quot;DefaultDir=c:\\mydir\0&quot;</p>
          <p align="JUSTIFY">&quot;FIL=FoxPro 2.5\0&quot;</p>
          <p align="JUSTIFY">&quot;DriverId=280\0&quot;))</p>
          <p align="JUSTIFY">{</p>
          <p align="JUSTIFY">AfxMessageBox(&quot;Can't add DSN!&quot;);</p>
          <p align="JUSTIFY">return ;</p>
          <p align="JUSTIFY">}</p>
          <p align="JUSTIFY">TRY</p>
          <p align="JUSTIFY">{</p>
          <p align="JUSTIFY">db.Open(&quot;MYDB&quot;);</p>
          <blockquote> 
            <blockquote> 
              <p align="JUSTIFY">db.ExecuteSQL(&quot;CREATE TABLE OFFICES (OfficeID 
                TEXT(4)&quot; </p>
              <p align="JUSTIFY">&quot;,OfficeName TEXT(10))&quot;); }</p>
            </blockquote>
          </blockquote>
          <p align="JUSTIFY">CATCH(CDBException, e)</p>
          <p align="JUSTIFY">{</p>
          <p align="JUSTIFY">AfxMessageBox(e-&gt;m_strError);</p>
          <p align="JUSTIFY">return;</p>
          <p align="JUSTIFY">}</p>
          <p align="JUSTIFY">END_CATCH</p>
          <p align="JUSTIFY">  ExecuteSQL執行了一個實實在在的SQL語句CREATE來創建表,看來用戶應該找本SQL方面的書研究研究。要注意一個數據庫中的表名必須是唯一的,如果要創建的表已經存在,則ExecuteSQL會產生一個異常。</p>
          <p align="JUSTIFY"><font color="#3973DE" face="Times New Roman">10.9.3 
            </font><font color="#3973DE">用DAO創建表</font></p>
          <p align="JUSTIFY">  由于DAO類直接支持DDL,所以用DAO類創建表比ODBC容易。DAO的CDaoTableDef類提供了對表的結構的定義,該類提供了創建表的成員函數。</p>
          <p align="JUSTIFY">  清單10.16演示了一段用DAO類創建表的例子。注意,若要使用這段代碼,則應該包含afxdao.h頭文件。在該例中,先與一個FoxPro 
            2.5數據庫連接(實際上是一個目錄),然后再構建一個CDaoTableDef對象,接著調用CDaoTableDef :: Create函數創建一個名為STUDENTS的表(STUDENTS.DBF),調用CDaoTableDef 
            :: CreateField為該表創建了兩字段,字段名分別是ID和NAME,類型分別是Integer和dbText,字段的長度分別為2和10個字節。最后調用CDaoTableDef 
            :: Append把新創建的表保存到數據庫中。</p>
          <b>
          <p align="JUSTIFY">清單10.16 DAO創建表的例子</p>
          </b> 
          <p align="JUSTIFY">#include “afxdao.h”</p>
          <p align="JUSTIFY"><b>. . .</b></p>
          <p align="JUSTIFY">CDaoDatabase daoDb;</p>
          <p align="JUSTIFY">try</p>
          <p align="JUSTIFY">{</p>
          <p align="JUSTIFY">daoDb.Open(&quot;&quot;,FALSE,FALSE,&quot;FoxPro 
            2.5;DATABASE=d:\\zwin&quot;);</p>
          <p align="JUSTIFY">CDaoTableDef table(&amp;daoDb);</p>
          <p align="JUSTIFY">table.Create(&quot;STUDENTS&quot;);</p>
          <p align="JUSTIFY">table.CreateField(&quot;ID&quot;,dbInteger,2);</p>
          <p align="JUSTIFY">table.CreateField(&quot;NAME&quot;,dbText,10);</p>
          <p align="JUSTIFY">table.Append();</p>
          <p align="JUSTIFY">}</p>
          <p align="JUSTIFY">catch(CDaoException* e)</p>
          <p align="JUSTIFY">{</p>
          <p align="JUSTIFY">AfxMessageBox(e-&gt;</p>
          <p align="JUSTIFY">m_pErrorInfo-&gt;m_strDescription);</p>
          <p align="JUSTIFY">e-&gt;Delete();</p>
          <p align="JUSTIFY">return FALSE;</p>
          <p align="JUSTIFY">}</p>
          <p align="JUSTIFY">  關于CDaoDatabase :: Open的說明請參見10.8.3。注意一個數據庫中的表名必須是唯一的,如果要創建的表已經存在,則CDaoTableDef 
            :: Create會產生一個異常。</p>
          <div align="center">
            <center>
              <table border="0" cellpadding="0" cellspacing="0" width="615">
                <tr> 
                  <td><a href="chap10_8.htm">上一頁</a></td>
                  <td>
                    <p align="right"><a href="chap1010.htm">下一頁</a>
                  </td>
                </tr>
              </table>
              <p><a href="http://www.cpcw.com">電腦報首頁</a> <a href="../../index.htm">網絡學院首頁</a></p>
            </center>
          </div>
          <font size="5">
          <hr noshade color="#3973DE" size="1">
          </font>
          <p align="center"><font size="5"></font><font size="2" color="#000000">本教程由<a href="http://vcdynasty.yeah.net">Visual 
            C++王朝(Where programmers come together)</a>協助制作<br>
            未經許可,請勿以任何形式復制</font>
        </td>
      </tr>
    </table>
    </center>
</div>

</body>
</html>

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产一区二区精华 | 偷拍一区二区三区| 无吗不卡中文字幕| 91香蕉视频黄| 成人综合在线观看| 91在线小视频| 国产呦精品一区二区三区网站| 色欧美乱欧美15图片| 丝袜美腿亚洲综合| 日韩欧美亚洲一区二区| 欧美不卡在线视频| 日韩成人免费电影| 国产专区欧美精品| 最新热久久免费视频| 国内久久婷婷综合| 美女脱光内衣内裤视频久久网站 | 久久久噜噜噜久久中文字幕色伊伊| 色狠狠桃花综合| 99在线视频精品| 国产精品亚洲视频| 国产不卡免费视频| 欧美精三区欧美精三区| 久久99久久99小草精品免视看| 欧美日韩情趣电影| 欧美国产日韩在线观看| 亚洲另类中文字| 一本到一区二区三区| 亚洲欧美日韩国产另类专区| 菠萝蜜视频在线观看一区| 国产拍揄自揄精品视频麻豆| 国内精品免费**视频| 91麻豆国产福利精品| 中文字幕在线不卡一区二区三区| 国产成人av电影免费在线观看| 国产日韩欧美制服另类| 在线免费av一区| 国产精品一区二区在线看| 国产成人一级电影| 99国产精品99久久久久久| 国产精品五月天| 美腿丝袜亚洲综合| 日韩欧美一二三四区| 精品一区二区三区影院在线午夜 | 石原莉奈一区二区三区在线观看| 五月天丁香久久| 亚洲午夜成aⅴ人片| 日本视频中文字幕一区二区三区| 中文字幕乱码亚洲精品一区 | 99久久久无码国产精品| 色偷偷成人一区二区三区91 | 老司机精品视频一区二区三区| 色偷偷久久一区二区三区| 日韩中文欧美在线| 日韩精品一区二区三区三区免费| 国产成人午夜精品影院观看视频 | 免费三级欧美电影| 精品国产一区二区在线观看| 高清beeg欧美| 视频一区欧美日韩| 国产精品久久久久aaaa樱花| 一本久久综合亚洲鲁鲁五月天| 亚洲大片免费看| 日本一区二区三区电影| 51精品国自产在线| 日本精品视频一区二区三区| 美国毛片一区二区三区| 一区二区三区成人| 国产欧美日韩另类一区| 亚洲国产激情av| 国产精品18久久久久久久久久久久| 91精品国产aⅴ一区二区| 日韩免费视频一区| 风流少妇一区二区| 一区二区三区美女视频| 欧美国产日韩精品免费观看| 欧美高清一级片在线| 91丨九色丨蝌蚪富婆spa| 国产ts人妖一区二区| 日韩一区二区免费高清| 美女任你摸久久| 精品国产91九色蝌蚪| 五月开心婷婷久久| 精品久久久久久久人人人人传媒 | www久久精品| 欧美日韩精品一区视频| 色婷婷久久99综合精品jk白丝| 国产精选一区二区三区| 国产成人精品aa毛片| 国产不卡视频在线播放| 国产一区二三区| 99re热视频精品| 99国产精品久久久久久久久久久 | 国产一区二区视频在线播放| 午夜a成v人精品| 国产精品综合一区二区三区| 国产精品亚洲成人| 欧美色老头old∨ideo| 欧美日韩一区二区在线视频| 日韩一卡二卡三卡| 日韩一级免费一区| 欧美国产日韩精品免费观看| 亚洲网友自拍偷拍| 国产毛片精品视频| 精品视频在线免费看| 欧美精品一区在线观看| 一卡二卡欧美日韩| 激情综合色播五月| 成人动漫一区二区在线| 欧美v日韩v国产v| 亚洲一区二区三区四区在线 | 精品国产sm最大网站免费看| 国产精品的网站| 国产白丝网站精品污在线入口| 精品污污网站免费看| 国产精品日韩成人| 狠狠v欧美v日韩v亚洲ⅴ| 日韩女优毛片在线| 午夜精品国产更新| 色综合视频一区二区三区高清| 久久久亚洲欧洲日产国码αv| 国产精品区一区二区三区| 五月天中文字幕一区二区| 99久久婷婷国产精品综合| 精品国产乱码久久久久久夜甘婷婷 | 日韩av在线发布| 91精品久久久久久久久99蜜臂| 亚洲私人黄色宅男| 欧美性感一区二区三区| 日韩av电影天堂| 久久亚洲综合色一区二区三区| 亚洲国产一区二区三区青草影视| 久久99国产精品久久99果冻传媒| 亚洲欧洲制服丝袜| 99在线精品免费| 一区二区三区成人在线视频| 欧美另类一区二区三区| 久久99深爱久久99精品| 国产精品欧美一区喷水| 99精品视频一区二区| 蜜桃精品视频在线| 久久精品男人天堂av| 欧美久久久一区| 国产在线观看一区二区| 亚洲成在人线免费| 国产精品日韩精品欧美在线| 欧美乱妇15p| 欧美丝袜丝交足nylons图片| 国产真实乱子伦精品视频| 亚洲一区二区三区爽爽爽爽爽| 国产婷婷一区二区| 精品久久久久一区| 欧美日本一区二区在线观看| 成人午夜在线播放| 国产成人夜色高潮福利影视| 麻豆成人免费电影| 久久国产精品色| 天堂va蜜桃一区二区三区漫画版| 有码一区二区三区| 一二三四社区欧美黄| 国产精品丝袜久久久久久app| 日韩一区二区免费高清| 7777精品久久久大香线蕉| 欧美电影影音先锋| 91精品国产91热久久久做人人 | 91国偷自产一区二区使用方法| 97成人超碰视| 555夜色666亚洲国产免| 欧美欧美欧美欧美首页| 日韩一区二区三区三四区视频在线观看 | 久久综合久久综合久久| 久久免费视频一区| 亚洲精选免费视频| 日本在线播放一区二区三区| 秋霞国产午夜精品免费视频| 不卡一卡二卡三乱码免费网站| 欧美日韩日本视频| 亚洲色图在线视频| 粉嫩在线一区二区三区视频| 日韩三级视频中文字幕| 亚洲小说欧美激情另类| 99精品桃花视频在线观看| 国产精品三级电影| 国产乱码一区二区三区| 欧美电影免费观看高清完整版在线| 亚洲精品成人少妇| 色av成人天堂桃色av| 国产精品久久久久久久久图文区| 国产在线日韩欧美| 久久伊99综合婷婷久久伊| 国产真实乱子伦精品视频| 26uuu色噜噜精品一区| 国产不卡视频在线观看| 日韩欧美国产一区二区在线播放| 日韩有码一区二区三区| 日韩精品一区二区三区中文不卡| 老司机精品视频线观看86| 精品久久99ma| 风流少妇一区二区| 一区二区三区 在线观看视频| 欧美日韩午夜精品|