以前的一个用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进行逐条更新,而且我有试过,不知道为什么老提示无法更新。)

解决方案 »

  1.   

    UPDATE 表名
    SET 字段名=值
    WHERE (……)
    数据的处理可以用SQL-SERVER的数据导入和导出功能
    建议用SQL-SERVER写存储过程
    用ADO的COMMAND命令或用RECORDSET对象调用SQL的存储过程。采用分层开发,代码可以少写不少!
      

  2.   

    谢谢回复。
    但是能不能帮我把这个SQL语句写出来呢,我知道是用Update…Set…Where…,可是Updata后面的表名该填什么呢?不可能又是money.dbf的文件名吧?
      

  3.   

    我是这么想的:
    把dbf导入Excel,然后在VB中引用Excel对象模型直接在Excel中加入要添加的字段,并计算值。
      

  4.   

    VF这样的数据库帮不了你,SQL Server数据库的话就很容易
      

  5.   

    如果用用UPDATE 的SQL语句 money.dbf 就会改变同意  MicLee521(华仔) 的做法
    另外, 在FOXPRO中, 支持
    SELECT IIF(本月应付-养老保险)>1200,(本月应付-养老保险-1200)*0.05 ,0) AS 个人所得税 FROM money.dbf 的写法没试过在VB中能否这么写,楼主可以试试
      

  6.   

    这个问题在Spread里显得异常简单
      

  7.   


    其实我最初的想法是,所有的字段和应当处理的数据通通在生成的RecordSet这张逻辑表中进行处理,然后直接倒入Excel中就可以用了,可是现在对“个人所得税”处理束手无策。
      

  8.   

    直接控制excel然后运算和操作!
      

  9.   

    在SQL数据库里比较容易,来学习学习。