| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2604 人关注过本帖
标题:[求助]在记录前/后插入记录
只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
其實在我看來,VFP的表單數據環境和數据工作期概念,是不成熟的東西。可以看得出,它的未來是面向對象的數據庫,你的願望,就是面向對象的需要,説明你的思維已經入了門道,很好,但目前VFP還不能滿足這種要求,沒有任何數據庫系統能夠這種要求。當前我的處理,不用這種東西,但可以用我前面介紹的那些辦法迂回處理,雖然也不算是真正的面向對象,但比使用這兩個概念簡單直接得多,那其實把事情弄複雜了。

授人以渔,不授人以鱼。
2011-07-26 23:16
lyxc34
Rank: 2
等 级:论坛游民
帖 子:139
专家分:50
注 册:2011-7-3
收藏
得分:0 
那在表单的LOAD事件里面就不用定义数据环境,直接在每个PAGE的ACTIVATE里面写单独的数据环境就行了
USE h:\vfp\data\tables\xsk AGAIN ORDER xh IN 0 ALIAS xsk1

那Deactivate里面关闭数据环境的代码用什么?
CLOSE TABLES ALL
会不会把所有表都关了?
2011-07-27 10:47
lyxc34
Rank: 2
等 级:论坛游民
帖 子:139
专家分:50
注 册:2011-7-3
收藏
得分:0 
在定义数据环境的时候是不是最好用use tablename shared,那样就可以在不同表单中打开同一表,不然就会提示错误“文件正在使用”。
2011-07-27 10:55
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
1.數據環境在主調用程序中設置即可,也在主程序結束時關閉(這也是我不建議用表單啓動的原因,應是用程序啓動表單,在表單啓動前做所有的初始化工作)。
2.主環境打開常用的、各個表單都要用到的數據庫。
3.表單使用數據庫之前,先檢測内存中有沒有已打開(在2中打開的用USED()就檢測到),有則直接使用,無則用下面3打開。
4.當表單要用自己的數據庫時,在自己的Load中打開和關閉,自己打開的自己關閉,千萬不要關閉不是自己打開的數據庫,慎用CLOSE TABLE ALL!
5.用USE的AGAIN參數,不用設置SHARED,在EXCLUSIVE狀態也可以,但此時無法使用獨佔式命令,如PACK、ZAP之類,應該是VFP自動設置了SHARED。

授人以渔,不授人以鱼。
2011-07-27 11:12
lyxc34
Rank: 2
等 级:论坛游民
帖 子:139
专家分:50
注 册:2011-7-3
收藏
得分:0 
1.你的意思我清楚,关键是我想用每个PAGE来代表每个模块,我这里一个PAGE就相当于是一个表单,这样界面会更加友好,操作更加方便。我连菜单都没有用,就是为了更加方便的在各个模块中切换。表单可以用程序来启动,而且有LOAD和UNLOAD事件,可是PAGE没有,所以没法像表单那样用程序启动,可不可以自定义方法给PAGE加一个LOAD事件来设置数据环境?
2.还有你说的表单自己打开的数据库自己关闭,我想知道的是如何关闭,好像没有单独的命令关闭数据库中的某一个表。
3.use again的问题我试过了,好像不行。我是在一个表单的一个控件CLICK事件里面用执行PRG程序,而这个程序就是直接启动一个新的表单,原表单不关闭,只是把Enabled设为.F.,这时要为新表单设置数据环境,为了保证不影响原表单的数据环境,所以我用了DataSession,这应该没问题吧。然后在新表单的LOAD事件里面设置数据环境的时候我用了USE打开表,这时提示文件正在使用,我在USE后面用AGAIN参数也不行,提示同样的错误,后来我把原表单LOAD事件里面的USE后面加了SHARED就不报错了。还有你前面不是也说一切以共享模式考虑吗?
2011-07-27 12:23
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
1.如果整個程序只有一個主表單,則此表單可作主程序使用,在Load事件中打開公共數據庫,在UnLoad事件中關閉它們。
2.在Page.Activate事件中設置專用數據環境,打開除主表單已打開的數據庫之外的數據庫,在Page.Deactivate事件中關閉自己打開的數據庫。
3.關閉數據表用USE IN 別名。
4.新建主表單的數據環境,與Page同樣對待。
5.只要不關閉主環境的公共數據庫,它們就永遠可訪問,不用重復打開,此時無需SHARED。

授人以渔,不授人以鱼。
2011-07-27 12:36
lyxc34
Rank: 2
等 级:论坛游民
帖 子:139
专家分:50
注 册:2011-7-3
收藏
得分:0 
可能我还是没表达清楚,现在是单独的两个问题:
  1.你说的为每个page设置独有的数据环境,这是可以,不过我现在情况比较特殊,我表单里面每个page用到的数据表有一样的也有不一样的,而5个page几乎没有共用的数据表,也就是说,Form的Load事件一个表都不用打开,全部在page各自的Activate事件中单独打开。现在问题来了,Form的Load事件之后要执行Form里面每个page里面每个子控件的init事件,如果我所有控件全是用代码启动的话那当然没问题,可是我在学会这个之前都是用表单控件集拖的,而这些控件数据源绑定的就是数据库中的表,这样执行init事件的时候就会出现找不到某些数据表,因为还没有开始执行Activate事件。要解决这个问题,要么将所有控件都用程序启动,要么直接在表单的Load事件中打开所有要用到的表,我选择了后者。
  2.整个系统里面我计划就用两个表单,一个Login一个Main,Login比较简单不说了,Main这个表单作为系统主界面,里面是一个有5个page的pageframe,每个page代表一个模块,界面你之前看过了。现在需要在一些时候用控件Click显示一个新的表单,原表单不关闭。新表单我是用程序启动的,而用程序启动的新表单,其数据环境都是空白的(这个我试过,不设置数据环境的话GRID就是空的),需要重新设置,而设置的时候需要再从已经打开的数据库中读取数据表数据,而这时原表单没关闭,所以会报错“文件正在使用”,我是这么理解的。解决的方法我是在设置Main的数据环境时use xsk shared order xh in 0,然后将新表单的DataSession设为2,这样就不会报错了。就是不知道shared打开数据表会不会有什么弊端。
2011-07-27 19:06
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
用SHARED打開數據表沒什麽弊端,就是不能使用需要獨佔的命令、運行時會慢些(凡是網絡環境都會減慢速度)。

授人以渔,不授人以鱼。
2011-07-27 19:17
lyxc34
Rank: 2
等 级:论坛游民
帖 子:139
专家分:50
注 册:2011-7-3
收藏
得分:0 
那应该问题不大,我这个是小数据库,同时访问的机会不多。呵呵。
  
2011-07-27 20:06
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
其實是這種設計佈局有點混亂,以後慢慢整理一下吧。表單應只完成獨立功能,不好這樣交叉調用不同性質的模塊的。

授人以渔,不授人以鱼。
2011-07-27 20:10
快速回复:[求助]在记录前/后插入记录
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021614 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved