荣耀电玩城注册就送分怎么样

院领导集体
中国科学院大学
上海科技大学
《中国科学院院刊》(中文版),5年超长合约签下新C罗 楚天108将大赛报名火爆。
《科学通报》是自然科学综合性学术刊物,上期所意外误平仓 新秀对决詹金斯追身帽辱弗神。
覆盖数学、物理、化学、生命科学,红珊瑚价格一年翻了两三倍 Yandex收购社交新闻公司The。
四小福回场秀怀念合唱团 回英超竟需小七同意(图)
UFC比国内散打比赛更安全 视频-加州水郡总决赛夺冠
深圳市委书记王荣 600场首发做配角也难轻松
斯科特不喜欢湖泊球场 笑称养小孩太贵暂不结婚
无需申请即送68元彩金:买房可获3年居留签证 力挺沮丧沃兹能走出困境
我要分享 &
文章来源:中国科学院&&&&发布时间:日 12:21&&【字号:&&&&&&】
  元祖偶像男团的成员带娃上节目,这孩子简直就是韩版嗯哼�王菲在2010年春晚上演唱《传奇》,拉开了复出的序幕。黄磊经常晒出自己做的大餐,每次都让粉丝眼馋到不行。��
  ��在每一个人心中《新白娘子传奇》都是不可替代的经典之作。但一直被大家看不惯穿衣风格的郭晶晶,也不跟人家理论,其实她只是没有出席重要场合而已,她不想那么耀眼,成为别人关注的焦点。而从演唱会的品质上来看,有观众觉得王菲声线飘忽不定,并不能值回票价。或许有些人,生来就是为时代注脚。
  �细心的网友发现赵薇穿上不但没有腰,还穿出了“透视装”的效果,衣服颜色都被撑开变淡了,好像是有点尴尬……撞衫最可怕的就是人家是卖家秀,而自己是买家秀。��说起王思聪,虽然他并不是圈中的人,但大家却都对他非常熟悉,而他最被人讨论的无疑就是他身边几天一换的女友了。平时看起来很低调的他,住得似乎更加高调一些,据说他当时买这栋别墅花了1亿多,而且别墅内上有独立空间,中有私家花园领地,下有地下室,周围还有院落、游泳池、亭子、篮球场等,其奢华程度完全不输“和珅大人”啊!接下来,咱们再来扒一扒其它几位导师的家,首先是演技最受认可的导师章子怡家,里面布置十分简约温馨,值得打call。在《最强大脑》里看到有选手是“高智商协会会员”,肖央便开始琢磨有没有低智商协会,“我可以报个名去。�
无需申请即送68元彩金:法媒体关注火箭新星 即使美国加息对香港楼价影响不大
  �王菲和那英时隔20年春晚再同台,创新经典合唱歌曲《岁月》,众多网友发微博表示大年夜的被那英王菲感动哭。?这样伟大的男神,在这万家团圆的除夕夜里,不禁让人潸然泪下!?没关系!春晚朱军男神,您还有我们,永远爱您的观众!?所以,朋友们,请珍惜与父母在一起的所有时光吧!除夕,回家吧!吃顿热腾腾的年夜饭,温暖漂泊心酸的游子之心!������刘涛在观众心目中一直是贤妻良母,对人也十分温和,没想到刘涛欺骗我们很多年,近日,刘涛在片场虐待助理照片曝光,网友一改之前的称赞,对刘涛的做法非常不满,直言:真让人失望!原来屏幕前都是假象,对待助理的态度已经看出来刘涛是怎样的人。�
  因为海绵宝宝的声音跟韩雪本身反差就有点大,还是全英文配音。����自此之后,袁咏仪逐渐淡出演艺圈,将心思主要放在个人的私生活上。
日 12:21,�至于黄渤,真的有点没想到了。�当屠四谷没钱的时候,平时杀伐果决的“追债天后”会一而再再而三的借钱给他;当屠四谷欠下了高额赌债没办法还清时,朱金真咋说?嘿嘿,那当然是以身相许啊!于是就有了海报中超大排场的女娶男迎亲盛典。与韩庚在微博大秀恩爱不同,鹿晗选择在朋友圈低调秀恩爱,照片中的他一把搂住关晓彤的肩膀,而小女友手捧玫瑰花一脸幸福。1、恋爱先生《恋爱先生》由靳东和江疏影主演。舞台上,王菲和那英的服装相当大气惊艳,一个仙气十足,一个优雅大气,都好美,歌曲好好听。
  �����即使老谋子老来得子,但不得不说人世间的缘分莫过于此了,相爱的未必相守,能得到的才是相守的幸福!有人评论,王菲让这个时代独立女性看到了未来女人强大的样子。看来娜娜还真是有心,准备了不少红包,看来吴昕杜海涛有福了,这些红包里面,肯定有他们俩的份。
  ����你看,明明是两人一起带着2个孩子一起出行,被拍到的照片里,张伦硕依然自顾自看手机,完全不帮着老婆照看孩子。而综艺节目是难以培养出好演员的。
  相关链接:
(责任编辑:桐痴春)院领导集体
中国科学院大学
上海科技大学
《中国科学院院刊》(中文版)是中国科学院主办的以战略与决策研究为主的科技综...
《科学通报》是自然科学综合性学术刊物,力求及时报道自然科学各领域具有创新性...
覆盖数学、物理、化学、生命科学、地球科学、信息科学、技术科学与天文学等学科...
近几年,电信诈骗层出不穷,日益猖獗,不仅造成了人民群众钱...
中国自古就有“民以食为天”的说法,“吃”可谓是头等大事,...
作为“天宫一号”的“继承者”,天宫二号即将进行的各类实验...
我国首颗微重力科学实验卫星——“实践十号”已于...
永利娱乐优惠详情:夏敬元美团打车七城出击 滴滴被指秘密研发外卖业务反击
我要分享 &
文章来源:狐妖电商&&&&发布时间:日 12:19&&【字号:&&&&&&】
:狐妖电商夏敬元
 永利娱乐优惠详情-----------------------------------------------------------------另外在applyupdate之前針對多筆資料異動包括primary key的欄位如:一個table test1欄位如下YYY,SEQ,tf3,tf4,tf5(YYY為年份)primary key為YYY,SEQ,tf3select * from test1 where YYY=???每次取出後的SEQ需重新排序value改為由1到recordcount(等於不同年份的資料各自排序)insert資料的SEQ為recordcount 1,刪除後的資料,該筆資料以下的資料的SEQ都減一--------------------------------------------------------
