标题:VFP编程技巧,不断增加中(千万别灌水)
取消只看楼主
tzhtang
Rank: 1
等 级:新手上路
帖 子:888
专家分:0
注 册:2004-8-30
 问题点数:0 回复次数:51 
VFP编程技巧,不断增加中(千万别灌水)
希望大家将自已的编程技巧放在这儿让大家共享. 我先起个头吧:

l 表格GIRD的数据源表删除数据或变动后,表格会显示空白,我们可以用下面方法: thisform.grid1.RecordSource = null SELECT yea,mon,jcgz1,gwgz1,ren1,jcgz2,gwgz2,ren2,dqgz,dqren,ntgz,ntren,txgz,txren; FROM gzhz WHERE danwei = this.value AND yea = thisform.cboyea.Value ; INTO dbf dwgz ORDER BY mon thisform.grid1.RecordSource = 'dwgz' 其实就是: thsiform.grid1.recordsource = null 表操作(删除,变动等) thisform.grid1.recordsource ='dbfname'

搜索更多相关主题的帖子: VFP 技巧 灌水 thisform yea 
2005-07-12 17:44
tzhtang
Rank: 1
等 级:新手上路
帖 子:888
专家分:0
注 册:2004-8-30
得分:0 

在文本框的FORMAT属性中设为KTRZ!会有很好的效果。K 当光标移动到文本框上时,选定整个文本框。 T 删除输入字段前导空格和结尾空格 。 R 显示文本框的格式掩码,该掩码在文本框的 InputMask 属性中指定。掩码格式用于更方便和更清晰地显示(例如,如果掩码为99-999,数字 12345 显示为 12?45),但是掩码并没有作为数据的一部分来储存。仅适用于字符型或数值型数据。Z 如果为 0,显示为空值,除非控件处于作用中。 !把字母字符转换为大写字母。只用于字符型数据,且只用于文本框。


2005-07-12 17:46
tzhtang
Rank: 1
等 级:新手上路
帖 子:888
专家分:0
注 册:2004-8-30
得分:0 
右键功能的制作,将以下菜单代码作为PRG在RIGHTCLICK中调用: PARAMETERS oREF DEFINE POPUP EDTshort SHORTCUT RELATIVE FROM MROW(),MCOL() DEFINE BAR _med_cut OF EDTshort PROMPT "剪切(\<T)" DEFINE BAR _med_copy OF EDTshort PROMPT "复制(\<C)" DEFINE BAR _med_paste OF EDTshort PROMPT "粘贴(\<V)" DEFINE BAR _med_sp100 OF EDTshort PROMPT "\-" DEFINE BAR _med_slcta OF EDTshort PROMPT "全选(\<A)" ACTIVATE POPUP EDTshort


2005-07-12 17:47
tzhtang
Rank: 1
等 级:新手上路
帖 子:888
专家分:0
注 册:2004-8-30
得分:0 

Grid中显示多种颜色: 创建临时表:Create Cursor Lsb (F1,F2,F3,,,BackColor B(0), ForeColor B(0)) 根据需要填写BackColorForeColor的颜色值 Grid.SetAll('DynamicBackColor','Lab.Backcolor','Column') Grid.SetAll('DynamicForeColor','Lab.Backcolor','Column')


2005-07-12 17:51
tzhtang
Rank: 1
等 级:新手上路
帖 子:888
专家分:0
注 册:2004-8-30
得分:0 
ALTER  TABLE-SQL 以编程方式修改表的结构
CREATE  CURSOR-SQL 创建一个临时表
CREATE  TABLE-SQL 创建一个含有指定字段的表
DELETE-SQL 给要删除的记录做标记
INSERT-SQL 在表尾追加一个包含指定字段值的记录
SELECT-SQL 从一个或多个表中检索数据
UPDATE-SQL 以新值更新表中的记录
 

2005-07-12 17:52
tzhtang
Rank: 1
等 级:新手上路
帖 子:888
专家分:0
注 册:2004-8-30
得分:0 
记录完全重复的解决
select distinct * from tableName
就可以得到无重复记录的结果集。
如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除
select distinct * into #Tmp from tableName
drop table tableName
select * into tableName from #Tmp
drop table #Tmp
发生这种重复的原因是表设计不周产生的,增加唯一索引列即可解决。

