Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Интеграция с MS SQL Server, использование sql-параметров - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Интеграция с MS SQL Server, использование sql-параметров (Макросы/Sub)
Интеграция с MS SQL Server, использование sql-параметров
Antykus Дата: Воскресенье, 03.05.2015, 11:39 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Цель: с листа книги сформировать запись в БД 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")

com.CommandText = "insert into clients (" & _
"crm_id," & _
"name, " & _
"second_name," & _
"id_product_type," & _
"country," & _
"city, " & _
"id_consultant, " & _
"id_loyality, " & _
"ver " & _
") " & _
"values (?,?,?,?,?,?,?,?,?)"

Set objMyRecordset = com.Execute( _
Parameters:=Array( _
crm_id, _
name, _
second_name, _
id_product_type, _
country, _
city, _
consultant, _
loyality, _
ver) _
)
[/vba]

Код корректно отрабатывает. Но - в поле БД 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")

com.CommandText = "insert into clients (" & _
"crm_id," & _
"name, " & _
"second_name," & _
"id_product_type," & _
"country," & _
"city, " & _
"id_consultant, " & _
"id_loyality, " & _
"ver " & _
") " & _
"values (?,?,?,?,?,?,?,?,?)"

Set objMyRecordset = com.Execute( _
Parameters:=Array( _
crm_id, _
name, _
second_name, _
id_product_type, _
country, _
city, _
consultant, _
loyality, _
ver) _
)
[/vba]

Код корректно отрабатывает. Но - в поле БД sql "country" указано значение, вставляемое по умолчанию, если значение не задано пользователем.Поэтому по логике, если я хочу чтобы в этом поле автоматом задалось значение по умолчанию, я просто оставляю ячейку пустой(Range("I19")). Но эксель ругается. Просьба подсказать, как модифицировать правильно код под использование параметров

Автор - Antykus
Дата добавления - 03.05.2015 в 11:39
AndreTM Дата: Воскресенье, 03.05.2015, 15:32 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
Насколько я понимаю, если принципивально не менять строку запроса, то для передачи дефолтного значения в INSERT надо убрать из списка "пустое" поле (и уменьшить соответственно количество параметров в VALUES()). Что-то вроде такого:


Skype: andre.tm.007
Donate: Qiwi: 9517375010


Сообщение отредактировал AndreTM - Воскресенье, 03.05.2015, 15:35
 
Ответить
СообщениеНасколько я понимаю, если принципивально не менять строку запроса, то для передачи дефолтного значения в INSERT надо убрать из списка "пустое" поле (и уменьшить соответственно количество параметров в VALUES()). Что-то вроде такого:

Автор - AndreTM
Дата добавления - 03.05.2015 в 15:32
Antykus Дата: Четверг, 07.05.2015, 18:48 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
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
Дата добавления - 07.05.2015 в 18:48
Antykus Дата: Четверг, 07.05.2015, 19:58 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
AndreTM,
Цитата
зачем вам вообще формировать массив параметров? Вы можете сформировать строку списка полей, проверяя условия, а значения сразу подставить в нужном формате в VALUES

Понятно, что это можно сделать. Но в большинстве источников (в интернете), где я черпал информацию по этому поводу сказано, что правильно - использовать именно параметры.
 
Ответить
СообщениеAndreTM,
Цитата
зачем вам вообще формировать массив параметров? Вы можете сформировать строку списка полей, проверяя условия, а значения сразу подставить в нужном формате в VALUES

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

Автор - Antykus
Дата добавления - 07.05.2015 в 19:58
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Интеграция с MS SQL Server, использование sql-параметров (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!