Странное поведение с оператором SQL UPDATE для DBF - PullRequest
0 голосов
/ 29 января 2011

Я действительно застрял на кажущемся простом утверждении.

Я работаю над таблицей DBF.Когда я открываю файл в программе под названием «DBF Viewer 2000», он заявляет, что файл «FoxBase + / dBASE III PLUSE, нет памятки».

Если я запускаю этот код VB.NET

<code>
        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()

выполняется без ошибок, НО не обновляет таблицу.

Теперь возникает странное явление: если я уберу одно из трех условий

<code>LIBRIAZ.REGISTRO='CW' AND LIBRIAZ.ANNO='2011' AND LIBRIAZ.CHIAVE='ORD_REG'
например

<code>LIBRIAZ.ANNO='2011' AND LIBRIAZ.CHIAVE='ORD_REG'
ОБНОВЛЕНИЕ работает, устанавливая LIBRIAZ.ULTNUM на 6

Не важно, какое условие я удаляю, потому что достаточно удалить одно из них, чтобы получитьОБНОВЛЕНИЕ работает.

Это дни, когда я пытаюсь понять, почему это поведение ... теперь я довольно отчаялся.

У кого-нибудь есть подсказка?

1 Ответ

0 голосов
/ 30 января 2011

Первое, что меня поразило, это твой первый комментарий о "нет заметки". Если в файле dbf есть поле memo (например, BLOB-объект в другом SQL для хранения больших нестандартных элементов данных, таких как встроенные изображения, файлы 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.

Далее, в вашем заявлении об обновлении, поскольку вы выполняете только прямое обновление, а не коррелированное обновление на основе другой таблицы, вам не нужно указывать ALIAS для каждого поля ... Попробуйте сократить до ...

s = "UPDATE LIBRIAZ SET ULTNUM = 6 WHERE REGISTRO='CW' AND ANNO='2011' AND CHIAVE='ORD_REG'"               
...