回 帖 发 新 帖 刷新版面

主题:书中原代码问题

This.Parent.oleProgressBar.Visible=.T.  &&显示进度条
IF USED("tblTallyTableBak")  &&关闭备份表
    USE IN tblTallyTableBak
ENDIF 
Thisform.Refresh 
This.Parent.oleProgressBar.Max=4
SELECT &cCurrentTallyName          &&选择当前账套,该变量在frmLogin表单中定义
COPY TO tblTallyTableBak FOR NOT DELETED() WITH CDX  &&备份当前数据表
USE IN &cCurrentTallyName          &&关闭表
USE tblTallyTableBak ALIAS tblTallyTableBak IN 0
**根据工资项目列表生成新账套格式
DROP TABLE &cCurrentTallyName
CREATE TABLE &cCurrentTallyName(员工编号 N(10) UNIQUE,员工姓名 C(10),所属部门 C(20))
SELECT tblSalaryItem
nRecn=RECNO()       &&保存当前记录位置
SCAN 
    cFieldName=ALLTRIM(tblSalaryItem.fldItem)
    ALTER TABLE &cCurrentTallyName ADD &cFieldName N(15,2)
ENDSCAN 
ALTER TABLE &cCurrentTallyName ADD Py C(20)   &&加入存放员工姓名拼音的字段
This.Parent.oleProgressBar.Value=1
**将原来账套中的数据导入到新表中
SELECT &cCurrentTallyName
APPEND FROM tblPerson FIELDS 员工编号,员工姓名,所属部门  &&从人员信息表中将最新人员数据添加到账套中
REPLACE Py WITH ChrToPy(ALLTRIM(员工姓名)) ALL &&生成拼音码
This.Parent.oleProgressBar.Value=2
SELECT tblSalaryItem
SCAN 
    cField=tblSalaryItem.fldItem
    cOldField=tblSalaryItem.fldBackupItem
    SELECT tblTallyTableBak
    SCAN 
        UPDATE &cCurrentTallyName SET &cCurrentTallyName..&cField=tblTallyTableBak.&cOldField WHERE &cCurrentTallyName..员工编号=tblTallyTableBak.员工编号是         &&有问题!!!!!!!!!!!
    ENDSCAN 
ENDSCAN 
This.Parent.oleProgressBar.Value=3
**重新设置表、按钮等
SELECT &cCurrentTallyName
SET DELETED ON 
GO TOP 
This.Parent.oleProgressBar.Value=4
=MESSAGEBOX("当前账套的工资项目已经正确存储完毕!",0+64,"提示")
This.Parent.oleProgressBar.Visible=.F.    &&隐藏进度条
This.Enabled=.F.     &&按钮重新恢复为禁止状态
SELECT tblSalaryItem
GO nRecn             &&移动记录到先前的保存位置
Thisform.Refresh 
This.Parent.grdSalaryItem.SetFocus 
        
        

回复列表 (共8个回复)

沙发

可能是宏替换的问题,关于这个替换,已经讨论很多次了,你搜索下论坛,大家都认为这种场合不要使用它。

全部改成( )表达式。
SELECT &cCurrentTallyName---〉SELECT (cCurrentTallyName)
.......
.......

板凳

SCAN 
UPDATE &cCurrentTallyName SET &cCurrentTallyName..&cField=tblTallyTableBak.&cOldField WHERE &cCurrentTallyName..员工编号=tblTallyTableBak.员工编号是         &&有问题!!!!!!!!!!!
ENDSCAN 
这段代码是什么意思呀?请帮忙解释一下!

3 楼

可能是宏替换的问题,关于这个替换,已经讨论很多次了,你搜索下论坛,大家都认为这种场合不要使用它。

全部改成( )表达式。
SELECT &cCurrentTallyName---〉SELECT (cCurrentTallyName)
这样改不行呀

4 楼

问题已经找到了。运行也正常,但用宏替换真的危险吗?

5 楼

应该这样写:
cmd='UPDATE '+cCurrentTallyName+' SET '+cCurrentTallyName+"."+cField+'='+tblTallyTableBak+'.'+cOldField+' WHERE '+cCurrentTallyName+‘.员工编号='+tblTallyTableBak'+'.员工编号'

&cmd

6 楼

一个表达式中最好不要出现两个宏替换,这在 vfp 是有说明的!

7 楼

实例只是给你一种编程思路的提示,对于每条命令还需去深刻领会,他每个参数的运用!
和标准语法,作用范围及条件。

ok!
祝你成功~

8 楼

[quote]问题已经找到了。运行也正常,但用宏替换真的危险吗?[/quote]

不是“宏替换真的危险”。
而是:

表达式写对了,就没有什么危险!

写不对,什么语句也会有处错误危险的!

我来回复

您尚未登录,请登录后再回复。点此登录或注册