2016-08-22 2 views
0

Я сделал эту функцию в VBA Access:Вставить в с переменным числом

Function test_zeroSQL() 

Dim nsemaine As Single 
Dim var11 As Single 
Dim var50 As Single 
Dim var60 As Single 
Dim var11b As Single 
Dim var50b As Single 
Dim var60b As Single 

nsemaine = DatePart("ww", Date, 2, 2) - 1 
If zero11() = 0 Then 
    var11 = 1 
    var11b = 1 
Else 
    var11 = zero11() 
    var11b = zero11b() 
End If 

If zero50() = 0 Then 
    var50 = 1 
    var50b = 1 
Else 
    var50 = zero50() 
    var50b = zero50b() 
End If 

If zero60() = 0 Then 
    var60 = 1 
    var60b = 1 
Else 
    var60 = zero60() 
    var60b = zero60b() 
End If 

test_zeroSQL = "INSERT INTO [Taux de Service] (Semaine, [Sortie B60], [Nc B60], [Sortie B50], [Nc B50], [Sortie B11], [Nc B11])" 
test_zeroSQL = test_zeroSQL & vbCrLf & "VALUES (" & nsemaine & "," & var60 & "," & var60b & "," & var50 & "," & var50b & "," & var11 & " ," & var11b & ")" 
End Function 

Но он не работает, у меня есть это сообщение: «число значений запросов должно совпадать с количеством назначения поля "

Я думаю, что это происходит из атрибута моих переменных, потому что он работает, когда я заменяю единицу целым числом. Тем не менее, я проверил, что мои поля тоже «Single». Я не понимаю, откуда это может произойти ...

Вы можете мне помочь?

ответ

2

Число указанных столбцов (скобки после [Taux de Service]) не совпадает с номером значения внутри values.

Вы используете десятичные числа и французский локальный (которые используют , в качестве разделителя на десятичные числа), поэтому он искажает запрос, поскольку в качестве разделителя столбцов всегда используется ,.

Есть два решения этой проблемы:

  1. Использование query parameters который также лучшая практика, как это помогает предотвращать атаки SQL-инъекцию, а также просто пользователь случайно с помощью специальных caracters и раздутия запроса.

  2. Заменить , по . в каждом десятичного числа, как это: Replace(myString, ",",".")

+0

Большое спасибо! – Bast

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