Эй, ребята, у меня проблемы с моими руками,
Использование VB.Net; Я пытаюсь скопировать поле в одной записи в одной таблице в другое поле в другой записи в другой таблице, а также вставить новую запись, используя значения, которые пользователь будет вставлен в текстовые поля на одной из моих форм VB.
Используемые две таблицы называются "Персонал" и "Роль", и каждое их содержимое находится ниже:
Штат сотрудников:
Обновится позже!
Роль:
Обновится позже!
Когда пользователь ввел некоторые значения в мою форму и нажимает кнопку, запускается следующий код
Private Sub AddSMButton_Click(sender As Object, e As EventArgs) Handles AddSMButton.Click
If DbConnect() Then
Dim SQLCmd As New OleDbCommand
If StaffID = -1 Then
With SQLCmd
.Connection = cn
.CommandText = "Insert into Staff (StaffMemberFirstName, StaffMemberLastName, StaffMemberDOB, StaffMemberGender, StaffMemberContactNumber, StaffMemberEmail, StaffMemberPostcode, StaffMemberHomeAddress, StaffMemberHoursWorked, UnitID, RoleID) " &
"Select @StaffMemberFirstName, @StaffMemberLastName, @StaffMemberDOB, @StaffMemberGender, @StaffMemberContactNumber, @StaffMemberEmail, @StaffMemberPostcode, @StaffMemberHomeAddress, @StaffMemberHoursWorked, @UnitID, @RoleID"
.Parameters.AddWithValue("@StaffMemberFirstName", AddSM_FNInput.Text)
.Parameters.AddWithValue("@StaffMemberLastName", AddSM_LNInput.Text)
.Parameters.AddWithValue("@StaffMemberDOB", AddDOB_DTP.Value.Date)
.Parameters.AddWithValue("@StaffMemberGender", AddSM_GInput.Text)
.Parameters.AddWithValue("@StaffMemberContactNumber", AddSM_CNInput.Text)
.Parameters.AddWithValue("@StaffMemberEmail", AddSM_EInput.Text)
.Parameters.AddWithValue("@StaffMemberPostcode", AddSM_PInput.Text)
.Parameters.AddWithValue("@StaffMemberHomeAddress", AddSM_AInput.Text)
.Parameters.AddWithValue("@StaffMemberHoursWorked", AddHW_TB.Text)
.Parameters.AddWithValue("@UnitID", AddU_CB.SelectedItem.Identifier)
.Parameters.AddWithValue("@RoleID", AddR_CB.SelectedItem.Identifier)
.ExecuteNonQuery()
.CommandText = "Select @@Identity"
StaffID = .ExecuteScalar
AddSalary(StaffID)
End With
MessageBox.Show("The new record has been inserted!")
AddSM_FNInput.Text = ""
AddSM_LNInput.Text = ""
AddSM_GInput.Text = ""
AddSM_CNInput.Text = ""
AddSM_EInput.Text = ""
AddSM_PInput.Text = ""
AddSM_AInput.Text = ""
AddHW_TB.Text = ""
End If
cn.Close()
StaffID = -1
End If
End Sub
Приведенный выше код может правильно добавить новую запись с указанными значениями.
Но он не добавляет зарплату к новой записи, и я не знаю почему?
Следующий код - это процедура AddSalary
Private Sub AddSalary(StaffID)
If DbConnect() Then
Dim SQLCmd As New OleDbCommand
With SQLCmd
.Connection = cn
.CommandText = "Insert into Staff (StaffMemberWages) " &
"Select Salary " &
"From Role " &
"Where Role.RoleID = @RoleID and Staff.StaffID = @StaffID"
.Parameters.AddWithValue("@RoleID", AddR_CB.SelectedItem.Identifier)
.Parameters.AddWithValue("@StaffID", StaffID)
End With
End If
End Sub
Есть несколько причин, почему я не думаю, что это работает, но я не уверен, что они верны.
Итак, чтобы подвести итог, я пытаюсь создать 1 оператор SQL, который позволит мне вставить новую запись в таблицу "Персонал", а также копировать в эту новую запись значение из таблицы "Роль".
Любая помощь будет принята с благодарностью,
Спасибо, что прочитали и хорошо провели день!
Вам вообще не нужен AddSalary
. У вас уже есть RoleID
, поэтому выберите " Salary
от Role
как часть " Insert
.
Private Sub AddSMButton_Click(sender As Object, e As EventArgs) Handles AddSMButton.Click
If DbConnect() Then
Dim SQLCmd As New OleDbCommand
If StaffID = -1 Then
With SQLCmd
.Connection = cn
.CommandText = "Insert into Staff (StaffMemberFirstName, StaffMemberLastName, StaffMemberDOB, StaffMemberGender, StaffMemberContactNumber, StaffMemberEmail, StaffMemberPostcode, StaffMemberHomeAddress, StaffMemberHoursWorked, UnitID, RoleID, StaffMemberWages) " & //Add Salary to the fields being inserted
"Select @StaffMemberFirstName, @StaffMemberLastName, @StaffMemberDOB, @StaffMemberGender, @StaffMemberContactNumber, @StaffMemberEmail, @StaffMemberPostcode, @StaffMemberHomeAddress, @StaffMemberHoursWorked, @UnitID, " &
"@RoleID, Role.Salary FROM Role WHERE Role.RoleID = @RoleID" //I added this line
.Parameters.AddWithValue("@StaffMemberFirstName", AddSM_FNInput.Text)
.Parameters.AddWithValue("@StaffMemberLastName", AddSM_LNInput.Text)
.Parameters.AddWithValue("@StaffMemberDOB", AddDOB_DTP.Value.Date)
.Parameters.AddWithValue("@StaffMemberGender", AddSM_GInput.Text)
.Parameters.AddWithValue("@StaffMemberContactNumber", AddSM_CNInput.Text)
.Parameters.AddWithValue("@StaffMemberEmail", AddSM_EInput.Text)
.Parameters.AddWithValue("@StaffMemberPostcode", AddSM_PInput.Text)
.Parameters.AddWithValue("@StaffMemberHomeAddress", AddSM_AInput.Text)
.Parameters.AddWithValue("@StaffMemberHoursWorked", AddHW_TB.Text)
.Parameters.AddWithValue("@UnitID", AddU_CB.SelectedItem.Identifier)
.Parameters.AddWithValue("@RoleID", AddR_CB.SelectedItem.Identifier)
.ExecuteNonQuery()
.CommandText = "Select @@Identity"
StaffID = .ExecuteScalar
// AddSalary(StaffID) Don't need this function anymore
End With
MessageBox.Show("The new record has been inserted!")
AddSM_FNInput.Text = ""
AddSM_LNInput.Text = ""
AddSM_GInput.Text = ""
AddSM_CNInput.Text = ""
AddSM_EInput.Text = ""
AddSM_PInput.Text = ""
AddSM_AInput.Text = ""
AddHW_TB.Text = ""
End If
cn.Close()
StaffID = -1
End If
End Sub
Вот SQL-запрос отдельно:
Insert into Staff
(StaffMemberFirstName
, StaffMemberLastName
, StaffMemberDOB
, StaffMemberGender
, StaffMemberContactNumber
, StaffMemberEmail
, StaffMemberPostcode
, StaffMemberHomeAddress
, StaffMemberHoursWorked
, UnitID
, RoleID
, StaffMemberWages)
Select
@StaffMemberFirstName
, @StaffMemberLastName
, @StaffMemberDOB
, @StaffMemberGender
, @StaffMemberContactNumber
, @StaffMemberEmail
, @StaffMemberPostcode
, @StaffMemberHomeAddress
, @StaffMemberHoursWorked
, @UnitID
, @RoleID
, Role.Salary
FROM Role
WHERE Role.RoleID = @RoleID
Using
особенно с этими соединениями. Кроме того, это действительно вопрос «помощи при отладке». AddSalary работает успешно? Любые ошибки или предупреждения? Отладка с локальными пользователями и копирование полного сгенерированного SQL-запроса и его запуск в базе данных. Вставляет ли он запись?