2005-07-12 17:54
tzhtang
Rank: 1
等 级:新手上路
帖 子:888
专家分:0
注 册:2004-8-30
得分:0 
部分字段内容重复的解决
假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集
select identity(int,1,1) as autoID, * into #Tmp from tableName
select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID
select * from #Tmp where autoID in(select autoID from #tmp2)
最后一个select即得到了Name,Address不重复的结果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列)

2005-07-12 17:55
tzhtang
Rank: 1
等 级:新手上路
帖 子:888
专家分:0
注 册:2004-8-30
得分:0 

在程序源代码中加上必要的注释,可以增强程序的可读性,也便于日后的维护。注释语句是一种非执行语句,在VFP支持3种类型的注释格式: 1、使用NOTE或*命令声明该行是一个注释行; 2、使用&&命令在一个语句的末尾加入注释; 3、直接在IF...ENDIF、DO...ENDDO、FOR...ENDFOR 等语句后面直接写注释


2005-07-14 13:16
tzhtang
Rank: 1
等 级:新手上路
帖 子:888
专家分:0
注 册:2004-8-30
得分:0 
用 FUNCTION 命令可以创建一个自定义函数,其基本语法如下: FUNCTION FunctionName [LPARAMETERS parameter1[,parameter2],...] COMMAND [RETURN [eExpression]] ENDFUNC


2005-07-14 13:37
tzhtang
Rank: 1
等 级:新手上路
帖 子:888
专家分:0
注 册:2004-8-30
得分:0 

[分享] 由表结构生成系统主菜单

[ 2005-06-26 | 作者:hongpx | 来自:Microsoft Visual FoxPro Blog]

