Member 13416420 Ответов: 1

Подключение приложения VB form к базе данных accses, 3 из 4 раз это работает, что я делаю не так?


Я подключаю программу VB Form к базе данных access. 3 из 4 таблиц в базе данных подключены и работают в своих собственных datagridviews, но последняя не подключается должным образом. код для всех соединений один и тот же.

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

поэтому я проследил проблему с выходами msgbox до того момента, когда я заполняю свои переменные.
настройки.DA. заполняются чуть выше закомментированных строк. если я закомментирую строку заполнения, программа запустится и выдаст оба сообщения loc, но с ее активностью код застрянет и не будет продолжать работу, а вместо этого игнорирует остальную часть кода, сохраняя базу данных открытой.
Imports System.Data.OleDb
Public Class Admin

    Dim provider As String = ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source =")
    Dim dataFile As String = ("Filelocaty.mdb")
    Dim connString As String = provider & dataFile
    Dim myConnection As OleDbConnection = New OleDbConnection
    Dim con As OleDbConnection = New OleDbConnection(connString)

    Dim infoDA As OleDbDataAdapter
    Dim infoDS As DataSet
    Dim cmd1 As New OleDbCommand("SELECT * FROM Info", con)

    Dim RoomDA As OleDbDataAdapter
    Dim RoomDS As DataSet
    Dim cmd2 As New OleDbCommand("SELECT * FROM Rooms", con)

    Dim userDA As OleDbDataAdapter
    Dim userDS As DataSet
    Dim cmd3 As New OleDbCommand("SELECT * FROM Logins", con)

    Dim settingDA As OleDbDataAdapter
    Dim settingDS As DataSet
    Dim cmd4 As New OleDbCommand("SELECT * FROM General", con)

    Private Sub Admin_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        con.Open()

        infoDA = New OleDbDataAdapter(cmd1)
        Dim builder1 As OleDbCommandBuilder = New OleDbCommandBuilder(infoDA)
        infoDS = New DataSet
        Me.infoDA.Fill(infoDS, "Info")
        InfoDG.DataSource = infoDS.Tables("Info").DefaultView
        InfoDG.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill


        RoomDA = New OleDbDataAdapter(cmd2)
        Dim builder2 As OleDbCommandBuilder = New OleDbCommandBuilder(RoomDA)
        RoomDS = New DataSet
        Me.RoomDA.Fill(RoomDS, "Rooms")
        RoomDG.DataSource = RoomDS.Tables("Rooms").DefaultView
        RoomDG.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill

        userDA = New OleDbDataAdapter(cmd3)
        Dim builder3 As OleDbCommandBuilder = New OleDbCommandBuilder(userDA)
        userDS = New DataSet
        Me.userDA.Fill(userDS, "Logins")
        UserDG.DataSource = userDS.Tables("Logins").DefaultView
        UserDG.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill

        settingDA = New OleDbDataAdapter(cmd4)
        Dim builder4 As OleDbCommandBuilder = New OleDbCommandBuilder(settingDA)
        settingDS = New DataSet
        MsgBox("Loc A")
        settingDA.Fill(settingDS, "General")
        'SettingsDG.DataSource = settingDS.Tables("General").DefaultView
        'SettingsDG.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
        MsgBox("Loc b")
        con.Close()
    End Sub


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

eddieangel

В зависимости от того, как генерируется ваш набор данных, это может быть плюрализация General как Generals. Проверьте это. Кроме того, никогда не бывает плохой идеей использовать разделители вокруг имен таблиц. [Общие сведения] [номер] [информация] и тому подобное. Неужели все эти сбои происходят на одном и том же компьютере?

eddieangel

Происходит ли сбой на том же компьютере? Общие сведения могут вызвать у вас проблемы, вы можете рассмотреть возможность использования разделителей в именах таблиц. [Общие сведения] [Информация] [номера] и т. д...

Кроме того, что-то, чего следует опасаться для вашего будущего развития, заключается в том, что водители ACE и Jet действительно шелушатся. Каждый раз, когда вы можете использовать драйвер, который не привязан к чему-то установленному на машине, тем лучше для вас.

Member 13416420

Это сделало свое дело!

Я не уверен, что вы имеете в виду с драйверами, если вы можете связать меня со ссылкой, которая поможет!

Member 13416420

Это сделало свое дело!

Я не уверен, что вы имеете в виду с драйверами, если вы можете связать меня со ссылкой, которая поможет!

eddieangel

Я не уверен, что смогу найти ссылку сразу, но я могу дать вам краткое изложение.

Каждая версия Office поставляется с dll (проще говоря, драйвером), который позволяет программам получать доступ к своим документам через общий интерфейс. До 2000 года драйвер OLEDB (то есть формат, в котором хранятся данные Access и Excel) использовался поставщиком JETDB. Примерно через 2000 лет они постепенно включили драйвер ACEDB, на который вы ссылаетесь в приведенной выше строке подключения.

Проблема в том, что эти драйверы требуют, чтобы Office или, по крайней мере, пакет совместимости Office был установлен на целевом компьютере. Это, вероятно, не проблема, так как вы получаете доступ (я предполагаю) к локальной базе данных доступа. Однако при развертывании на разных машинах с разными версиями Office вы можете обнаружить, что ваша строка подключения вызовет проблемы. Скорее всего, вы получите ошибку при подключении.Открытая линия. Это особенно часто встречается, когда у вас есть несколько компьютеров с различными архитектурами процессоров (32-битные и 64-битные).

Это не то, чего нужно бояться, просто нужно знать, если вы начнете сталкиваться с ошибками при развертывании на разных компьютерах.

Member 13416420

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

1 Ответов

Рейтинг:
0

Dave Kreskowiak

Я вижу еще одну проблему. Вы повторяете один и тот же код снова и снова. Это Подсказка №1 (tm), что вам нужно поместить такой код в свой собственный метод и вызвать его оттуда, где он вам нужен.


Member 13416420

после того как я все заработаю должным образом, я буду конденсировать свой код в конкретные блоки модулей для циклического приложения, но поскольку я добавляю и удаляю функции, мне нравится, чтобы все это было выложено на этапах проектирования. Но да, это очень веский момент, кто-то мог бы также указать на мое отсутствие использования try catch, но мне нравится завершать это, когда я просматриваю и переиздаю свой код.

Dave Kreskowiak

Это мило и все такое, но это просто добавляет больше возможностей для введения ошибок, вроде того, с чем вы сталкиваетесь сейчас, когда один запрос не работает, а другие работают. Сжатие кода теперь помогает сузить проблему между кодом, выполняющим запрос, и самим запросом.