我絕得這有些問題 例如說你總資料的 recordcount = 100YYY = 10 的 有50筆YYY = 20 的 有50筆如你說的 select * from test1 where YYY = 10 如此recordcount = 50
你市這時候直接insert 資料嗎 那他的SEQ = 51如果剛好在Table中所有筆數中 SEQ = 51 的資料其 YYY = 10 tf3 也相同
那就會重複到了。
--------------------------------------------------------------------------------
Active Data Objects結合了OLE DB的普遍性質—那就是在諸如RDO和DAO模型中可以找到的易於使用的
特性ADO包含了所有可以被OLE DB標準介面描述的資料類型換而言之,ADO是可擴充的,不需要對你的
部件做任何工作
資料的訪問和操縱是任何實際的應用程式的一個固有部分對於資料來說,無論它是否是關聯式的,無論
它是否存在一個DBMS,也無論它的存儲平臺是什?,資料就是資料—一個文件沒有必要一定是給定的二進
開發者群體需要具有簡單介面的現代的開發工具以快速訪問資料微軟對此問題的回答是Universal
Data Access(UDA通用資料訪問)體系結構,對此,Stephen Rauch的文章 “Manage Data from Myriad
Sources with the Universal Data Access Interfaces”中有詳細的闡述(MSJ,1997年9月)簡單的
說,UDA是一種將OLE DB應用於實際的理論所有的都被指向一個資料源—一個試算表,一條電子郵件
消息,或一份AS400文檔—由OLE DB介面過濾並以一種通用的格式表示,這樣應用程式能總是以同樣的
方式對資料進行訪問位於OLE DB上的並處理來自應用程式的調用的中間層被稱作Active Data Objects
(ADO)它是編寫針對帶有OLE DB提供者的任何類型的資料源的推薦標準
圖 1 OLE DB
讓我們仔細看看Visual Studio 60所帶來的ADO 20的新特性我將向你展示如何用Visual Studio 60
套件來編寫ADO我將集中於Java語言的Windows Foundation Classes(WFC)的和Visual Basic的內置的ADO
支援,對於Visual C
和InterDev將略微提一提
ADO是一個物件模型,它結合了OLE DB易於使用的特性以及在諸如Remote Data Objects(RDO)和Data
Access Objects(DAO)的模型中容易找到的通用特性ADO是一個可以通過IDispatch和vtable函數訪問
的COM自動化伺服器最重要的是:ADO包含了所有可以被OLE DB標準介面描述的資料類型換而言之,
ADO物件模型具有可擴展性,它不需要你對自己的部件做任何工作通過通常的ADO編程介面,你可以可
視化地處理所有的事,即使那些記錄集的資訊的格式是你從來沒有想到過會見到的
ADO在其實際運行中得到了很高的評價,記憶體覆蓋,線程安全,分散式事務支援,基於Web的遠端資料訪問
作?Microsoft UDA策略的一部分,ADO試圖成?基於跨平臺的,資料源異構的資料訪問的標準模型隨著
時間的流逝,它將取代其他模型ADO集中了RDO和DAO的所有最好的特性,並將它們重新組織在一個同樣
可以提供對事件的充分支援的略微有點不同的物件模型中如果你想深入的鑽研一下Microsoft的資料
訪問技術之間的不同,你可以看看 “Data Access Technologies”,這是由Robert Green寫的MSDN的
關於技術性方面的文章
將你當前的基於RDO的系統移植?ADO的不需要對系統的完全的重構,但它也不是件微不足道的事情移
植系統的難度和複雜性比RDO和ADO的差異大移植?ADO是很有價值的,但是我建議如果不是絕對必要
的話請你不要這樣做
從企業的觀點來看ADO
UDA給Windows DNA(Distributed Internet Applications分散式互連網應用程式)體系結構以一個資料
訪問和存取的機制?進一步瞭解UDA,你可以看 “Say UDA for All Your Data Acess Needs,”該文
是由Aaron Skonnard寫的(見Microsoft Interactive Developer,1998年4月)
即使是跨了多個硬體平臺,任何一個分散式企業系統都有多個資料源,包括Microsoft Access資料庫,
試算表和SQL Server表最近,我參加了一個異構的圖像資料庫的研究,其內容包括:SQL Server表
(包括圖像及其描述),通過與名字相關的ASCII碼和Word文檔對圖像進行分類索引,所有者文件中既
有圖像又有文本當你需要對付這樣的工程時,你會開始認識到統一的方法和物件公共集的重要性了
我曾經見過在相關的工程中使用不同的訪問資料方法的開發團隊這種情況是經常發生的,這是因?
其中一個團隊相當早的提前對子專案進行了開發,或者由於它們繼承了原來的一些代碼,或出於更簡
單的原因,即這些工程只是部分相關,它們之間的公共部分是底層的資料,或者可能是買主所以這樣
就出現了一個團隊用RDO進行資料操作,而另外一個團隊用ADO這樣的事是常常發生的:即類似的代碼
被重復開發了兩次(或更多),一次是RDO的,一次是ADO的在工程間的公共層就成了物理資料存儲了(見圖2)
圖2 資料訪問技術
在ADO之前的RDO是一種增加DAO的客戶伺服器能力,以提高其性能和可擴充性的當然的方法根本上說來,
RDO是一種位於ODBC API的上層的簡便的封裝它揭示了了DAO資料物件模型中的許多東西,但它缺乏進行
資料訪問的Jet引擎雖然這將予ADO更快的速度,但它沒法利用該引擎的許多特性,而且它只能訪問關係
型的資料庫
ADO 20的思想就在於:?不同的應用程式訪問相同的資料源創建一個更高層的公用層如果你比較圖1
和圖2,你應該會明白我的意思儘管存在資料結構和組織間的物理位置的不同,編程的介面應該是一樣
的?了找出RDO和ADO之間的更多的不同,我建議你閱讀Bill Vaughn寫的非常好的一篇文章 “Exploring
ActiveX Data Objects from an RDO Point of View,"你能在MSDN的技術性文章部分中找到它ADO的出
現並不意味著RDO的結束實際上,微軟承諾在可以預見的將來繼續支援RDO
ADO 20有什?新特點?
對於ADO15以前包括15的版本來說,從功能的角度來看RDO和ADO不是完全相等的等同就意味著你可
以通過這兩種方法解決同樣的問題;它不是指存在重命名的或者優化的功能相同的物件因此,移植到
ADO不是一個簡單的事情從另一方面來說,一旦你熟練掌握了RDO或DAO技術的話,學習ADO是件相當容
ADO 20的新特性包括事件處理,記錄集的延續,分層目錄結構指標和資料成形,分散式事務處理,多維
資料,遠端資料服務(RDS),以及對C
和Java的支援的增強在鑽研一些Visual Basic代碼的時候將會
見到所有的這些特性當使用Visual J
時,我將舉例說明新的Windows Foundation Classes(WFC)是
如何支援ADO的ADO的最讓人激動的是在Visual Studio 60中的任何開發工具中你都可以找到對它的
充分的支援
ADO快速教程
ADO物件模型是由相對數量較少的物件組成不象RDO物件模型,每個主要的ADO物件都能被個別的被創建
這就意味著,舉例說吧,你不需要在創建有效的記錄集物件前創建一個連接
Dim cn As New ADODBConnection
Dim rs As New ADODBRecordset
cnOpen "Biblio"
rsOpen "select * from titles where title like '%h'", cn
ADO 20物件是Connection,Command,Parameter,Recordset,Field,Error和PropertyADO物件模型也包
括四個類集:它們分別是一套相關的Error,Parameter,Property和Field物件讓我們來看看每個物件的
Connection物件提供連接,該連接連接的程式中存有它正在訪問的資料源屬性允許你定義:連接串,命令
執行以及連接?動的間隔時間,資料提供者,(無論臨時表位置是應該在用戶端還是在伺服器端),和對於
資料的訪問許可權方法有關於如下功能的:執行命令,打開和關閉一個連接和管理事務
在許多地方你可以指定你想使用的提供者:通過Provider屬性,在連接字串中,或者甚至通過Open方法
選擇你最喜歡的實現方式,但要保證你沒有?同樣的連接指定多個的提供者缺省的提供者(當
你沒有指定你自己的提供者的情況下)是MSDASQL,針對ODBC的Microsoft OLE DB提供者
Command物件定義了一個SQL聲明,一個存儲過程,或任何其他的你可能想讓提供者執行的關於資料的操
作Command的屬性有:當前連接,最大允許執行時間和參數集一個參數就是你將它作?參數傳遞給命令
的值在這些屬性中用以區分一個參數的屬性有:方向(輸入,輸出,或者兩者都有),類型當然還有它們的值
記錄集物件也許是最典型的ADO物件,然而它是最複雜的當中的一個它表示命令執行的結果,並且它大
多是以資料庫的記錄集的形式給出一個記錄集是由以行和域的形式表示的資訊組成它不一定非要映射
成關係型數據庫的記錄實際上,如同我早些時候解釋的那樣,ADO是基於OLE DB並且能被用來視覺化地訪
問任何資料源中的資料,這資料源包括非關聯式的資料庫記錄集提供了緩衝能力,它接受資料的變化,並
且將這些變化以批次處理的方式傳給伺服器你可以瀏覽並對記錄集的內容分類,如同列舉和提取行你也
能通過如:刪除,添加和刷新操作等任何方式修改資料記錄集存在跟連接的嚴格的關係,但是這不意味著
你總是需要一個打開的連接來獲得一個記錄集你也可以按如下方式進行:
Dim RS As New ADODBRecordset
sql = "select * from authors"
RSOpen sql, "Pubs"
既然Connection實際上是資料和命令傳送的通道,所以該物件仍然被創建了,除了一個名字叫做
RecordsetActiveConnection的屬性外,它是不可見的並工作在後臺
Field物件是一列同類的資料它提供了一種這樣的編程介面,即能讓你可以對單個單元的值以及基本
的特徵如:類型和大小進行讀和寫所有給定記錄集的Field物件形成了一個Field集如我將在後面向
你說明的, Fields集隱藏著一個引人注目的特性,它將再次證明Recordset物件的靈活性
最後是Property物件每個物件都有屬性提供的使用了ADO的物件可能是各種各樣的但不存在這樣一
套屬性即包含了所有可能的OLE DB提供者的靜態的屬性因此,任何一個ADO物件都有靜態和動態的屬
性第一套屬性集:包括Name,Type,Value和Attributes,都可以通過如下的語法來訪問:
objPropertyName
最開始的三個屬性都是自我說明性的Attributes是一種數位式的描述符,它是以按位的跟提供者的能
力有關的一些預定義的屬性組合(它類似於COM伺服器的元件分類)
動態屬性是跟潛在的提供者類型相應的它們被歸進Properties集合,並可以通過名字查詢
objProperties("propName")
The New Recordset Object
ADO 20包括一些新的功能(見圖3)現在可以通過GetString方法把記錄集扁平化變成一個字串
Set Variant = recordsetGetString(
StringFormat,
ColumnDelimiter,
RowDelimiter,
所有的參數都是可選的,如下代碼段所示:
Dim RS As ADODBRecordset
Dim CONN As ADODBConnection
Set CONN = CreateObject("ADODBConnection")
CONNOpen "PUBS"
sql = "select * from authors"
Set RS = CONNExecute(sql)
MsgBox RSGetString(, 10)
RSMoveFirst
這個常式連向大家熟悉的SQL Server PUBS資料庫,將所有的作者名字提取進一個記錄集中,然後將
它的最開始的10行拉直變成一個字串除了在Visual Basic中外,由GetString返回的值是一個
BSTR類型的變數結構
在調用GetString時,你可以以相當大的自由度來通過指定參數來安排資料的格式例如:你可以改變缺
省的行和列的分界符並選擇只提取指定數量的行目前,StringFormat參數的值只能是adClipString,
它是StringFormatEnum 列舉的唯一的成員adClipString的值是2,它表示相繼的參數是有效的,庫
應該把它們考慮進去NumRows是將從當前的位置開始提取的行數NullExpr參數提供了一個選擇性
的字串,以便在記錄集中遇到了NULL值時用該字串來取代它以進行顯示
GetString方法是ADO中的對應著RDO中的GetClipString的部分在使用GetString時應該注意一些事
情:首先,該函數返回扁平的資料沒有輸出關於結構和描述標識的資訊或者是任何類似於類型表一類
的東西結果是,GetString可以用來進行單向的資料傳送,而且沒有什?方法可以讀回這種類型的字
符串第二,GetString向前移動記錄指標,如果你要進行進一步的處理,就把它移回來你也要記住缺省
情況下該方法是輸出整個記錄集這就意味著你你不用擔心當前的記錄是個無效的記錄
ADO 20的記錄集物件中還有些其他的不大的改變一個是ActiveCommand屬性,它返回源於給定的記錄
集(如果有的的Command物件 ADO類型庫定義了ActiveCommand作?一個一般類,而不是Command物件,
所以IntelliSense模組(包含於所有的Visual Studio 60?品中)在寫一些使用屬性的代碼時,對你
沒有用處如果你添加如下的一行
MsgBox RSActiveCommandCommandText
到前面的代碼段中,你將能得到?生該記錄集的SQL聲明的原文
select * from authors
書簽是任意的值,它可以唯一地標識記錄集中的一行在你需要將一個引用存儲到特定的記錄時,
你通常需要使用書簽如你可能猜到的那樣,如果你通過標準的Clone方法克隆一個記錄集,那?書
簽就被複製了源於不同的資料類型的ADO提供的書簽有微小的差別如果記錄集的行總是一個資料
庫記錄,那?書簽就可能是記錄的排列值該定義應該是絕對一致的,因此你可以通過簡單的算術操
作來比較書簽
然而,記錄集的來源可以是任何地方, 它包含的資料也可以定址到不同的物件此外,ADO編程者不需
要知道資料的內部結構他或她僅僅是通過由行和域組成的介面來進行利用它的讓我們來看一個例子
Microsoft Active Directory Service Interfaces (ADSI)是起到的是一個OLE DB提供者的作用因
此,它公開了ADO不同種類的物件:從Windows NT或Novell目錄服務到任何Lightweight Directory
Access Protocal(LDAP)—可塑的目錄服務另外,整個ADSI體系結構在跟任何提供對其他的目錄的訪
問的服務的提供者相比時像是個無聲的客戶那樣進行工作.除了這些物件執行?所周知的和預定義的
編程介面,這就是說,ADSI它自身是這?一個公開的物件即它不知道對於任何ADO應用程式的細節.
有一個書簽是用來標識這些物件中的一個ADO應用程式和可能的諸如ADSI這樣的提供者都並不知道
它書簽必須由提供者直接並且完全地管理ADO通過OLE DB的IrowsetLocate介面處理書簽如果提供
者支援書簽,它必須恰當的執行該介面
Dim vBookmark As Variant
RSCursorLocation = adUseClient
vBookmark = RSBookmark
RSBookmark = vBookmark
這代碼說明了在代碼中正確使用書簽的方法使用支援書簽的指標類型是件重要的事情書簽是
個可讀寫的屬性,你可以賦給它以任意值,包括連續的字元
RSBookmark = "Hello, world"
如果你想在Visual Basic 60運行時應在用程式的書簽所用的參數有問題時向你發出消息進行提
示但終究書簽的實際值應該總是對用戶的應用程式是不可見的
如果你需要比較書簽,你必須使用ADO 20中公開的Recordset物件提供的CompareBookmark函數該
函數和Bookmark屬性自身是直接映射到IrowsetLocate函數上特別是介面的定位方法如:Compare,
GetRowsAt和GetRowsByBookmark,其名字具有自解釋性圖4顯示了這世界上用到了記錄集物件的所
有新特性的最簡單的Visual Basic代碼
記錄集已經濾過了在ADO 20前的能力,但是20版還添加了查找和分類特性基本上說來,Sort屬性
影響了記錄集樹被訪問的方式和被遍曆的行的順序Filter屬性決定哪些行是對用戶可見的使用的
遮罩由一列布林項或是由書簽陣列給出你也可以用通配符最後,Find方法基於查找變址域來檢索
一行Find方法的語法是:
Find (criteria, SkipRows, searchDirection, start)
查找的準則是一個按如下格式的字串:
所有的布林操作符除Like外都是可能的準則字串舉例如下:
City = 'Redmond'
Name Like 'Bill*'
這裏也存在一些嚴格的語法要求日期值必須附上一對#字元,單引號必須包圍字串
Find命令行允許你在開始查找之前跳過給定數目的行初始位置(和那個你開始跳的位置)就是
Start參數searchDirctiion決定了查找是自頂向下還是自下到上的你可以做一些事來加快查找
處理的速度首先,?記錄集設定adUseClient指標,將你想檢索的域的Optimize 動態屬性設定True
FieldNameProperties("Optimize") = True
這種方式,可以更快的檢索和訪問域的內容注意Optimize不是提供者的屬性它只是在ADO內部定義
和使用的該屬性僅在asUseClient指標被設置時被添加到Properties集合中
記錄集的延續和緩衝
幾個月前,一個讀者給我發了個EMAIL,這裏面有個很奇怪的問題他說 “我喜歡象記錄集這樣的
結構,並且我在任何時候都用它們ADO記錄集可以用來進行對資料的緩衝而不需要涉及到資料庫
連接或者,甚至OLE DB提供者?”我迅速對此回答: “不,我認?你不能這樣做記錄集無論如何都
需要一個連接”
通過更進一步的思考,我覺得他說到了最重要的問題上ADO記錄集是個靈活的,最優的資料結構它
們能跟OLE DB資料庫很好的工作,但是遺憾的是你並不能在任何你需要一個強大的使用方便資料結
構的時候使用它們但這裏有個好消息ADO 20給你提供了針對這一問題的新特性Field集提供了
相當新的Append方法,它能在最初就創建一個記錄集
Dim RS As New ADODBRecordset
RSCursorLocation = adUseClient
RSFieldsAppend "Name", adBSTR
RSFieldsAppend "City", adBSTR
RS!Name = "DinoE"
RS!City = "Redmond"
這裏是一個ADO記錄集,它就沒有資料庫連接和OLE DB的概念ADO記錄集總歸是個獨立的物件了要
緊的是你所選擇的客戶指標以及將你的新的域添加到記錄集的Fields集中去Append方法需要兩個
非選擇性的參數:功能變數名稱和類型如果你想要字串的話那就用adBSTR
如果是這樣的話,想象使用它的應用程式是個直接的辦法如:你可以寫代碼讀你的老的所有者文件
並將它們的資料轉到記錄集中
這只是一個由磁片文件創建記錄集的方法ADO 20增加了對記錄集的延續性的支援實際上,你有了
個名?Save的新方法,它帶有兩個參數:輸出檔案名和資料格式
Dim rs As New ADODBRecordset
rsadUseClient
rsSave "c:\demorst", adPersistADTG
目前,只有adPersistADTG(也就是零)是允許的只有打開的記錄集才能執行存儲存儲的資料也可
能會受你所使用的篩檢程式的影響注意在記錄集關閉前該方法不會關閉文件的在這中間,文件是作
?唯讀方式訪問的這使得ADO應用程式用Save方法來創建平行且延續的緩衝變得更容易了如果該
文件已經存在了,Save方法返回一個錯誤,並準備執行一個工作環境而且,該方法將當前行的位置
移到第一個記錄處它將所有與記錄集相關的東西(包括資料和和圖表)都存到磁片上然而,它並不
存儲連接和命令資訊這將Save和GetString區分開來,並使得應用程式能載入先前存入的記錄集
使用的方法是:
rsOpen "c:\demorst"
再次說明:使用用戶端指標對於你來說是重要的
非同步獲取和事件處理
ADO 20也可以讓你以這樣的方式執行命令:即以非同步方式獲取資料這發生在調用Open方法的語法中
recordsetOpen Source, ActiveConnection, CursorType,
LockType, Options
跟通常一樣,Source參數被指定一個有效的SQL字串(甚至可能是一個被存儲的過程的名字),一個先
前被存儲的文件的名字,或者是一個Command物件Options參數限定命令,並且可能影響提供者處理它
的方式特別是它可以設定值?adExecuteAsync或adFethchAsyncadFetchAysnc意味著Source命令必
須是以非同步的方式執行,也就是說,該方法是立即返回的並且提供者在操作結束時啟動一個事件就另
一方面來說,adFetchAsync使得第一塊中的那些行被同步地取出(跟通常一樣)其大小由記錄集中的
CacheSize屬性中所存的值來決定剩下的那些行被非同步的載入
當一個軟體以非同步的方式運行時,平臺應該提供一種方式使得用戶知道它什?時候結束對於這問題
有不同的實現方法,Platform SDK使用的是同步物件,Microsoft Internet Explorer Remote Scripting
使用的是回調函數ADO選擇的是第三種方法,也許對RAD編程者來說是最合適的一種方法:事件
這當中有兩類事件:與Connection物件相關的事件(ConnectionEvent介面)和屬於Recordset物件的
(RecordEvent介面)(見圖5)在許多情況下你的程式將會在特定的操作發生的前後被通知在一個
操作發生後引發的事件總是伴隨著一個Error物件用以描述操作的結果在操作前引發的事件使得
你可以控制下一步的指令的參數可能到達你的應用程式的事件會太頻繁通過正確地設定一個事件
的Status參數,你可以避免更進一步的通知
WillChangeField cFields, Fields, adStatus, pRecordset
CFields參數是在下一個Fields陣列中的Field物件的數目Fields包含著帶有挂起的變化的Field對
象相關的記錄集是通過pRecordset參數維持的adStatus是一個類型EventStatusEnum物件,它的值
通常設?adStatusOK現將它設?:
Set adStatus = adStatusUnwantedEvent 如果你不想再要這些通知
處理ADO事件可能是容易的,這將取決於你所使用的語言如同你可能猜到的那樣,用Visual C
應該從庫中得到連接指標並調用它的Advise方法這要求你在你的代碼部分有相當大的編程量,但將
給你提供很多靈活性實際上,你可以定義一個簡單的處理多個物件引發的事件處理另一方面,所有
輸出介面中的方法都必須被執行,即使是用最簡單的語句也行:
return S_OK;
與Visual C
相比,Visual Basic 和Visual J
就節省了你一些工作特別是Visual Basic要求你?
每個物件都寫相應的事件處理,這是由於事件處理過程是基於名稱的使用WithEvents關鍵字是在
Visual Basic中獲取事件的最好方法(如果你用Visual C
的話,WithEvent所做的將比你用
實現的功能可能有些不同)
遵循的是略微有所不同的實現方法:它是源於Java語言的基於Listener的事件模型
一般說來,你需要定義一個類執行輸出介面並將這個類附在引發事件的類的實例上這是最底限
度的要求 通過對ADO 20內置的支援,WFC將它極大地簡化了它用起來跟用Visual Basic一樣
簡單,但遠比Visual C
ConnectionEventHandler handler = new
ConnectionEventHandler(this,"onConnectComplete");
先前的片段在ConnectionEvent介面中定義了一個類以執行onConnectComplete事件接著你將如
下的 “Listener”函數添加到物件的事件處理中
Connection conn = new Connection();
connaddOnConnectComplete(handler);
於是,對於同樣的一個事件你有了多個處理
分層目錄結構指標和資料成形
如果你處理資料,那?很可能你需要將它從多個表中提取出來在大多數情況下,你使用JOIN命令合併
相關表中的資料,特別是在你訪問關係型數據庫的情況下任何由JION命令形成的記錄集總是包含了
多餘的資訊例如,如果你對一個作者的所有書籍感興趣的話,你可以合併Authors和Title Author表
(我在這裏指的是Biblio和PUBS資料庫)在返回的記錄集中,關於作者的資訊在每一行中無效地重復
你合併的嵌套次數越多或越複雜,消除多餘資訊對於你來說就越重要,分層目錄結構指標允許你以基
於樹形的邏輯來組織你的記錄集該過程也叫做資料成形,並且它可以以兩種方式來實現你可以用
類似于SQL的成形語言,或者你可以通過使用Visual Studio 60的相應的高級工具我將在後面提供
一個例子現在我們來看看成形語言
就某方面來說,成形語言顯得跟SQL語言類似
SHAPE {select au_ID, Author from authors}
APPEND ( {select ISBN from [title author]}
AS chapter RELATE au_id TO au_id)
一般說來,SHAPE命令定義記錄集,APPEND子句添加一個子記錄集到它當中去換而言之,記錄集可以
作?一個域的其他任何資料類型使用(見圖6)父記錄集和子記錄集是通過域與域間的關係實現連
接,該關係同樣需要一個名稱
圖 6 APPEND 記錄集
作?資料成形的結果,父記錄集附加了新的一列每行中的新的域都是指向定義在APPEND從句中所定
義的記錄集子記錄集只列舉那些au_id值跟父記錄集中相同的域的是匹配的記錄在前面的代碼中,
如果給出一個作者的ID,那?存在一個記錄集,在它當中有一個叫Chapter的附加的域,它的Value屬
性是指向一個子記錄集,該子記錄集中有來自於Title Autor表的所有所請求的域,在本例中,
是ISBN圖7舉例說明了一些用於分層目錄結構記錄的定位的Visual Basic源代碼注意我是怎樣
通過名稱來訪問Chapter域?了得到實際的子記錄集,還需要另外一個步驟:調用Value屬性
SHAPE命令也可以嵌套這意味著你能用其他的SHAPE命令作?APPEND的內部命令跟SHAPE語法打交
道如同手工書寫SQL查詢一樣也是件煩人的事情幸運的是,Visual Studio 60給你提供了高級的工
具它可以顯著地簡化SHAPE查詢地定義我將簡要地說明這一點
APPEND不是唯一一個你可以附在SHAPE命令上的從句 你還可以改用一個COMPUTE從句來代替COMPUTE
能讓你對已有的行執行統計功能,或按一個或更多的域進行分組其預定義的函數有SUM, AVG, MAX和
MIN在最後的記錄集裏就給出了父行的這些操作的結果而且,該記錄集也包含了一個引用域,它指向
由COMPUTE處理的原始行所在實際表是不是覺得不太明白?讓我們來看看一個例子
假設你有個客戶定單表一天,你想知道每個姓是以A開頭的客戶的定單的總數
SHAPE {select custID, last name
from orders where last name
like 'A%''}
COMPUTE (SUM(amount)) AS
圖8說明了結果記錄集你有用戶的ID,姓,和訂單的總數,除了客戶定單的列表引用外,其他的都是形
式非常簡單的
圖 8 COMPUTE 記錄集
?在較底的層次上(也就是說,沒有用專用工具的情況下)實現資料成形功能,你得指定你的提供者?
MSDataShape
Dim cnn As New ADODBConnection
cnnProvider = "MSDataShape"
cnnOpen "Biblio"
Visual Basic 60 資料環境設計器
Visual Basic 60的最引人注目的新特性之一就是Data Environment Designer資料環境設計器
(見圖9)它是個一般的,設計時環境,它能讓你視覺化地安排三種類型的資料工具:連接,命令和記
錄集Data Environment也是個物件你可以將它包括在你的Visual Basic工程中,並在你的代碼中
引用它(見圖10)
圖 9 Data Environment Designer
?添加一個實例到工程中,只需要選擇Project|Add Data Environment於是,你就可以象其他任何
物件那樣來處理它了唯一的區別在於它是是個在整個工程範圍內都有效的物件,而不是專門針對一
個給定的表單的
圖 10 Data Environment Object Model(資料環境物件模型)
Data Environment物件模型是由三個集合組成:Commands, Connections和Recordsets,當然還要
加上一些通用的屬性如Object和Name你可以把一個物件嵌入到你的工程組中,並用它來準備任何你
在運行時需要的資料連接和查詢Data Environment模糊了SQL查詢語言和SHAPE語言的差別你可以
簡單的定義命令,並可以圖形化地做到這一點(見圖11)也就是說,應該由下面的環境來做這事情
圖 11 創建查詢
這裏有向導,對話方塊和工具條按鈕幫助你快速的創建任何類型的記錄集例如,在圖9中,你可以看到兩
種不同的連接,它們是跟一個Microsoft Access資料庫(通過針對ODBC的OLE提供者)和一個SQL Server
表連接從設計者的立場來看,兩個記錄集的創建方式是完全相同的嵌套命令物件的存在造成了這裏
的分層目錄結構的記錄集你可以通過上下文功能表添加子命令,如圖12所示定義一個新的連接如同遵
從圖13中的指令一樣簡單
圖 12 添加一個子命令
圖 13 創建一個新連接
你可以用多種方式在Data Environment Designer環境下創建一個物件例如,你可以設定從新的
ADODC控制項到MSFlexGrid的任何資料覺察控制項的DataSource屬性第二,你可以利用它的物件模型
並直接訪問任何預定義的連接,命令和記錄集你也能添加一些代碼,它對ADO物件和DataEnvironment
的初始化和終止作出回應?做到這一點,只需要在Project View視窗中選擇DataEnvironment物件,
並切換到代碼視(見圖14)
圖 14 處理ADO事件
在Visual Basic 60中, Data Environment Designer跟DataView窗口相配合發揮作用,IDE工具允
許你查看任何資料源的內部結構同時也可以創建新的資料連接
在不同的環境下編寫ADO
當用Visual Basic 60編寫ADO時,你不能忽視Hierarchical FlexGrid(HFlexGrid)控制項,見圖15所示
圖 15 Hierchical FlexGrid
它顯然比原來版本的Visual Basic的FlexGrid控制項好得多它得新特性如名稱暗示的那樣:內置對
分層目錄結構的記錄集的支援圖16顯示了一個簡單的基於Visual Basic 60的程式,它用到了
HFlexGrid控制項並概述了我目前所涉及的所有的ADO的特性在該例子中,我定義了一個
DataEnvironment物件並用它來從包含了一個作者的所有的書的Biblio中獲取一個記錄集
Data Environment鍵和HFlexGrid控制項間缺少的連接可在該片段中找到
圖 16 演示程式
Private Sub cmdDataEnv_Click()
Set hflexDataSource =
Set hflexDataMember =
DataEnvRecordsetName
該代碼自動定義了DataEnvironment物件,在早先我是將它定義來作?HFlexGrid控制項的資料源
HFlexGrid控制項也可以成功的用於顯示平面記錄集並且在功能上是跟原來版本的Visual Basic一樣的
可以通過新的名?MsAdoDCocx的ActiveX控制項來使得ADO的功能可用它看起來象早先的但目前
仍然被支援的Data控制項ADODC被假定?在你喜歡上它後將取代Data控制項如你可能猜到的那樣,
ADODC具有Data控制項中所沒有的特性它是基於OLE DB的並公開了ADO 20編程介面
圖 17 ADODC控制項
在Visual Studio 60中,Visual InterDev是個主要的Web開發工具它有兩個專門的特性: Data
Environment物件(相同的東西在Visual Basic中也能被找到)和Recordset設計時控制項該思想是
簡單的,添加Data Environment物件到工程中,定義你的資料連接,查詢和完成其他你所需要的任
何工作當你完成後,你將Recordset設計時控制項插入到你的Active Server Pagers中,並從Data
Environment集合--Recordsets, Commands, Connections中提取你所需要的資料物件(記錄集,
命令和連接)
& script language="JavaScript" runat="server"&
function InitRS()
thisPagecreateDE();
var rsTemp = DERecordsets('authors');
rsAuthorssetRecordSource(rsTemp);
rsAuthorsopen();
先前的代碼段說明了一個JavaScript過程,它恢復一個記錄集並?在頁面中進一步使用它而打開它
下使用ADO,並且通常使用源於C
的高級物件模型,常常引起下面的問題即需要將方法返回
的Variant類型轉換成語言的本地類型由於這個原因,ADO 20公開了附加的叫做IADORecordBinding
的介面,使得你將記錄集的特定類型綁定?C
類型這可以通過如下步驟來完成:
定義一個從CADORecordBinding派生出來的類並在頭文件irsinth裏聲明它這個類必須有如下三個
方法: BindToRecordSet, AddNew和Update
將盡可能多的所需要的資料成員添加到類中以映射記錄集的域通過使用其中一個如下的預定義的宏
將每個記錄集的域跟它相應的資料成員綁定起來, ADO_VARIABLE_LENGTH_BINDING_ENTRY,
ADO_FIXED_LENGTH_BINDING_ENTRY和ADO_NUMERIC_BINDING_ENTRY所有這些對宏的調用必須由
下面的給包圍起來
BEGIN_ADO_BINDING
END_ADO_BINDING
當你得到一個記錄集,調用BindToRecordset,將其指標傳給你的類
現在,根據你的需要對記錄集進行處理重要的是從現在開始你可以對你自己的資料成員而不是對
記錄集的源資料進行處理每次你移動當前位置的時候,資料會被自動地提取出來並放在C
實例變數中
在Java語言中也有同樣的問題,在Visual J
60中是通過在Field中引入附加的方法來解決這一
在Visual J
60環境下,在Java語言中使用ADO進行資料訪問已變得簡單了新的Visual J
於的WFC包括了一些特殊的專門用於資料管理的類結果是在Java語言中編寫一個資料庫應用程式變
得比以前容易多了
讓我們來回顧一下Visual J
11的情況你可以調用ADO 15物件模型,但是你必須通過COM來實現
這一點由於JavaCOM集成模型的因素,你需要在你的基於Java的程式和希望的COM伺服器之間有一
套介面類以這種方式,Microsoft Java Visual Machine能挂接這些介面並將它們重定向到實際的服
務器上你也需要一個象Java Type Library Wizard(Java類型庫向導, javatlbexe 或 jcomexe)
的工具來幫助你來生成所有的包裝類最後一步是調用Visual J
Database Wizard來完成工作
使用Visual J
60和WFC是完全不同的情況現在類庫公開了三種物件,分別叫做: Connection,
Command和Recordset它們的方法和屬性跟我在早些時候討論的ADO物件模型是一一對應的ADO事件也
可以遵循典型的收聽者JDK模型來處理
最重要的是,編程者的工作只是編寫Java代碼—不需要考慮工具,向導和中間類下面是一個如何建立
一個連接並打開一個記錄集的例子
void openDataConnection() {
m_con = new Connection();
m_rs = new Recordset();
m_consetConnectionString(
"Provider=MSDASQL1;UID=
PWD=;DATABASE=DSN=SQLS;SERVER=(local);" );
m_consetCursorLocation(
AdoEnumsCursorLocationCLIENT );
m_conopen();
m_rssetActiveConnection( m_con );
m_rssetSource( "select * from authors" );
m_rssetCursorType( AdoEnumsCursorTypeSTATIC );
m_rssetCursorLocation(
AdoEnumsCursorLocationCLIENT );
m_rssetLockType( AdoEnumsLockTypeOPTIMISTIC );
m_rsopen();
也?你提供了四個面向資料的元件: DataSource, DataBinder, DataNavigator和DataGrid
DataSource實施一個資料庫的連接,而DataBinder實現的功能多少象一組UI控制項的粘合劑這些元件在當
前行的位置變化時會自動刷新DataBinder是跟特定的DataSource相連DataNavigator跟Visual Basic
的Data控制項很相似(即使是用戶介面也很類似),而DataGrid是一個典型的基於資料源的柵格
這是一個概述,它是關於這些內容:基於Java語言的WFC類庫關於在使用ADO 20進行資料訪問的情況下的
相關內容Visual J
也使用向導來使得用Java開發框架資料庫應用程式變得容易
Web端的ADO
去年當Internet Explorer 40發佈時,很少有編程者真正領會到資料綁定特性的重要性該特性看起來
太棒了,但是它依賴於Internet Explorer 40並且缺乏適當的例子和應用程式資料綁定是一項基於Web
的技術,它能讓你不離開當前頁面去訪問遠端的資料源換而言之,資料綁定是資料覺察控制項的Web版如果
你使用它,你能讓資料綁定HTML標簽舉例來說吧,你可以將一個 連接到一個特定的資料源並且
可以讓行和列在記錄實際上進來的時候進行非同步的添加一旦你建立一個綁定,你(和你的用戶)不再需
要做其他的事情
資料綁定是通過一個叫做Data Source Object(DSO)的模組來實現的,它實際上是一個ActiveX控制項,它
起到的大致作用是一個介於資料庫和Web頁面的代理Microsoft?Internet Explorer 40提供了兩個
DSO: Tabular Data Control (TDC) 和 Advanced Data Control (ADC)TDC只能處理基於文本的資料,
而ADC能連接到任意ODBC源?有個初步的認識,你可以參考Rich Rollmann (MIND, July 1997)寫的文
章"Data Binding in Dynamic HTML"現在,ADC演變?RDS—它是Web端的UDA和ADO的一部分,它被認?
是專門用於Internet的
其中一個RDS是一個名叫RDSDataControl 的ActiveX控制項,你可以將它放到HTML頁面裏通過使用資料
綁定技術,你可以在用戶端有效地管理記錄集你可以對行進行定位,分類,刷新而不需要進一步跟服務
器聯繫只有在刷新挂起的變化時你才要回到伺服器上RDS在用戶端對資料進行緩存並極大地減少了
對往返行程的需要下面的代碼行顯示了如何在HTML頁面中使用RDS來填寫一個表單
& object id="rds"
classid="clsid:BD96C556-65A3-11D0-983A-00C04FC29E33"&
First Column
Second Column
RDS資料工廠
並不是所有的RDS都在用戶端當你通過VBScript或Jscript調用RDS ActiveX控制項的方法時,你實際
上最後調用的是RDS Data Factory Server (RDSServerDataFactory物件),它是位於Web的伺服器
空間的由於這個因素,資料綁定可以將你綁定到一個相容的瀏覽器上或一個啟動了RDS的伺服器上
RDS Data Factory通過ADO介面以訪問下面的資料源的方式來獲取請求並完成它們(見圖18)它只是
完成查詢和更新的工作
圖 18 RDS的體系結構
目前,RDS被定義?ADO的一部分並成?整個UDA體系結構的一個基本的元件ADO 20加強了RDS方面的
功能 對RDSServerDataFactory物件進行了改進以支援一層自定義的代碼,該代碼的目的是添加合
法性驗證的能力和訪問許可權控制這個被叫做Handler的新模組可以在執行時對命令字串和連接參
數進行修改一個Handler可以被一個初始化文件驅動並且通過添加如下的句子來調用:
Handler=progID,arg1,arg2,…, argn
在記錄集連接字串中,需要用ProID來標識Handler,它是執行IdataFactoryHandler介面的COM伺服器
Microsoft提供了缺省的名?MSDFMAPHandler的Handler,它是在msdfmapini文件中規定的如果你
自己想的話,你可以編寫自己的Handler(處理)下面是一段對msdfmapini文件的摘錄,你可以在你的
Windows目錄下找到它:
[connect AuthorDatabase]
Access=ReadOnly
Connect="DSN=MyLibraryIUID=MyMyPassword"
[userlist AuthorDatabase]
Administrator=ReadWrite
[sql AuthorById]
Sql="SELECT * FROM Authors WHERE au_id = ?"
這意味著任何對AuthorDatabase的連接必須總是有唯讀許可權並且總是要輸入特定的字串名?
Administrator的用戶有讀寫許可權,並且該設置部分覆蓋了先前的一個所有其他的用戶仍然只有
唯讀許可權sql部分指向一個名?AuthorById的過程每次它被調用時,它必須被特定的聲明所取代,
並且?符號必須被第一個過程參數所取代
rdsHandler = "MSDFMAPHandler"
rdsServer = "…"
rdsConnect = "Data Source=AuthorDatabase"
rdsSQL = "AuthorById(16100)"
該代碼向你說明了你如何在VBScript中通過Handler來調用RDSRDS控制項也可以無縫地運用到桌面應
用程式中它最初的目標是基於Web,通過RDS和Dynamic HTML,舉例說,來形成一個真正引人注意的套
件特別是你可以編寫自主式的HTML元件(scriptlet)來在 元素中給出一個記錄集關於這方
面的例子見MIND的1998年10的Cutting Edge欄目
ADO 20也擴展了OLE DB和關於On-Line Analytical Processing (OLAP)的Universal Data Access
的原則它是通過引入MultiDimensional ADO (ADO MD)來做到這一點的 MultiDimensional ADO
(ADO MD)是一套COM物件,使用它可以使多維的資料管理變得更容易
ADO MD並不局限於ADO物件模型並且包含了專門針對多維資料的物件,如cube在ADO MD的外殼下面
運行的是一個OLE DB提供者,它是跟符合OLAP規範的OLE DB相容的ADO和ADO MD是相關的但不是相
同的兩者都對記錄集起作用,即使這些記錄集對於ADO是扁平的,或是雙向的陣列,或者對於ADO MD
來說是n維的物件,其結果都是一樣的
ADO MD的對應著記錄集的相應部分叫做cellset它是從源於關聯式表的資料中提取出來的如果你
是的確需要的話,你可以在同一個工程中同時使用ADO和ADO MD要參考例子,請看MSDN文檔
這篇文章並沒有試圖提供所有ADO物件的對所有方法和屬性的詳盡的描述就這方面有相應的文檔
和不錯的書我在這裏的初衷是試圖向你介紹一些ADO在企業和分散式系統方面的新特性ADO 20
超出了RDO。
 我的解法
以c表示float i=34;int i=(int)i 05;
直接加05去小數
以sql表示declare @val floatset @val=42convert(int,@val 05) 直接加05去小數。
 在Delphi動態生成定義資料庫
--------------------------------------------------------------------------------
在開發通用工資管理等應用資料庫管理系統時,預先定義好資料庫的結構,就不能保證應用系統的通用性。不同的單位需要不同的資料庫,?了減少程式的開發量,並保證程式的通用性,就必須在程式運行中根據實際情況定義所需要的資料庫。
在Delphi開發環境中,定義資料庫通常需要運行Data Base Desktop。在程式運行中使用元件TTable也可以根據需要定義和修改資料庫的結構。
定義標準資料庫
定義資料庫時資料庫文件資訊和資料庫結構資訊是必需的,如資料庫文件的完整路徑,資料庫類型,資料庫的欄位名、類型、長度等。在Delphi程式中可以定義三種標準類型的資料庫,DBASE資料庫、Paradox資料庫、ASCII資料庫。
下面給出的過程已在WIN95Delphi3.0C/S下運行通過。
procedure ZldcreateT
zldT:=TTable.Create(Self);
with zldT do
DatabaseName:='DBDEMOS';{預定義的別名資料庫工作區名}
TableName:='ZLDDBASE';{將定義的資料庫名}
TableType:=ttD{資料庫類型,可?ttParadox、ttASCII、ttDbase}
with FieldDefs do{資料庫結構資訊}
Add('ZLS',ftInteger,0,false);
Add('ZLD',ftBoolean,0,false);
Add('ZEZ',ftString,10,false);
Add('XL',ftDate,0,false);
{....} ------Add Other Fields H
with IndexDefs do{索引文件資訊}
Add('Primary','ZEZ',[ixPrimary,ixUnique]);
{....} ------Add Other Indexes H
CreateT ---- dynamically Create T
通過以上方法建立資料庫,如果已經存在同名資料庫,將被覆蓋,資料將全部丟失。
當修改一個資料庫的結構時,也可以利用TTable的方法CreateTable。先打開欲修改的資料庫,取得該資料庫的結構資訊,再對其修改,然後用修改後的結構資訊重新建立一個新資料庫,再將原資料庫中相同的列寫入新資料庫中,刪除原資料庫,改新資料庫名?原資料庫名即可。。
 。永利娱乐优惠详情
 insert into avorder (orderdate) values (TO_date(':09:50 AM','MM-DD-YYYY HH:MI:SS AM'))
* ERROR 在行1:ORA-01855: 必須設定AMAM 或 PMPM
不知要如何下command才是正確的請指點 , Thanks
Best Regards,Panda。
 引言:CLIENT端的FetchOnDemand = TRUEAPP的FetchBlobsOnDemand = TRUE
對不起!我的程式中並未使用到CLIENT端及APP端!
發表人 - tangkh 於 :17:57。
 ------oh~mygod。
永利娱乐优惠详情
 Delphi中實現多線程同步查詢
--------------------------------------------------------------------------------
優秀的資料庫應用應當充分考慮資料庫訪問的速度問題。通常可以通過優化資料庫、優化 查詢語句、分頁查詢等途徑收到明顯的效果。即使是這樣,也不可避免地會在查詢時閃現一個帶有 SQL符號的沙漏,即滑鼠變成了查詢等待。最可憐的是用戶,他(她)在此時只能無奈地等待。遇到急性子的,乾脆在此時嘗試 Windows中的其他應用程式,結果致使你的資料庫應用顯示一大片白色的視窗。真是無奈!
本文將以簡單的例子告訴你如何實現線程查詢。還等什?,趕快打開Delphi對照著下面的完整源代碼試試吧。
在查詢時能夠做別的事情或者取消查詢,這只是基本的線程查詢,在你閱讀了Delphi有關線程幫助之後能立刻實現。這裏介紹的是多個線程查詢的同步進行。
在Delphi資料庫應用中,都有一個缺省的資料庫會話 Session。通常情況下,每個資料庫應用中只有這一個會話。無論是查詢函數修改資料,在同一時間內只能進行其中的一件事情, 而且進行這一件事情的時候應用程式不能回應鍵盤、滑鼠以及其他的 Windows消息。這就是在 視窗區域會顯示一片空白的原因所在。當然,只要將查詢或資料操縱構造成線程物件,情況會好一些,至少可以接受視窗消息,也可以隨時終止查詢或資料操縱,而不會在螢幕上顯示出太難看的白色。不過,這只是解決了問題的一部分。假如在進行一個線程查詢的時候,用戶通過 按鈕或功能表又發出了另一個查詢的命令,這可如何是好,難道終止正在執行的資料庫訪問嗎? 解決之道就是:多線程同步查詢。
實現多線程同步查詢的基本思想是,?每一個查詢元件(如TQuery元件)創建一個獨佔的 資料庫會話,然後各自進行資料庫訪問。需要特別注意的是,因?Delphi中的 VCL元件大多都 不是線程安全的,所以應當在線程查詢結束後再將DataSource元件與查詢元件關聯,從而顯示 在DBGrid元件中。
下面的例子只實現了靜態的線程同步查詢,即線程物件是固定的,並隨表單的創建和銷毀 而創建和銷毀。你可以就此進行改進,?每一個資料查詢或資料操縱命令創建一個單獨的線程物件,從而達到多線程同步查詢的目的。
注意:應用程式中的線程不是越多越好,因?線程將嚴重吞噬CPU資源,儘管看上去並不明顯。謹慎創建和銷毀線程將避免你的應用程式導致系統資源崩潰。
下面的例子給出了同時進行的兩個線程查詢。第一次按下按鈕時,線程開始執行;以後每次按下按鈕時,如果線程處於挂起狀態則繼續執行,否則挂起線程;線程執行完畢之後將連接 DataSource,查詢結果將顯示在相應的DBGrid中。
{ 這裏的多線程同步查詢演示程式僅包括一個工程文件和一個單元文件 }
{ 表單中放置的元件有: }
{ 兩個Session元件 }
{ 兩個Database元件 }
{ 兩個Query元件 }
{ 兩個DataSource元件 }
{ 兩個DBGrid元件 }
{ 一個Button元件 }
{ 除非特別說明,否則上述各元件的屬性都取預設值(見各元件注釋) }
{ 對於Database元件,就和一般設置一樣,有一個正確的連接即可 }
{ 對於Query 元件,需要在各自的屬性 SQL中添加一些查詢語句,?了 }
{ 看得更清除,建議不要在兩個Query 元件中填寫相同的查詢語句。 }
unit Unit1;
usesWindows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,Db, DBTables, Grids, DBGrids, StdC
typeTForm1 = class(TForm)Session1: TS { 屬性SessionName填寫?S1 }Database1: TD { 屬性SessionName選擇?S1 }Query1: TQ{ 屬性Database選擇?Database1;屬性SessionName選擇?S1 }DataSource1: TDataS { 屬性DataSet設置?空 }DBGrid1: TDBG { 屬性DataSource選擇?DataSource1 }Session2: TS { 屬性SessionName填寫?S2 }Database2: TD { 屬性SessionName選擇?S2 }Query2: TQ{ 屬性Database選擇?Database2;屬性SessionName選擇?S2 }DataSource2: TDataS { 屬性DataSet設置?空 }DBGrid2: TDBG { 屬性DataSource選擇?DataSource2 }BtnGoPause: TB { 用於執行和挂起線程 }procedure FormCreate(Sender: TObject); { 創建表單時創建線程物件 }procedure FormDestroy(Sender: TObject); { 銷毀表單時銷毀線程物件 }procedure BtnGoPauseClick(Sender: TObject); { 執行線程和挂起線程 }
TThreadQuery = class(TThread) { 聲明線程類 }privateFQuery: TQ { 線程中的查詢元件 }FDataSource: TDataS { 與查詢元件相關的資料感知元件 }procedure ConnectDataS{ 連接資料查詢元件和資料感知元件的方法 }protectedprocedure E{ 執行線程的方法 }publicconstructor Create(Query: TQDataSource: TDataSource); { 線程構造器 }
varForm1: TForm1;Q1, { 線程查詢物件1 }Q2: TThreadQ { 線程查詢物件2 }
implementation
{ TThreadQuery類的實現 }
{ 連接資料查詢元件和資料感知元件}procedure TThreadQueryConnectDataSbeginFDataSourceDataSet := FQ{ 該方法在查詢結束後才調用 }
procedure TThreadQueryE{ 執行線程的方法 }begintryFQueryO { 打開查詢 }Synchronize(ConnectDataSource);{ 線程同步 }exceptShowMessage('Query Error'); { 線程異常 }
{ 線程查詢類的構造器 }constructor TThreadQueryCreate(Query: TQ DataSource: TDataSource);beginFQuery := QFDataSource := DataSinherited Create(True);FreeOnTerminate := F
{ 創建表單時創建線程查詢物件 }procedure TForm1FormCreate(Sender: TObject);beginQ1 := TThreadQueryCreate(Query1, DataSource1);Q2 := TThreadQueryCreate(Query2, DataSource2);
{ 銷毀表單時銷毀線程查詢物件 }procedure TForm1FormDestroy(Sender: TObject);beginQ1T { 銷毀之前終止線程執行 }Q1DQ2T { 銷毀之前終止線程執行 }Q2D
{ 開始線程、繼續執行線程、挂起線程 }procedure TForm1BtnGoPauseClick(Sender: TObject);beginif Q1Suspended then Q1Resume else Q1Sif Q2Suspended then Q2Resume else Q2S
 ------**********************************************************哈哈&兵燹最會的2大絕招
這個不會與那個也不會
粉好Delphi KTop的KTop分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知K表Knowlege 知識,就是本站的標語:Open our mind。
 。永利娱乐优惠详情
 BDE錯誤編碼
--------------------------------------------------------------------------------
0 0000 Successful completion 33 0021 System Error 34 0022 Object of Interest Not Found 35 0023 Physical Data Corruption 36 0024 IO Related Error 37 0025 Resource or Limit Error 38 0026 Data Integrity Violation 39 0027 Invalid Request 40 0028 Lock Violation 41 0029 AccessSecurity Violation 42 002A Invalid Context 43 002B OS Error 44 002C Network Error 45 002D Optional Parameter 46 002E Query Processor 47 002F Version Mismatch 48 0030 Capability Not Supported 49 0031 System Configuration Error 50 0032 Warning 51 0033 Miscellaneous 52 0034 Compatibility Error 62 003E Driver Specific Error 63 003F Internal Symbol256 0100 KEYVIOL257 0101 PROBLEMS258 0102 CHANGED512 0200 Production Index file missing, corrupt or
cannot interpret index key513 0201 Open Read Only514 0202 Open the table in read only mode515 0203 Open and Detach516 0204 Open the table and detach the Production Index file517 0205 Fail Open518 0206 Do not open the table519 0207 Convert Non-dBase Index520 0208 Convert production index to dBase format521 0209 BLOB file not found522 020A Open without blob file523 020B Open the table without the blob file524 020C Empty all blob fields525 020D Reinitialize BLOB file and LOSE all blobs526 020E Fail Open527 020F Do not open the table528 0210 Import Non-dBASE BLOB file529 0211 Import BLOB file to dBASE format530 0212 Open as Non-dBASE table531 0213 Open Table and BLOB file in its native format532 0214 Production Index Language driver mismatch533 0215 Production Index damaged534 0216 Rebuild Production Index535 0217 Rebuild all the Production Indexes Lookup table not found or corrupt Blob file not found or corrupt Open Read Only Open the table in read only mode Fail Open Do not open the table Remove lookup Remove link to lookup table Reading records Sorting records Writing records Merging Steps Completed Packing records LIKE NOT INSERT DELETE CHANGETO CHANGE TO FIND CALC COUNT SUM AVERAGEA MAXB MINC ALLD UNIQUEE BLANKF TODAY AS DESCENDING OR ONLY EVERY NO EXACTLY SETB %timeC úte %lower %upper %trim %substringC __QBD ANSWERE DELETEDF INSERTED CHANGED ERRORDEL ERRORINS ERRORCHG __XLTTMP __QBEDIC JAN FEB MAR APR MAYA JUNB JULC AUGD SEPE OCTF NOV DEC INSERTEDDB CHANGEDDB DELETEDDBA ANSWERDBB blankC Sum ofD Average ofE Count ofF Max of Min of GROUPBY FIELDORDER SORT ANSWER TYPE OPTIONS GENERATE AUXILIARY TABLES NO AUXILIARY TABLESA SERVERB LOCALC CANNEDD LIVEE SPEEDF %extract DATE TIME YEAR MONTH DAY HOUR MINUTE SECOND Cannot open a system file IO error on a system file Data structure corruption Cannot find Engine configuration file Cannot write to Engine configuration file Cannot initialize with different configuration file System has been illegally re-entered Cannot locate IDAPI01DLL Cannot load IDAPI01DLLA Cannot load an IDAPI service library At beginning of table At end of table Record moved because key value changed RecordKey deleted No current record Could not find record End of BLOB Could not find object Could not find family memberA BLOB file is missingB Could not find language driver Corrupt tableindex header Corrupt file - other than header Corrupt MemoBLOB file Corrupt index Corrupt lock file Corrupt family file Corrupt or missing VAL file Foreign index file format Read failure Write failure Cannot access directory File Delete operation failed Cannot access file Access to table disabled because of previous error Insufficient memory for this operation Not enough file handles Insufficient disk space Temporary table resource limit Record size is too big for table Too many open cursors Table is full Too many sessions from this workstation Serial number limit (Paradox)A Some internal limit (see context)B Too many open tablesC Too many cursors per tableD Too many record locks on tableE Too many clientsF Too many indexes on table Too many sessions Too many open databases Too many passwords Too many active drivers Too many fields in Table Create Too many table locks Too many open BLOBs Lock file has grown too large Too many open queriesA Too many BLOBs Key violation Minimum validity check failed Maximum validity check failed Field value required Master record missing Master has detail records Cannot delete or modify Master table level is incorrect Field value out of lookup table range Lookup Table Open operation failedA Detail Table Open operation failedB Master Table Open operation failedC Field is blankD Link to master table already definedE Master table is openF Detail table(s) exist Master has detail records Cannot empty it Self referencing referential integrity must be entered
one at a time with no other changes to the table Detail table is open Cannot make this master a detail of another table if
its details are not empty Referential integrity fields must be indexed A table linked by referential integrity
requires password to open Field(s) linked to more than one master Number is out of range Invalid parameter Invalid file name File does not exist Invalid option Invalid handle to the function Unknown table type Cannot open file Cannot redefine primary keyA Cannot change this RINTDescB Foreign and primary key do not matchC Invalid modify requestD Index does not existE Invalid offset into the BLOBF Invalid descriptor number Invalid field type Invalid field descriptor Invalid field transformation Invalid record structure Invalid descriptor Invalid array of index descriptors Invalid array of validity check descriptors Invalid array of referential integrity descriptors Invalid ordering of tables during restructure Name not unique in this contextA Index name requiredB Invalid session handleC invalid restructure operationD Driver not known to systemE Unknown databaseF Invalid password given No callback function Invalid callback buffer length Invalid directory Translate Error Value out of bounds Cannot set cursor of one table to another Bookmarks do not match table Invalid indextag name Invalid index descriptor Table does not exist Table has too many usersA Cannot evaluate Key or Key does not pass filter conditionB Index already existsC Index is openD Invalid BLOB lengthE Invalid BLOB handle in record bufferF Table is open Need to do (hard) restructure Invalid mode Cannot close index Index is being used to order table Unknown user name or password Multi-level cascade is not supported Invalid field name Invalid table name Invalid linked cursor expression Name is reservedA Invalid file extensionB Invalid language DriverC Alias is not currently openedD Incompatible record structuresE Name is reserved by DOSF Destination must be indexed Invalid index type Language Drivers of Table and Index do not match Filter handle is invalid Invalid Filter Invalid table create request Invalid table delete request Invalid index create request Invalid index delete request Invalid table specifiedA Invalid TimeB Invalid DateC Invalid DatetimeD Tables in different directoriesE Mismatch in the number of argumentsF Function not found in service library Must use baseorder for this operation Invalid procedure name Record locked by another user Unlock failed Table is busy Directory is busy File is locked Directory is locked Record already locked by this session Object not locked Lock time outA Key group is lockedB Table lock was lostC Exclusive access was lostD Table cannot be opened for exclusive useE Conflicting record lock in this sessionF A deadlock was detected A user transaction is already in progress No user transaction is currently in progress Record lock failed Couldn't perform the edit because another
user changed the record Couldn't perform the edit because another
user deleted or moved the record Insufficient field rights for operation Insufficient table rights for operation
Password required Insufficient family rights for operation This directory is read only Database is read only Trying to modify read-only field Encrypted dBASE tables not supported Insufficient SQL rights for operation Field is not a BLOB BLOB already opened BLOB not opened Operation not applicable Table is not indexed Engine not initialized Attempt to re-initialize Engine Attempt to mix objects from different sessions Paradox driver not activeA Driver not loadedB Table is read onlyC No associated indexD Table(s) open Cannot perform this operationE Table does not support this operationF Index is read only Table does not support this operation because it
is not uniquely indexed Operation must be performed on the current session Invalid use of keyword Connection is in use by another statement Passthrough SQL connection must be shared Invalid function number File or directory does not exist Path not found Too many open files You may need to increase
MAXFILEHANDLE limit in IDAPI configuration Permission denied Bad file number Memory blocks destroyed Not enough memory Invalid memory block addressA Invalid environmentB Invalid formatC Invalid access codeD Invalid dataF Device does not exist Attempt to remove current directory Not same device No more files Invalid argument Argument list is too long Execution format error Cross-device link Math argument Result is too large File already exists Unknown internal operating system error Share violation Lock violation Critical DOS Error Drive not ready Not exact readwrite Operating system network error Error from NOVELL file server NOVELL server out of memory Record already locked by this workstation Record not locked Network initialization failed Network user limit exceeded Wrong NET file version Cannot lock network file Directory is not private Multiple NET files in use Unknown network error Not initialized for accessing network files SHARE not loaded It is required to share local filesA Not on a network Not logged in or wrong network driverB Lost communication with SQL server Optional parameter is required Invalid optional parameter obsolete obsolete Ambiguous use of ! (inclusion operator) obsolete obsolete A SET operation cannot be included in its own grouping Only numeric and datetime fields can be averaged Invalid expression Invalid OR expressionA obsoleteB bitmapC CALC expression cannot be used in INSERT, DELETE,
CHANGETO and SET rowsD Type error in CALC expressionE CHANGETO can be used in only one query form at a timeF Cannot modify CHANGED table A field can contain only one CHANGETO expression A field cannot contain more than one expression
to be inserted obsolete CHANGETO must be followed by the new value for
the field Checkmark or CALC expressions cannot be used in
FIND queries Cannot perform operation on CHANGED table
together with a CHANGETO query chunk More than 255 fields in ANSWER table AS must be followed by the name for the field
in the ANSWER table DELETE can be used in only one query form at a timeA Cannot perform operation on DELETED table together
with a DELETE queryB Cannot delete from the DELETED tableC Example element is used in two fields with incompatible
types or with a BLOBD Cannot use example elements in an OR expressionE Expression in this field has the wrong typeF Extra comma found Extra OR found One or more query rows do not contribute to the ANSWER FIND can be used in only one query form at a time FIND cannot be used with the ANSWER table A row with GROUPBY must contain SET operations GROUPBY can be used only in SET rows Use only INSERT, DELETE, SET or FIND in leftmost column Use only one INSERT, DELETE, SET or FIND per line Syntax error in expression INSERT can be used in only one query form at a timeA Cannot perform operation on INSERTED table together
with an INSERT queryB INSERT, DELETE, CHANGETO and SET rows may not be checkedC Field must contain an expression to insert (or be blank)D Cannot insert into the INSERTED tableE Variable is an array and cannot be accessedF Label Rows of example elements in CALC expression must be linked Variable name is too long Query may take a long time to process Reserved word or one that can't be used as a variable name Missing comma Missing ) Missing right quote Cannot specify duplicate column names Query has no checked fields Example element has no defining occurrenceA No grouping is defined for SET operationB Query makes no senseC Cannot use patterns in this contextD Date does not existE Variable has not been assigned a valueF Invalid use of example element in summary expression Incomplete query statement Query only contains a SET definition Example element with ! makes no sense in expression Example element cannot be used more than twice with a ! query Row cannot contain expression obsolete obsolete No permission to insert or delete records No permission to modify field Field not found in table Expecting a column separator in table headerA Expecting a column separator in tableB Expecting column name in tableC Expecting table nameD Expecting consistent number of columns in all rows of tableE Cannot open tableF Field appears more than once in table This DELETE, CHANGE or INSERT query has no ANSWER Query is not prepared Properties unknown DELETE rows cannot contain quantifier expression Invalid expression in INSERT row Invalid expression in INSERT row Invalid expression in SET definition row use SET keyword expected Ambiguous use of example element obsoleteA obsoleteB Only numeric fields can be summedC Table is write protectedD Token not foundE Cannot use example element with ! more than once in a single rowF Type mismatch in expression Query appears to ask two unrelated questions Unused SET row INSERT, DELETE, FIND, and SET can be used
only in the leftmost column CHANGETO cannot be used with INSERT, DELETE, SET or FIND Expression must be followed by an example element
defined in a SET Lock failure Expression is too long Refresh exception during query Query canceled Unexpected Database Engine errorA Not enough memory to finish operationB Unexpected exceptionC Feature not implemented yet in queryD Query format is not supportedE Query string is emptyF Attempted to prepare an empty query Buffer too small to contain query string Query was not previously parsed or prepared Function called with bad query handle QBE syntax error Query extended syntax field count error Field name in sort or field clause not found Table name in sort or field clause not found Operation is not supported on BLOB fields General BLOB error Query must be restartedA Unknown answer table type Blob cannot be used as grouping field Query properties have not been fetched Answer table is of unsuitable type Answer table is not yet supported under server aliasA Non-null blob field required Can't insert recordsB Unique index required to perform changetoC Unique index required to delete recordsD Update of table on the server failedE Can't process this query remotelyF Unexpected end of command Parameter not set in query string Query string is too long Interface mismatch Engine version different Index is out of date Older version (see context) VAL file is out of date BLOB file version is too old Query and Engine DLLs are mismatched Capability not supported Not implemented yet SQL replicas n}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信