SQL pass-through的使用

在VFP所附的範例或者是微軟的建議中,都一直有看到這方面的函數。
事實上,這些函數對於遠端資料的控制來說是很方便的。
如果經過適當包裝的話,就非常類似於Delphi或BCB的TQuery元件或TStoreProc元件,
有看過Delphi或BCB的人可以自行比較一下。
但是偏偏市面上的書對於這個部分如何使用…等都略過不提。
在這裡,提出一個範例供大家研究一下,略盡棉薄之力 。
p.s. Arsen=Ellery, And this article is co-write with Saint.
————————————————————————————————————

*使用SPT更新表格的範例
*作者:Arsen(Ellery)
*環境:在ODBC設定中,我設了fpm這個別名,路徑設到目錄下的foreign.dbc
Local ln_handle
*先連接
ln_handle=sqlconnect("fpm")
*執行查詢
=sqlexec(ln_handle,"select emp_no,name from basic","_basic")
*設定相關屬性:這幾個屬性必須設定,在MSDN上有詳細說明(記得多看MSDN)
=cursorsetprop("tables","basic") &&設定欲更新的資料表格
=cursorsetprop("sendupdates",.t.,"_basic") &&確定要進行更新
=cursorsetprop("keyfieldlist","emp_no","_basic") &&要依據何鍵值來進行更新 =cursorsetprop("updatablefieldlist","emp_no,name","_basic") &&哪些欄位要更新
*以下這行,比較複雜一點,空格前寫的是上一行的欄名,後面寫的是資料表格的欄名(要用alias.field這樣) =cursorsetprop("updatenamelist","emp_no basic.emp_no,name basic.name","_basic")
Replace Next 1 alltrim(name) with alltrim(name)+"Test"
use
*釋放連接
=sqldisconnect(ln_handle)

————————————————————————————————————
首先,謝謝Arsen,幫我解決了想了好久無法解決的問題。
其實,我的作法和他,並無很大的不同,只有這一行
=cursorsetprop(“updatenamelist”,”emp_no basic.emp_no,name basic.name”,”_basic”)
由於資料集預設的BUFFERING是3,所以只要移動記錄指標便會做存檔的動作
為了Client/Server效率上的考量,改用
=CURSORSETPROP(“BUFFERING”,5)
似乎是比較好的選擇。
另外附上另一份範例如下:

?sqldisconnect(0)
?sqlconnect("testdbc")
_sqlsele="sele * from mydbf"
=sqlexec(1,_sqlsele ,"myview")
?cursorsetprop("buffering",5)
REPLACE NAME WITH "TEST"
=cursorsetprop("tables","mydbf","myview")
=cursorsetprop("keyfieldlist","id","MYVIEW")
=cursorsetprop("updatablefieldlist","name","MYVIEW")
=cursorsetprop("sendupdates",.t.,"MYVIEW")
*=cursorsetprop("updatenamelist","ID MYDBF.ID,name MYDBF.name")&&這一行指令,有興趣的人可以比較
=cursorsetprop("updatenamelist","ID MYDBF.ID,name MYDBF.name") &&註解前和註解後有何差別
IF NOT TABLEUPDATE(.T.,.T.,"MYVIEW")
=AERRO(MYERROR)
CLEAR
?MYERROR(1)
?MESSAGE()
ENDIF

另外附上其他的做法,一檥可做到,請自行參考

AA=sqlconnect("testdbc")
IF AA>0
=SQLSETPROP(AA,"ASYNCHRONOUS",.F.)
=SQLSETPROP(AA,"BATCHMODE",.T.)
=SQLEXEC(AA,"sele * from mydbf","myview")
M.SQLDESC="UPDATE ...." &&請參考 SQL INSERT,UPDATE 語法"
=SQLEXEC(AA,M.SQLDESC) &&把指令送到後端讓Server去執行
ENDIF

2001/8/30與saint閒聊

Saint said:
Dear, What’s your best program framework ?
—-
Ellery said:
I have no framework in VFP~
大多只是一些小技巧以及函數罷了
你這樣問,有點不知道該怎麼回答你
你想要知道什麼呢??
—-
Saint said:
不一定是VFP
我是說,你沒有想過,有關於framework這樣的事嗎?
從我把資料給物件化時,我就很想要做一個可以自動產生程式的一個framework
到了這裏,又做了menu object 之 後,這一個想法,一直在心中盤算!
所以我想要做一個是my style object framework ,You know ?
可是當我要去做時,發現並不簡單!所以想要聽聽看你的看法!
—-
Ellery said:
有想過~
但真的不簡單
1.需要對該語言的特性作深入的了解
2.需要對物件導向的各種 pattern 有相當的認識,才能作出簡潔而又漂亮的設計
其實也不一定要有相當的認識,但也要有看過大量的Framework
另外,人都會有野心,會想要弄出跨平台,甚至跨語言的一個東西
這樣子的領域就又更龐大了
當我越想越多的時候,就越覺得龐大,越覺得不能馬上動手
所以一直沒有作
跨平台的東西, Borland Kylix and Delphi,Qt 和 Java 是著名的代表
Borland 的產品 CLX
Qt 是 linux 上著名的桌面管理 KDE 的底層,以C++撰寫,但寫出的東西,一樣能在Windows上compile
Java 則更誇張,compile 一次之後, run everywhere,只要檔案複製過去,然後執行環境的Java Virutal Machine有支援,就一切ok
跨語言的東西,COM, CORBA, 以及 beta版的 .Net 應該算是代表
COM, 衍生出 DCOM, COM+
CORBA, 則是 Unix 以及 Unix like 環境下,類似COM的東西,但其實CORBA出來的較早
這個標準實作的比較漂亮且完整,只是支援的語言不多,目前我知道的只有 Java, C++, Object Pascal 而已, Windows 平台上較不常見
.Net 是微軟的一個弘願,Linux上也有了相關的計劃,將來是可以期望的一個東西
說了那麼多,我的最後結論其實是
Framework仍然要作,但是不要像我一樣考慮那麼多,考慮的太多,反而讓自己無法前進
應該依照目前想實作的狀況,一族一族的去實作出來
比如說,現在要作 menu, 就先把 menu 類別及其衍伸類別實作出來
要作檔案,就把檔案類別及其衍生類別實作出來
一個一個去實作
將來如果需要合作的時候,再去參考 Design Pattern 中與合作相關的Pattern去實作
不行,再重寫
但是什麼都要自己寫嗎??
不, 如果現成語言裡已經提供了現成的一個類別, 那麼就直接使用
有跨平台或跨語言的需要,就寫一個wrapper類別把他包起來,將來若跨平台或語言的時候,只要重新實作這個wrapper就可以了
喔~~
回頭看了一下,我居然打了這麼多字
謝謝你的收看
^_^
—-
Saint said:
我倒是沒有想到過說要跨平台這一個問題!
不過我的想法,也倒如你所說的一樣!想的越多,我越難下手去做,
不是沒有想過說,先做一個起來,以後再用合併的方式來做
可是是否會有一個問題,就是所以的物件的起源,我是說如果這樣做的話
我會有一個base object 那有可能我所有的物件都會去參考這一個當做base
想著想著,有時想到如果程式要做,如果只是自己才看的懂那又矢去了意義!
想的越多越難做!
—-
Ellery said:
單一繼承的關係比較簡單,而且效率會較好
八月的時候,我看了侯捷翻譯的”深度探索C++物件模型”
雖然只看到第五章,就因為借書期限到的關係,只好還書
不過有作筆記(這是我第一次看書作筆記!)
對於物件導向實際上的運作了解很多
所以,我想還是建立一個 Base Object
但盡量只賦予必要的特性就可以了
也就是雖然此族的衍生類別都從一個父類別開始繼承,但此父類別必定繼承 Base Object
若真需要增加屬性或方法,只更動此父類別就可以,而不更動父類別
其實對於VFP來說,此動作並不是必要
因為VFP並不是強型別的語言也沒有支援虛擬
所以就不能這樣寫(以下是C++語法)
BaseObject *obj; //宣告成指標
Menu mymenu; //產生一個 mymenu物件,假設 menu繼承 BaseObject
Form myform; //產生一個 myform 物件, 假設 form 繼承 BaseObject
obj=&mymenu; //取得mymenu的位址,指定給obj
obj->activate(); //就可以直接呼叫 menu 的方法
obj=&myform; //取得myform的位址,指定給obj
obj->show(); //就可以直接呼叫 form 的方法
很神奇不是嗎?? 如果你用過強型別的語言
對這種神奇的感覺會很強烈
因為類別不同是不可以隨便指定的!換言之也不能隨意呼叫其他類別的方法
Java, Object Pascal 也都有類似的用法
VFP和VB 所有的變數都是 Variant, 這樣的感覺就不是很強烈
反正怎麼寫怎麼適用
local obj
obj=createobject(“menu”)
obj.activate()
obj=createobject(“form”)
obj.show()
但我就不清楚VFP內部是怎麼去實作的
說到程式看不看的懂
又牽扯到寫作風格的問題
我以前很痛恨這種寫作風格的問題
尤其是學校導師(後來老師因為肝的問題,英年早逝了,很遺憾沒去醫院看他最後一面)教我們COBOL的時候, 他一直不厭其煩的要求我們要這樣子去寫 COBOL 程式
那時候覺得如果強制要求寫作的風格,會很麻煩,而且排版的很累,寫出來的程式碼也會不簡潔,不漂亮
但是後來看過”撰寫0錯誤程式”這本書以及經過歷練之後就不會這樣想了
現在會盡量要求自己留下註解, 使用較清楚的方法去寫程式
假設前兩天寫出這樣的程式
if getanswer()
*do something
else
*do something
end if
隔兩天,我一定忘記我在寫什麼,於是又要去看 getanswer() 在寫什麼,浪費了許多時間
我會盡量這樣寫
*利用 getanswer() 函數詢問使用者的答案, true 表示使用者回答 yes
if getanswer()==true
*do something
else
*do something
end if
這樣至少我自己看程式會知道我之前要幹麼
哇~又打了這麼多
8-p

少林足球

shaolin_soccer_ellery_354219.jpg
8/25 中國情人節.
我一直很喜歡周星馳,他的每部片我幾乎都看過.即使都看過了,現在在播放時,我還是會笑出聲 ^_^. 我最喜歡他拍的”東西遊記”,非常之特出!
他睽違了兩年推出新片,當然,我很想去看.原本想,去看這樣的一個港片,到底值不值得?(應該很多人都會這麼想吧)
趁著情人節下午的空檔,說服了女友,和她去長春戲院看了這部片,長春戲院播放的是粵語版,換言之就是原音重現.之前,我有聽說食神粵語版的那首歌”情與義,值千金…”非常之好聽,很可惜後來看的都是國語版,所以都沒聽到,引以為憾.這次總算能看到粵語版,真是太高興了!
這部片非常之棒,讓我和女友從頭笑到尾,看完之後,覺得我們沒有浪費錢 ^_^
不過,我覺得結尾與魔鬼隊決戰的部分可以拍的更好些,不要太多特效,應該可以加上六師弟吃蛋的笑料,足球小將翼裡面的雙人射門,或是主角頹喪重新站起等等之類的情節.
大家趕快去看吧,港片通常很快就下檔囉!! ^_^

Artificial Intelligence

8/18 和女友一起去看 AI。之前在看預告的時候,原本以為會是一部具有相當衝突性的影片,沒想到,卻不是。我個人覺得,這部片應該算是類似童話故事的影片,有點悶,但卻很有省思的意味。

我想人類真能發展出極為類似真人的人工智慧而不加任何限制嗎??如果沒有限制,是不是會像 The Matrix 裡的機器人一樣,加害於人類,甚至利用人類??喔~~想起來就覺得可怕。

另外導演在最後加上溫馨的結局,雖然達到溫馨的效果,但卻顯得牽強。我認為應該在David發現無法完成心願的時候,讓他擁有仇恨的意識,在經過一段時間的潛伏後,利用博士的技術與知識轉換身體,引領機器人在人類世界裡革命,這樣的一個安排或許會更好!

看完之後,讓女友和我兩人覺得有點失望。Anyway,怕悶的人千萬別去看~

CODERED(C)紀實

上週
我發現Windows2000怪怪的
我習慣設定將網路連線的燈號顯示在工作列上,可他怎麼老是一直閃呢?
這實在很奇怪,我又沒有發信或者是去逛網頁.
接著,因為疑心的關係,覺得電腦上的所有軟體都變的奇怪;於是星期天,我就大刀闊斧的重灌,花了不少的時間(因為不太會用ghost,也懶得用,所以重灌會花許多時間).
重灌之後,是好多了,但IIS老是沒辦法啟動,或者啟動後沒多久,就又停止.網路連線的燈,偶爾會一直閃,粉奇怪.
奇怪的事情,必然有原因,我開始調查,正巧最近的電子報上一直提到”紅色警戒”肆虐,原本以為他只感染 Windows 2000英文版,想不到,CODERED的變種C,居然會感染Windows2000中文版,怪怪了不得,趕緊去微軟網站 download 修正程式來安裝,安裝之後,果然一切怪怪的情況減少了很多.
唉唉~~這樣子的一個專門攻擊IIS的病毒,日後對於目前網路上所推廣的 Web Service 必然有所影響.也許以後病毒都會對網頁伺服器下手了吧,屆時,影響的層面將會變的很大很大…..

偏執

年紀越來越大了,雖然並不很大,才二十來歲,但是,我覺得我的心越來越偏執,不再和早前一樣心胸開闊,不會因為某些沒道理的理由而對某些人或某些事情有錯誤的看法.
這很可怕,會影響自己對週遭人事物的判斷.
我應該要
多認識一些人
多走走
多觀察
而不要
任意下判斷而否決一個人或一件事
呵~
在我 icq 的Info(個人簡介)裡面,我放了這樣的一句偈語
由愛故生憂
由愛故生怖
若離于愛者
無憂亦無怖
這裡的”愛”,其實也可以解釋為偏執啊!

