国产午夜成人免费看片无遮挡_日本免费xxxx色视频_免费人成网上在线观看_黄网址在线永久免费观看

當前位置:雨林木風下載站 > 技術開發(fā)教程 > 詳細頁面

VFP與SQL遠程異構數據庫

VFP與SQL遠程異構數據庫

更新時間:2022-05-03 文章作者:未知 信息來源:網絡 閱讀次數:

文/陳純

  熟悉 VFP的朋友都知道,在 VFP 里我們可以使用遠程視圖 (Remote View) 和 SPT(SQL Pass Through) 技術控制遠程異構數據庫。這些技術其實是 VFP 對 ODBC 的 API 的封裝,所以對于用戶來說訪問遠程數據庫就像操作傳統的DBF一樣簡單。關于這兩種技術的使用,完全可以洋洋灑灑地寫下一本書,鑒于本文主題及篇幅,這里僅枚舉 SPT 技術訪問遠程數據的應用。

  
  很多人認為有了遠程視圖這樣直觀、簡單的工具,為什么還需要 SPT 呢?確實 SPT 較遠程視圖難以掌握,但細細體會你會發(fā)現:遠程視圖其實是對 SPT 的可視化工具!SPT 較遠程視圖更具威力,遠程視圖提供的功能只是 SPT 的一個子集。其優(yōu)勢和劣勢主要體現在以下幾個方面:

  l、SPT 的優(yōu)勢

  1) 一次得到多個Cursor;

  2) 執(zhí)行除 Select 以外的其他 SQL 語句,如 Insert、Update、Delete等;

  3) 執(zhí)行遠程數據庫的存儲過程 ;

  4) 執(zhí)行遠程數據庫的特殊函數、命令等 ;

  5) 事務管理 。

  2、SPT 的劣勢

  1) 沒有圖形用戶界面;

  2) 必須人工維護連接;

  3) 得到的Cursor默認是“可讀寫”Cursor,要使它成為“可更新”Cursor必須經過設置才行。

  下面就順著我們對 SPT 的認識,來瀏覽一下這個偉大的工具吧!(注意:本文所有例程均使用 SQL Server的NorthWind 數據庫演示)。


  管理連接


  l、建立連接

  注意:本文所有示例的代碼若用到連接的,默認采用“建立連接”代碼中產生的連接句柄 “CON”。

  WAIT ' 連接到 SQL Server 上去 ' NOWAIT NOCLEAR WINDOW

  SQLSETPROP(0,"DispLogin" ,3) &&&& 設置環(huán)境為“從不顯示 ODBC 登錄對話框”。

  CON=SQLSTRINGCONNECT("driver=SQL Server;Server=BOE;Uid=sa;pwd=;database=northwind")

  *假定 SQL Server 服務器名為 BOE, 用戶 ID 是sa, 口令是空串

  *如果你的 SQL Server 的服務器名, 用戶 ID, 口令與上不同,請修改以上代碼中的相關部分以符合你系統中的設置

  WAIT clear

  IF con<=0

  MESSAGEBOX(' 連接失敗 ',64,' 連接到 SQL Server 上去 ')

  ELSE

  MESSAGEBOX(' 連接成功 ',64,' 連接到 SQL Server 上去 ')

  ENDIF

  2、斷開連接

  SQLDISCONNECT(CON)


  一次得到多個Cursor


  我們可以用一次 SPT 傳回多個Cursor,如下:

  cSQL="SELECT * FROM EMPLOYEES"+CHR(10)+"SELECT * FROM CUSTOMERS"+CHR(10)+"SELECT * FROM PRODUCTS"

  ?SQLEXEC(con,cSQL,"TEMP")

  SQLEXEC( ) 的返回值表示Cursor的數量,這里返回 3 。這三個Cursor分別以 TEMP、TEMP1和TEMP2 命名。


  執(zhí)行其他 SQL 語句


  下面我們嘗試執(zhí)行SQL Server以外的SQL語句:

  cSQL="IF EXISTS(SELECT * FROM CUSTOMERSswheres CUSTOMERID='TEST')"

  cSQL=cSQL+" DELETE FROM CUSTOMERSswheres CUSTOMERID='TEST'" cSQL=cSQL+" ELSE INSERT CUSTOMERS(CUSTOMERID,COMPANYNAME) VALUES('TEST',' 這是一個測試! ')"

  IF SQLEXEC(CON,cSQL)<=0

  MESSAGEBOX(' 執(zhí)行失敗 ',64,' 發(fā)送語句到 SQL Server 上去 ')

  ELSE

  MESSAGEBOX(' 執(zhí)行成功 ',64,' 發(fā)送語句到 SQL Server 上去 ')

  ENDIF

  行文至此,也許有朋友會問:如果 SQL 語句中 CUSTOMERID 是一個變量怎么辦呢?其實 我們可以通過兩個常用的解決方案來解決:

  1、拼接字符串

  CUSTID='TEST'

  cSQL="IF EXISTS(SELECT * FROM CUSTOMERSswheres CUSTOMERID='"+CUSTID+"')"

  cSQL=cSQL+" DELETE FROM CUSTOMERS swheresCUSTOMERID='"+CUSTID+"'"

  cSQL=cSQL+" ELSE INSERT CUSTOMERS(CUSTOMERID,COMPANYNAME) VALUES('"+CUSTID+"',' 這是一個測試! ')"

  ?SQLEXEC(CON,cSQL)

  2、SPT 標準變量傳遞法

  CUSTID='TEST'

  cSQL="IF EXISTS(SELECT * FROM CUSTOMERSswheresCUSTOMERID=?CUSTID)"

  cSQL=cSQL+" DELETE FROM CUSTOMERSswheresCUSTOMERID=?CUSTID"

  cSQL=cSQL+" ELSE INSERT CUSTOMERS(CUSTOMERID,COMPANYNAME) VALUES(?CUSTID,' 這是一個測試! ')"

  ?SQLEXEC(CON,cSQL)


  特殊函數和命令


  如果在 SQL Server 中你有足夠的權限,通過 SPT 使用遠程數據庫的特殊函數和命令,你可以完全控制 SQL Server ,這里我們就演示“怎樣取得數據庫服務器的時間”:

  ?SQLEXEC(con,"select getdate() as serverdatetime","temp1")

  ?temp1.serverdatetime

  USE IN ("temp1")


  事務管理


  在一些復雜的應用中,往往會有一項操作影響幾個表的情況。就客戶端來說,發(fā)送到遠程數據庫的數據變動可能來源很多:表緩沖的多行記錄的變動,行緩沖的單行記錄變化,以及前文我們演示的直接用 SQL 語句傳遞的數據維護,林林總總……怎樣把這些更新行為控制在一個事務中呢!要么一起成功,要么一起回滾。

  cSQL="DELETE FROM CUSTOMERSswheresCUSTOMERID='BLAUS'"+CHR(10)

  cSQL=cSQL+"INSERT CUSTOMERS(CUSTOMERID,COMPANYNAME) VALUES('TEST1',' 這是一個測試! ')"

  SQLSETPROP(CON,"Transactions" ,2)&&&& 開始一個事務

  IRETURN=SQLEXEC(CON,cSQL)

  IF IRETURN=1

  SQLCOMMIT(CON)&&&& 事務交付

  ELSE

  SQLROLLBACK(CON)&&&& 事務回滾

  ENDIF

  SQLSETPROP(CON,"Transactions" ,1)&&&& 重新回到自動事務處理狀態(tài)

  &&&&就本例而言,“DELETE FROM CUSTOMERSswheres CUSTOMERID='BLAUS'”總是不能執(zhí)行的,SQL Server會返回出錯揭示:

  &&&&DELETE statement conflicted with COLUMN REFERENCE constraint 'FK_Orders_Customers'.

  &&&&The conflict occurred in database 'Northwind', table 'Orders', column 'CustomerID'.

  &&&&所以這筆事務總是被回滾的!!

  從例程中可以看到,我們開啟的事務其實是針對“連接”的,也就是說通過該“連接”的所有數據更新都包含于事務中,直到事務被回滾或交付。

  SQLSETPROP(CON,"Transactions" ,2 ), 其實是開啟了人工事務處理,也就是說必須由用戶明確地給出交付或者回滾指令,事務才會結束。所以筆者以為:完成一筆事務以后,應執(zhí)行 SQLSETPROP(CON,"Transactions" ,1 ) 將“連接”的事務模式設為默認的“自動”,這樣可以防止用戶陷入未知的事務中去。

  SPT的基本操作還不止這些,以后我們還會為讀者朋友介紹其他一些基本操作。如果朋友們能掌握這些基本操作,就能編寫不錯的 C/S 程序了。雖然本文是用 SQL Server 作為遠程數據庫,但是如果你使用 DB2和Oracle等,在 VFP 中也可以進行同樣的處理。

  本文開始已提到 VFP 在這方面的內容很廣泛,寥寥千言當然不能盡言,有興趣的朋友可以去訪問www.boeworks.com,以便查閱更多的內容。OK,希望有機會與大家一起討論這方面的問題。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

