问题1:可以使用MS的ScriptControl,其中有支持表达式计算的方法。
问题2:检查你的报表设计,看看有没有什么格式,分页上的错误。
问题3: 很多网站上都有这些东西的源程序,查查就可以知道。但是恐怕没有详细的中文注释。

解决方案 »

  1.   

    在窗口中创建text1,text2和command1,代码如下:
    Private Sub Command1_Click()
    Dim part(100) As String
    expression = Text1.Text
    lenght = Len(expression)
    For z = 1 To lenght
        part(z) = Mid(expression, z, 1)
    Next z
    Do Until lenght = 1
        For z = 1 To lenght
            If part(z) = "^" And part(z - 1) <> "(" And part(z - 1) <> ")" And part(z + 1) <> "(" And part(z + 1) <> ")" Then
                part(z - 1) = Str(Val(part(z - 1)) ^ Val(part(z + 1)))
                part(z - 1) = Mid(part(z - 1), 2, Len(part(z - 1)) - 1)
                For z2 = z To lenght
                    part(z2) = part(z2 + 2)
                Next z2
                lenght = lenght - 2
                z = z - 2
            End If
        Next z
        For z = 1 To lenght
            If part(z) = "*" And part(z - 1) <> "(" And part(z - 1) <> ")" And part(z + 1) <> "(" And part(z + 1) <> ")" Then
                part(z - 1) = Str(Val(part(z - 1)) * Val(part(z + 1)))
                part(z - 1) = Mid(part(z - 1), 2, Len(part(z - 1)) - 1)
                For z2 = z To lenght
                    part(z2) = part(z2 + 2)
                Next z2
                lenght = lenght - 2
                z = z - 2
            End If
        Next z
        For z = 1 To lenght
            If part(z) = "/" And part(z - 1) <> "(" And part(z - 1) <> ")" And part(z + 1) <> "(" And part(z + 1) <> ")" Then
                part(z - 1) = Str(Val(part(z - 1)) / Val(part(z + 1)))
                part(z - 1) = Mid(part(z - 1), 2, Len(part(z - 1)) - 1)
                For z2 = z To lenght
                    part(z2) = part(z2 + 2)
                Next z2
                lenght = lenght - 2
                z = z - 2
            End If
        Next z
        For z = 1 To lenght
            If part(z) = "+" And part(z - 1) <> "(" And part(z - 1) <> ")" And part(z + 1) <> "(" And part(z + 1) <> ")" Then
                part(z - 1) = Str(Val(part(z - 1)) + Val(part(z + 1)))
                part(z - 1) = Mid(part(z - 1), 2, Len(part(z - 1)) - 1)
                For z2 = z To lenght
                    part(z2) = part(z2 + 2)
                Next z2
                lenght = lenght - 2
                z = z - 2
            End If
        Next z
        For z = 1 To lenght
            If part(z) = "-" And part(z - 1) <> "(" And part(z - 1) <> ")" And part(z + 1) <> "(" And part(z + 1) <> ")" Then
                part(z - 1) = Str(Val(part(z - 1)) - Val(part(z + 1)))
                part(z - 1) = Mid(part(z - 1), 2, Len(part(z - 1)) - 1)
                For z2 = z To lenght
                    part(z2) = part(z2 + 2)
                Next z2
                lenght = lenght - 2
                z = z - 2
            End If
        Next z
        For z = 1 To lenght
            If part(z) = "0" Or part(z) = "1" Or part(z) = "2" Or part(z) = "3" Or part(z) = "4" Or part(z) = "5" Or part(z) = "6" Or part(z) = "7" Or part(z) = "8" Or part(z) = "9" Then
                If part(z - 1) = "(" Or part(z + 1) = ")" Then
                    part(z - 1) = part(z)
                    For z2 = z To lenght
                        part(z2) = part(z2 + 2)
                    Next z2
                    lenght = lenght - 2
                    z = z - 2
                End If
            End If
        Next z
    Loop
    Text2.Text = part(1)
    End SubPrivate Sub Command2_Click()
    Text1.Text = Str(8)End SubPrivate Sub Form_Load()
    Text1.Text = ""
    Text2.Text = ""
    End Sub
    该程序能算出+,-,*,/,平方(如果是开方的话,可以化成平方)以及括号。如果你还想计算三角函数或对数,可以按类似的方法。
      

  2.   

    对不起,上次的那个错了,代码如下:
    Private Sub Command1_Click()
    Dim part(100) As String
    expression = Text1.Text
    lenght = Len(expression)
    For z = 1 To lenght
        part(z) = Mid(expression, z, 1)
    Next z
    lebel:
    For z = 1 To lenght - 1
        If (Val(part(z)) <> 0 Or part(z) = "0") And (Val(part(z + 1)) <> 0 Or part(z + 1) = "0") Then
            part(z) = part(z) & part(z + 1)
            For z2 = z + 1 To lenght - 1
                part(z2) = part(z2 + 1)
            Next z2
            lenght = lenght - 1
            GoTo lebel
        End If
    Next z
    Do Until lenght = 1
        For z = 1 To lenght
            If part(z) = "^" And part(z - 1) <> "(" And part(z - 1) <> ")" And part(z + 1) <> "(" And part(z + 1) <> ")" Then
                part(z - 1) = Str(Val(part(z - 1)) ^ Val(part(z + 1)))
                part(z - 1) = Mid(part(z - 1), 2, Len(part(z - 1)) - 1)
                For z2 = z To lenght
                    part(z2) = part(z2 + 2)
                Next z2
                lenght = lenght - 2
                z = z - 2
            End If
        Next z
        For z = 1 To lenght
            If part(z) = "*" And part(z - 1) <> "(" And part(z - 1) <> ")" And part(z + 1) <> "(" And part(z + 1) <> ")" Then
                part(z - 1) = Str(Val(part(z - 1)) * Val(part(z + 1)))
                part(z - 1) = Mid(part(z - 1), 2, Len(part(z - 1)) - 1)
                For z2 = z To lenght
                    part(z2) = part(z2 + 2)
                Next z2
                lenght = lenght - 2
                z = z - 2
            End If
        Next z
        For z = 1 To lenght
            If part(z) = "/" And part(z - 1) <> "(" And part(z - 1) <> ")" And part(z + 1) <> "(" And part(z + 1) <> ")" Then
                part(z - 1) = Str(Val(part(z - 1)) / Val(part(z + 1)))
                part(z - 1) = Mid(part(z - 1), 2, Len(part(z - 1)) - 1)
                For z2 = z To lenght
                    part(z2) = part(z2 + 2)
                Next z2
                lenght = lenght - 2
                z = z - 2
            End If
        Next z
        For z = 1 To lenght
            If part(z) = "+" And part(z - 1) <> "(" And part(z - 1) <> ")" And part(z + 1) <> "(" And part(z + 1) <> ")" Then
                part(z - 1) = Str(Val(part(z - 1)) + Val(part(z + 1)))
                part(z - 1) = Mid(part(z - 1), 2, Len(part(z - 1)) - 1)
                For z2 = z To lenght
                    part(z2) = part(z2 + 2)
                Next z2
                lenght = lenght - 2
                z = z - 2
            End If
        Next z
        For z = 1 To lenght
            If part(z) = "-" And part(z - 1) <> "(" And part(z - 1) <> ")" And part(z + 1) <> "(" And part(z + 1) <> ")" Then
                part(z - 1) = Str(Val(part(z - 1)) - Val(part(z + 1)))
                part(z - 1) = Mid(part(z - 1), 2, Len(part(z - 1)) - 1)
                For z2 = z To lenght
                    part(z2) = part(z2 + 2)
                Next z2
                lenght = lenght - 2
                z = z - 2
            End If
        Next z
        For z = 1 To lenght
            If Val(part(z)) <> 0 Or part(z) = "0" Then
                If part(z - 1) = "(" And part(z + 1) = ")" Then
                    part(z - 1) = part(z)
                    For z2 = z To lenght
                        part(z2) = part(z2 + 2)
                    Next z2
                    lenght = lenght - 2
                    z = z - 2
                End If
            End If
        Next z
    Loop
    Text2.Text = part(1)
    End SubPrivate Sub Form_Load()
    Height = 2300
    Width = 4600
    Text1.Text = ""
    Text2.Text = ""
    End SubPrivate Sub Text1_Click()
    If keyascii = 13 Then Command1_ClickEnd Sub
      

  3.   

    to limengchen:
        厉害厉害,写了这么多,佩服佩服,这段代码是你编的吗????
      

  4.   

    Q1 answer: 最简单的方法是借用 SQL !
    Dim adoConnection As New ADODB.Connection
    'adoConnection.Open "Provider=SQLOLEDB.1;Persist Security Info=False;Server=ServerName;UID=YourUID;PWD=YourPWD;"
    adoConnection.Open "Provider=Microsoft.Jet.OLEDB.3.51;Data Source= "xxx\data\NWind97.mdb;Persist Security Info=False"
    Dim adoRecordset As New ADODB.Recordset
    adoRecordset.Open "select DISTINCT " & "(9+ 1) * 3 / 10 + 1" & " From Tablename", adoConnection 'tablename为任意已有表名,MS SQL 7 可无 " From Tablename "
    msgbox adoRecordset.field.item(0).value
    问题2: 同前
    问题3: 同前
      

  5.   

    Q1 answer: 最简单的方法是借用 SQL !
    Dim adoConnection As New ADODB.Connection
    'adoConnection.Open "Provider=SQLOLEDB.1;Persist Security Info=False;Server=ServerName;UID=YourUID;PWD=YourPWD;"
    adoConnection.Open "Provider=Microsoft.Jet.OLEDB.3.51;Data Source=xxx\data\NWind97.mdb;Persist Security Info=False"
    Dim adoRecordset As New ADODB.Recordset
    adoRecordset.Open "select DISTINCT " & "(9+ 1) * 3 / 10 + 1" & " From Tablename", adoConnection 'tablename为任意已有表名,MS SQL 7 可无 " From Tablename "
    msgbox adoRecordset.field.item(0).value
    问题2: 同前
    问题3: 同前
      

  6.   

    sorry,答错了!
    我要回答的是《各位程序员有抛弃女友或主动离婚的吗?》(http://www.csdn.net/expert/Topic/52960.shtm)
      

  7.   

    第一个问题 :
    引用Msscript.ocx 控件:Private Sub Command1_Click()
    On Error GoTo Errl
    ScriptControl1.Language = "VBScript"MsgBox ScriptControl1.Eval(Text1)Exit Sub
    Errl:
    MsgBox Err.DescriptionEnd Sub
      

  8.   

    to limengchen:
    wokao!好长!
      

  9.   

    Zsx108:感谢网上朋友的支持,可是我不知道怎样给你们分数。