以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  独占式编辑的操作时报错  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=29586)

--  作者:SZDVYE
--  发布时间:2013/3/9 15:42:00
--  独占式编辑的操作时报错

独占式编辑的操作时报错,由于已是在运作的系统,不方便上传文件,狐爸能否指点一下。


我确认“入账报表”是存在的也名称和拼写没有错。


报错内容:


 

错误所在事件:

详细错误信息:

System.Data.OleDb.OleDbException: Microsoft Jet 数据库引擎找不到输入表或查询 \'~TMPCLP入账报表\'确定它是否存在,以及它的名称的拼写是否正确。

   at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)

   at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)

   at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)

   at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)

   at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)

   at System.Data.OleDb.OleDbCommand.ExecuteNonQuery()

   at Foxtable.SQLCommand.ExecuteNonQuery()



录入的代码如下:

 

1、首先给入账报表增加一个字符列,名为"编辑者


2、在项目事件AfterOpenProject设置代码:

\'解锁非正常退出时被锁定的记录
DataTables("入账报表").ReplaceFor("编辑者",Nothing,"编辑者 = \'" & User.Name & "\'")
DataTables("入账报表").Save()
Tables("入账报表").Cols.Remove("编辑者") \'移除编辑者列,避免用户直接修改此列

 

3、将表事件StartEdit代码设置为:

If e.Row("编辑者") = User.Name Then \'如果编辑者是当前用户
    Return
End If
Dim cmd As New SQLCommand
Dim exp As String  = "编辑者 Is Null And [_Identify] = " & e.Row("_Identify")
cmd.CommandText = "Update {入账报表} Set 编辑者 = \'" & User.Name & "\' Where " & exp
If cmd.ExecuteNonQuery = 1 Then
    e.Row("编辑者") = User.Name
Else
    cmd.CommandText = "Select 编辑者 From {入账报表} Where [_Identify] = " & e.Row("_Identify")
    Dim nm As String = cmd.ExecuteScalar
    If nm > "" Then
        MessageBox.show(nm & "正在编辑此行!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
    Else
        MessageBox.show("此行可能已经被删除,无法编辑!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
    End If
    e.Cancel = True \'取消编辑
End If


4、将表事件DataRowAdding代码设置为:

e.DataRow("编辑者") = User.name


5、将表事件BeforSaveDatarow代码设置为:

If e.DataRow.RowState = DataRowState.Added Then \'如果是新增行
    e.DataRow("编辑者") = Nothing
Else
    Dim cmd As New SQLCommand
    Dim exp As String  = "[_Identify] = " & e.DataRow("_Identify")
    cmd.CommandText = "Update {入账报表} Set 编辑者 = Null Where [_Identify] = " & e.DataRow("_Identify")
    If cmd.ExecuteNonQuery = 1 Then
        e.DataRow("编辑者") = Nothing
    End If
End If


--  作者:SZDVYE
--  发布时间:2013/3/9 16:01:00
--  

外部表,设置

 

[此贴子已经被作者于2013-3-10 1:59:32编辑过]