⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 数据库技巧.txt

📁 Vfp 文档 一些经典编程文章 可供初学者学习编程时使用
💻 TXT
字号:
Visual Foxpro技巧问答录
1、 请教各位高手,如何在form中设计一个按钮(或其它对象)的click,使其点击后能能调用htm文件(或发送email的软件)。

答:发送email用下面的语句也可以
DECLARE INTEGER ShellExecute ;
    IN SHELL32.DLL ;
    INTEGER nWinHandle,;
    STRING cOperation,; 
    STRING cFileName,;
    STRING cParameters,;
    STRING cDirectory,;
    INTEGER nShowWindow
return shellexecute(0,"open","mailto:xxx@263.net","","",1)
这样ie窗口不会出现。
 

 

 

2、我如何在当前文档应用程序中使用我自己定制的菜单? 

答:假定已经创建了自己定制的菜单,从ActiveDoc类中的Run Event来运行菜单程序。最好是在显示任何表单之前及执行READ EVENTS命令之前运行菜单程序。 

为了得到更详细的关于建立一个当前文档应用程序的例子和在它上面加载菜单的方法,请咨询在微软公司的知识库中的为一个当前文档或程序建立一个快速菜单和从当前文档中开始的有关内容。

 

 

3.我如何在当前文档应用程序中传递一个参数? 
答:在当前文档应用程序中传递一个或多个参数依赖于应用程序所位于的环境中。如果当前文档应用程序是在Visual FoxPro开发或者运行环境中,将用通常的Visual FoxPro的方式来传递参数,即在运行应用程序时把参数加在命令行中。以下一个例子给出了怎样传递两个字符参数和一个数字参数: 

DO myactivedoc.app WITH "parameter 1", 5, "parameter 3" 

如果当前文档应用程序位于一个网络服务器上,导航到当前文档应用程序并把一个参数传递给它的语法如下: 

http://MYIIS/MyADoc.app#MyParamVal 
 

 

4.为什么为1.44兆软盘创建的.cab文件只有1244512个字节大小?这样每张磁盘都留下了大约196K字节大小的空间。

答:这种算法目的就是要留下额外的空间,因为这个压缩的方案并不精确。
 

 

5.为什么Coolbar ActiveX 控件在Visual FoxPro中不能工作?

答:Coolbar ActiveX控件是一个容器控件。Visual FoxPro不能和任何支持集装箱货运船式的控件进行通信。集装箱货运船式的控件会在Visual FoxPro中出现消息处理问题。
 

 

6.在安装过程中,为什么我不能改变Visual FoxPro的安装路径? 

答:在安装过程中,会有一个对话框会询问你"which Visual Studio '97 products do you wish to overwrite?"。这个对话框有一点迷惑之处,就是如果你不认真去读它时,就会理解成"which products do you wish to install?"。你就会在这个对话框中选择一个产品并把以前安装的Visual FoxPro覆盖掉,这样做安装就不能装在一个不同的路径上。 
 

 

 7、当仅知道表的名称时,如何得到该表的主索引名称和组成?当然,手工维护一张结构表,每次修改表时,同时手工修改该结构表也是一种解决方法。但这并不是我希望的答案。我用的是VFP 6.0,能否仅根据Fox本身的函数、命令解决呢?
答:决定是否主索引 可用 
    primary([索引编号],[工作区])

    决定是否次级索引 可用 candidate( ..同上),它们返回T或F,再结合TAG()及Key(),很不错的!

 

 

 8、怎样才能使每一行中单元格中有一个相对于此记录某个字段内容的提示?即每行不同单元格的在鼠标指到时显示出不同的TipText,而我直接使用该属性的值等于某表的某一字段,结果所有行中单元格都显示的为同一提示(所引用表的第一个记录相应的字段内容)。
答:方法一:

1、在FORM中SHOWTIPS=.T.
2、在表格的TEXT中mousemove事件中:
LPARAMETERS nButton, nShift, nXCoord, nYCoord
IF TYPE('THIS.VALUE')='C' OR TYPE('THIS.VALUE')='M'
this.tooltiptext=alltrim(this.value)
&& 另一选择:wait wind this.value nowait
&& 另一选择:this.statusbartext=alltrim(this.value)
ENDIF

   方法二: 


IF TYPE('THIS.VALUE')='C' OR TYPE('THIS.VALUE')='M' 
local m_curvalue
m_curvalue=this.value
local m_savesele
m_savesele=sele()
if used("phrase")
sele phrase
else
sele 0
use phrase
endif
set order to code
seek m_curvalue
if found()
this.tooltiptext=alltrim(name)
endif 
sele (m_savesele) 
&& this.tooltiptext=alltrim(this.value) 
&& 另一选择:wait wind this.value nowait 
&& 另一选择:this.statusbartext=alltrim(this.value) 
ENDIF
 

 

 9、在VFP中如何实现等待?
