2013-11-07 2 views
1

Я пытаюсь написать форму для вставки данных в несколько таблиц в пределах одной базы данных.3134 Ошибка времени выполнения при вставке в оператор

Я знаю, что вы не можете сделать это через один оператор Insert into, поэтому я прочитал, что должен создать transaction и включить несколько операторов Insert. Я продолжаю получать 3134 run time error в моей второй инструкции вставки. Вот код:

Private Sub cmdAdd_Click() 

    DBEngine.BeginTrans 
    CurrentDb.Execute "INSERT into Names(StudentId, FirstName, MiddleName, LastName) VALUES (" & Me.txtStudentId & ",'" & _ 
     Me.txtFirstName & "','" & Me.txtMiddleName & "','" & Me.txtLastName & "')" 
    CurrentDb.Execute "INSERT into Homeroom(StudentId, Grade, Homeroom_Primary, Name-Homeroom_Primary_Teacher) " & _ 
     "VALUES (" & Me.txtStudentId & ",'" & Me.txtGrade & "','" & Me.txtHomeroom & "','" & Me.txtTeacher & "')" 
    CurrentDb.Execute "INSERT into [Ridgeview Math](StudentId, ExportGrade, DateTaken, SS, PR) VALUES (" & _ 
     Me.txtStudentId & ",'" & Me.txtGrade & "',#" & Me.txtMathdate & "#,'" & Me.txtMathSS & "','" & Me.txtMathPR & "')" 
    CurrentDb.Execute "INSERT into [Ridgeview Reading](StudentId, ExportGrade, DateTaken, RSS, RPR, RIRL) " & _ 
     "VALUES (" & Me.txtStudentId & "','" & Me.txtGrade & "',#" & Me.txtReadingdate & "#,'" & Me.txtReadingSS & "','" & _ 
     Me.txtReadingPR & "','" & Me.txtReadingIRL & "')" 
    CurrentDb.Execute "INSERT into CompassGroup(StudentId, CompassGroup) VALUES (" & Me.txtStudentId & _ 
     "," & Me.txtCompassGroup & ")" 
    DBEngine.CommitTrans 

End Sub 

Я делаю что-то неправильно с вложенными выражениями Insert?

Все это связано с формой, в которой создаются переменные и вводятся данные. Первая инструкция Insert не дает мне никаких ошибок. Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.

+0

«Имя-Homeroom_Primary_Teacher» действительно является именем столбца? – Joe

ответ

2

Кронштейн имя поля Имя-Homeroom_Primary_Teacher из-за тире.

Я предлагаю вам использовать строковую переменную для хранения текста инструкции, Debug.Print строки, а затем Execute.

Dim strInsert As String 
strInsert = "INSERT into Homeroom(StudentId, Grade, Homeroom_Primary, [Name-Homeroom_Primary_Teacher]) " & _ 
     "VALUES (" & Me.txtStudentId & ",'" & Me.txtGrade & "','" & Me.txtHomeroom & "','" & Me.txtTeacher & "')" 
Debug.Print strInsert 
CurrentDb.Execute strInsert, dbFailonerror 

Если случай ошибок, вы можете пойти в открывшееся окно (Ctrl +г) для проверки текста инструкции. И вы можете скопировать этот текст, создать новый запрос в конструкторе запросов, переключиться на SQL View, вставить текст и проверить там инструкцию.

Также подход, который вы используете, требует много конкатенирования. Другие варианты, которые вы можете рассмотреть: параметры; добавление строк в DAO Recordsets.

+1

+1 для рекомендации запросов параметров или обновлений набора записей. Без них г-жа О'Коннор и ее ученики будут немного неприятны. –

+1

+1 для записей DAO Recordsets – Blackhawk

Смежные вопросы