这里有一个例子:
http://expert.csdn.net/Expert/topic/2323/2323708.xml?temp=.2692224

解决方案 »

  1.   

    还是建议用专门的控件来做.
    推荐vsstring控件.
      

  2.   

    vsstring控件是什么控件,如果不大的话,帮个忙发到我的信箱[email protected]
      

  3.   

    我要存到表中的计算公式也是可变的.
    那有vsstring控件呀?他具体是干什么用的呀?
      

  4.   

    呵呵这个简单,做个过程就可以了。举例:declare @公式 varchar(100)
    set @公式='((A+B)*C)/D'create table 你的表(id int,name varchar(10),value int)
    insert 你的表 values(1,  'A',   20)
    insert 你的表 values(2,  'B' ,  10)
    insert 你的表 values(3,  'C'  , 5)
    insert 你的表 values(4,  'D'   ,15)select @公式=replace(@公式,name,value) from 你的表exec('select '+@公式+' 结果')go
    drop table 你的表
    /*
    结果          
    ----------- 
    10
    */
      

  5.   

    大力的方法确实不错,楼主可以将它做成存储过程,这样就可以在VB中直接调用了.create table 你的表(id int,name varchar(10),value int)
    insert 你的表 values(1,  'A',   20)
    insert 你的表 values(2,  'B' ,  10)
    insert 你的表 values(3,  'C'  , 5)
    insert 你的表 values(4,  'D'   ,15)go
    --创建计算的函数
    create proc p_calc
    @公式 nvarchar(4000)
    as
    declare @re decimal(38,8)
    select @公式=replace(@公式,name,value) from 你的表
    set @公式='select @re='+@公式
    exec sp_executesql @公式,N'@re decimal(38,8) out',@re out
    return(@re)
    go--调用存储过程得到结果
    declare @re decimal(38,8)
    exec @re=p_calc '((A+B)*C)/D'
    select '计算结果'=@re--删除测试环境
    drop table 你的表
    drop proc p_calc
      

  6.   

    create proc p_calc
    @公式 varchar(4000)
    as
    declare @re decimal(38,8)
    select @公式=replace(@公式,name,value) from 你的表
    exec(@公式)
    go---调用:
    txtSQL = "exec 过程 '((A+B)*C)/D'"
    with ar_tmp
        if .state=adstateopen then .close
        .open txtSQL,ac_tmp,adopenkeyset,adlockreadonly
    end withif ar_tmp.recordcount>0 then
        text.text=ar_tmp!名称 
    else
        text.text=""
    endif
    ar_tmp.close
      

  7.   

    为了方便在VB中调用上面的存储过程,可以将存储过程设计为
    --创建计算的函数
    create proc p_calc
    @公式 nvarchar(4000),
    @re decimal(38,8) output
    as
    select @公式=replace(@公式,name,value) from 你的表
    set @公式='select @re='+@公式
    exec sp_executesql @公式,N'@re decimal(38,8) out',@re out
    return(@re)
    go'在VB中调用的例子:function f_calc(byval 公式$)
        Dim iCmd As New ADODB.Command
        With iCmd
            .ActiveConnection = "数据库连接字符串"
            .CommandType = adCmdStoredProc
            .CommandText = "p_calc"
            .Parameters.Refresh
            .Parameters("@公式") = 公式
            .Execute
            f_calc=.Parameters("@re")
        end with
    end function
      

  8.   

    大力还是快我一步,今天中午回去的时候想到的办法,与大力的一致.提醒楼主使用的时候注意几个问题:
    1.项目名称不要包含()*/+-之类的符号.
    2.项目名称之间不要有包含关系.
      例如:有项目名称A和AA,就会导致大力的处理方法失效.对于第二个问题,可以通过修改存储过程来避免,第一个问题只能规定项目名称中不能包含特殊的字符.--为避免上面提到的第二个问题,可以将存储过程修改如下:
    --创建计算的过程
    create proc p_calc
    @公式 nvarchar(4000),
    @re decimal(38,8) output
    as
    select @公式=replace(@公式,name,value) from 你的表 order by name desc --加上排序,先替换项目最长的.
    set @公式='select @re='+@公式
    exec sp_executesql @公式,N'@re decimal(38,8) out',@re out
    return(@re)
    go