答:wait [字符串变量] window [timeout 数值变量] 

 

 10、用VFP做Login,如果表不加密的话,就没意义了,单是如何才能给字段加密呢?
答:似乎无此功能,但是可以用别的办法,例如用SYS(2007)函数转换密码值,或者把PassWord存在内存变量文件中(用二维数组:登录名和密码)。我习惯用后一种做法,因为可以查看。
 

 

 11、我在学习vfp,在研究一个信息管理系统的密码登录的时候发现表单的事件代码, 被隐藏了,请问他是如何做的?是调用外部程序还是其他办法?如何才能看到它?
答:那不难,你的程序编译后别人也看不到你的,你也可自己把表单的表打开自己去掉原代码,只留伪代码就行了。 

 

 12、1.想在一个form中编辑一个已经存在的图像(BMP)形式,完成以后,将这个编辑过的图像自动储存于enral字段,如何进行?
    2.用报表编辑器编辑的报表打印时,一次只打印某一个纪录,应当用什么命令?
答:1. 只要把编辑bmp的 coutrolsource属性设置为你要存的Genral字段,就好了.

    2.在设计报表时拿掉一切的别名前缀,就可以了。
 

 

13、在VFP中想通过OLE编程打印一word文档应该如何做?我写了一段程序,当在text框中现示该文档时,一用printout就出错。说文档正被使用,当使text框中不可见时,用printout就说文档不是活动的,我该如何
解决?
答:请参考:
    owordobject=CREATEOBJECT("WORD.BASIC")
    owordobject.APPMINIMIZE()
    owordobject.FILEOPEN("C:\CONFIG.SYS")
    owordobject.FILEPRINTDEFAULT

 

 

14、 如何实现点击一表单中表格的一记录, 使该记录显示在另一表单中的一文本框中?
答:例子如下:
grid.column1.text1.click()
this.value=表单2.text1.value 

 

15、 VFP 5.0 的Solution,有一快捷菜单示例frmshort(见Solution\Menus\frmshort.mnx),由它生成的.mpr中有一参数行 PARAMETER oREF,而我设计的快捷菜单在生成时没有该行,只能手工添加。请问秘密在哪里?

答:打开菜单设计器后, 点击系统菜单的[显示] -[ 常规选项],出现一个常规选项窗口,在点击此窗口中的菜单代码下的[设置] 后出现一个编辑窗口在此窗口中输入你想要输的内容就可。
如:PARA oREF.......


 

 

16、请问如何利用函数或命令删除editbox.value中字符串的子串。 如:
editbox.value="I'm a student." 我要删除"student"。
答:请参考如下例子:

for i=1 to len(editbox.value)-7
if substr(editbox.value,i,i+6)="student"
editbox.value=substr(editbox.value,1,i-1)+"teacher"+substr(edi
tbox.value,i+7,len(editbox.value))
exit
endif
endfor

 

 

17、 如何不用生成器将控件和数据库连接起来? 例如组合列表控件和grid控件!

答:此类控件一般都有 RowSourceType RowSource 两个属性RowSourceType 是数据源类型 可以是 别名 表 视图 SQL 等RowSource 是与 RowSourceType 相关的数据源通过在代码中正确设置此属性可以实现你的要求
 

 

18、 在VFP编程中,如何调用一个函数实现弹出一个对话框来接受用户的输入数据?如DELPHI中的INPUTQUERY()函数。即实现   @1,1,10,10 box 

答:先制作一个表单,在上面设计好输入(text)和提示(state)控件然后编一过程调用此表单,用do form语句。
    例:do form formname

 

 

19、如何给VFP6的应用程序系统筐架里加上一副图?

答:可以使用 _SCREEN ,例:
_SCREEN.ADDOBJECT('MBMP','IMAGE') &&
_SCREEN.MBMP.STRETCH=2
_SCREEN.MBMP.LEFT=0
_SCREEN.MBMP.TOP=0
_SCREEN.MBMP.HEIGHT=_SCREEN.HEIGHT
_SCREEN.MBMP.WIDTH=_SCREEN.WIDTH
_SCREEN.MBMP.PICTURE='LOGO.BMP' &&要显示的BMP文件
 

 

20、怎样改变菜单的字体大小?

答:请参考:
1、本来菜单生成器中是没有字体的选项的。
2、利用菜单生成器的 选项中 跳过(K) 即SKIP FOR 中编写代码
代码为: .F. FONT '宋体',12
3、实际上,生成的代码为: skip for .f. FONT '宋体',12
这样就达到了改变菜单子项字体的目的。
但顶层菜单的字体是不会改变的。
4、菜单生成后,您可以modi menu mymenu1.mpr
5、如果想完全解决问题,可以利用API。
在进入系统时改变分辨率,使用户操作环境与开发环境匹配。
可以参考有关vb的文章。
 

 