電話

前前一篇有提到我和我女友的一些事情,我仍然在想這個問題.
我們天天通電話,但他常聽不清楚我說的話,於是我又得被迫再說一次,如果又不清楚,我又得再說一次,一次又一次,會覺得心煩,慢慢會變的大聲.
她也知道這點,也告訴過我,
“就是聽不清楚啊~電話有雜音~”
“你說話太小聲了~~”
“你說話太快了~~”
“不懂你的詞彙~”
也許是電話的問題~
也許是我個人說話的問題~
也許是我們兩人國文程度有落差的問題~
雖然不曾因此而吵過架,但這卻是我必須要先適應的一點.婚前的交往並非沉醉在愛情之中,我認為也必須為婚後作一些心理準備,以提早適應.
所以,我告訴我自己.當發生這種情況的時候,我要說慢一點,大聲一點,運用一些她容易瞭解的詞彙,來說明.順道培養我的耐心.
不過
還是想抱怨一下~~~
真希望她”聽”和”說”的能力和她”閱讀”的能力一樣好~~

7/29 天母水管路古道

7/28 剛好在金石堂看到古道系列中的天母水管路古道,因此和女友商議後,決定就去那兒.
7/29 雖然是颱風來的前夕,但天氣仍然是熱的要命,絲毫不受影響.
我們沿著中山北路往北騎到底,就到了天母,在尾端可以看到一個圓環,那兒除了古道的入口之外,還有天母公園,也是個休憩的好地方.
繞過圓環,繼續往前騎到底,就可以發現右手邊有指標顯示,這條步道可以往陽明山遊客中心和文化大學.我和女友就下車往上爬了.
爬了沒多久,發現這條路出乎意料的陡,爬的我們兩個講不出話來.沿路上看到許多登山的人,讓我們印象比較深刻的是,有個爸爸帶了兩個小孩往上爬,小孩也不哭不鬧,爸爸還沿路作一些機會教育,讓人覺得他真是個好爸爸.另外也有看到阿媽帶了孫子去爬,經過的時候,聽到他們的對話,讓人覺得現在的小孩真的是跟以前不一樣了~總之,看到許多形形色色的人.
這條路到了後半,就分岔開來了,我們選擇左邊,通到文化大學附近,接下來就好走許多,風景也很優美,微微徐風吹來,讓人不禁懷疑剛剛陡坡的辛苦.
路上的小歇,把帶來的香瓜給吃掉了,補充一下體力,順便也讓平常不愛吃水果的女友吃個水果.
再走了不久,最後終於到了終點,原本想要搭公車再轉回天母去的,但擔心公車難等且路不熟的情況下,就放棄了這個想法,採取原路繞回.
原路繞回去,就輕鬆多了,全都是下坡,也注意到一些上山的時候沒注意到的東西,
印象較深是路邊一張懸掛的招牌,是聲明土地所有權的,農民因為有人去北市建設局告密,造成不必要的困擾,因此特別懸掛招牌告知古道的所有權以及兩邊作物和開墾的合法性.(為什麼印象深刻?大概是很難以想像會有人去告密吧.)
下次還要再來幾次,但是要找幾個朋友一起來爬爬~

心裡可怕的魔鬼

最近心裡特別覺得害怕
會覺得有時候我對我的女友很不友善
是不是我不再愛她了呢?
於是我有時候試著說服原定明年結婚的他在今年訂婚或結婚,但是訂婚或結婚能讓感情好轉嗎??不知道.
我的朋友,壕,他之前跟我說過一些話,大意是這樣的:感情在滿約一年多左右,會面臨一次蠻重大的考驗,如果度過了,之後大概就不會有問題.我,是不是也遇到了呢??不知道.
剛交往沒多久,很快就到了2/14情人節,那天和女友約會回家的路上,心裡感到很失落,不知道為什麼?回家之後,我打電話給我的乾表妹Pat,告訴他這件事情.他告訴我,如果不合,就不要在一起.我告訴表妹,我是真的愛她.如果我是真的愛她,那麼我現在應該不愛她嗎??不知道,至少我認為感情應該是需要負責任的.
去年的時候,有時候,我也會想到有一天當我不愛我的女友的時候,該怎麼辦?想了又想,後來有了一個答案,那就是,再重新追他一次.
是對愛情暫時感到厭倦嗎??不知道.
會想找些人來談談,這是一個不錯的管道.但我想他們能給的建議,應該我都能想的到(這是我的老毛病,自以為聰明).所以就又不太想找他們.
就先把我想到的東西貼到這裡來吧~
搞不好,有很多人想的也跟我一樣 ^_^
很久沒有來這裡發布新聞了,隔了幾個月後的破天荒~~