Цель: с листа книги сформировать запись в БД SQL. Насколько понимаю, правильным путём будет использование SQL-параметров. Пример: [vba]
Код
Set second_name = Range("I18") Set id_product_type = Range("I21") Set country = Range("I19") Set city = Range("I20") Set consultant = Range("I22") Set loyality = Range("I23") Set maxima_ver = Range("I24")
Код корректно отрабатывает. Но - в поле БД sql "country" указано значение, вставляемое по умолчанию, если значение не задано пользователем.Поэтому по логике, если я хочу чтобы в этом поле автоматом задалось значение по умолчанию, я просто оставляю ячейку пустой(Range("I19")). Но эксель ругается. Просьба подсказать, как модифицировать правильно код под использование параметров
Цель: с листа книги сформировать запись в БД SQL. Насколько понимаю, правильным путём будет использование SQL-параметров. Пример: [vba]
Код
Set second_name = Range("I18") Set id_product_type = Range("I21") Set country = Range("I19") Set city = Range("I20") Set consultant = Range("I22") Set loyality = Range("I23") Set maxima_ver = Range("I24")
Код корректно отрабатывает. Но - в поле БД sql "country" указано значение, вставляемое по умолчанию, если значение не задано пользователем.Поэтому по логике, если я хочу чтобы в этом поле автоматом задалось значение по умолчанию, я просто оставляю ячейку пустой(Range("I19")). Но эксель ругается. Просьба подсказать, как модифицировать правильно код под использование параметровAntykus
Насколько я понимаю, если принципивально не менять строку запроса, то для передачи дефолтного значения в INSERT надо убрать из списка "пустое" поле (и уменьшить соответственно количество параметров в VALUES()). Что-то вроде такого:
Насколько я понимаю, если принципивально не менять строку запроса, то для передачи дефолтного значения в INSERT надо убрать из списка "пустое" поле (и уменьшить соответственно количество параметров в VALUES()). Что-то вроде такого:
AndreTM, спасибо, продвинулся вперёд, но просьба помочь добить вопрос.
Программа начала ругаться на параметры. Конкретно, убрал я допустим с листа значение для country, значит и в параметрах не должно быть country. Я поступил так, модифицировал массив со значениями, убрав пустые, вот так [vba]
Код
Dim list As Variant list = Array( _ crm_id, name, second_name, country, city, id_product_type, consultant, loyality, maxima_ver, id_state, time_from_moscow, emailing, organisation_saas, sscz, tp _ )
Dim i As Integer, j As Integer, temp() ReDim temp(0) j = 0 For i = LBound(list) To UBound(list) If list(i) <> "" Then If j = 0 Then temp(0) = list(i): j = j + 1 Else ReDim Preserve temp(UBound(temp) + 1) temp(j) = list(i): j = j + 1 End If End If: Next list = temp '''
Set objMyRecordset = com.Execute( _ Parameters:=Array(list))
[/vba]
говорит Automation Error.
Подскажите в какую сторону копать. Что-то мне сдаётся, что в этом массиве не значения должны лежать, а ссылки на переменные.. Совсем я запутался в этом
AndreTM, спасибо, продвинулся вперёд, но просьба помочь добить вопрос.
Программа начала ругаться на параметры. Конкретно, убрал я допустим с листа значение для country, значит и в параметрах не должно быть country. Я поступил так, модифицировал массив со значениями, убрав пустые, вот так [vba]
Код
Dim list As Variant list = Array( _ crm_id, name, second_name, country, city, id_product_type, consultant, loyality, maxima_ver, id_state, time_from_moscow, emailing, organisation_saas, sscz, tp _ )
Dim i As Integer, j As Integer, temp() ReDim temp(0) j = 0 For i = LBound(list) To UBound(list) If list(i) <> "" Then If j = 0 Then temp(0) = list(i): j = j + 1 Else ReDim Preserve temp(UBound(temp) + 1) temp(j) = list(i): j = j + 1 End If End If: Next list = temp '''
Set objMyRecordset = com.Execute( _ Parameters:=Array(list))
[/vba]
говорит Automation Error.
Подскажите в какую сторону копать. Что-то мне сдаётся, что в этом массиве не значения должны лежать, а ссылки на переменные.. Совсем я запутался в этомAntykus
зачем вам вообще формировать массив параметров? Вы можете сформировать строку списка полей, проверяя условия, а значения сразу подставить в нужном формате в VALUES
Понятно, что это можно сделать. Но в большинстве источников (в интернете), где я черпал информацию по этому поводу сказано, что правильно - использовать именно параметры.
AndreTM,
Цитата
зачем вам вообще формировать массив параметров? Вы можете сформировать строку списка полей, проверяя условия, а значения сразу подставить в нужном формате в VALUES
Понятно, что это можно сделать. Но в большинстве источников (в интернете), где я черпал информацию по этому поводу сказано, что правильно - использовать именно параметры.Antykus