21、 我想让我的VFP应用程序在640*480,800*600,1024*768分辨率下能自动调节窗口的大小,但怎样才能知道当前分辨率是多少呢?是不是用API函数可以做? 

答:请参考以下的代码:
DECLARE INTEGER RegOpenKeyEx IN Win32API INTEGER nKey,STRING @cSubKey,INTEGER nReserved,integer nAccessMask,INTEGER @nResult

DECLARE INTEGER RegQueryValueEx IN Win32API INTEGER nKey,STRING cValue
Name,INTEGER nReserved,INTEGER @nType,STRING @cBuffer,INTEGER @cBuffersize

LCKEY='Display\Settings'
iNERROR=RegOpenKeyEx(-2147483643,lcKey,0,1,@INRESULT)
LNTYPE=0
BUFFER=SPACE(128)
BUFFERSIZE=LEN(BUFFER)
LNERROR=RegQueryValueEx(INRESULT,"Resolution",0,@LNTYPE,@BUFFER,@BUFFE
RSIZE)
IF LNERROR=0 AND BUFFER<>CHR(0)
USERCORP1=LEFT(BUFFER,BUFFERSIZE-1)
ENDIF
USERCORP2=INT(VAL(LEFT(USERCORP1,AT(',',USERCORP1)-1)+RIGHT(USERCORP1,
LEN(USERCORP1)-AT(',',USERCORP1))))

?USERCORP2

即可。


 

 

22、如何确定一个表是否已打开?

答:
if !used('abc')
use abc in 0 share
else
sele abc
endif 

 

 

23、如何在报表上打印总页数?
答: 你撞枪口上了,我正好研究过这个问题,你可以先把报表打印到c:\的一个 临时文件上,然后取出总页数放到一个报表变量中,再把这个变量打印到 真正的报表中. 
 

 

24、请问如何求两个time()型数据(假设为一天内)之间相差的分钟数?
答:time返回的是字符型,用Substr()函数分别截取小时、分钟、秒的数字, 再分别转为秒数相加得出一个数值型数据。用次此办法,将两个Time()数据 分别转化,再相减得出的数值除以60,就得出结果。  
 

 

25、如何将数据库的一个表完全复制到另一个表(结构、验证规则、字段标题等完全 复制)?
答:use function DBGETPROP( ) to get table all informention and create new table with old table's informention! 
 

 

26、close tables all 
   use f:\card\data\tempcard exclusive 
set safety off 
zap in tempcard 
set safety on 
use
    以上是我在destroy中的一段代码。目的是在退出表单时清空tempcard.dbf。 有时运行表单时(即关闭)时会出现“不能访问选定表”的提示。看帮助是 “不能访问选定表。(错误 1152) 试图在 32K 工作区范围之外选定一个表,或者引用未打开表中的文件变量 ”。我搞不懂是什么意思?请问怎样解决这个问题? 
答:将你的代码放在数据环境中的CLOSE TABLE 方法中 OK!
 

 

27、为什么我在FOXBASE中SET EXCLUSIVE OFF,但数据库却不能共享?
答:请参考: 1、改变 SET EXCLUSIVE 的设置并不改变已经打开表的状态。 例如,如果一个表是在 SET EXCLUSIVE 设置为 ON 时打开的, 当把 SET EXCLUSIVE 的设置改变为 OFF 时, 表仍然保持原来的独占状态。 2、susp观看set('excl')状态何时已经改变 3、use (mytable) share  
 

 

28、我看了一些弟兄们的文章和VFP中的SOLUTION示例,仿制了一个表单中的控件随表 单尺寸改变而改变的例子,但发现我的表单的尺寸竟然可以拖动到小于控件的尺 寸,从而出现溢出屏幕的错误,而在SLUTION中的表单是不能小于控件的宽度的, 这是为什么,请指教? 
答: 表单有MinHeight和MinWidth两个属性用来设置表单的最小宽度和最小高度。 
 

 

29、由于我的报表要打印到印有格线的表单中,所以报表中的明细区的长度稍有差驰 ,就会打印到格线上去,不知有没有微调该区域长度的方法?
答: 双击细节带的拖动横条,会弹出一个设置窗口,可以手工输入 细节带长度。  
 

 

30、如何实现在报表的表格中自动填充空行?
答:请参考: 

1、用select ..... into dbf (m_tmpdbf)产生临时表

2、假设报表行数为m_repoline=22 

LOCAL M_TALLY M_TALLY=MOD(RECC(),m_repoline) 

IF M_TALLY<>0 FOR M_I=1 TO m_repoline-M_TALLY

APPEND BLANK

ENDFOR ENDIF  
 

 

  

 

 

 

 

 

 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -