| 上一篇主題 :: 下一篇主題   | 
	
	
	
		| 發表人 | 
		內容 | 
	
	
		芝風
 
 
  註冊時間: 2006-08-09 文章: 45 來自: 台灣,巴西
  第 1 樓
  | 
		
			
				 發表於: 星期六 九月 09, 2006 11:53 pm    文章主題: 想要請問跨表單的問題… | 
				     | 
			 
			
				
  | 
			 
			
				很謝謝之前各位前輩的大力相助
 
 
現在改了一些東西,是跨表單的
 
 
是這樣的:
 
 
一張表是記錄人員資料,另一張表是記錄人員的借貸東西資料
 
 
張三,男,二十五戲,未婚                   張三,鉛筆一隻
 
 
現在想要在刪除人員資料的時候,順帶刪除人員的借貸資料
 
 
作了以下程式:
 
 
DELETE * from stuff_in_used where stuff_in_used.User== thisform.pageframe1.page1.txtName_of_user.Value
 
 
 
DELETE
 
 
=TABLEUPDATE(.t.)
 
 
stuff_in_used就是記錄人員借貸資料的表
 
 
現在當我執行時,他會先出現一個視窗,問我要開哪張表,選擇stuff_in_used之後,他卻把「不是」張三的資料全都mark起來
 
 
我曾經在之前加過use stuff_in_used 但是因為我在最早的一開始就open database,所以他出現file in use
 
 
不知道怎麼回事,求大大幫忙
 
 
 
另一個問題是,我不是查詢別的表單,而是本身的表單
 
就是formA 源自表user_data
 
 
現在我設一個查詢,當輸入名字時,grid會自動指向這個名字
 
 
我新設了一個text1,在text1.activechange()中寫:
 
 
SELECT * FROM user_data WHERE user_data.Name_of_user==thisform.text1.value 
 
 
 
thisform.GrdUser_data.refresh
 
 
可是當我輸入字的時候,他卻跑出一張table,而不會在grid中指向我要的那筆資料
 
 
不知道該如何解決,求幫
 
 
 
 
還有另一個小問題,請問各位大大如何執行刪除動作?
 
DELETE
 
 
=TABLEUPDATE(.t.)
 
 
這樣只能把資料mark起來,而無法刪除
 
 
我有聽說要執行pack database的動作,可是不知道各位大大是在哪執行??
 
 
謝謝 _________________ 一籬一櫓一漁舟,一個艄公一釣勾 
 
一拍一呼還一笑,一人獨佔一江秋 
 
~清.紀昀~ | 
			 
		  | 
	
	
		| 回頂端 | 
		 | 
	
	
		  | 
	
	
		liangszpt
 
  
  註冊時間: 2004-11-18 文章: 263 來自: な东省深圳市
  第 2 樓
  | 
		
			
				 發表於: 星期日 九月 10, 2006 3:47 am    文章主題: Re: 想要請問跨表單的問題… | 
				     | 
			 
			
				
  | 
			 
			
				 	  | 芝風 寫到: | 	 		  
 
 
現在想要在刪除人員資料的時候,順帶刪除人員的借貸資料
 
 | 	  
 
 
这个过程好像不对,应该是删除人员时,先去查查这个人有没有借过东西,如果借过还未还的,不应该删除,如果的确是要删除的,应该是先删除他借的东西,再去删除这个人。
 
 	  | 芝風 寫到: | 	 		  
 
作了以下程式:
 
 
DELETE * from stuff_in_used where stuff_in_used.User== thisform.pageframe1.page1.txtName_of_user.Value
 
 
 
DELETE
 
 
=TABLEUPDATE(.t.)
 
 
stuff_in_used就是記錄人員借貸資料的表
 
 
現在當我執行時,他會先出現一個視窗,問我要開哪張表,選擇stuff_in_used之後,他卻把「不是」張三的資料全都mark起來
 
 | 	  
 
 
