具体代码如下:(在一个库中有一个表tjtz0,在下面的程序当中用SQL语句CREATE了一个新表tjtz1,要做的是 把表tjtz0中所有字段的内容全都导入到表tjtz1中(同时在表tjtz1中新增了一个“总计”求和字段),但总是出现一个错误:我下面的程序运行了之后,表tjtz1中的前两个字段(单位代码,单位名称)的内容没有,打印查看时 都为“NULL”,可是我原来的表tjtz0中的这两个字段都有内容。其他的倒没什么错误,这是为什么呀?向高手请教~)
…………………………
Dim cn As New ADODB.Connection
Dim cm As New ADODB.Command
Dim i As Integer
Dim j As Integer
Dim s As IntegerPrivate Sub Command1_Click()
    s = 0
    On Error Resume Next
    cn.ConnectionString = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;PassWord=sa;Initial Catalog=财务管理"
    cn.Open
    
    Set cm.ActiveConnection = cn
    cm.CommandText = "create table tjtz1(单位代码 char, 单位名称 char,一月份上解经费 decimal,二月份上解经费 decimal,三月份上解经费 decimal,四月份上解经费 decimal,五月份上解经费 decimal,六月份上解经费 decimal,七月份上解经费 decimal,八月份上解经费 decimal,九月份上解经费 decimal,十月份上解经费 decimal,十一月份上解经费 decimal,十二月份上解经费 decimal,总计 decimal)"
    On Error Resume Next
    cm.Execute
    
    Adodc1.ConnectionString = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;PassWord=sa;Initial Catalog=财务管理"
    Adodc2.ConnectionString = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;PassWord=sa;Initial Catalog=财务管理"
    
    Adodc2.RecordSource = "select * from tjtz1"
    Adodc2.Recordset.Delete
    Adodc2.Refresh
    
    Adodc1.RecordSource = "select * from tjtz0"
    Adodc1.Refresh
    Adodc1.Recordset.MoveFirst
    
    Do While Adodc1.Recordset.EOF <> True
        Adodc2.Recordset.AddNew
        For j = 0 To 13
            Adodc2.Recordset.Fields(j).Value = Adodc1.Recordset.Fields(j).Value
        Next
        
        For i = 2 To 13
            s = s + Adodc2.Recordset.Fields(i).Value
        Next i
        Adodc2.Recordset.Fields(14).Value = s
        Adodc2.Recordset.Update
        Adodc1.Recordset.MoveNext
        s = 0
    Loop
    
    Adodc2.RecordSource = "select * from tjtz1"
    Adodc2.Refresh
    Set DataGrid1.DataSource = Adodc2
    Set DataReport1.DataSource = Adodc2
    Command1.Enabled = False
End Sub…………………………………………

解决方案 »

  1.   

    '这样试试
    dim strsql as string
    cn.execute "truncate table tjtz1"     '清空tjtz1表中的记录
    strsql=" insert into tjtz1(b1,b2,b3,b4) select a1,a2,a3,a1+a2+a3 as a4 from tjtz0"
    cn.execute strsql
      

  2.   

    创建表时 单位代码 char, 单位名称 char 这里用CHAR只有1个字长
    应该改为char(n) n为长度
    去找一下SQL-Server的帮助
      

  3.   

    十分感谢两位的知道,不过...楼上的又让我想到了一个问题..
    我在SQL server2000建表的时候 设置"*月份上解经费"的时候 把它设置为"decimal"并且给它设置了允许有两位的小数部分...那在我的这个程序中 又如何用CREATE语句把 "*月份上解经费" 的两位小数带上啊
    先谢过...
      

  4.   

    For i = 2 To 13
                s = s + Adodc2.Recordset.Fields(i).Value
            Next i     dim strsql as string
         strsql=" insert into tjtz1 select *," & s & " from tjtz0"
         cn.execute strsql
      

  5.   

    decimal(p,s)
    定点精度和小数位数。使用最大精度时,有效值从 - 10^38 +1 到 10^38 - 1。
    p(精度)
    指定小数点左边和右边可以存储的十进制数字的最大个数。精度必须是从 1 到最大精度之间的值。最大精度为 38。
    s(小数位数)
    指定小数点右边可以存储的十进制数字的最大个数。小数位数必须是从 0 到 p 之间的值。默认小数位数是 0,因而 0 <= s <= p。最大存储大小基于精度而变化。
      

  6.   

    cm.CommandText = "create table tjtz1(单位代码 char, 单位名称 char,一月份上解经费 decimal,二月份上解经费 decimal,三月份上解经费 decimal,四月份上解经费 decimal,五月份上解经费 decimal,六月份上解经费 decimal,七月份上解经费 decimal,八月份上解经费 decimal,九月份上解经费 decimal,十月份上解经费 decimal,十一月份上解经费 decimal,十二月份上解经费 decimal,总计 decimal)"我在我原来的程序上加上了 ……"一月份上解经费 decimal(18,2),"……
    不过问题还存在啊。。tjtz0字段中的小数部分 还是转换不过来呀?我这么写是哪个地方出了问题呀?