以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]关于ACCESS外部数据源的报错!  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=20300)

--  作者:liguichuan
--  发布时间:2012/6/4 13:08:00
--  [求助]关于ACCESS外部数据源的报错!

有一项目,之前使用的是SQL2008作数据源,可以正常使用,现在想使用ACCESS作为外部数据源,于是修改了数据源名称,但在保存时却出现如下错误:

 
此主题相关图片如下:错误.jpg
按此在新窗口浏览图片

 

请问为什么报错?谢谢!

 

 

不知怎么回事,以下有色彩区域的代码一提交网站就会显示出错,请见下图截图!

 
此主题相关图片如下:显示乱码.jpg
按此在新窗口浏览图片

 

 

 
此主题相关图片如下:数据源.jpg
按此在新窗口浏览图片

此主题相关图片如下:数据源预览.jpg
按此在新窗口浏览图片


 

 

BeforeSaveDataRow事件中代码为:

 

e.DataRow("商品信息录入时间") = Date.Now() \'获取当前系统时间
e.DataRow("商品信息录入员") = Vars("用户名") \'获取当前系统用户


Dim dr As DataRow = e.DataRow
Dim pf As String
If dr.RowState <> DataRowState.Added Then \'如果不是新增行
    Return \'那么返回
Else
    pf = "SPXX"
End If

Dim cmd1 As New SQLCommand
Dim cmd2 As New SQLCommand
Dim Key As Integer
Dim nm As String = e.DataTable.name
\'cmd1.C                    \'设置数据源名称(源使用的SQL2008数据源)
\'cmd2.C                     (源使用的SQL2008数据源)

cmd1.C        \'设置数据源名称(新使用的ACCESS数据源)
cmd2.C         (新使用的ACCESS数据源)

cmd1.commandText = "Select Count(*) From [编号表] Where [前缀] = \'" & pf & "\' And 表名 = \'" & nm & "\'"
If cmd1.ExecuteScalar = 0 Then \'如果编号表不存在前缀的行,那么增加一行
    cmd1.commandtext = "Insert Into 编号表 (表名, 前缀, 顺序号) Values(\'" & nm & "\',\'" & pf & "\',1)"
    cmd1.ExecuteNonQuery  \'用于执行不返回任何值的SQL命令,例如DELETE和UPDATE命令.该方法会返回一个整数,表示受影响的行数.
End If
    cmd1.commandText = "Select [顺序号] From [编号表] Where [前缀] = \'" & pf & "\' And 表名 = \'" & nm & "\'" \'获得后台的顺序号
Do
    Key = cmd1.ExecuteScalar() \'从后台获得顺序号,用于执行返回单个值的命令
    If key < 99999 Then
        cmd2.commandText = "Update [编号表] Set [顺序号] = " & (Key + 1) & " Where [顺序号] = " & Key & " And [前缀] = \'" & pf & "\' And 表名 = \'" & nm & "\'"
        If cmd2.ExecuteNonQuery() > 0 Then \'更新顺序号
            Exit Do \'更新成功则退出循环
        End If
    Else
        cmd2.commandText = "Update [编号表] Set [顺序号] = 1 " \'顺序号计数达到99999时,将顺序号重设为1
        If cmd2.ExecuteNonQuery() > 0 Then \'更新顺序号
            Exit Do \'更新成功则退出循环
        End If
    End If      
Loop
e.DataRow("自动编号") = pf & "-" & Format(Date.now(),"yyyyMMddHHmmss") & "-" & Format(Key,"00000")


[此贴子已经被作者于2012-6-4 13:15:11编辑过]

--  作者:狐狸爸爸
--  发布时间:2012/6/4 18:23:00
--  

注意SQl Server的SQL表达式中,字符和日期用单引号括起来,数值不要用单引号。


--  作者:liguichuan
--  发布时间:2012/6/5 13:36:00
--  
谢谢,昨天下午终于找到原因了,就是有一个ACCESS数据库,本应该把列类型设成整数的,结果一不小必设成了文本型,改过来后终于可以正常了.