| 上一篇主題 :: 下一篇主題   | 
	
	
	
		| 發表人 | 
		內容 | 
	
	
		芝風
 
 
  註冊時間: 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    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				謝謝提供資料 _________________ 一籬一櫓一漁舟,一個艄公一釣勾 
 
一拍一呼還一笑,一人獨佔一江秋 
 
~清.紀昀~ | 
			 
		  | 
	
	
		| 回頂端 | 
		 | 
	
	
		  | 
	
	
		 |