#vb.net #ms-access
#vb.net #ms-доступ #ms-access
Вопрос:
У меня есть две таблицы masterdb
и markssheetdb
table, и я хочу извлечь три столбца из таблицы masterdb
to markssheedb
из формы 2 в форму 1, но это выдает ошибку типа «Это сгенерирует повторяющиеся значения.«
Я использую Visual Studio 2017 и Msaccess 2017.
Imports System.Data.OleDb
Public Class Home
Dim con As New OleDbConnection
Private Sub Home_Load(sender As Object, e As EventArgs) Handles MyBase.Load
con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:UsersDesktopmaster.accdb"
con.Open()
Datagridshow()
End Sub
Private Sub Datagridshow()
Dim ds As New DataSet
Dim dt As New DataTable
ds.Tables.Add(dt)
Dim da As New OleDbDataAdapter
da = New OleDbDataAdapter("INSERT INTO Smarkssheetdb ( ROLLNO, UNIVROLL, [NAMES] )
SELECT Smasterdb.ROLL_No, Smasterdb.UNIV_ROLL, Smasterdb.NAME
FROM Smasterdb,Smarkssheetdb where Smasterdb.ROLL_No <> Smarkssheetdb.ROLLNO ", con)
da.Fill(dt)
DataGridView1.DataSource = dt.DefaultView
con.Close()
End Sub
Private Sub AddEditToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles AddEditToolStripMenuItem.Click
addedit.Show()
End Sub
Private Sub ExitToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ExitToolStripMenuItem.Click
End
End Sub
End Class
В masterdb строками являются Sno, rollno, regno, univroll, курс, название, sgpa1, sgpa2,….., sgpa8
а в таблице markssheetdb строки rollno, univroll, name, m1, m2, m3,….., m8
и я хочу, чтобы данные rollno, univroll, name в обеих таблицах были одинаковыми, и если я обновлю masterdb, то он автоматически обновит поля таблицы markssheetdb.
Комментарии:
1. Ваш дизайн базы данных несовершенен. «Я хочу, чтобы данные rollno, univroll, name в обеих таблицах были одинаковыми» говорит мне, что дизайн не нормализован. Найдите администратора базы данных, который поможет вам с дизайном.
2. Метод заполнения DataAdapter используется с командами выбора, а не Вставки.
3. Попробуйте этот оператор sql, переданный адаптеру в Access, и посмотрите, что вы получите.
Ответ №1:
попробуйте свой dataadapter без инструкции insert
da = New OleDbDataAdapter("SELECT Smasterdb.ROLL_No, Smasterdb.UNIV_ROLL, Smasterdb.NAME
FROM Smasterdb,Smarkssheetdb where Smasterdb.ROLL_No <> Smarkssheetdb.ROLLNO;", con)
вам также следует попробовать свои инструкции select в access, чтобы убедиться, что они работают должным образом.
Комментарии:
1. imgur.com/XlaNT2V Показывает только таблицу данных с 3 столбцами и без данных. Но я хочу, чтобы это понравилось imgur.com/iw33pyr
2. Для этого вы можете добавить CBOOL (False ) КАК 1-й, CBOOL (False) КАК 2 секунды и так далее, но если есть условие, вы можете использовать это.