以前的一个用VF编写的老系统生成一个数据格式为dbf的文件,结构如下:姓名 基本工资 奖金 职务津贴 水电费 养老保险 个人所得税
张三 ××× ×× ×× × × 0
李四 ××× ×× ×× × × 0
王五 ××× ×× ×× × × 0
………………为了打印工资条,需将该文件内的数据倒入Excel中,并且有些地方要修改:
增加“本月应付”字段,
本月应付=基本工资+奖金+职务津贴
增加“本月应扣”字段
本月应扣=水电费+养老保险+个人所得税
增加“实发工资”字段
实发工资=本月应付-本月应扣
=(基本工资+奖金+职务津贴)-(水电费+养老保险+个人所得税)但实际上这个VF系统并未对“个人所得税”字段做处理,所以在导出的dbf文件中,每条记录的“个人所得税”字段的值均为0,而个人所得税的算法为:
如果
本月应付-养老保险-1200<0 则该人不用交个人所得税
如果
本月应付-养老保险-1200>0 则该人需交个人所得税,所交的金额为
个人所得税=(本月应付-养老保险-1200)×5%现在我想用VB做个程序,读取这个dbf文件,然后对数据做些处理,再导入Excel表中,Dim cn as new adodb.connection
Dim rs as new adodb.recordset
Dim strconn as string
strconn=”…………………………”
Cn.open strconn
Dim sql as string
Sql=”Select 姓名,基本工资,奖金,职务津贴, 基本工资+奖金+职务津贴 as 本月应付, 水电费,养老保险,个人所得税, 水电费+养老保险+个人所得税 as 本月应付, 基本工资+奖金+职务津贴-水电费-养老保险-个人所得税 as 实资应发 from money.dbf”
Rs.cursorlocation=adUseClient
Rs.open sql,cn,adOpenKeyset,adLockPessimistic这样可以生成一个RecordSet,但是尚未对个人所得税做处理,请教接下来我该怎么做,查了书,知道可以用Updata……Set……进行处理,但是不知道语法该如何写。或者如果有更好的思路也行,但是需保持原数据文件不变,即money.dbf的内容不能变。(我不想用ADO的rs.update进行逐条更新,而且我有试过,不知道为什么老提示无法更新。)
SET 字段名=值
WHERE (……)
数据的处理可以用SQL-SERVER的数据导入和导出功能
建议用SQL-SERVER写存储过程
用ADO的COMMAND命令或用RECORDSET对象调用SQL的存储过程。采用分层开发,代码可以少写不少!
但是能不能帮我把这个SQL语句写出来呢,我知道是用Update…Set…Where…,可是Updata后面的表名该填什么呢?不可能又是money.dbf的文件名吧?
把dbf导入Excel,然后在VB中引用Excel对象模型直接在Excel中加入要添加的字段,并计算值。
另外, 在FOXPRO中, 支持
SELECT IIF(本月应付-养老保险)>1200,(本月应付-养老保险-1200)*0.05 ,0) AS 个人所得税 FROM money.dbf 的写法没试过在VB中能否这么写,楼主可以试试
其实我最初的想法是,所有的字段和应当处理的数据通通在生成的RecordSet这张逻辑表中进行处理,然后直接倒入Excel中就可以用了,可是现在对“个人所得税”处理束手无策。