0

我真的坚持一个看似简单的陈述。

我正在处理 DBF 表。当我在名为“DBF Viewer 2000”的程序中打开该文件时,它指出该文件是“FoxBase+/dBASE III PLUSE,无备忘录”。

如果我运行这个 VB.NET 代码


        Dim ConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & opt.path & "\" & ";Extended Properties=dBase III;"
        Dim oledbAdapterIns As New OleDbDataAdapter()
        Dim InsConnection As New OleDbConnection(ConnectionString)
        oledbAdapterIns = New OleDbDataAdapter()
        InsConnection = New OleDbConnection(ConnectionString)
        Try
            InsConnection.Open()
            Dim s As String
            s = "UPDATE LIBRIAZ SET LIBRIAZ.ULTNUM=6 WHERE LIBRIAZ.REGISTRO='CW' AND LIBRIAZ.ANNO='2011' AND LIBRIAZ.CHIAVE='ORD_REG'"
            oledbAdapterIns.InsertCommand = New OleDbCommand(s, InsConnection)
            Dim rows As Integer = oledbAdapterIns.InsertCommand.ExecuteNonQuery()
        Catch ex As Exception
            Debug.Writeline(ex.Message)
        End Try
        oledbAdapterIns.Dispose()
        InsConnection.Dispose()

它运行没有错误但没有更新表。

现在奇怪了:如果我删除三个条件之一

LIBRIAZ.REGISTRO='CW' AND LIBRIAZ.ANNO='2011' AND LIBRIAZ.CHIAVE='ORD_REG'
例如

LIBRIAZ.ANNO='2011' AND LIBRIAZ.CHIAVE='ORD_REG'
UPDATE 有效,将 LIBRIAZ.ULTNUM 设置为 6

这不是我删除哪个条件的问题,因为删除其中一个就足以使 UPDATE 工作。

这几天我试图弄清楚为什么这种行为......现在我很绝望。

有人有线索吗?

4

1 回答 1

0

打动我的第一件事是您对“没有备忘录”的第一条评论。当一个 dbf 文件有一个备注字段时(就像其他 SQL 中的一个 blob 来存储更大的非标准数据元素,如嵌入式图片、Excel 文件、XML 或其他)。文件“集”将是这样的

YourTable.dbf  (main table)
YourTable.cdx  (index file associated with just this table)
YourTable.fpt  (memo file associated with just this table)

主 .dbf 有一个文件指针系统,它是 .FPT 文件中存储其内容的字节偏移量(如果适用)。所以,我会先找到丢失/损坏的 .fpt 文件。

接下来,在您的更新语句中,由于您只进行直接更新而不是基于另一个表的相关更新,因此您不需要对每个字段进行别名...尝试剥离到...

s = "UPDATE LIBRIAZ SET ULTNUM = 6 WHERE REGISTRO='CW' AND ANNO='2011' AND CHIAVE='ORD_REG'"               
于 2011-01-30T12:40:06.437 回答