Я пытаюсь вставить данные в базу данных Access, используя vb для приложения, которое я создаю. Я был BEATING, что у меня была невидимая стена, пытаясь заставить данные войти в базу данных. Ниже приведен код, ниже я объясню это больше.Тип данных Несоответствие Vb.net Доступ
Private Sub btnSubmitExpense_Click(sender As Object, e As EventArgs) Handles btnSubmitExpense.Click
provider = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source ="
dataFile = "C:\PFADatabase.accdb"
connString = provider & dataFile
myConnection.ConnectionString = connString
myConnection.Open()
Dim str As String
str = "Insert into Expenses ([ExpenseTypeID], [DateOfExpense],[AmountOfExpense]) Values(?,?,?)"
Dim cmd As OleDbCommand = New OleDbCommand(str, myConnection)
cmd.Parameters.Add(New OleDbParameter("ExpenseTypeID", CType(cboCategoryOfExpense.Text, String)))
cmd.Parameters.Add(New OleDbParameter("DateOfExpense", CType(dateOfExpense.Text, String)))
cmd.Parameters.Add(New OleDbParameter("AmountOfExpense", CType(txtAmountOfExpense.Text, String)))
Try
cmd.ExecuteNonQuery()
cmd.Dispose()
myConnection.Close()
'clear the form below
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
[ExpenseTypeID] на самом деле поиск. Объект - это combobox в vb, который я запрограммировал выше кода, который я разместил здесь. [DateOfExpense] также является объектом Date в VB. Я просто перетащил его. Я хочу, чтобы это было связано со всем в этой таблице. [AmountOfExpense] снова привязан к db.
В основном пользователь вводит дату с помощью инструмента, затем выбирает категорию своих расходов и затем вводит сумму. Это все одна таблица, но accountType - это Lookup, фактически находящийся в Access для другой таблицы, поэтому у нас может быть выпадающее меню. Все работает хорошо, пока я не нажму кнопку «Сохранить». Тогда всякий раз, когда я делаю это, я получаю исключение, тип несовместим. Как это исправить? Я УВЕРЕН, что текстовая строка ошибочна, но я пробовал другие вещи, поэтому я думаю, что это нечто большее, чем то, почему я пришел к вам, профессионалы, чтобы получить вход.
спасибо.
EDIT: Ошибка поступающие на
cmd.ExecuteNonQuery()
и говорит «Несоответствие типов данных в выражении критериев»
'START THE POPULATE THE COMBO BOXES
'Gets the database and makes the connection
provider = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source ="
dataFile = "C:\PFADatabase.accdb"
connString = provider & dataFile
myConnection.ConnectionString = connString
'Generates a query command
Dim cmd As OleDbCommand = New OleDbCommand("SELECT [ExpenseType] FROM [ExpenseType]", myConnection)
myConnection.Open() 'Opens connection
Dim dr As OleDbDataReader = cmd.ExecuteReader
While dr.Read
cboCategoryOfExpense.Items.Add(dr.Item(0))
End While
myConnection.Close()
'END THE POPULATE OF COMBO BOXES
Как вы можете видеть в комментариях, он говорит, как комбинированные поля заполнены.
РЕДАКТИРОВАТЬ: На картинке под Расходы находится главный стол. Ключом является FK, и это приводит к PK ExpenseType. Данные, которые мы вытаскиваем, это ExpenseType в ExpenseType. Из того, что я понимаю, вы, ребята, говорите, и я согласен, что он пишет PK ExpenseType, а не данные. ВСЕ, что я хочу сделать, это сохранить данные для графа, который мы будем использовать.
в сообщении об ошибке переговоры о рассогласования между типами данных значений в г наши параметры и тип данных столбцов в таблице базы данных. Вы передаете строки в коллекции параметров, являются ли ваши поля базы данных типа текста? (или они являются числовыми и датами?) – Steve
@Steve - это дата, другая - текстовый поиск, последний - валюта. – wwe9112
И вы передаете строки. Очевидно, что база данных не нравится. Вы должны преобразовать значения в соответствующий тип данных перед добавлением преобразованного значения к вашим параметрам. И не используйте конструктор Параметров без указания типа – Steve