出现视窗,是因为你的指令找不到TABLE,所以会弹这个窗口出来。使用DELETE之前,要确保有没有打开stuff_in_used这个表,还要SELECT为当前表,才好去DELETE。
 
 
还有。。。为什么你用完SQL指令后,还加一个DELETE的????
 
出现视窗,可能就是这一句。
 
 
你说为什么执行完没有把张三的删除到,可能是因为这句
 
stuff_in_used.User== thisform.pageframe1.page1.txtName_of_user.Value
 
 
==和=,是不同的,==是要求两边的值完全相等(包括空格)
 
‘A   ’和‘A’,在==时的值为.F., 在 = 的时为 T
 
相关的,你可以参考一下SET EXACT 指令的用法。
 
改成这样试试
 
alltrim(stuff_in_used.User)== alltrim(thisform.pageframe1.page1.txtName_of_user.Value)
 
 
 	  | 芝風 寫到: | 	 		  
 
另一個問題是,我不是查詢別的表單,而是本身的表單
 
就是formA 源自表user_data
 
 
現在我設一個查詢,當輸入名字時,grid會自動指向這個名字
 
 
我新設了一個text1,在text1.activechange()中寫:
 
 
SELECT * FROM user_data WHERE user_data.Name_of_user==thisform.text1.value 
 
 
 
thisform.GrdUser_data.refresh
 
 
可是當我輸入字的時候,他卻跑出一張table,而不會在grid中指向我要的那筆資料
 
 
不知道該如何解決,求幫
 
 | 	  
 
 
 	  | 芝風 寫到: | 	 		  
 
還有另一個小問題,請問各位大大如何執行刪除動作?
 
DELETE
 
 
=TABLEUPDATE(.t.)
 
 
這樣只能把資料mark起來,而無法刪除
 
 
我有聽說要執行pack database的動作,可是不知道各位大大是在哪執行??
 
 
謝謝 | 	  
 
 
对于SELECT....FROM这样的命令加上一个临时名给它,不然VFP会用BROWSE窗口去打开你SELECT出来的结果的。改成这样
 
SELECT * FROM user_data WHERE user_data.Name_of_user==thisform.text1.value INTO CURSOR TMPCURSOR
 
记得在关闭FORM时
 
IF USED('TMPCURSOR')
 
    USE IN TMPCURSOR
 
ENDIF
 
 
或
 
 
SELECT * FROM user_data WHERE user_data.Name_of_user==thisform.text1.value INTO ARRAY tmpArray
 
 
参考下SELECT 。。。FROM在VFP中的语法。
 
 
要用PACK,就在要USE TABLE 时,加上EXCLUSIVE,这样才可以做到PACK和ZAP的动作。
 
如果你是在DATA ENVIRONMENT打开TABLE的话,在这个TABLE的PROPERTY的EXCLUSIVE设定为.T.
 
 
PACK你可以任何地方做,一般在退出程序时做。 _________________ 我的理想是能成为古代的一位富家公子,
 
日常生活就是喝茶去怡香院,没事带茪@班小打手在街上调戏良家妇女。 | 
			 
		  | 
	
	
		| 回頂端 | 
		 | 
	
	
		  | 
	
	
		芝風
 
 
  註冊時間: 2006-08-09 文章: 45 來自: 台灣,巴西
  第 3 樓
  | 
		
			
				 發表於: 星期日 九月 10, 2006 7:09 pm    文章主題: Re: 想要請問跨表單的問題… | 
				     | 
			 
			
				
  | 
			 
			
				 	  | liangszpt 寫到: | 	 		   	  | 芝風 寫到: | 	 		  
 
 
現在想要在刪除人員資料的時候,順帶刪除人員的借貸資料
 
 | 	  
 
 
e程好像不薄AG是f除人滿A先去查查炊H有呇陪e[西,如果借ex未x的,不Gf除,如果的确是要f除的,G是先f除他借的[西,再去f除炊H。 | 	  
 
 
這…如果sql找不到這人的資料,是空集合,那不就也沒辦法刪了嗎?
 
 
 
 	  | liangszpt 寫到: | 	 		  
 
出cS窗,是因o你的指令找不到TABLE,所以玥﹞f出S。使用DELETE之前,要确保有呇野{stuff_in_used牧瞴Ax要SELECTo憳e表,才好去DELETE。
 
 
x有。。。o什么你用完SQL指令后,x加一枋ELETE的????
 
出cS窗,可能就是惜@句。
 
 
你So什么蠾瑽呇釦E三的f除到,可能是因o悼y
 
stuff_in_used.User== thisform.pageframe1.page1.txtName_of_user.Value
 
 
==和=,是不同的,==是要求U坁滬完全相等(包括空格)
 
‘A   ’和‘A’,在==漯滬o.F., 在 = 的o T
 
相蛌滿A你可以穧狺@下SET EXACT 指令的用法。
 
改成II
 
alltrim(stuff_in_used.User)== alltrim(thisform.pageframe1.page1.txtName_of_user.Value) | 	  
 
 
這可能是我沒講清楚
 
 
一張formA 對應tableA,而formA其上的所有元件,grid跟textbox等,都是用dataenvironment拉出來的,而現在因為是寫在要刪除tableA的資料的按鍵上,所以後面有一個delete-是指delete tableA的資料
 
 
而那一行sql是要刪除另一張table上相對應的資料
 
 
 
 	  | liangszpt 寫到: | 	 		  
 
薑_SELECT....FROM猼漫R令加上一Z漲WH它,不然VFP悒咷ROWSE窗口去打{你SELECT出S的C果的。改成
 
SELECT * FROM user_data WHERE user_data.Name_of_user==thisform.text1.value INTO CURSOR TMPCURSOR
 
荓o在睢ORM
 
IF USED('TMPCURSOR')
 
    USE IN TMPCURSOR
 
ENDIF
 
 
或
 
 
SELECT * FROM user_data WHERE user_data.Name_of_user==thisform.text1.value INTO ARRAY tmpArray
 
 
穧狺USELECT 。。。FROM在VFP中的N法。
 
 
要用PACK,就在要USE TABLE 滿A加上EXCLUSIVE,牏~可以做到PACK和ZAP的藃@。
 
如果你是在DATA ENVIRONMENT打{TABLE的O,在枚ABLE的PROPERTY的EXCLUSIVE扣wo.T.
 
 
PACK你可以任何地方做,一般在退出程序滌窗C | 	  
 
 
 
那個第一個問題我改用do while下去做
 
 
GO TOP 
 
 
DO WHILE NOT EOF()
 
   IF thisform.text1.Value=user_data.name_of_user
 
      EXIT
 
   ELSE
 
     SKIP 1
 
   ENDIF
 
ENDDO
 
 
thisform.refresh
 
 
這種的就是在同一張table上運作,有辦法用sql嗎?還是用這種do while?do while會不會比較慢呢?
 
 
那另一個問題就是我有兩欄,人員名跟ID,現在我另做一個optiongroup,來讓使用者決定是用哪個來搜尋
 
 
但是我不知道如何來判斷使用者是選擇option1或是2??
 
 
 
 
pack的做法是要先關掉database嗎?
 
這部份整個的流程我還是不太懂…
 
 
我的流程是這樣:
 
 
loginform--->其他的form
 
 
那我在loginform時在form.init() 有寫 open database
 
 
那在其他的form因為都是用dataenvironment去拉的,所以不用寫 use table名?
 
 
 
那最後在quit的時候,要怎麼寫??
 
 
close database
 
pack database
 
 
??
 
 
謝謝大大解惑! _________________ 一籬一櫓一漁舟,一個艄公一釣勾 
 
一拍一呼還一笑,一人獨佔一江秋 
 
~清.紀昀~ | 
			 
		  | 
	
	
		| 回頂端 | 
		 | 
	
	
		  | 
	
	
		芝風
 
 
  註冊時間: 2006-08-09 文章: 45 來自: 台灣,巴西
  第 4 樓
  | 
		
			
				 發表於: 星期一 九月 11, 2006 7:02 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				求幫一下,拜託! _________________ 一籬一櫓一漁舟,一個艄公一釣勾 
 
一拍一呼還一笑,一人獨佔一江秋 
 
~清.紀昀~ | 
			 
		  | 
	
	
		| 回頂端 | 
		 | 
	
	
		  | 
	
	
		liangszpt
 
  
  註冊時間: 2004-11-18 文章: 263 來自: な东省深圳市
  第 5 樓
  | 
		
			
				 發表於: 星期一 九月 11, 2006 8:05 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				1,這…如果sql找不到這人的資料,是空集合,那不就也沒辦法刪了嗎? 
 
 
对空集合,当然也有办法
 
Select * from myTable where Exp1 = Exp2  into cursor tmpTable
 
可以用Eof('tmpTable')去判断,如果为真值,就代表是空集了。
 
 
 
2  那另一個問題就是我有兩欄,人員名跟ID,現在我另做一個optiongroup,來讓使用者決定是用哪個來搜尋 
 
 
但是我不知道如何來判斷使用者是選擇option1或是2?? 
 
 
thisform.optiongroup.value会告诉你,使用者是选择了那一个OPTION
 
 
那最後在quit的時候,要怎麼寫?? 
 
 
3  close database 
 
    pack database 
 
 
先pack再Close,只是PACK命令要求TABLE是以EXCLUSIVE,上面我有给你提到过,怎么去设。 _________________ 我的理想是能成为古代的一位富家公子,
 
日常生活就是喝茶去怡香院,没事带茪@班小打手在街上调戏良家妇女。 | 
			 
		  | 
	
	
		| 回頂端 | 
		 | 
	
	
		  | 
	
	
		芝風
 
 
  註冊時間: 2006-08-09 文章: 45 來自: 台灣,巴西
  第 6 樓
  | 
		
			
				 發表於: 星期一 九月 11, 2006 10:05 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | liangszpt 寫到: | 	 		  1,這…如果sql找不到這人的資料,是空集合,那不就也沒辦法刪了嗎? 
 
 
薊韃隻X,撋M也有t法
 
Select * from myTable where Exp1 = Exp2  into cursor tmpTable
 
可以用Eof('tmpTable')去判吽A如果o真值,就代表是空集了。
 
 
 
2  那另一個問題就是我有兩欄,人員名跟ID,現在我另做一個optiongroup,來讓使用者決定是用哪個來搜尋 
 
 
但是我不知道如何來判斷使用者是選擇option1或是2?? 
 
 
thisform.optiongroup.value悝i\你,使用者是u嶀F那一板PTION
 
 
那最後在quit的時候,要怎麼寫?? 
 
 
3  close database 
 
    pack database 
 
 
先pack再Close,只是PACK命令要求TABLE是以EXCLUSIVE,上面我有H你提到e,怎么去式C | 	  
 
 
謝謝幫忙
 
 
我第一點是因為說要先查查這人有沒有借過東西,那我的意思是說,如果這人沒借過東西,用sql查是空集合,也就刪不到任何資料,不是嗎?
 
 
可是我還是刪不了別張表格所對應的資料……
 
 
還有就算是空集合,那他是empty嗎?因為有一些地方要用empty()來判斷程式執行的部份
 
 
 
第二點搞定了,多謝!!但是grid允許多重選定嗎?
 
 
例如張三借了鉛筆,也借了原子筆,那在物品借用表中,就會有兩筆資料,有辦法讓grid選擇這兩筆資料嗎?
 
 
第三點還在尋找中…… _________________ 一籬一櫓一漁舟,一個艄公一釣勾 
 
一拍一呼還一笑,一人獨佔一江秋 
 
~清.紀昀~ | 
			 
		  | 
	
	
		| 回頂端 | 
		 | 
	
	
		  | 
	
	
		 |