#vb.net #ms-access #combobox
#vb.net #ms-access #выпадающий список
Вопрос:
Я работаю над Visual Basic Express 2010 и Microsoft Access. Я создал базу данных и отношения с Access, подключил их к VB просто отлично. Моя проблема в том, что у меня есть таблица с именем Address_Table, она содержит только одно поле с именем Address_Name. Таблица Address_Table подключается к таблице_student к полю с именем Student_Address с «Enforcement ссылочной целостности».
Я не могу загружать изображения, мне очень жаль, я действительно пытался.
Проблема № 1: в visual Basic я хочу создать выпадающий список, в котором пользователь выбирает из вариантов, импортированных из Address_Name, а затем, после того, как он нажмет на кнопку добавить, выбор будет добавлен в базу данных в поле Student_Address . Я имею в виду, что Address_Name будет содержать такие значения, как A, B, C. Я хочу, чтобы эти значения отображались в выпадающем списке, и после того, как он выберет одно из них, он нажмет добавить, и выбор будет вставлен в базу данных.
Проблема № 2: Ах, извините, это тоже о выпадающем списке. речь идет о двух выпадающих списках, где при выборе из первого, например, из таблицы country, вы выбираете Америку, а затем в другом выпадающем списке отображаются только штаты Америки. Или, когда вы выбираете Англию, будут отображаться только города Англии и так далее.
* В таблице Country есть одно поле с именем: Country_Name. * Таблица Стипендия содержит поля: стипендия_то, имя_страны_названия, имя_города * В таблице Город указаны поля: имя_города, Страна
* Таблица Стипендия и страна подключены к таблице с именем Student_Info, страна подключена к полю ABC, а стипендия — к новому полю. * Таблица Country, связанная с таблицами Scholarship и City, со следующими полями: Country_Name в таблице Scholarship и Country в таблице City. * Таблица стипендий связана с таблицей City: City_Name с полями Country. Все они имеют «Принудительную ссылочную целостность».
О Боже, я надеюсь, что кто-нибудь меня поймет, я старался предусмотреть все, пожалуйста, помогите мне.
Public Class frmStudent
Dim cnn As New OleDb.OleDbConnection
Private Sub RefreshData()
If Not cnn.State = ConnectionState.Open Then
'open connection
cnn.Open()
End If
Dim da As New OleDb.OleDbDataAdapter("SELECT Student_ID as [ID], " amp; _
"Student_Name as [Name], Student_Gender, Student_Phone, Student_Address " amp; _
" FROM The_Student ORDER BY Student_ID", cnn)
Dim dt As New DataTable
'fill data to datatable
da.Fill(dt)
'offer data in data table into datagridview
Me.dgvData.DataSource = dt
'close connection
cnn.Close()
End Sub
Private Sub btnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdd.Click
Dim cmd As New OleDb.OleDbCommand
If Not cnn.State = ConnectionState.Open Then
'open connection if it is not yet open
cnn.Open()
End If
cmd.Connection = cnn
'check whether add new or update
If Me.txtstdID.Tag amp; "" = "" Then
'add new
'add data to table
cmd.CommandText = "INSERT INTO The_Student(Student_ID, Student_Name, Student_Gender, Student_Phone)" amp; _
" VALUES(" amp; Me.txtstdID.Text amp; ",'" amp; Me.txtStdName.Text amp; "','" amp; _
Me.cboGender.Text amp; "','" amp; Me.txtPhone.Text amp; "')"
cmd.ExecuteNonQuery()
Else
'update data in table
cmd.CommandText = "UPDATE The_Student " amp; _
" SET Student_ID=" amp; Me.txtstdID.Text amp; _
", Student_Name='" amp; Me.txtStdName.Text amp; "'" amp; _
", Student_Gender='" amp; Me.cboGender.Text amp; "'" amp; _
", Student_Phone='" amp; Me.txtPhone.Text amp; "'" amp; _
", Student_Address='" amp; Me.txtAddress.Text amp; "'" amp; _
" WHERE Student_ID=" amp; Me.txtstdID.Tag
cmd.ExecuteNonQuery()
End If
'refresh data in list
RefreshData()
'clear form
Me.btnClear.PerformClick()
'close connection
cnn.Close()
End Sub
Private Sub frmStudent_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
cnn = New OleDb.OleDbConnection
cnn.ConnectionString = "Provider=Microsoft.Jet.Oledb.4.0; Data Source=" amp; Application.StartupPath amp; "data.mdb"
'
'get data into list
Me.RefreshData()
End Sub
Ответ №1:
Здесь есть именно то, что вы ищете. Обычно их называют справочными списками. http://msdn.microsoft.com/en-US/vstudio/bb466226.aspx#formsoverdata
Итак, в частности, видео № 5 должно быть тем, что вы ищете. Поскольку вы используете VB Access, я бы рекомендовал вам отказаться от команд OleDb и использовать строго типизированные наборы данных, адаптеры и т.д., Если только у вас нет веских причин не делать этого. Даже если вы это сделаете, построение поисковых запросов так, как она делает в этих видеороликах, сгенерирует для вас инструкции Insert / Update / Delete, чтобы удовлетворить ограничениям (они являются свойствами адаптеров).
Комментарии:
1. Большое вам спасибо за ссылку, это было очень полезно, но я все еще не мог найти прямого ответа на то, что я ищу. Приведенный выше код с командами OleDb и тому подобное взят из учебника. Я все еще очень рано работаю с Visual Basic, поэтому мне трудно полностью понять ваш комментарий о том, что я должен выбрать или что я должен изменить. Можете ли вы направить меня? Спасибо
2. Ну, пространство имен OleDb содержит набор общих компонентов доступа к данным. Этот подход использует команды и адаптеры данных для выполнения операций с данными. И наоборот, вы можете инициировать строго типизированные объекты ADO, добавив набор данных в свой проект (точно так же, как вы добавили бы форму). После настройки этого набора данных с помощью мастера вы можете использовать его автоматически созданные адаптеры таблиц и источники привязки для подключения вашего пользовательского интерфейса.
3. Видеоряд, который формируется поверх данных, также содержит множество примеров того, как это работает. Стоит изучить оба подхода, но ваш случай звучит как действительно хороший вариант использования для этих типизированных наборов данных, поскольку вам нужны расширенные привязки и поисковые запросы, а у вас еще нет большого опыта.