Progress學習.doc_第1頁
Progress學習.doc_第2頁
Progress學習.doc_第3頁
Progress學習.doc_第4頁
Progress學習.doc_第5頁
免費預覽已結束,剩余27頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

PROGRESS編程其實很簡單(一) 一、變量定義。變量必須在第一次被使用之前定義,可以定義在程序的任何地方!但是通常為了增加程序的可讀性,變量定義都放在程序的開始處!以下是變量定義的幾個實例:define variable str01 as char label DemoString initial hello.def var str02 like str01.def var dt01 as date extent 5.def var inte01 as inte format 9.說明,第一行:str01是變量名,變量名不要與系統(tǒng)關鍵字重復,字符或者下劃線開頭,比如strModel,_Model ;string 表示變量類型,本例指字符型變量,其它類似的比如integer,date,logical等 ;label 就是后續(xù)程序中對變量的描述,比如需要用戶輸入這個變量值時,系統(tǒng)提示 “DemoString ;initial 給變量賦初始值第二行:def和var都是簡寫,def是define的簡寫,var是variable的簡寫;PROGRESS支持語法簡寫,但是初學者最好先寫全,后面有經(jīng)驗了再簡寫。like和as的不同點是:as后面直接說明變量類型,而like后面跟另外一個變量或者字段。第三行:extent 5 ,表示該變量是數(shù)組變量。第四行:format 9 指定變量格式指定變量格式一個最大的好處就是預留寬度,這個對變量的輸入或報表的輸出都很有用的。比如年份的寬度一定是4位的,那么你就可以指定格式 format 9999。PROGRESS程序每行結束必須有個“.”號!二、注釋。注釋就是用/* . */ ,可以嵌套,比如/*-注釋1 /* 注釋2 */ -*/三、記錄的顯示。如果進入PROGRESS編程模式以后連接了數(shù)據(jù)庫,那么直接顯示記錄的值即可,比如:for each TABLE_NAME: display TABLE_NAME.end./*顯示TABLE_NAME所有字段所有記錄*/或者:find first TABLE_NAME.display TABLE_NAME./*顯示TABLE_NAME第一條記錄所有字段的值*/通常顯示記錄值都是采用這2種方式!當然,可以按要求顯示特殊的字段,比如:FOR EACH pt_mstr WHERE pt_model BEGINS E NO-LOCK BREAK BY pt_price: DISP pt_model pt_price.END.這個程序看起來真的很容易明白,簡單說明:1、where 后面帶條件,比如 = = 等等,這種關系符,對數(shù)字、日期或者字符串,都適用;關于條件的幾種組合舉例:條件1 and 條件2( 條件1 or 條件2)and (條件3 or 條件4)not 條件12、no-lock,這是關鍵字,你只要記?。喝绻酉聛淼某绦蛞獙τ涗涍M行修改,那么不能加no-lock,如果不要,請加上no-lock;3、break by ,就是按某個字段排列,默認是按這個字段的升序,如果降序則后面加上 desc,比如:break by pt_price desc。如果需要多次排列,那么多by幾次就可以,比如:break by pt_price by pt_date 另外一個常用的顯示或者更新記錄的語句是find!比如:find pt_mstr where pt_model = mainboard no-lock no-error.find first pt_mstr where pt_price = 10 no-error.find last pt_mstr where pt_price 10 NO-LOCK. i = i + 1. DISP pt_part pt_price WITH DOWN FRAME a. IF i 200 THEN LEAVE.END.六、賦值和計算。 * / ,就是 加 減 乘 除了!比如:ttl_amoount = ttl_ammount + dtl_amount.x_a = x_b / x_c.str_ttl = Im + sure!.dt01 = today - 1.dt01 = 3/22/2005. /* 日期 */當然,日期和字符串不能做乘法或者除法!七、其它零星的語法。顯示:display 簡寫disp退出編程模式:quit執(zhí)行UNIX命令: unix COMMAND好了,這章你學會了,如果熟悉數(shù)據(jù)庫表和字段的結構,你也大概能看任何東西了,甚至做一些常規(guī)的統(tǒng)計也肯定沒問題! PROGRESS編程其實很簡單(二) PROGRESS程序架構。PROGRESS啟動應用程序,通常都是先啟動一個主程序,比如mf.p,這個mf.p做一些全局變量設置,并初始化應用程序菜單。當用戶執(zhí)行菜單功能時,實際上是運行菜單所指定的程序!在這種模式下,PROGRESS的程序一般都不大,結構明了可讀性很強,每個程序目的非常明確,但是也要遵循一定的準則,方便以后的閱讀和修改。一、程序擴展名的設定。.p 主程序(可直接運行,或者編譯以后掛主菜單被調用).i 子程序(經(jīng)常使用的執(zhí)行某一特定功能,或者為了使主程序易于閱讀脫離出來).v 驗證程序.w Windows的程序(Windows版的Progress支持可視化的組件編程,組件拉一拉放一放,就自動生成.w的文件了).r 編譯后的程序(菜單調用時,實際上是執(zhí)行.r的程序)二、程序的命名規(guī)則。主程序格式: aa + bb + cc + dd.p其中:aa - 系統(tǒng)模塊IDbb - 系統(tǒng)功能cc - 程序類型(mt -維護、iq -查詢或者rp -報表等)dd - 序列號子程序格式:通常是 主程序a.i 主程序b.i 這樣子/關于程序的命名,個人覺得也沒必要一定要遵循特定格式,一家公司有自己固定的命名方式,容易區(qū)分即可;如果是咨詢公司或者系統(tǒng)集成公司,則要先了解客戶的命名習慣和規(guī)則;同理,下面的“程序頭”。三、程序頭。以注釋的形式,標明盡可能多的程序相關的信息,比如:程序名(路徑,不過路徑一般都是企業(yè)自己規(guī)定好了)、作者、菜單號、功能(菜單標題)、創(chuàng)建日期、修改日志等。至于格式,也就是POSE,愛怎么擺怎么擺,清楚明了即可。但是,在同一家公司,風格應該統(tǒng)一。另外,關于修改日志,個人覺得最好在程序頭和程序體,都明顯說明一下修改的日期和原因,要點。(注釋不記入程序長度,所以不要擔心程序太長,:p )四、維護類程序模板。注意:為方便說明,注釋暫時用“/”,但是在PORGRESS程序里是錯誤的哈!define variables.mfdtitle.i /程序頭,全局變量定義等,是標準QAD的菜單程序就請加上這個,不要問為什么form with frame a. /定義格局(包含輸入輸出)Mainloop:repeat: prompt-for editing: /通常這里輸入主要字段(如果比如訂單號,料件名稱等) mfnp.i /前后記錄顯示功能,常用 end. /* ADD/MODI/DELETE */ assign global find if not available /新記錄 mfmsg.i 1 1 “加入新記錄”/類似mfmsg的子程序,都是信息提示類 create 建立新記錄 assign 給新紀錄的關鍵索引字段賦值 end. Status = stline2. update go-on (F5 or Ctrl-D) /繼續(xù)維護剩余字段 if F5 or CTRL-D then do: /判斷是否按了刪除鍵,一般定義是F5或者Ctrl + D del-yn = yes. mfmsg01.i 11 1 del-yn end.End.Status input. 五、報表類程序的模板。mfdtitle.iform definition selection criteriapart colon 15 part1 colon 40 label t001.ieffdate colon 15 effdate1 colon 40 label t001.iwith frame a side-labels width 80./以上4行定義用戶輸入“限制報表輸出”的條件,比如生效日期啊什么的repeat: if part1 = hi_char then part1 = “”. /如果用戶不輸任何東西,則默認最大字符或者最小字符,以下類似 if effdate = low_date then effdate = ?. if effdate1 = hi_date then effdate1 = ?. data statements selection criteria bcdparm = . mfquoter.i part /BATCH專用,至今沒用過,體會不到好處,哪位幫忙解釋一下? mfquoter.i part1 mfquoter.i effdate mfquoter.i effdate1 mfselbpr.i “printer” 132 /選擇打印機的子程序 if part1 = “” then part1 = hi_char. if effdate = ? Then effdate = low_date. if effdate1 = ? Then effdate1 = hi_date. mfphead.i or mfphead2.i /報表頭 for each display mfrpchk.i or mfrpexit.i /報表結束 end. mfrtrail.i or mftr0801.i or mfreset.i /報表結束、打印結束等end.六、查詢類程序模板。這個比報表來得要簡單些了:mfdtitle.iform definition selection criteria with frame a side-labels width 80.repeat: data statement selection criteria with frame a. mfselprt.i “terminal” 80 for each selection criteria display mfrpchk.i (max page) end. mfreset.i (scroll output) mfmsg.i 8 1 /列表完畢end.通過這章的學習,你對QAD的PROGRESS程序已經(jīng)有大致的了解。但是你可能還是感覺到,如果叫你做一些切實的東西,還摸不著門(什么?你摸得著了,那么恭喜你,你可以請我吃飯了),沒關系,才2小時呢,25的課程而已,不急不急!PROGRESS編程其實很簡單(三) 這章,重點解釋PROGRESS報表的精髓 first-of() & last-of() 。首先給出本章教程用到的示例信息-demo表的結構和數(shù)據(jù)。因為測試環(huán)境只連接了一個數(shù)據(jù)庫,所以本文所有對字段的引用都直接寫出來而沒有特別指明表名,如果是多數(shù)據(jù)庫環(huán)境,則需要帶表名。(比如數(shù)據(jù)庫名是dtbl,表名是demo,那么對字段的引用應該是:dtbl.demo.mdlno)【結構】【數(shù)據(jù)】1、first-of() & last-of()的語法;先看示例:for each demo break by demo.vend: if first-of(demo.vend) then disp demo.vend.end./*結果是顯示hp和ibm兩條記錄*/很明顯可以看出來的就是,每個first-of或者last-of對應的字段,必須有for each . break by來對應它,否則語法錯誤(即使first-of的字段是索引也會出錯)。比如以下語句會出錯:for each demo no-lock: if first-of(demo.vend) then disp demo.vend.end.2、函數(shù)的功能;first-of()函數(shù)的功能,就是通過break by 對該字段進行排序,然后對該字段相同的記錄進行“預覽”,當?shù)谝淮纬霈F(xiàn)時發(fā)生!比如,示例中,break by首先對demo.vend進行排序,這樣會出現(xiàn)很多vend是“hp”和“ibm”的記錄,當?shù)谝淮纬霈F(xiàn)“hp”記錄和第一次出現(xiàn)“ibm”記錄時,各顯示一下該vend名稱。last-of()一樣,不同的是“最后一次出現(xiàn)時發(fā)生”!請看示例:for each demo break by demo.mdlno: if last-of(demo.mdlno) then disp demo.end.這段程序的結果如下:通過收貨日期和數(shù)量等,可以看到,每條記錄,都是相同“mdlno”的最后一條3、應用;通過以上分析,不知道大家有沒有懂的真正的意思呢?現(xiàn)在如果要實現(xiàn)這樣的報表,那又該怎么寫程序呢?對每個mdlno收貨進行合計,然后在mdlno的下一行顯示合計數(shù),類似這樣的結果:不看答案自己想想看。參考答案(為方便閱讀暫不用accum()函數(shù)):DEF VAR ttl AS DECI.OUTPUT TO c:demoout.txt.FOR EACH demo BREAK BY demo.mdlno: ttl = ttl + demo.qty. PUT demo.mdlno demo.rcvdt demo.qty SKIP . IF LAST-OF(demo.mdlno) THEN do: PUT 合計 ttl SKIP. ttl = 0. END.END.OUTPUT CLOSE.說明:first-of 和 last-of 可以對應多個 break by的字段,比如可以先按mdlno匯總,再按 vendor匯總! progress中的數(shù)據(jù)庫訪問1 progress中的數(shù)據(jù)庫是關系型的,具備關系型數(shù)據(jù)庫的基本特征,當然沒有像oracle那樣復雜了,甚至說比sql server或者my sql都要簡單。最簡單的還是progress語言訪問自己的數(shù)據(jù)庫。這里假定你已經(jīng)有了自己的數(shù)據(jù)庫(關于數(shù)據(jù)庫的創(chuàng)建和維護,以后再講),這里主要說怎么開發(fā)。1.數(shù)據(jù)庫的連接連接數(shù)據(jù)庫,有兩種方式,一個是動態(tài)連接,一種是靜態(tài)連接。所謂的靜態(tài)連接就是在程序啟動的時候數(shù)據(jù)庫作為一個參數(shù)直接連接,這個是由prowin32命令實現(xiàn)的,對應的在unix下是_progress命令。prowin32的使用格式如下:prowin32 -p main.p -param paramString -db dbname -T c: emp -H dbserver -S 5000 -pf c:myappdb.pf -ininame c:myappmyapp.ini-P參數(shù),就是指定你的主程序,當然也可以是.w文件-param 就是你要輸入的參數(shù)。 我們知道,一般的程序或者命令需要參數(shù),這個就是。在c/c+或者java里訪問參數(shù)是在main函數(shù)中,那么 progress怎么獲取這個參數(shù)呢?這就要說到一個系統(tǒng)句柄session,它有一個parameter屬性,可以用這個來訪問它。 比如iparameter = session:parameter.整個參數(shù)是一個雙引號引起來的字符串,如果你又多個參數(shù)需要輸入,你可以把這下參數(shù)合并為一個以某字符分割的字符串列。-db 就是你要連接的數(shù)據(jù)庫名字-T 表示你要使用的臨時目錄-H 是數(shù)據(jù)庫所在的服務器名字或者IP-S 端口-pf 就是parameter file,也就是說你可以把一些參數(shù)寫在一個文件里.比如我想連接兩個數(shù)據(jù)庫db1,db2;可以寫兩個文本文件,內容分別是:-db db1 -H dbserver -S 5000和-db db2 -H dbserver -S 5001然后分別存為db1.pf,db2.pf. 你就可以prowin32 -p main.p -df db1.pf -df db2.pf同時連接兩個數(shù)據(jù)庫了.設置你還可以在.pf文件里面再次使用-pf參數(shù)-ininame你要使用的ini文件,里面定義了你要使用的字體,顏色等等多對應的索引值. 那么動態(tài)連接,指的就是在程序文件里在進行連接,比如在main.p里邊,可以使用connect語句:connect db-name|value(db-name).比如connect -db mydb1 -H dbserver -S 5000.或者connect value(-db mydb1 -H dbserver -S 5000). 后邊的用法通常是可以把你的數(shù)據(jù)庫連接參數(shù)化。 如有兩個定義一樣的數(shù)據(jù)庫但是在不同的服務器上.或者在同一服務器上但是數(shù)據(jù)庫名字不一樣,你可以使用-ld選項,ld就是邏輯名.比如connect -db mydb1 -ld mydb2 -H dbserver -S 5001. 那么你就要使用mydb2前綴來引用mydb1數(shù)據(jù)庫,相當于起了個別名。 注意一點的是,接下來訪問數(shù)據(jù)庫的語句不能和connect在同一個.p文件中,你必須把訪問代碼寫在另外的.p文件中然后再調用之. 相應的connected(db-name)是一個用來判別數(shù)據(jù)庫是否已經(jīng)成功連接的函數(shù). disconnect 則是用來斷開數(shù)據(jù)庫連接的,比如:disconnect db-name|value(db-name).2.訪問數(shù)據(jù)庫中的表和字段假設有這樣的一個數(shù)據(jù)庫,名字叫mydb,其中有一張表order:field-name field typeorder-num charcust-num chargoods charquantity decimalorder-related char 這里假定你的開發(fā)環(huán)境已經(jīng)連接了數(shù)據(jù)庫(在開發(fā)環(huán)境中連接數(shù)據(jù)庫是一個簡單的事情,你只要按照幾個參數(shù)-db -H -S填充就行了),那么引用數(shù)據(jù)庫是這樣:var1 = mydb.order.order-num. 如果只有一個數(shù)據(jù)庫的話,mydb.可以省略。 當你訪問數(shù)據(jù)庫的時候,需要用到以下語句:for each . 和 find.for each table-name where field1 = value1 and field1 = value2 . no-lock: your statement.end.for each 語句的常用方法很簡單,就是一個循環(huán)。你的表名其實就是一個buffer-緩沖區(qū)。progress會把數(shù)據(jù)庫中的紀錄取回到當前的緩沖區(qū)中。 當你訪問數(shù)據(jù)庫的時候,有三種鎖可以使用,no-lock,share-lock和exclusive-lock,并且缺省的選項是share-lock.它們三個的區(qū)別如下:no-lock:意味著其實progress沒有對數(shù)據(jù)庫施加任何限制,在你訪問當前記錄的時候,別人也可以訪問并且修改。exclusive-lock:排他性鎖,使用這個選項,則意味著任何別的人都不能訪問當前紀錄,當然更不能修改了。這個主要是修改時使用的。share-lock: 當你使用share-lock的時候,就意味著別人雖然也可以同時讀取該記錄的值,但是不能修改它。當你修改當前記錄的時候,progress會自動施加exclusive-lock.在你的for循環(huán)中,如果下一條記錄被人鎖定了會怎樣呢?它會一直阻塞,直到這個紀錄被解鎖為止。下面是一個例子:for each order where order.order-num = o00001 no-lock: display order.end.這里的display語句會顯示該記錄的所有字段。 如果想把顯示的結果排序怎么辦呢,可以使用by選項。其用法是by field-name descending. 缺省會是ascending升序排列。 如果有多個列需要排序,你可以使用多個by 選項。for each order no-lock by order-num by cust-num descending: display order.end. 下面說一說find語句。find的基本語法是:find first | next | prev | last | current table-name where where clause no-lock|share-lock|exclusive-lock no-wait no-error.find語句會把匹配的紀錄取回到當前的緩沖區(qū)中。first是返回匹配的第一個記錄next,prev,last同樣的道理。 具體取回那一條記錄,是跟索引相關的。current是把當前的紀錄內容重新取回,當然你也可以在此更改你的鎖選項。如果沒有記錄匹配,則當前記錄為空。如果要取的紀錄被鎖定,則find會被阻塞,沒有紀錄被返回。如果你不想這樣的話,就可以使用no-wait選項,這樣find會立即返回。如果沒有匹配紀錄,progress會談出一個錯誤警告.如果你不想有這個警告的話,就可以使用no-error選項.那么我們怎么才能知道有沒有紀錄被返回呢,這里需要用到available函數(shù),其使用方法是 available buffer-name. 如果緩沖區(qū)內有記錄,則返回真,不然返回假.比如:find first order where order.cust-num = cu001 no-lock no-error.if available order then display order.else message no order for cust-num:cu001.如果是紀錄被鎖定怎么辨別呢,就要使用locked函數(shù)了,其使用為locked(buffer-name).比如上例:find first order where order.cust-num = cu001 no-lock no-wait no-error.if available order then message order ok.else if locked(order) then message order locked.else message no order.find語句中也可以不指定first/next/prev/last/current,而是直接find order where order-num = O001 no-lock no-error. 如果符合條件的記錄不止一個的話,會引發(fā)一個警告,并且沒有紀錄被返回,因為它不知道取哪一個.這種情況下怎么分辨沒有記錄還是有多條記錄呢,這就要用到ambiguous函數(shù),其用法為ambiguous buffer-name.find order where cust-num = c001 no-lock no-error.if avail order then message order ok.else if ambiguous order then message more than one order.else message no order.3.什么是bufferbuffer是一個緩沖區(qū),同時也是一個數(shù)據(jù)類型.你可以定義一個buffer.define new shared buffer buffer-name for table-name.當你要在一個循環(huán)內部再次訪問該表的時候就要用到buffer了.比如:define buffer border for order.for each order where order.order-num = O001 no-lock: find first border where border.order-related = order.order-num no-lock no-error. if available border then message order ok.end.表的名字就是一個缺省的buffer.4.query另外一種可以用到的方法就是使用query對象.其實query主要是使用在browser控件中的,就是相當于一個表格控件了.定義一個query:define query query-name for table-name/buffer-name cache n scrolling.在定義query的時候,需要預先定義好要是用到的緩沖.并且不能更改.如果需要一個動態(tài)查詢的話,可以使用動態(tài)的query.cache n:表明這個查詢可以緩存n條記錄.scrolling:表明可以隨機查詢緩存中的紀錄.不然的話只能使用向前或者向后的一一尋找.打開一個查詢:open query for each buffer-name .后半部分for each開始基本上就是一個for each語句.如果該查詢是在一個browser中的話,則它可以立即返回結果到緩沖區(qū). 不然的話,只能在使用get之后返回到緩沖區(qū).獲取紀錄:get first|last|next|prev query-name. get的作用就是把紀錄從數(shù)據(jù)庫拷貝到buffer中.重新定位:reposition query-name to row n | forwards n|backwards n.reposition只能對采用了scrolling選項的query進行操作.在調用了get之后,要確認是否有記錄存在,一個方法是使用availabel語句,另外一種方法就是使用query-off-end函數(shù).query-off-end(query-name). 如果當前沒有記錄,則返回真.關閉查詢:close query query-name.在你關閉查詢之后,還可以重新打開,同時使用新的查詢字句.define query mq for order cache 5 scrolling.open query mq for each order no-lock.get first mq.repeat while not query-off-end(mq): disp order. get next mq.end.if available order then disp order.else MESSAGE no order.close query mq.如果使用動態(tài)查詢,以及表的連接該怎么辦呢,下一次談.progress的數(shù)據(jù)庫訪問2 1.數(shù)據(jù)庫的連接首先我們假設有這樣兩張表:表 order:field-name field-typeoid charcustid charref-oid charquantity decimalunit char表 customer:field-name field-typecustid charcustname charcustaddr char這里custid在兩張表里起一個聯(lián)結作用。假如有一個給定的訂單號碼mo1,想找出和它對應的客戶信息:for each(first) order where order.oid = mo1 no-lock, first(each) customer where customer.sutid = order.custid no-lock: display order. display customer.end.因為通常訂單號是唯一的,所以for each和for first是一樣的效果。同樣一個訂單只會對應一個客戶。如果反過來,已知客戶號碼名字cname,現(xiàn)在要找到該客戶所有的訂單:for first(each) customer where customer.custname = cname no-lock, each order where order.custid = customer.custid no-lock: display customer. display order.end.這仍然是一個for語句,要注意,第二個字句直接使用each/first/last即可,不再需要多余的for. 并且如果你想的話,你可以連接兩張以上的表。這樣的連接是一個自然連接。如果你要使用不等連接,只要改變一下操作符即可。很顯然,一個迪卡爾連接是這樣的:for each order no-lock, each customer no-lock: disp order. disp customer.end.當然對于這樣的連接還有另外一種方法,就是使用嵌套的for語句:for each order no-lock: for each customer no-lock: disp order. disp customer. end.end.當然了,這種方法會慢一些。2.表的自身連接在sql語句中是使用別名來定義自身連接的。在progress中同樣如此,不過這里使用的是緩沖區(qū)buffer.假定我們要對order這張表進行自身連接,oid=ref-oid:define buffer border for order.for each order where order.oid = o1 no-lock, each border where border.oid = order.ref-oid no-lock: disp order. disp border.end.3.再次介紹buffer作為一個buffer,實際上有兩種類型,一種是靜態(tài)的,一種是動態(tài)的。一個靜態(tài)的buffer,前邊已經(jīng)使用過,現(xiàn)在重復一下作為對比:define buffer buffer-name for table-name.而一個動態(tài)的buffer,在變量上它是一個句柄:define variable hbuffer as widget-handle no-undo.create buffer hbuffer for table table-name.這里要注意的是,首先你要聲明一個句柄變量,然后使用create語句來創(chuàng)建一個動態(tài)buffer.這個語法和define稍有不同。一個是前者有table關鍵字在表的前面,另外一個是表的名字必須是一個引在引號中的字符串變量。因為是動態(tài)的么,所以表的名字也必須是可變的。另外一點是,使用完之后需要釋放內存:delete widget hbuffer.或者delete object hbuffer.從一個靜態(tài)的buffer可以獲得它的句柄從而得到一個動態(tài)的buffer,就像c/c+語言里的取地址操作符&可以把一個變量轉變?yōu)橹羔樢粯?。比如:define variable horder as widget-handle no-undo.horder = buffer order:handle.對于一個動態(tài)的buffer對象而言,它不但有自己的屬性,還有自己的方法可以調用。訪問方法如下:buffer-handle:attribute or buffer-handle:method對于一個buffer對象,最最重要的還是怎么訪問各個域,這就要談到另外一個對象buffer-field. 4.buffer-field對象buffer-field是一個特殊的對象,是因為沒有對應的define buffer-field語句來創(chuàng)建一個對應的靜態(tài)對象。得到一個buffer-field有兩種方法:define variable hbf as widget-handle no-undo.1)從對應的buffer對象獲得:define variable hb as widget-handle no-undo.hb = buffer order:handle.hbf = hb:buffer-field(orderno). 或者hbf = hb:buffer-field(1).這種方法具有很大的靈活性,特別是結合buffer-field的屬性。2)直接獲取句柄hbf = orderno:handle in buffer order.下面簡單介紹幾個buffer-field的重要的屬性:屬性名 類型 說明available logical 表明該緩沖區(qū)是否有記錄buffer-handle handle 獲取該field所在的buffer句柄buffer-name character 獲取該field所在buffer的名字buffer-value(i) 具體的數(shù)據(jù)類型 該field所包含的值. 如果該field是一個數(shù)組的話,就可以使用索引ican-read logical can-write logicaldata-type character 該field所包含的數(shù)據(jù)類型dbname character 所在數(shù)據(jù)庫名 extent int 返回維數(shù)key logical 是否在某一索引中name character field的名字。position int 在buffer中的位置 string-value(i) character 轉化為字符串值table character 表名下面是一些重要的buffer的屬性以及方法屬性名 類型 說明available logical 是否有記錄can-create logical can-delete logicalcan-read logicalcan-write logicalcurrent-change logical 是否有變化dbname character 數(shù)據(jù)庫名new logical 該record是否是新創(chuàng)建num-fields int record-length int 長度,單位byterowid rowidtable character 表名table-handle handle table-number in

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論