上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
芝風
註冊時間: 2006-08-09 文章: 45 來自: 台灣,巴西
第 1 樓
|
發表於: 星期五 八月 25, 2006 2:41 am 文章主題: 兩個小問題,有關cursor的 |
|
|
謝謝站上的很多位大大幫忙,讓小弟一個初踏入這個領域的人有個方向
目前又碰到了兩個問題
第一個:我要做一個login的表單,讓使用者輸入名稱跟密碼之後,確認執行
table名叫user,有三個欄位,name_of_user,password跟permission
那個form有兩個textbox,text1輸入名字,text2輸入密碼
我執行以下的sql查詢,不知道為什麼出錯
*!*SELECT * from user WHERE thisform.text1.value==user.Name_of_user AND thisform.text2.value==user.password INTO CURSOR try
*!* IF EMPTY("try")
*!* n=n+1
*!* MESSAGEBOX("Access Denied~")
*!* IF n=3
*!* thisform.Release
*!* ENDIF
*!*
*!* ELSE
*!*
*!* MESSAGEBOX("Correct")
*!* DO FORM forms\main_form
*!* ENDIF
第二個問題就是:我在一個表單中有兩個grid,一個grid是顯示table的資料,另一個grid是執行sql之後查到的資料
可是當我執行完sql之後,按上移下移之後,好像cursor就會指向新的sql指令??
我不知道為什麼,也不知道怎麼講比較好,所以盡量把原始碼貼出來:
這是在form的init:
SET MULTILOCKS on
CURSORSETPROP("Buffering",5)
然後這是指向上一筆,下一筆資料的原始碼,寫在click中:
SKIP 1
WITH thisform.pageframe1.page1
.txtName_of_user.refresh
.txtId.refresh
.txtPosition.refresh
.txtAge.refresh
.optiongroup1.refresh
.optiongroup2.refresh
ENDWITH
*!*更新pageframe1.page1的值
thisform.grdUser_data.Refresh
*!*更新grd的指標,讓它指向最後的一筆資料
WITH thisform.pageframe1.page2
.txtName_of_user.refresh
.txtId.refresh
.txtAge.refresh
.txtPosition.refresh
ENDWITH
更新pageframe1.page2的值
SELECT name_of_product,code_of_product,amount_of_product_used from stuff_in_used where stuff_in_used.user == thisform.pageframe1.page1.txtName_of_user.value into CURSOR dodo
thisform.pageframe1.page2.Grid1.RecordSource = "dodo"
thisform.pageframe1.page2.refresh
拜託,拜託!萬分感謝 _________________ 一籬一櫓一漁舟,一個艄公一釣勾
一拍一呼還一笑,一人獨佔一江秋
~清.紀昀~
芝風 在 星期五 八月 25, 2006 9:04 pm 作了第 1 次修改 |
|
回頂端 |
|
 |
garfield Site Admin

註冊時間: 2003-01-30 文章: 2160
第 2 樓
|
發表於: 星期五 八月 25, 2006 10:19 am 文章主題: |
|
|
1. empty()是用來判斷變數的值是否為空值, 用sql命令產生的結果是一個table , 必須用reccount() 來判斷有無資料.
IF EMPTY("try")
改成
if recc()=0
2. 在 skip 之前最好先 select 到你要skip的table
或用 skip in table或工作區
另外請你在提問時,
在"主題"處填入適當的跟你提問內容相關的簡略說明.
不然一般人看到主題是"新手發問","急..","請幫幫我..","求助.."
這類的主題是連看都不看的. _________________ 利用>>搜尋<<的功能會比問的還要快得到答案. |
|
回頂端 |
|
 |
芝風
註冊時間: 2006-08-09 文章: 45 來自: 台灣,巴西
第 3 樓
|
發表於: 星期五 八月 25, 2006 6:45 pm 文章主題: |
|
|
喔喔,原來如此,謝謝! _________________ 一籬一櫓一漁舟,一個艄公一釣勾
一拍一呼還一笑,一人獨佔一江秋
~清.紀昀~ |
|
回頂端 |
|
 |