国产午夜成人免费看片无遮挡_日本免费xxxx色视频_免费人成网上在线观看_黄网址在线永久免费观看

  • <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        欧美人妖巨大在线| 日韩欧美国产综合| 麻豆高清免费国产一区| 国产一区二区三区四区在线观看| 中文字幕视频一区二区三区久| 欧美成人欧美edvon| 久久久精品欧美丰满| 精品无码三级在线观看视频| 日本网站在线观看一区二区三区 | 欧美性猛交xxxx黑人交| 国产乱理伦片在线观看夜一区| 一区二区三区色| 久久国产视频网| 欧美一区二区在线视频| 欧洲日韩一区二区三区| 亚洲国产精品自拍| 亚洲人一二三区| 欧美三级欧美一级| 欧美日韩激情一区| 国产一区二区三区香蕉| 奇米888四色在线精品| 亚洲午夜久久久久久久久电影院| 欧美日韩亚洲国产综合| 欧美三级电影在线看| 国产乱码精品一品二品| 成人永久看片免费视频天堂| 波多野结衣在线一区| 精品亚洲porn| 国产老肥熟一区二区三区| 国产精品66部| 成人v精品蜜桃久久一区| 日韩激情视频网站| 日韩国产一区二| 日本一区二区免费在线观看视频 | 欧美精品18+| 欧美一级精品在线| 成人免费视频网站在线观看| 国内精品久久久久影院一蜜桃| 国产精品久久免费看| 国产成a人亚洲精品| 一本久久综合亚洲鲁鲁五月天| 蜜臀av在线播放一区二区三区| 久久精品国产亚洲高清剧情介绍 | 日韩欧美资源站| 欧美午夜精品一区二区蜜桃| 粉嫩av一区二区三区| 国产婷婷色一区二区三区| 欧美日韩国产综合一区二区三区| 大桥未久av一区二区三区中文| 99国产精品久久久久久久久久久| 国产一区二区精品久久99| 欧美伊人精品成人久久综合97| 成人高清视频在线| 一本色道久久综合狠狠躁的推荐| 国产精品2024| 丝袜美腿亚洲综合| 天使萌一区二区三区免费观看| 成人三级伦理片| 欧美一区二区三区婷婷月色| 精品国产免费一区二区三区四区 | 亚洲一区二区成人在线观看| 亚洲制服丝袜av| 国产一区二区在线视频| 日韩成人午夜电影| 91亚洲国产成人精品一区二区三 | 国内偷窥港台综合视频在线播放| 午夜精品在线视频一区| 成人av网在线| 91色视频在线| 亚洲人成7777| 亚洲欧美日韩国产综合在线| 国产欧美一区二区三区在线老狼| 国产日韩av一区| 在线观看亚洲精品视频| 久久精品人人做人人爽97| 黄色成人免费在线| 亚洲va欧美va人人爽| 亚洲卡通欧美制服中文| 亚洲1区2区3区4区| 日韩国产成人精品| 韩国欧美国产一区| 久久99久久精品| av在线不卡网| 91精品1区2区| 国产精品美女www爽爽爽| 久久久久久久久久美女| 丝袜亚洲另类欧美| 精品一区二区三区久久| 麻豆成人91精品二区三区| 久久爱另类一区二区小说| 色狠狠桃花综合| 日韩一区二区高清| 亚洲chinese男男1069| 日韩精品一区第一页| 欧美日免费三级在线| 久久久久久久性| 日本欧美久久久久免费播放网| 一本大道久久a久久精品综合| 97久久超碰精品国产| 亚洲欧洲在线观看av| 国产精品久久久一区麻豆最新章节| 国产成人综合在线| 欧美视频一区二区在线观看| 亚洲成人在线观看视频| 国产精品美女久久久久久2018| 国产成人一区二区精品非洲| 在线观看三级视频欧美| 国产精品每日更新| 亚洲电影你懂得| 波多野结衣亚洲| 精品三级av在线| 天天爽夜夜爽夜夜爽精品视频| 成人黄页在线观看| 丁香婷婷综合激情五月色| 欧美久久一二区| 亚洲午夜电影网| 日本一区二区三区高清不卡| 久久er99热精品一区二区| 成人av在线资源网| 一区二区三区在线观看网站| 国产一区欧美日韩| 亚洲欧美怡红院| 国产精品 日产精品 欧美精品| 中文字幕中文字幕中文字幕亚洲无线| 日韩不卡一区二区| 国产午夜精品一区二区| 偷偷要91色婷婷| 欧美xfplay| 麻豆成人av在线| 国产精品初高中害羞小美女文| 蜜桃av一区二区| 国产精品国产a| 亚洲综合丝袜美腿| 亚洲在线成人精品| 9人人澡人人爽人人精品| 日本不卡中文字幕| 亚洲成人av资源| 国产99精品国产| 国产精品九色蝌蚪自拍| 欧美在线免费播放| 国产精品嫩草影院av蜜臀| 8x8x8国产精品| 亚洲成人一区在线| 国产精品色在线观看| 国产高清不卡一区| 五月综合激情婷婷六月色窝| proumb性欧美在线观看| 蜜臀av一级做a爰片久久| 91影视在线播放| 国产剧情一区二区| 狠狠色狠狠色综合日日91app| 91小宝寻花一区二区三区| 亚洲国产成人tv| 国产精品成人免费在线| 99久久99久久久精品齐齐| 免费观看成人鲁鲁鲁鲁鲁视频| 欧美精品乱码久久久久久按摩| a美女胸又www黄视频久久| 国产精品国产三级国产aⅴ入口| 精品国产电影一区二区| 蜜桃视频在线观看一区二区| 亚洲一区二区精品久久av| 欧美视频在线观看一区二区| 91网站在线播放| 国产精品久久久久毛片软件| 精品999在线播放| 日韩免费视频一区| 日韩视频不卡中文| 日韩不卡手机在线v区| 亚洲成人在线观看视频| 亚洲天堂福利av| 一区二区三区资源| 国产精品久久久久久妇女6080| 国产精品久久久久久亚洲伦| 91亚洲永久精品| av在线不卡网| 亚洲不卡av一区二区三区| 亚洲一区在线观看免费| 欧美色图激情小说| 日韩亚洲欧美中文三级| 欧美韩国一区二区| 国产精品毛片久久久久久久| 91视频观看视频| 在线国产亚洲欧美| 亚洲gay无套男同| 日本视频一区二区三区| 在线亚洲一区观看| 欧美日韩一区二区三区高清| 国产精品麻豆网站| 亚洲国产精品国自产拍av| 国产精品嫩草久久久久| 亚洲精品一卡二卡| 亚洲一区二区四区蜜桃| 视频一区在线播放| 国内精品伊人久久久久影院对白| 国产精品福利一区二区| 精品欧美一区二区在线观看| 精品对白一区国产伦| 国产欧美视频在线观看| 91精品久久久久久久99蜜桃|