BassamKassem Ответов: 2

У меня возникла проблема после переноса моей базы данных mdb в accdb с помощью MS access


При попытке использовать мой VB.Net-приложения для подключения в accdb файл, который был изначально конвертирован из MDB с помощью MS доступ это приложение, однако, дал мне нераспознанный формат базы данных при движении задним ходом действий и использовать исходный файл MDB он работает нормально также перенесенные accdb это работает нормально в MS доступа

Что я уже пробовал:

Private Sub FillCustDataGrid()
    Try
        Dim sqlQRY As String
        sqlQRY = "Select * From Customers WHERE DateAdded >= #" + Today + "#"
        Dim da As OleDbDataAdapter
        Dim ds As DataSet = New DataSet
        da = New OleDbDataAdapter(sqlQRY, cnnOLEDB)
        Dim cb As OleDbCommandBuilder = New OleDbCommandBuilder(da)
        da.Fill(ds, "Customers")
        DataGridViewCustomer.DataSource = ds
        DataGridViewCustomer.DataMember = "Customers"
        lbl_RowCount.Text = DataGridViewCustomer.RowCount
        Dim row As Integer
        If DataGridViewCustomer.RowCount > 0 Then
            row = DataGridViewCustomer.FirstDisplayedCell.RowIndex
            DataGridViewCustomer.Rows(row).Selected = True
            DataGridViewCustomer.Sort(DataGridViewCustomer.Columns(6), ListSortDirection.Ascending)
            If RowIndex_Cust_TXT.Text = vbNullString Then
                Exit Sub
            Else
                Me.DataGridViewCustomer.ClearSelection()
                Me.DataGridViewCustomer.Rows(RowIndex_Cust_TXT.Text).Selected = True
                Me.DataGridViewCustomer.FirstDisplayedScrollingRowIndex = RowIndex_Cust_TXT.Text
            End If
        Else
            row = 0
        End If
    Catch ex As OleDbException
        MessageBox.Show(ex.Message)
    End Try
End Sub

Richard Deeming

sqlQRY = "Select * From Customers WHERE DateAdded >= #" + Today + "#"

Не делай этого так!

В данный конкретный случай, так как параметр является датой, вы вероятно это сойдет тебе с рук. Но использование конкатенации строк для построения запросов к базе данных может привести и приведет к SQL-инъекция[^] факторы уязвимости.

Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов | OWASP[^]

Const sqlQRY As String = "Select * From Customers WHERE DateAdded >= ?"
Dim da As New OleDbDataAdapter(sqlQRY, cnnOLEDB)
da.SelectCommand.Parameters.AddWithValue("@p0", Today)

2 Ответов

Рейтинг:
8

Maciej Los

В дополнение к решению №1 по Ричард Маккатчан[^] вам нужно будет изменить строку подключения. Видеть: Строки подключения доступа - ConnectionStrings.com[^]


BassamKassem

ваше решение работает с некоторыми пользователями, у которых есть Microsoft office 32bit, а для тех, у кого есть 64, оно дало им ошибку "поставщик microsoft.ace.oledb.12.0 не зарегистрирован на локальной машине"

и проблема в том, что это приложение добавляется в общую папку с несколькими пользователями, у некоторых есть MS office 32, а у других-64-битная версия . так что любая помощь в этом, чтобы сделать его универсальным со всеми видами версий

Рейтинг:
20

Richard MacCutchan

Скорее всего вам потребуется обновить систему до последней версии Access DB engine: Загрузите распространяемый пакет Microsoft Access Database Engine 2016 из официального центра загрузки Microsoft[^].


Maciej Los

5ed!