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