佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

楼主: maybird_2

Visual FoxPro 的疑难杂症

[复制链接]
发表于 19-8-2004 09:07 AM | 显示全部楼层
itgenius 于 17-8-2004 08:07 PM  说 :
select dbf2
append from dbf1 for (filter condition)
select dbf1
delete for (filter condition)

因为我是 SET FILTER 后才 MOVE 所显示的 DATA,所以以上的方法应该怎样改?
回复

使用道具 举报


ADVERTISEMENT

发表于 19-8-2004 09:15 AM | 显示全部楼层
dark_heaven 于 19-8-2004 07:54 AM  说 :
你是用 VFP6 吧,有没有 refer 随装护送的 msdn 2000 jan, 那里有个 Solution.pjx 的 sample, 你应该尝试去 figure out your own from those sets of samples included in msdn.
因为我发觉你常问的问题在 Sol ...

Solution 里面的多数是用 Parent Code。对我来说是一门很高深的东东。
回复

使用道具 举报

dark_heaven 该用户已被删除
发表于 19-8-2004 10:01 AM | 显示全部楼层
这是我以前的作法,你看帮得到你吗...
我通常没用你这个 Filter 的方法,完全是 SQL command 来 Filter 的(切确说,应该是 "Select wanted rec" 吧。


  1. *在你认为适当的 Event 下
  2. local lcSQLStr, loGrid
  3. lcSQLStr = "SELECT xxx1, xxx2 FROM xxTable WHERE ";
  4.     + "para1 = " + chr(34) + lcCriteria1 + chr(34)+ " AND ";
  5.    + "para2 = " + chr(34) + lcCriteria2 + chr(34);
  6.     + " INTO CURSOR tempResult "

  7. loGrid = thisform.grid1
  8. with loGrid
  9.     .RecordSource = loSQLStr
  10.     .grc1.ControlSource = tempResult.xxx1
  11.     .grc1.text1.ControlSource = 3 + TempResult.xxx1
  12. endwith
  13. go top
  14. loGrid.SetFocus
复制代码


你试一试,若是不行,就要问别人了,我很多年没碰了,刚刚的码是从 以前 project code-listing 的 hard-copy.


你可以找一找  QUE 的 "Special Edition Using VFP 5 or 6"
我以前也靠这本才慢慢摸 那些 sample 的,很久以前,我是时常请教 Carl 的, fox.wikis.com 就是他维持的,可以在 IRC.UniversalThread.com  的 IRC Network 找到他,但是好多年了,不知道那群来自世界各地的 VFP hero 还在不在

/ps:


你把 SQL-command  store 在一个 var 的好处是 Dynamic changing your SQL String 的缘故。看看下边的示范:

*this is direct SQL-Command
SELECT * FROM xxTable

and are equivalent to the codes below :-

lcSQL = "SELECT * FROM xxTable"
&lcSQL    && <-- this run the SQL statement

我告辞了,要去新加坡剿书,哈哈

[ Last edited by dark_heaven on 19-8-2004 at 10:16 AM ]
回复

使用道具 举报

发表于 19-8-2004 10:23 AM | 显示全部楼层
tstan135 于 19-8-2004 09:07 AM  说 :
因为我是 SET FILTER 后才 MOVE 所显示的 DATA,所以以上的方法应该怎样改?

先解除 filter 才 transfer data,执行完毕再 set 回原来的 filter。
回复

使用道具 举报

发表于 19-8-2004 12:15 PM | 显示全部楼层
白日梦 于 19-8-2004 10:23 AM  说 :
先解除 filter 才 transfer data,执行完毕再 set 回原来的 filter。

我是要把 SET FILTER 后,选出来的 DATA MOVE 到另一个 DATABASE 里。
回复

使用道具 举报

发表于 19-8-2004 02:15 PM | 显示全部楼层
tstan135 于 19-8-2004 12:15 PM  说 :

我是要把 SET FILTER 后,选出来的 DATA MOVE 到另一个 DATABASE 里。


山不轉, 路轉; 路不轉, 人轉
作為一個初學者的你,應當多熟悉,多練習命令,function.

以上已有答案所謂的 move ,是把抄了原有的資料.才刪除原有的資料.

試試看吧,你行的! 給多一點耐性.
回复

使用道具 举报

Follow Us
发表于 19-8-2004 02:41 PM | 显示全部楼层
在 FORM1 里我用 nRec = RECNO(),在 FROM2 的 INT 里 GO nRec
请问为什么 Record 1 到 7 Form2 都能显示,但 Record 8 或之后的就不能显示,总是 Program Error "Record is out of range"?
请问有什么方法?
回复

使用道具 举报

发表于 19-8-2004 02:48 PM | 显示全部楼层
tstan135 于 19-8-2004 12:15 PM  说 :

我是要把 SET FILTER 后,选出来的 DATA MOVE 到另一个 DATABASE 里。

用 copy to dbf2 指令,

use dbf1
set filter to year(date)=2003
copy to dbf2
回复

使用道具 举报


ADVERTISEMENT

发表于 19-8-2004 02:53 PM | 显示全部楼层
tstan135 于 19-8-2004 02:41 PM  说 :
在 FORM1 里我用 nRec = RECNO(),在 FROM2 的 INT 里 GO nRec
请问为什么 Record 1 到 7 Form2 都能显示,但 Record 8 或之后的就不能显示,总是 Program Error "Record is out of range"?
请问有什 ...

你碰到 eof,reccount() 只有 7,你用 go 指令 不能去 eof() 的记录。
回复

使用道具 举报

发表于 19-8-2004 06:21 PM | 显示全部楼层
在一个 form1 里,当我要 set filter 时就会出现另一个 form2 让我输入我要 filter 的 data。在 form2 里我用
set filter to bank = thisform.combo1.value
但总是 error。"unkown member COMBO1"
请问要如何解决?
回复

使用道具 举报

发表于 19-8-2004 08:54 PM | 显示全部楼层
tstan135 于 19-8-2004 06:21 PM  说 :
在一个 form1 里,当我要 set filter 时就会出现另一个 form2 让我输入我要 filter 的 data。在 form2 里我用
set filter to bank = thisform.combo1.value
但总是 error。"unkown member COMBO1"
请问要如 ...


你的 combo1.value 是在form1, 或是 form2 如果是在 form2.的話,而 grid 是在form 1,
那麼條件式不成立.
回复

使用道具 举报

发表于 19-8-2004 09:34 PM | 显示全部楼层
tstan135 于 19-8-2004 09:07 AM  说 :

因为我是 SET FILTER 后才 MOVE 所显示的 DATA,所以以上的方法应该怎样改?


方法上次已经说了,好吧!让我写清楚一点.

select data1 && 这是原有的DATBASE
set filter to bank = thisform.xxxx.value && 把它FILTER

select data2 && 这是你要从DATA1 APPEND DATA 的 DATABASE
APPEND FROM DATA1 FOR BANK = THISFORM.XXXX.VALUE && 这个指令是加入RECORD从DATA1,而加入的RECORD要符合 BANK = THISFORM.XXXX.VALUE.

SELECT DATA1
DELETE FOR BANK = THISFORM.XXXX.VALUE && 这是把DATA1的RECORD符合 BANK = THISFORM.XXXX.VALUE 全部 DELETE.因为你要求的是MOVE而不是COPY,如果只是COPY就步需要做这个动作
回复

使用道具 举报

发表于 19-8-2004 09:42 PM | 显示全部楼层
tstan135 于 19-8-2004 06:21 PM  说 :
在一个 form1 里,当我要 set filter 时就会出现另一个 form2 让我输入我要 filter 的 data。在 form2 里我用
set filter to bank = thisform.combo1.value
但总是 error。"unkown member COMBO1"
请问要如 ...



这是因为你会到FORM1的时候, FORM1 里面没有 THISFORM.COMBO1.VALUE,所以会出现UNKNOWN MEMBER COMBO1.

你可以在FORM2里改成这样;
PUBLIC xValue
XVALUE = THISFORM.COMBO1.VALUE && 把THISFORM.COMBO1.VALUE给予 XVALUE
然后就
SET FILTER TO BANK = XVALUE
这样当你会到FORM1是就不会出现ERROR了
回复

使用道具 举报

发表于 20-8-2004 06:26 PM | 显示全部楼层
在一个 GRID 里,要在哪里写才可以当每次打开 FORM 时,增加或修改 Column 里的 Record 时,它会自动算出答案?
我曾写在表单的 INIT 事件里,但不行,因为每当打开 FORM 时,它只会计算 SETFOCUS 的那行而已。


我是这样写的,不知对不对?
SELECT Trade_list
SUM amount TO nTotal FOR company = thisform.grid1.column1.text1.Value;
AND bank = thisform.grid1.column2.text1.Value

SELECT Trade_facilities
replace utilise WITH nTotal
thisform.grid1.column5.text1.Value = thisform.grid1.column3.text1.Value - nTotal

请大家帮忙,谢谢!

[ Last edited by tstan135 on 21-8-2004 at 04:14 AM ]
回复

使用道具 举报

发表于 21-8-2004 10:34 AM | 显示全部楼层
两边写∶
开表时执行
grid1.init
和修改时执行
grid1.column5.valid
* column5 是 amount 的话。

你多练习就掌控OOP控件面向编程技巧!现在的你已经不是VFP新手了。
回复

使用道具 举报

发表于 21-8-2004 10:59 AM | 显示全部楼层
白日梦 于 21-8-2004 10:34 AM  说 :
两边写∶
开表时执行
grid1.init
和修改时执行
grid1.column5.valid
* column5 是 amount 的话。
你多练习就掌控OOP控件面向编程技巧!现在的你已经不是VFP新手了。

在 GRID.INIT 事件里也不行,因为每当打开 FORM 时,它也只会计算 SETFOCUS 的那行而已。
回复

使用道具 举报


ADVERTISEMENT

发表于 21-8-2004 11:08 AM | 显示全部楼层
请问在 GRID 里要让它从第一行到最后一行的 RECORD 都 SETFOCUS 过。应该怎样?
回复

使用道具 举报

发表于 21-8-2004 11:33 AM | 显示全部楼层
使用 grid.refresh ,
不用每行 .setfocus
回复

使用道具 举报

发表于 21-8-2004 02:03 PM | 显示全部楼层
也许之前我说的不详细。
我有两个Form – Form1 和 Form2。
Form1 是收入日常增加或减少的款项。
Form2 是 GRID 收入公司 (column1), 银行 (column2),可动用款项的顶数 (column3),已经动用的款项 (column4) 和可动用款项的余数(column5)。
Column3 的顶数是固定的。
Column4 是天天随着Form1 里的 Record 的增加或减少而改变
Column5 是Column3 -Column4

我是这样写的。
SELECT Trade_list
SUM amount TO nTotal FOR company = thisform.grid1.column1.text1.Value;
AND bank = thisform.grid1.column2.text1.Value

SELECT Trade_facilities
replace utilise WITH nTotal
thisform.grid1.column5.text1.Value = thisform.grid1.column3.text1.Value - thisform.grid1.column4.text1.Value

请问要在哪里写才可以当每次打开 FORM2 时和当增加或修改在 Form1 或 Form2 里的 Record 时,它会自动算出在 Form2 里Column4 和Column5 的数目?
我曾写在 FORM2.INT 和 FORM2.GRID1.INT ,但每当打开 FORM2 时它只会计算 SETFOCUE 的那一行而已(里面有很多行)。我在 GRID 的 AllowCellSelection 是 .F.。
回复

使用道具 举报

发表于 22-8-2004 01:33 AM | 显示全部楼层
如何才能让 GRID 固定在同一行 Setfocus?
在一个 GRID 里,当我要修改 Column 的 RECORD 时,它会现另一个 FORM 让我修改。EXIT 之后它会返回之前修改的 Column 和在那行 Column 里 Setfocus。
但当我在 FORM 里加入 SUM command 后,当我 EXIT 后,在 GRID 里 SETFOCUS 的那行总是跑到最后一行。请问要如何才能让它返回在我修改的那一行 Setfocus?

[ Last edited by tstan135 on 23-8-2004 at 08:08 PM ]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 28-4-2024 03:21 AM , Processed in 0.068960 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表