Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.04.2012, 12:22   #1
Abdukhafiz
Пользователь
 
Регистрация: 29.12.2011
Сообщений: 31
По умолчанию Использование SQL функции в VBA

Привет всем..
У меня тут есть запрос в SQL SERVER и этот запрос нужно вставить в VBA...

DECLARE qwe CHAR(19)
SET qwe = '11.11.2011 11:11:11'
IF qwe = '<Null>'
BEGIN
SET qwe = Null
END
ELSE
SET qwe = qwe
INSERT INTO test(datetime1) VALUES(@qwe)[/b]

Написал следующее в VBA, но не работает

d(0) = "2011-03-19 13:58:45"
d(1) = "<Null>"
d(2) = "2011-04-19 13:58:45"
d(3) = "<Null>"

For i = 0 To 3
sSQL = "IF '" & d(i) & "' = '<Null>' BEGIN SET '" & d(i) & "' = Null END ELSE SET '" & d(i) & "' = '" & d(i) & "' INSERT INTO test(datetime1) VALUES('" & d(i) & "')"
cnState.Execute sSQL
Next

Что посоветуете?
Abdukhafiz вне форума Ответить с цитированием
Старый 17.04.2012, 12:32   #2
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

а сам сервер подключен как источник данных?
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 17.04.2012, 12:32   #3
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

посоветую SQL начинать со слова SELECT, а отбор данных писать в WHERE.
распечатйте сюда строку sSQL
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 17.04.2012, 12:33   #4
Abdukhafiz
Пользователь
 
Регистрация: 29.12.2011
Сообщений: 31
По умолчанию

Да.. вот строка подключения

Dim cnState As ADODB.Connection
Dim sSQL As String
Set cnState = New Connection
With cnState
.Provider = "SQLOLEDB"
.ConnectionString = "server=.\SQLEXPRESS; Trusted_Connection=Yes; database=InsertCSVFile"
.Open
End With
Abdukhafiz вне форума Ответить с цитированием
Старый 17.04.2012, 12:34   #5
Abdukhafiz
Пользователь
 
Регистрация: 29.12.2011
Сообщений: 31
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
посоветую SQL начинать со слова SELECT, а отбор данных писать в WHERE.
распечатйте сюда строку sSQL
как-то не понял)))
Abdukhafiz вне форума Ответить с цитированием
Старый 17.04.2012, 12:37   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

строка подключения - это одно, задали источник данных и драйвер

а SQL-запрос - это другое какие данные хотим получить, с каких таблиц, соответствующие каким условиям
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 17.04.2012, 12:46   #7
Abdukhafiz
Пользователь
 
Регистрация: 29.12.2011
Сообщений: 31
По умолчанию

Я строку подключения для DiemonStar написал....

Сейчас я другое попробовал

Dim d(3) As Variant
Dim i As Long

d(0) = "Null"
d(1) = "Null"
d(2) = "2011-04-19 13:58:45"
d(3) = "Null"

For i = 0 To 3
If IsDate(d(i)) Then
sSQL = "INSERT INTO test(datetime1) VALUES('" & d(i) & "')"
MsgBox sSQL
cnState.Execute sSQL
End If
Next

а щас говорит Ошибка.. "Преобразование типа данных char в тип datetime привело к значению datetime за пределами диапазона"
Abdukhafiz вне форума Ответить с цитированием
Старый 17.04.2012, 12:52   #8
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Скорее всего, заморочки с кавычками в запросе...
('" & d(i) & "')" - вот тут попробуйте
(" & d(i) & ")" или (""" & d(i) & """)"
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 17.04.2012, 13:05   #9
Abdukhafiz
Пользователь
 
Регистрация: 29.12.2011
Сообщений: 31
По умолчанию

Цитата:
Сообщение от DiemonStar Посмотреть сообщение
Скорее всего, заморочки с кавычками в запросе...
('" & d(i) & "')" - вот тут попробуйте
(" & d(i) & ")" или (""" & d(i) & """)"
нет не помогло...

Я отредактировал тут кое-что:
Код:
Dim d(3) As String
        
    d(0) = "Null"
    d(1) = "Null"
    d(2) = "2011-04-19 13:58:45"
    d(3) = "Null"
    
    For i = 0 To 3
        If IsDate(d(i)) Then
            sSQL = "INSERT INTO test(datetime1) VALUES('" & d(i) & "')"
            MsgBox sSQL
            cnState.Execute sSQL
        Else
            sSQL = "INSERT INTO test(datetime1) VALUES(Null)"
            MsgBox sSQL
            cnState.Execute sSQL
        End If
    Next
Но все равно такая ошибка
Abdukhafiz вне форума Ответить с цитированием
Старый 17.04.2012, 13:18   #10
=master=
Форумчанин
 
Регистрация: 26.03.2012
Сообщений: 665
По умолчанию

Используйте ADODB.Command и запросы c параметрами.
И не дело дату строкой держать.
=master= вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Использование SQL в Access Insightful Microsoft Office Access 3 29.04.2010 14:37
создание и использование семафоров(VBA) vladmc Помощь студентам 1 09.01.2010 03:18
VBA Использование Shapes в Excel диаграммах RomVS Microsoft Office Excel 0 13.02.2009 12:20
использование SQL запросов в коде VBA b00s Microsoft Office Access 3 26.04.2008 13:40