#sql #ms-access #vba
#sql #ms-access #vba
Вопрос:
Я пытаюсь обновить связанную таблицу в access и получаю сообщение об ошибке типа несоответствия данных в выражении критериев. Единственными полями базы данных, которые являются плавающими, являются те, которые начинаются с ЧАСОВ.
Я попытался сделать поле часов целочисленным значением, но получил сообщение о несоответствии другого типа.
Я новичок в VB и access, так что это может быть что-то глупое. Я ценю любую помощь. Вот мой код.
Private Sub Command30_Click()
Dim monthFormat As String
Dim yearFormat As String
Dim fullYear As String
Dim datePerformed As String
Dim currDate As String
Dim timeEntered As String
Dim empNum As String
Dim acct As String
Dim cat As String
Dim cmnt As String
Dim firstName As String
Dim lastName As String
Dim shift As String
Dim addVacation As String
Dim hours As String
If IsNumeric(Me.Text12.Value) Then hours = CInt(Me.Text12.Value) Else: hours = Me.Text12.Value
monthFormat = Format(Me.Text10.Value, "MM")
yearFormat = Format(Me.Text10.Value, "YY")
fullYear = Format(Me.Text10.Value, "YYYY")
datePerformed = Format(Me.Text10.Value, "YYYYMMDD")
currDate = Format(DateTime.Date, "YYYYMMDD")
timeEntered = Format(DateTime.Time, "HHMMSS")
empNum = " amp; Me.Combo20.Column(0) amp; "
acct = " amp; Me.Combo20.Column(1) amp; "
cat = " amp; Me.Combo20.Column(3) amp; "
cmnt = " amp; Me.Combo20.Column(4) amp; "
firstName = " amp; Me.Combo20.Column(5) amp; "
lastName = " amp; Me.Combo20.Column(6) amp; "
shift = " amp; Me.Combo20.Column(7) amp; "
hours = " amp; Me.Text12.Value amp; "
addVacation = "insert into dbo_R_PPHRTRX" amp; _
"(DATE_PERFORMED, EMPLOYEE_NUMBER " amp; _
", JOB_NUMBER " amp; _
", RELEASE " amp; _
", ACCOUNT, ACCOUNT_CR, BATCH_ITEM, BATCH_NUMBER, BURDEN_DOLLARS, CATEGORY, DATE_TIME_BEGUN, DATE_TIME_COMPLT, EFF_VAR_DOLLARS, EMPLOYEE_ID, EO_FLAG, FIRST_NAME " amp; _
", HOURS_EARNED, HOURS_WORKED, HOURS_WORKED_SET, LABOR_DOLLARS, LAST_NAME, LOCATION_CODE, PERIOD_YYYYMM, PRODUCT_LINE, QTY_COMPLETE, RATE_VAR_DOLLARS " amp; _
", RELEASE_WO " amp; _
", SHIFT, [STATUS], [TIME], WORK_CENTER, DATE_ENTERED, DivisionID, Comment " amp; _
", LATE_CHARGE, OPERATION, OVERTIME, PROJECT_TASK, REFERENCE, TASK_NUMBER, TYPE_TRANSACTION, DATACAPSERIALNUMBER, COST_ACCOUNT, CS_PERIOD, WORK_ORDER) " amp; _
" " amp; _
" VALUES('" amp; datePerformed amp; "' , '" amp; empNum amp; "' " amp; _
", switch(('" amp; monthFormat amp; "' >= 1 And '" amp; monthFormat amp; "' <= 3), ('01VH' '" amp; yearFormat amp; "'), ('" amp; monthFormat amp; "' >= 4 And '" amp; monthFormat amp; "' <= 6), ('02VH' '" amp; yearFormat amp; "'), ('" amp; monthFormat amp; "' >= 7 And '" amp; monthFormat amp; "' <= 9), ('03VH' '" amp; yearFormat amp; "'), ('" amp; monthFormat amp; "' >= 10 And '" amp; monthFormat amp; "' <= 12), ('04VH' '" amp; yearFormat amp; "'))" amp; _
", switch(('" amp; monthFormat amp; "' >= 1 And '" amp; monthFormat amp; "' <= 3), ('01VH' '" amp; yearFormat amp; "'), ('" amp; monthFormat amp; "' >= 4 And '" amp; monthFormat amp; "' <= 6), ('02VH' '" amp; yearFormat amp; "'), ('" amp; monthFormat amp; "' >= 7 And '" amp; monthFormat amp; "' <= 9), ('03VH' '" amp; yearFormat amp; "'), ('" amp; monthFormat amp; "' >= 10 And '" amp; monthFormat amp; "' <= 12), ('04VH' '" amp; yearFormat amp; "'))" amp; _
", '" amp; acct amp; "', '2500-X', '0', '0', '0', 'LABOR HRS', '" amp; datePerformed amp; "' '0600', '" amp; datePerformed amp; "' '0600', '0', 'ACCSS', '', '" amp; firstName amp; "' " amp; _
", '" amp; hours amp; "', '" amp; hours amp; "', '0', '0', '" amp; lastName amp; "', '01', '" amp; fullYear amp; "' '" amp; monthFormat amp; "', '01', '0', '0' " amp; _
", switch(('" amp; monthFormat amp; "' >= 1 And '" amp; monthFormat amp; "' <= 3), ('01VH' '" amp; yearFormat amp; "'), ('" amp; monthFormat amp; "' >= 4 And '" amp; monthFormat amp; "' <= 6), ('02VH' '" amp; yearFormat amp; "'), ('" amp; monthFormat amp; "' >= 7 And '" amp; monthFormat amp; "' <= 9), ('03VH' '" amp; yearFormat amp; "'), ('" amp; monthFormat amp; "' >= 10 And '" amp; monthFormat amp; "' <= 12), ('04VH' '" amp; yearFormat amp; "'))" amp; _
", '" amp; shift amp; "', '', '" amp; timeEntered amp; "', '92', '" amp; currDate amp; "', 'Jobscope', 'V' " amp; _
", '', '', '', '', '', '', '', '', '', '', '')"
DoCmd.RunSQL (addVacation)
End Sub
Комментарии:
1. Поместите точку останова в строку «DoCmd.RunSQL (addVacation)» и извлеките значение «addVacation». Затем отправьте запрос здесь, пожалуйста.
2. Все ли поля в dbo_r_phrtrx на самом деле отформатированы как текст?
Ответ №1:
Вместо «склеивания» длинной, уродливой и потенциально неприятной инструкции INSERT вы можете рассмотреть возможность использования объекта набора записей для вставки новой строки:
Dim cdb As DAO.Database, rst As DAO.Recordset
Set cdb = CurrentDb
Set rst = cdb.OpenRecordset("SELECT * FROM dbo_R_PPHRTRX WHERE False", dbOpenDynaset)
rst.AddNew
rst!DATE_PERFORMED = datePerformed
rst!EMPLOYEE_NUMBER = empNum
' ... and so on for the rest of the fields
rst.Update
rst.Close
Set rst = Nothing
Set cdb = Nothing
Ответ №2:
Спасибо за помощь. Проблемы были вызваны «склеенными» строками, а также несколькими другими вещами. Я создал переменные switches, поэтому он выполнил вычисление в запросе VBA, а не в запросе SQL, и все сработало.
Еще раз спасибо.