📄 数据库技巧2.txt
字号:
本谈论集是小狐从网易社区VFP版区中的谈论内容,有些技巧可能并不能实行,但大家可从各人的谈论中发现一些编程的思路,对自己的设计思想也是有帮助的!
1、各位大虾:我在使用中文 VFP 5.0 浏览数据库时,不论是用 Browse、Edit还是 SQL 查询,都会自动打开中文输入法,而我又找不到解决的办法。有知道解决办法的高手,请多多赐教,不胜感激之至!
答:在程序中可以这样控制:
IMESTATUS(0) --- 关闭
IMESTATUS(1) --- 打开
小狐补充:其实可以有一个很方便的办法,就是:进入VFP系统后,选择“选项”菜单,在“常规”选项卡中有一“浏览时打开IME控件”的选择,不把它打勾就可以解决问题了!^ - ^
2、在VFP中如何得知WIN95的安装目录?
答:有两种方法:
1.用home()函数,简单方便,但需在编译成EXE后独立使用时用,在设计时home()返回的是vfp启动目录。
2.用Win32API,复杂难用如:
DECLARE INTEGER RegOpenKeyEx IN Win32API INTEGER nKEY,;
STRING @cSubKey,INTEGER nReserved,INTEGER nAccessMask,;
INTEGER @nResult
3、我在一个表单里调用了另一个表单,我想从被调用表单中返回一个参数值给调用表单,该怎么做? 我在调用里定义了public num ,在被调用时改变了num的值,却用不上,为什么 ? 调用程序如下:
public num
num=1
do form aaa.scx ***其中我给num 重新赋值了,当然不是 1
wait window num
go num
thisform.refresh
wait window 显示的值仍是 1 。
答:最简单的方法:在被调用的表单里定义变量!
4、用VPF做一个表单,生成.EXE文件,在VPF里运行很正常,可退出,在WIN下运行发现表单一闪而过,不知是什么原因???
答:做一个主程序(如 MAIN.PRG),内容为:
DO FROM <formname>
READ EVENT
在退出表单的代码最后加上:
CLEAR ENENT
在项目管理器中设置MAIN.PRG为主程序
连编为.EXE 文件即可。
5、我在设计报表时在页尾设置sum()函数,但在预览和运行时出现"找不到sum.prg"的情况,我曾在命令窗口试过这一函数却可以执行,请问该如何处理?
答:选择字段名,按属性,选计算,再选sum函数ok
6、我在使用VFP 6。0时将源程序连编成可执行文件,运行该文件总要出现那讨厌的工具栏。(我在进行连编时,编程环境中已经取消了工具栏显示)不知各位高手能否给予指点。
答: 我用VFP5.0时也遇到过类似情况,编译后的可执行文件运行时无工具栏,某一天却发现所有用VFP5.0编译的程序都莫名其妙地出现了工具栏,经摸索发现,只要将工具栏用鼠标拖放到另一位置,在右键单击工具栏,选择关闭,之后不但该程序的工具栏消失,而且所有VFP程序的工具栏也不会出现了,真奇怪。不知VFP6.0是否也是这样。
7、编译了一个程序,运行时FOXPRO主窗口没有占满整个屏幕,如何使主窗口一运行就最大化,哪位高手帮忙一下?
答:把编译了的程序在Windows是建立一个快捷键,然后修改其属性,选择“最大化”就可以了。
小狐补充:若使用了系统窗口,可以这样做:SCREEN.WINDOWSTATE=2 ,若不使用系统窗口,可以上面的代码改为:主表单名.WINDOWSTATE=2即可。
8、我把vfp5.0编译后的一exe文件拷入一在未装vfp5.0的计算机不能运行,是否缺少动态链接文件?
答: 从一个项目中,可以建立应用程序文件 (.app) 或者可执行文件(.exe)。如果用户有一个完整的 Visual FoxPro 副本,则可以运行一个 .app 文件。另外一个选择方案是建立一个可执行文件。该可执行文件需要和两个 Visual FoxPro 动态连接库 (Vfp5r.dll 和 Vfp5enu.dll) 连接,这两个库和应用程序一起构成了 Visual FoxPro 所需的完整运行环境。VFPxxx.DLL指定用于应用程序开发的地区版本。
9、用 DO FORM 和 READ EVENTS 在表单里运行另一表单,但编译成 .EXE后,运行时会运行READ EVENTS 后面的命令(在FOXPRO里就不会),请高手指教.
答: 好像READ EVENTS不能在一個.EXE里重复使用。
10、在COMBO中怎样利用方向键(DOWN)模拟鼠标点按COMBO时DOWNCLICK的事件?
答:在KEYPRESS事件中加入:
LPARAMETERS nKeyCode, nShiftAltCtrl
if nkeycode=24 &&down key value
THIS.DOWNCLICK
endif
11、我用VFP3.0做了一个表单,但总是不够大。我想做一个全屏大小的表单,该用什么方法?
答:修改属性:WindowMode=2
12、我正在用VFP做一东东,数据库MESS。DBF在NT服务器上。请问如何编程,让此程序在各工作站上可以对数据库进行增、删、改等操作?在单机上我会但,数据库放在SERVER上我就不知如何访问了。望各位指点。
答:当一用户欲对数据库进行操作时,应具备当时数据库没有被其他用户访问,而进行有关操作时,要求将数据库转为操作用户独占方式等等,总之在但机时十分容易完成的操作,在多用户环境中实现,有很多技巧.
13、在数据库表中appe一条记录,会出现索引关键字不唯一的提示,如何解决?
答:1、您的表的主关键字字段已经有一空白值的行。
2、建议得到序列表的序列号m_myunique后,采用:
insert into (mydbf) (myunique) values (m_myunique)
3、如果有可能删除记录,并利用已经删除的序列号,建议添加索引条件:
not dele()
14、本人遇到一个问题:VFP5.0的报表打印时,打印一次,打印机就自动换纸,请问各位高手,如何让纸停住
答:如下办法不是很好,但我就是用它来实现实时系统记录。请参考:
1、利用以下代码生成临时文件(_PRNFILE)
SET TEXTMERGE ON
SET TEXTMERGE NOSHOW
SET TEXTMERGE TO (_PRNFILE)
\ <<PADC('┌', 2)>>
\\<<REPL('─',20)>>
\ <<PADc(alltrim(ADDRESS),30)>>
\ <<CHR(12)>>
WAIT CLEAR
SET TEXTMERGE OFF
SET TEXTMERGE TO
2、RUN /N7 PRGS\COPYFILE.BAT (_PRNFILE)
3、COPYFILE.BAT文件如下:
COPY %1 PRN
15、何将一个数据表动态的加入数据环境中?
答:THISFORM.DataEnvironment.ADDOBJECT('mydbf','CURSOR')
16、如何得到窗口的句柄?
答:DECLARE INTEGER GetActiveWindow IN win32api
THISFORM.FOXHWND=str(GetActiveWindow())
17、有两张表单处理同一数据库,由一个表单调用另一个表单,如何保持两表单同步刷新?
答:用一时钟控件,过一段时间就比较表单中的数据与数据库中的数据是否还同,如不同则重新写入
18、在VFP中如何判断软盘是否插好,是否有这样的函数?
答:最简单的方法:
FILE("A:\NUL")
小狐补充:同理,使用FILE()函数可以判断某一目录是否已存在,如:我们要判断C:\CARD这目录是否存在,可使用命令
?FILE("C:\CARD\NUL")
19、 当需查询或统计某一年龄段的人员资料时,由于年龄是随时间递增的,如果用手工或人工干预来增加年龄则是件非常麻烦的事,不知大家有何方法能让数据库中的年龄字段的年龄自行递增?
答:库中不要把年龄作为字段,你只要登记人员的出生年份即可.显示时,人员的年龄为
今年与出生年分之差.
20、 在开发环境中没问题,但编译并安装到另一台机上就出问题了,说找不到文件。而且我弄不懂VFP6中的视图对象的SQL藏在那里,没法象查询那样
答:视图对象的SQL保存在数据库文件中.你用use 数据库.dbc 就可看到view记录项.用视图前要先打开数据库
21、怎么才能将用ACTIVE DOCUMENT做的程序连到网页上,需要怎么设置?
答:Active Document 是在 Intranet 上配置 Visual FoxPro 应用程序的一种方法。您可以使用 Active Document 在 Microsoft Internet Explorer 浏览器中直接运行由 Visual FoxPro 创建的包含有 Visual FoxPro 代码的表单。在 Visual Basic 中,Active Document 只是稍做修改的表单,目的是支持 Internet Explorer 的特性。Visual FoxPro 中的 Active Document 与其稍有不同。ActiveDoc 类是一个非可视类,它的功能更类似于一种应用程序对象,用于处理在浏览器中运行已有的 Visual FoxPro 表单所需的事件。因此,不需要转换表单。另外还加入了一些新的属性,如表单的 ScrollBars 和 TitleBar 属性,以便包容到 Internet Explorer 中时可以与其用户界面标准保持一致。应该注意,在 Internet Explorer 所运行的
Visual FoxPro ActiveDoc 只是一个应用程序文件(.app),它也可以在 Visual FoxPro 中直接运行。也正由于这个原因,需要有 Visual FoxPro 的运行时刻版本。Active Document 更适用于 intranet 环境,这是由于大多数用户是使用调制解调器访问 Internet 的,因此在 intranet 环境中对下载大型 Visual FoxPro 运行时刻文件的限制要宽松得多。值得庆幸的是,运行时刻文件只需下载一次。
22、我有试过使用COPY TO ARRAY FIELDS FIELDNAME和SCATTER与SCAN的组合.结果却都是一样:除第一个元素显示正确外,其余的类型、值都是"L"、".F."。请问该如何解决?
答:要将多个记录或整个表复制到数组,则指定一个二维数组。数组的行数就是数组能容纳的记录数,数组的列数就是数组能容纳的字段数。
23、请问如何在VFP3.0中调用16位DLL?我用Visual C++ 1.5自定义了一个 DLL
char *MyFuc(char *a, char *b, char *c);
答:DECLARE STRING MyFuc IN MYFUC.DLL;
STRING A, STRING B, STRING C
24、VFP5中,我想控制 report表的项目,也就是说,我想 在库表中不为零的字段打印出来, 而为零的字段,在报表中不打印出来。
答:在该字段上按右键,选取属性——打印条件——字段>0即可。
25、我用appe gene 或是appe gene link加入一個jpg檔案到General字段中還是會很大。
答:我想,foxpro里对于jpg、gif等图形都是先转化为位图来处理的,这样它可以省略其他图形的解释器。(只是猜测,没有证实)比如,透明的gif文件,透明的地方都变成灰色了。
26、请问如何在Visual Foxpro中由一个Form调用另一个Form时,原Form暂停执行,直至被调用Form被Release?
答:请用如下命令:
do form 表单名2 to 变量名
在表单名2的unload中
retu .t.
这样就可以了!
27、select语句生成的结果如何存入自己的数据库?
答:用如下语句:
select * from ... into array <数组名>
sele (table name)
appen from array <数组名>
28、我用DELETE命令删除记录单没执行PACK,进行查询时,删除的记录仍查询得到,请问如何解决?
答:set dele on 即可
29、如何在VFP中调用"打开文件"对话框及"保存","另存"对话框?
答:使用GETFILE()函数
30、 我做一个游览功能的表单.(数据取自三个dbf),内有一表格,数据源来自一个查询的结果.现在的问题是:每运行一次表单,它先做查询,一定要把查询结果的窗口关掉以后才显示我所要的游览窗口
答:将查询结果存放在一个dbfname.tmp文件上中,再在自定义方法中用代码把dbfnam
e.tmp与表格联系起来秒,OK了?!!!
小狐补充:代码可以这样写:
sele 字段 from 数据表名 where 条件 INTO CURSOR ABC
thisform.grid1.recordsource=“ABC”
thisform.grid1.recordsourcetype=2
31、在程序中,我想在GRID做refresh操作后在第一条记录获得焦点,如何做?
答:很简单,在refresh前加上 go top就 ok?!!!!!
32、为什么在含有页框的表单中加入resizable类后,总是提示出错?
答:resizable类是VFP所带的SOLUTION.VCX可视类库中的一个,它提供了一个在程序运行期间更改表单尺寸后,自动更改表单控件大小的简单方法。但是经使用发现,改类中存在严重的BUG,主要现象是:当在表单中加入页框,并在页框中加入一些控件后,运行程序时,一但更改表单的尺寸,就会提示出错或者错误移动页框的位置。经本站研究之后发现,原来微软的程序员在设计本类的程序时,没有考虑到页框内控件的Top/Left/Height/Width的值只是相对页框的大小而言的,而包括表单中页框外的其他控件的Top/Left/Height/Width的值是相对表单而言的,因此造成了在试图更改页框内控件尺寸和位置时的错误。
为此本站已对该类进行了修改,并在软件下载中更新了SOLUTION.VCX文件。
33、样在VFP中让用户建立新目录并将某一目录下的所有DBF文件复制到新目录下(类似
答:建立目录:md floder,获得当前目录:defaultfloder=sys(5)+curdir( )
建立完整的备份目录及文件路径:bf_path=defaultfloder+"\"+"floder"+"\"+"*.dbf"
(defaultfloder后面是否要加"\"我有点忘了,自己调试一下吧)
拷贝文件:copy file *.dbf to &bf_path
34、我在vfp6下,连编一个项目的com dll时出错,出错信息如下:"联编DLL: 不能缺少OLE公共类.",不知何解,请有识之士点拨一二.
答:只要你将你的类库中的一个类定义为OLE公用类就可以了。方法是在类浏览器中打开你的类库,随便右击一个类然后选择OLE公用项即可。
35、 在一个Form 中有几个控件 都要调用同一些公共的过程 ,: 这些公共的过程 应放在那?
答:在修改表单状态下,从菜单中选择“表单”->“新方法程序”建一个自定义过程即可!
36、请问组合框中哪个属性是指用户选中的内容?
答:当单选时:this.list1.value 或 this.list1.listindex 即是你所选的值或序号.多选时:用this.list1.selected(i) 来定: 当=.t. 此项已选,=.f. 未选.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -