VFP 愛用者社區 首頁 VFP 愛用者社區
本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入

想要請問跨表單的問題…

 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
芝風



註冊時間: 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的動作,可是不知道各位大大是在哪執行??

謝謝

_________________
一籬一櫓一漁舟,一個艄公一釣勾
一拍一呼還一笑,一人獨佔一江秋
~清.紀昀~
回頂端
檢視會員個人資料 發送私人訊息 MSN Messenger
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你可以任何地方做,一般在退出程序时做。

_________________
我的理想是能成为古代的一位富家公子,
日常生活就是喝茶去怡香院,没事带茪@班小打手在街上调戏良家妇女。
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 MSN Messenger
芝風



註冊時間: 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

??

謝謝大大解惑!

_________________
一籬一櫓一漁舟,一個艄公一釣勾
一拍一呼還一笑,一人獨佔一江秋
~清.紀昀~
回頂端
檢視會員個人資料 發送私人訊息 MSN Messenger
芝風



註冊時間: 2006-08-09
文章: 45
來自: 台灣,巴西

第 4 樓

發表發表於: 星期一 九月 11, 2006 7:02 pm    文章主題: 引言回覆

求幫一下,拜託!
_________________
一籬一櫓一漁舟,一個艄公一釣勾
一拍一呼還一笑,一人獨佔一江秋
~清.紀昀~
回頂端
檢視會員個人資料 發送私人訊息 MSN Messenger
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,上面我有给你提到过,怎么去设。

_________________
我的理想是能成为古代的一位富家公子,
日常生活就是喝茶去怡香院,没事带茪@班小打手在街上调戏良家妇女。
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 MSN Messenger
芝風



註冊時間: 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選擇這兩筆資料嗎?

第三點還在尋找中……

_________________
一籬一櫓一漁舟,一個艄公一釣勾
一拍一呼還一笑,一人獨佔一江秋
~清.紀昀~
回頂端
檢視會員個人資料 發送私人訊息 MSN Messenger
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
無法 在這個版面附加檔案
無法 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作