芝風
註冊時間: 2006-08-09 文章: 45 來自: 台灣,巴西
第 4 樓
|
發表於: 星期五 八月 25, 2006 9:07 pm 文章主題: |
|
|
謝謝g大的幫忙,現在兩個問題都解決了
我想g大說得對,沒有指定table或工作區,所以他就指到cursor
可是現在有一個問題,上一筆,下一筆是ok了
可是要新增的話,是在click事件中,重新設定buffer嗎?
SET MULTILOCKS on
CURSORSETPROP("Buffering",5)
我試過,可是結果都是怪怪的 _________________ 一籬一櫓一漁舟,一個艄公一釣勾
一拍一呼還一笑,一人獨佔一江秋
~清.紀昀~ |
|
回頂端 |
|
 |
garfield Site Admin

註冊時間: 2003-01-30 文章: 2160
第 5 樓
|
發表於: 星期五 八月 25, 2006 10:33 pm 文章主題: |
|
|
一般CURSORSETPROP("Buffering",5)是用於開檔後做的事情,
且在新增或異動資料後,
用 tableupdate( ) 來做真實的異動資料,
並不須要在每次新增時去做CURSORSETPROP("Buffering",5) _________________ 利用>>搜尋<<的功能會比問的還要快得到答案. |
|
回頂端 |
|
 |
芝風
註冊時間: 2006-08-09 文章: 45 來自: 台灣,巴西
第 6 樓
|
發表於: 星期五 八月 25, 2006 11:10 pm 文章主題: |
|
|
嗯嗯,那我應該加什麼碼,讓他避免指向cursor呢?
因為就是啥都沒加,要新增的時候,他說cursor是read only的
沒辦法加在buffer上,不知道要用啥指令
所以在append blank之前要加什麼??
那在tableupdate()要加入什麼呢?三 _________________ 一籬一櫓一漁舟,一個艄公一釣勾
一拍一呼還一笑,一人獨佔一江秋
~清.紀昀~ |
|
回頂端 |
|
 |
garfield Site Admin

註冊時間: 2003-01-30 文章: 2160
第 7 樓
|
發表於: 星期六 八月 26, 2006 10:13 pm 文章主題: |
|
|
就這些問題而言,
可見得你以前是用別種程式工具的,
對於vfp不熟, 也沒看過基礎的參考書,
就直接上場寫程式了,
我建議你還是要看那些教你如何做資料編修的書,
不然你的問題會問不完,
在等著別人給你答案,
還不如自己看書來得快,
問一些書上查不到的問題才是正途,
雖說目前市面上vfp書已經很少了,
儘量找一找,
或是到圖書館借書也可以,
不然到 http://vfp.sunyear.com.tw/viewtopic.php?t=451 下載也不錯.
祝你成功. _________________ 利用>>搜尋<<的功能會比問的還要快得到答案. |
|
回頂端 |
|
 |
芝風
註冊時間: 2006-08-09 文章: 45 來自: 台灣,巴西
第 8 樓
|
發表於: 星期日 八月 27, 2006 7:45 am 文章主題: |
|
|
嗯嗯,謝謝
以前是實習過,用access寫的,所以介面方面是很熟悉,但是指令好像就怪怪的…
尤其是那個cursor,以前用set db名 as currentdb()就可以搞定一切,但是現在好像就不行… _________________ 一籬一櫓一漁舟,一個艄公一釣勾
一拍一呼還一笑,一人獨佔一江秋
~清.紀昀~ |
|
回頂端 |
|
 |
芝風
註冊時間: 2006-08-09 文章: 45 來自: 台灣,巴西
第 9 樓
|
發表於: 星期日 八月 27, 2006 7:48 am 文章主題: |
|
|
對不起,忘了問,g大,請問我的問題,大概要下載哪些來看??
因為我有下載過一些了 _________________ 一籬一櫓一漁舟,一個艄公一釣勾
一拍一呼還一笑,一人獨佔一江秋
~清.紀昀~ |
|
回頂端 |
|
 |
