RUS  ENG 

Вопрос по SQL запросу через VBscript

Страницы: 1
RSS
Вопрос по SQL запросу через VBscript, Как в SQL запросе после WHERE подставить переменную заданную в начале скрипта при помощи InputBOX?
 
Sub otchetAll
Dim d
d=InputBox("Введите дату")
Set Lss = Application.ActiveDocument.NativeDoc.Layers.Active

Set Result1 = Lss.ExecSQL("SEL ECT [Объект добавил], COUNT(DISTINCT [Номер газопровода]) FR OM [GAS_СЕТИ] WHERE [Дата внесения объекта]>='07.12.2023' And typeid=2 GROUP BY [Объект добавил]")

Подскажите пожалуйста, как заданную переменную d подставить вместо надписи '07.12.2023'.
 
Проще сперва собрать текст запроса
Код
text_sql = "SELECT [Объект добавил], COUNT(DISTINCT [Номер газопровода]) FROM [GAS_СЕТИ] WHERE [Дата внесения объекта]> "  + CStr(d) + " And typeid=2 GROUP BY [Объект добавил]"

Затем выполнить запрос к слою:
Код
Set Result1  = l.ExecSQL (text_sql )
Изменено: Дмитрий Емельянов - 20.12.2023 16:11:31
 
Спасибо! Всё заработало как надо! Только я не понял, почему когда задается переменная d в виде 07.12.2023 то без апострофов с каждой стороны скрипт не работает. Пришлось еще добавить переменную m=" ' ".

Выложу здесь рабочий скрипт.

Суть скрипта: "Вывести в окно "сообщение" количество шт. нарисованных на карте объектов каждым исполнителем начиная с даты, заданной при помощи окна ввода строки, а также вывести общее количество выполненных объектов".
Код
Sub otchetAll
    Set Ls = Zulu.ActiveMapDoc.Layers.Active
    If Ls.UserName <> "GAS_СЕТИ" Then
        MsgBox "Активируйте слой GAS_СЕТИ и повторите попытку"
        Exit Sub
        End If
Dim d,m,dd   
    d=InputBox("Введите дату в указаном формате: ДД.ММ.ГГГГ")
    If d="" Then
        MsgBox "Поле ""дата"" не заполнено"
        Exit Sub
        End if
    If IsDate(d)  = True then
        Else
       MsgBox "ОШИБКА: Дата введена не корректно!"
        Exit Sub
        End If     
    m="'"
    dd=Date        
        Set Lss = Application.ActiveDocument.NativeDoc.Layers.Active
        text_sql = "SEL ECT [Объект добавил], COUNT(DISTINCT [Номер газопровода]) FR OM [GAS_СЕТИ] WHERE [Дата внесения объекта]>= "  + CStr(m) + CStr(d)+ CStr(m) + " And typeid=2 GROUP BY [Объект добавил]"
        otv_sql = "SEL ECT COUNT(DISTINCT [Номер газопровода]) FR OM [GAS_СЕТИ] WHERE [Дата внесения объекта]>= "  + CStr(m) + CStr(d)+ CStr(m) + " And typeid=2"
Set Result1 = Lss.ExecSQL(text_sql)
Set Result2 = Lss.ExecSQL(otv_sql)
Set Out = OpenOutputChannel ("Сообщения")
Out.Clear
OUT.Put "{\B}Количество выполненных объектов в период с " + CStr(d)+ " г." + " по " + CStr(dd) + " г." + CHR(10)
OUT.Put "Исполнитель" + "     " + "Кол-во объектов" + CHR(10) + CHR(10) 
Set t = Result1.DataSet
t.MoveFirst
Do
    If t.Eof = True Then Exit Do
        OUT.Put t.FieldValue(0) + Space(20-Len(t.FieldValue(0))) + t.FieldValue(1) +CHR(10)
        t.MoveNext
        Loop
Set tt = Result2.DataSet
OUT.Put CHR(10) + "{\B}Общее кол-во, шт.:" + "  " + tt.FieldValue(0) +CHR(10)
MsgBOX "Выполнено"
End Sub

Изменено: Reidenschi - 22.12.2023 12:38:00
 
Reidenschi, не работает т. к. значение даты в тексте запроса должно быть заключено в кавычки, у Вас в первом сообщении так и сделано. Без кавычек только числовые константы или имена (переменных и т.п.), заданные латиницей, без спецсимволов, пробелов и т.п.
 
Цитата
написал:
Reidenschi, не работает т. к. значение даты в тексте запроса должно быть заключено в кавычки, у Вас в первом сообщении так и сделано. Без кавычек только числовые константы или имена (переменных и т.п.), заданные латиницей, без спецсимволов, пробелов и т.п.
Спасибо.
Страницы: 1