#define _DEBUG .T. && 作为调试用。 LOCAL i,j LOCAL lcTableFuncList lcTableFuncList = "FuncList" * 表结构: * nKey n (5) * nParent n (5) * cDesc c (20) * cCommand c (50) * lEnabled l * nParent = 0 的记录作为顶层菜单 IF _DEBUG IF USED (lcTableFuncList) USE IN &lcTableFuncList ENDIF *-- 创建临时表存放功能信息 CREATE CURSOR &lcTableFuncList (; nKey n (5),; nParent n (5),; cDesc c (20),; cCommand c (50),; lEnabled l DEFAULT .T.) *-- 添加测试数据 FOR i=1 TO 5 INSERT INTO &lcTableFuncList (nKey,nParent,cDesc) VALUES (i,0,"功能(\<" + ALLTRIM(STR(i)) + ")" ) FOR j=1 TO 9 INSERT INTO &lcTableFuncList (nKey,nParent,cDesc,cCommand) VALUES ; (i*10+(j-1),i,"(\<" + ALLTRIM(STR(j)) + ")功能" + ALLTRIM(STR(i)) + "-" + ALLTRIM(STR(j)), ; "MESSAGEBOX ('" + ALLTRIM(STR(i)) + "-" + ALLTRIM(STR(j)) + "')" ) NEXT NEXT *-- 加入子菜单(在第一层菜单下面加入) FOR i=0 TO 3 FOR j=1 TO 4 INSERT INTO &lcTableFuncList (nKey,nParent,cDesc,cCommand) VALUES (100+i*10+j,10+i,"子项1-" + ; ALLTRIM(STR (i+1)) + "-" + ALLTRIM(STR(j)),; "MESSAGEBOX('" + "子项1-" + ALLTRIM(STR(i+1)) + "-" + ALLTRIM(STR(j)) + "')" ) NEXT NEXT *-- 设置某些项目不能使用(随机将10个菜单项目设置为禁止) FOR i=1 TO 10 j = INT (RAND() * RECCOUNT()) IF j>0 GOTO j REPLACE lEnabled WITH .F. ENDIF ENDFOR ELSE *-- 打开本地的功能表 IF !USED(lcTableFuncList) USE Common\data\FuncList ALIAS &lcTableFuncList SHARED IN 0 ENDIF ENDIF *-- 变量定义 LOCAL lcMenuName,lcMenuDesc LOCAL lcPopMenu,lcSubPopMenu,lcDoCommand,lcSkipFor LOCAL lnRecNo *-- 初始 RELEASE POPUP mymenu0 extended SET SYSMENU TO SET SYSMENU AUTOMATIC *-- 设置顶层菜单 DEFINE PAD _SysTopMenu OF _MSYSMENU PROMPT "文件(\<F)" ON PAD _SysTopMenu OF _MSYSMENU ACTIVATE POPUP _SysPopMenu DEFINE POPUP _SysPopMenu MARGIN RELATIVE DEFINE BAR 1 OF _SysPopMenu PROMPT "退出 (\<X)" ON SELECTION BAR 1 OF _SysPopMenu set sysmenu to default *-- 动态菜单===== *-- 设置顶层菜单项 SELECT DISTINCT nKey,cDesc FROM &lcTableFuncList WHERE nParent = 0 ORDER BY nKey INTO CURSOR temp_TopItem SCAN * 菜单名称 lcMenuName = "_TopMenu" + ALLTRIM(STR(nKey)) * 菜单显示名 lcMenuDesc = ALLTRIM(cDesc) && + "(\<" + ALLTRIM(STR(RECNO())) + ")" * 顶层菜单弹出的菜单项的菜单名 lcPopMenu = "_PopMenu" + ALLTRIM(STR(nKey)) * 定义顶层菜单项 DEFINE PAD &lcMenuName OF _MSYSMENU PROMPT lcMenuDesc * 设置顶层菜单项点击时弹出子菜单 ON PAD &lcMenuName OF _MSYSMENU ACTIVATE POPUP &lcPopMenu ENDSCAN USE IN temp_TopItem *-- 定义所有的popup菜单以及所有的子菜单项 SELECT nParent FROM &lcTableFuncList GROUP BY nParent WHERE nParent > 0 INTO CURSOR temp_Popup * temp_Popup 临时表是所有需要弹出子菜单的菜单项列表 SCAN * 记下当前的记录号 lnRecNo = RECNO() * 弹出菜单名 lcPopMenu = "_PopMenu" + ALLTRIM(STR(nParent)) * 定义弹出菜单 DEFINE POPUP &lcPopMenu MARGIN RELATIVE * 查询当前弹出菜单下面所有的子菜单项 SELECT DISTINCT nKey,cDesc,cCommand,lEnabled FROM &lcTableFuncList WHERE nParent = temp_Popup.nParent ORDER BY nKey INTO CURSOR temp_MenuItem SCAN * 菜单项名(顺序编号) lcMenuBar = ALLTRIM(STR(RECNO())) * 菜单项显示名 lcMenuDesc = ALLTRIM(cDesc) * 菜单项执行的命令 lcDoCommand = ALLTRIM(cCommand) * 是否菜单可用 lcSkipFor = IIF(lEnabled,"","Skip") * 如果子菜单含有子菜单,则这个子菜单的子菜单的名称 lcSubPopMenu = "_PopMenu" + ALLTRIM(STR(nKey)) * 定义当前子菜单项 DEFINE BAR &lcMenuBar OF &lcPopMenu PROMPT lcMenuDesc &lcSkipFor * 查询所有弹出菜单表 ,如果找到,表示含有子菜单,找不到则只有单独菜单项 SELECT temp_Popup LOCATE FOR nParent = temp_MenuItem.nKey IF FOUND() *-- 含有子菜单,激活子菜单 ON BAR &lcMenuBar OF &lcPopMenu ACTIVATE POPUP &lcSubPopMenu ELSE *-- 不含有子菜单,运行命令 ON SELECTION BAR &lcMenuBar OF &lcPopMenu &lcDoCommand ENDIF * 回到刚才的记录 SELECT temp_Popup GOTO lnRecNo ENDSCAN USE IN temp_MenuItem ENDSCAN USE IN temp_Popup USE IN &lcTableFuncList *-- 帮助菜单 DEFINE PAD _HelpTopMenu OF _MSYSMENU PROMPT "帮助(\<H)" ON PAD _HelpTopMenu OF _MSYSMENU ACTIVATE POPUP _HelpPopMenu DEFINE POPUP _HelpPopMenu MARGIN RELATIVE DEFINE BAR 1 OF _HelpPopMenu PROMPT "关于(\<A)..." ON SELECTION BAR 1 OF _HelpPopMenu MESSAGEBOX("测试菜单") *-- 菜单结束 RETURN


2005-07-14 18:10



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-22767-1-1.html




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

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