亚洲免费乱码视频,日韩 欧美 国产 动漫 一区,97在线观看免费视频播国产,中文字幕亚洲图片

      1. <legend id="ppnor"></legend>

      2. 
        
        <sup id="ppnor"><input id="ppnor"></input></sup>
        <s id="ppnor"></s>

        談?wù)刅FP和SQLSERVER搭配做C/S系統(tǒng)

        字號:

        1.CLIENT/SERVER 到底是什么?
            C/S屬于2-TIER系統(tǒng),適合于中小型應(yīng)用系統(tǒng)。大系統(tǒng)一般都用3-TIER了。
            打個比方單機(jī)數(shù)據(jù)庫系統(tǒng)(比如VFP), 相當(dāng)于前店后庫.店里需要什么東西,得自己去庫房找,庫房管理也是有你自己進(jìn)行. 而C/S系統(tǒng)下,店和庫是相對獨立的,有一個專門的庫房管理(數(shù)據(jù)SERVER),店里需要什么,按照手續(xù)把單子給
            庫房管理人員,由他們?nèi)ゲ僮?
            因此可以看出C/S的優(yōu)點: 支持多用戶; 更有效的數(shù)據(jù)管理,數(shù)據(jù)安全和可靠得多;遠(yuǎn)程使用數(shù)據(jù).
            如果你是單機(jī)使用當(dāng)然沒有太大必要使用C/S了.
            如果用VFP本身做C/S系統(tǒng), 效果不是很明顯,因為VFP的數(shù)據(jù)管理功能不是很強(qiáng),比如加鎖解鎖都需要程序來操作. 我主要說的是VFP/SQL SERVER系統(tǒng).
            2. SQL SERVER
            SQL SERVER是微軟發(fā)布的RDBMS(關(guān)系數(shù)據(jù)庫管理系統(tǒng)), ORACLE, INFOMIX,POWERBUILD,也都是類似的系統(tǒng). 他們就相當(dāng)于倉庫的管理系統(tǒng),但功能不僅僅是數(shù)據(jù)管理. 微軟的數(shù)據(jù)庫產(chǎn)品從功能和規(guī)模由小到大排列依次是: ACCESS, VFP, SQL SERVER.
            稍微大一點的系統(tǒng),SQL SERVER是需要專人管理的,這就是DBA (DATABASE ADMINISTRATOR)的位置.現(xiàn)在北美人才市場上, DBA的工作比程序員的工作好找些. 工資比普通程序員略高, 工作穩(wěn)定性也強(qiáng)一些.
            SQL SERVER是一套大的軟件系統(tǒng),可以安裝在專門的NT數(shù)據(jù)SERVER上,也有個人版可以安裝在WIN95/98上, 主要是為了咱們這些程序員方便測試. 它的功能主要有這么幾塊: 數(shù)據(jù)庫的管理和維護(hù),用戶/安全管理, 數(shù)據(jù)的發(fā)布/轉(zhuǎn)換.
            3. 用VFP/SQL SERVER做C/S系統(tǒng)
            VFP和SQL SERVER的搭配應(yīng)該是比較完美的, 但因為VB才是微軟的主流產(chǎn)品(VB一直是微軟的,FOXPRO是后來才買的,后娘生的), 所以微軟從來沒有大力推薦或者宣傳過VFP, 而是把VFP獨有的數(shù)據(jù)庫技術(shù)融合到自己的其它產(chǎn)品里了: SQL SERVER, ODBC, OLE DB/ADO. 最近甚至把VFP從VISUAL STUDIO里獨立出來了.
            VFP和SQL SERVER的交流,可以通過3種方式進(jìn)行:
            A. 遠(yuǎn)程視圖 B. ADO控件 C. SPT (SQL PASS THROUGH)
            3種方式各有優(yōu)缺點, 而我最偏好第3種. 遠(yuǎn)程視圖和ADO都在VFP和SQL SERVER中間加了一個層次, 而這層次就相當(dāng)于一個黑箱,你不清楚它們到底怎么操作數(shù)據(jù)的,只需按照它們的規(guī)則進(jìn)行設(shè)置,使用
            相應(yīng)的命令就可以. 反正我作為程序員,喜歡清楚地知道我的程序每一步都在干什么,所以我喜歡用SPT, 也從不用向?qū)斫⒈韱螆蟊硪活惖?
            SPT技術(shù)是通過VFP的函數(shù)SQLCONNECT()來和SQL SERVER建立連接, 然后用SQLEXEC()函數(shù)把要執(zhí)行的SQL命令 送到SQL SERVER上去執(zhí)行,
            所有對數(shù)據(jù)的操作都是通過這些SQL命令來進(jìn)行的. 每一個細(xì)節(jié)都由自己的代碼來控制.
            4. VFP數(shù)據(jù)的升遷
            VFP的數(shù)據(jù)庫,可以直接用VFP自帶的升遷向?qū)мD(zhuǎn)到SQL SERVER上,但必須把所有的表都放到數(shù)據(jù)庫里,自由表不能直接升遷, 而實際上升遷上去的又只是表,數(shù)據(jù)庫本身不能轉(zhuǎn)到SQL SERVER里. 感覺怪怪的. 也許是為了升遷索引或者關(guān)系吧.
            要把VFP數(shù)據(jù)升遷到SQL SERVER上, 必須先在SQL SERVER里建立相應(yīng)的數(shù)據(jù)庫. SQL SERVER的管理是通過ENTERPRISE MANAGER (EM)來進(jìn)行的. 通過它建立數(shù)據(jù)庫, 每個數(shù)據(jù)庫里可以包含 數(shù)據(jù)表,用戶/用戶群,視圖,存儲過程等等.
            至于改用SQL SERVER后,原來的VFP程序是肯定需要修改的, 而且是比較大的改動.
            ***************
            談?wù)刅FP和SQL SERVER搭配做C/S系統(tǒng) (二) --動態(tài)設(shè)置ODBC連接
            1。設(shè)置ODBC數(shù)據(jù)源
            VFP和SQL SERVER的連接是通過ODBC或者OLE DB(ADO)來進(jìn)行的??梢源蜷_控制面板的ODBC數(shù)據(jù)源進(jìn)行設(shè)置。但很多情況下,我們希望能在程序里動態(tài)設(shè)置數(shù)據(jù)源,一來可以不用去為每個用戶的機(jī)器手動設(shè)置, 二來為了數(shù)據(jù)的安全性,使用完后,希望把ODBC數(shù)據(jù)源刪掉。
            下面的例子是用API函數(shù)來設(shè)置和刪除ODBC數(shù)據(jù)源。
            函數(shù)名字是 SQLConfigDataSource,其中第二項參數(shù)是數(shù)字(1-增加 2-修改 3-刪除)
            DECLARE INTEGER SQLConfigDataSource IN odbccp32 INTEGER, INTEGER, STRING, STRING
            lnWindowHandle=0
            lcODBCDriver=’SQL Server’ &&DRIVER類型
            lcODBCName=’SharedData’ &&數(shù)據(jù)源名字
            lcODBCDesc=’Shared Data Source’ &&數(shù)據(jù)源描述
            lcODBCServer=’DEVSQL’ &&SQL SERVER名字
            lcODBCDatabase=’Shared’ &&要連接的數(shù)據(jù)庫名字
            **先試圖修改已有的ODBC,如果不存在,返回0。
            lreturn=SQLConfigDataSource(lnWindowHandle, 2, lcODBCDriver, ;
            ’DSN=’ + lcODBCName + CHR(0) ;
            + ’Description=’ + lcODBCDesc + CHR(0) ;
            + ’Server=’ + lcODBCServer + CHR(0) ;
            + ’Database=’ + lcODBCDatabase + CHR(0))
            IF lreturn=0 &&不存在
            **添加新的ODBC
            lreturn=SQLConfigDataSource(lnWindowHandle, 1, lcODBCDriver, ;
            ’DSN=’ + lcODBCName + CHR(0) ;
            + ’Description=’ + lcODBCDesc + CHR(0) ;
            + ’Server=’ + lcODBCServer + CHR(0) ;
            + ’Database=’ + lcODBCDatabase + CHR(0))
            IF lreturn=0 &&失敗
             MessageBox(’添加ODBC數(shù)據(jù)源失敗’,16,’BUFFER’)
            ENDIF
            ENDIF
            2。刪除ODBC數(shù)據(jù)源
            **用完后,可以在表單DESTROY事件里刪除ODBC。 如果不想重復(fù)設(shè)置參數(shù),可以把這些參數(shù)加到表單作為屬性。
            DECLARE INTEGER SQLConfigDataSource IN odbccp32 INTEGER, INTEGER, STRING, STRING
            lnWindowHandle=0
            lcODBCDriver=’SQL Server’
            lcODBCName=’SharedData’
            lcODBCDesc=’Shared Data Source’
            lcODBCServer=’DEVSQL’
            lcODBCDatabase=’Shared’
            **先修改,或者其是否存在
            lreturn=SQLConfigDataSource(lnWindowHandle, ;
             2, lcODBCDriver, ;
             ’DSN=’ + lcODBCName + CHR(0) ;
             + ’Description=’ + lcODBCDesc + CHR(0) ;
             + ’Server=’ + lcODBCServer + CHR(0) ;
             + ’Database=’ + lcODBCDatabase + CHR(0))
            IF lreturn=1 &&ODBC存在,刪除它
             lreturn=SQLConfigDataSource(lnWindowHandle, ;
             3, lcODBCDriver, ;
             ’DSN=’ + lcODBCName + CHR(0) ;
             + ’Description=’ + lcODBCDesc + CHR(0) ;
             + ’Server=’ + lcODBCServer + CHR(0) ;
             + ’Database=’ + lcODBCDatabase + CHR(0))
             IF lreturn=0
             MessageBox(’刪除ODBC源失敗,16,’BUFFER’)
             ENDIF
            ENDIF