garfield Site Admin

註冊時間: 2003-01-30 文章: 2160
第 10 樓
|
發表於: 星期日 八月 27, 2006 9:52 am 文章主題: |
|
|
一般初學者是不建議使用 cursor 做資料更新的動作,
而且你的例子更是使用foxpro 的 select 指定,
那更難了,
最基礎的資料編修方法是直接 use table
也不須要設定 buffermode
要新增就 append blank
直接在各物件的 .controlsource 指定 table.欄位名
只要設定 auotlock 也不須要管要不要鎖定資料
萬一要放棄新增的動作,
直接 delete 就 OK
要用條件過濾顯示的資料,
直接用 set filter to 條件
如果整個 table 筆數不多,
可以連索引檔都可以不建,
但資料多的話, 是一定要建立索引檔.
**********
如果你是一定要用 cursor 檔,
最簡單的是使用資料庫中的 "本地資料集 localview"
這樣才能搭配 tableupdate( ) 來逹到更新資料的目的.
**********
至於要看那些下載的資料,
這我也不知道,
因為我都只下載但都沒看,
還是要看書才會依作者所定的教程一步一步的學會foxpro
那些下載的資料大部份都只是講特定的範圍,
適合加強學習某些技巧.
如果你沒有書可以看,
那.... 唉...
去圖書館找看看吧! _________________ 利用>>搜尋<<的功能會比問的還要快得到答案. |
|
回頂端 |
|
 |
芝風
註冊時間: 2006-08-09 文章: 45 來自: 台灣,巴西
第 11 樓
|
發表於: 星期日 八月 27, 2006 6:58 pm 文章主題: |
|
|
原來如此,謝謝大家
若讓大家覺得到困擾,在這邊致上歉意
抱歉 _________________ 一籬一櫓一漁舟,一個艄公一釣勾
一拍一呼還一笑,一人獨佔一江秋
~清.紀昀~ |
|
回頂端 |
|
 |
芝風
註冊時間: 2006-08-09 文章: 45 來自: 台灣,巴西
第 12 樓
|
發表於: 星期日 八月 27, 2006 11:30 pm 文章主題: |
|
|
主要就是因為那些下載的都是講如何設定資料庫,然後拉一拉就好了
我這種的幾乎沒啥人講… _________________ 一籬一櫓一漁舟,一個艄公一釣勾
一拍一呼還一笑,一人獨佔一江秋
~清.紀昀~ |
|
回頂端 |
|
 |
garfield Site Admin

註冊時間: 2003-01-30 文章: 2160
第 13 樓
|
發表於: 星期一 八月 28, 2006 11:12 am 文章主題: |
|
|
參考這篇: http://vfp.sunyear.com.tw/viewtopic.php?t=2377
如果是針對查詢編號視窗的設計,
最方便的是用傳物件方式來作,
在 輸入編號的那個物件.valid() 裡,用以下程式碼
return 查詢視窗(this)
****
func 查詢視窗
lpara mobj
sele 編號 from table where 編號==mobj.value into cursor zz
if recc()>0
mobj.value = 編號 &&--這樣做, 可以把值直接寫入到物件裡.
return .t.
else
messagebox('not found')
return .f.
endif
*************
未經測試, 請試看看可行否. _________________ 利用>>搜尋<<的功能會比問的還要快得到答案. |
|
回頂端 |
|
 |
芝風
註冊時間: 2006-08-09 文章: 45 來自: 台灣,巴西
第 14 樓
|
發表於: 星期二 八月 29, 2006 10:15 am 文章主題: |
|
|
謝謝提供資料 _________________ 一籬一櫓一漁舟,一個艄公一釣勾
一拍一呼還一笑,一人獨佔一江秋
~清.紀昀~ |
|
回頂端 |
|
 |
|