Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3 4   вперед  Ctrl      все
 SQL в VBA  [new]
Frost_Imp
Member

Откуда: Белокаменная
Сообщений: 1643
Как правильно в VBA поместить условия запроса для отображения в ленточной форме, если следующая строка ругается на неправильный синтаксис FROM. Строка скопирована из текста запроса
    Me.RecordSource = "select Списки.Дата_приема, Списки.Входящий, Списки.КодТочки, Списки.№_списка, Списки.Название, Списки.[Кол-во_дог], Списки.Не_принято, Списки.Передал, Списки.Принял from [Списки] INNER JOIN [Договора] INNER JOIN [Акты и ПТС] ON Договора.№_дог = [Акты и ПТС].№_дог ON Списки.№_списка = [Акты и ПТС].№_списка] "
6 июн 06, 11:21    [2744119]     Ответить | Цитировать Сообщить модератору
 Re: SQL в VBA  [new]
Frost_Imp
Member

Откуда: Белокаменная
Сообщений: 1643
Схема данных в запросе

К сообщению приложен файл. Размер - 0Kb
6 июн 06, 11:23    [2744138]     Ответить | Цитировать Сообщить модератору
 Re: SQL в VBA  [new]
IgorM
Member

Откуда: Тула - Москва, транзит
Сообщений: 633
select Списки.Дата_приема, Списки.Входящий, Списки.КодТочки, 
Списки.№_списка, Списки.Название, Списки.[Кол-во_дог], 
Списки.Не_принято, Списки.Передал, Списки.Принял 
FROM ([Списки] INNER JOIN [Договора] ON Списки.№_списка = [Акты и ПТС].№_списка]) 
INNER JOIN [Акты и ПТС] ON Договора.№_дог = [Акты и ПТС].№_дог 
6 июн 06, 11:28    [2744166]     Ответить | Цитировать Сообщить модератору
 Re: SQL в VBA  [new]
Frost_Imp
Member

Откуда: Белокаменная
Сообщений: 1643
IgorM
Вставил предложенный Вами код (собственно, получил то, что было в начале:
Private Sub Кнопка39_Click()
    Me.Поле21.Value = Null
    Me.Поле23.Value = Null
    Me.RecordSource = "select Списки.Дата_приема, Списки.Входящий, Списки.КодТочки, Списки.№_списка, Списки.Название, Списки.[Кол-во_дог], 
Списки.Не_принято , Списки.Передал, Списки.Принял FROM ([Списки] INNER 
JOIN [Договора] ON Списки.№_списка = [Акты и ПТС].№_списка])INNER JOIN 
[Акты и ПТС] ON Договора.№_дог = [Акты и ПТС].№_дог"
End Sub
Естественно без Enter. Ошибка

К сообщению приложен файл. Размер - 0Kb
6 июн 06, 11:34    [2744211]     Ответить | Цитировать Сообщить модератору
 Re: SQL в VBA  [new]
TatianaT
Member

Откуда:
Сообщений: 1356
квадратные скобки на имена полей надень


[Акты и ПТС].[№_дог]
6 июн 06, 11:38    [2744229]     Ответить | Цитировать Сообщить модератору
 Re: SQL в VBA  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
Frost_Imp
[Акты и ПТС].№_списка])

Квадратная скобка лишняя.
6 июн 06, 11:38    [2744232]     Ответить | Цитировать Сообщить модератору
 Re: SQL в VBA  [new]
..................
Guest
Не ленитесь создавать сткроковую переменную для текста запроса и делать ей Debug.Print - будет гораздо проще отлаживать код. А также научитесь переносить строку команды на новую - длинные строки неудобно читать. Не усложняйте себе жизнь без необходимости.
Private Sub Кнопка39_Click()
Dim strSelect as String
    strSelect = "select Списки.Дата_приема, Списки.Входящий, " & _
                "Списки.КодТочки, Списки.№_списка, Списки.Название, Списки. etc "
Debug.Print strSelect
........
End Sub
6 июн 06, 11:40    [2744244]     Ответить | Цитировать Сообщить модератору
 Re: SQL в VBA  [new]
ILL HEAD
Member [заблокирован]

Откуда:
Сообщений: 8498
а что мешало сделать это в конструкторе ?
тогда таких ошибок и вопросов по синтаксису не было бы
6 июн 06, 11:44    [2744269]     Ответить | Цитировать Сообщить модератору
 Re: SQL в VBA  [new]
Frost_Imp
Member

Откуда: Белокаменная
Сообщений: 1643
..................
Не ленитесь создавать сткроковую переменную для текста запроса и делать ей Debug.Print - будет гораздо проще отлаживать код.

За совет спасибо, только что это даст? (ответьте пожалуйста, если не трудно)
..................
А также научитесь переносить строку команды на новую - длинные строки неудобно читать.

Полезный совет, спасибо!
6 июн 06, 11:57    [2744349]     Ответить | Цитировать Сообщить модератору
 Re: SQL в VBA  [new]
Frost_Imp
Member

Откуда: Белокаменная
Сообщений: 1643
ILL HEAD
а что мешало сделать это в конструкторе ?
тогда таких ошибок и вопросов по синтаксису не было бы

Дык вроде там и делаю. Единственное что - код скопировал из SQL кода запроса
6 июн 06, 12:05    [2744408]     Ответить | Цитировать Сообщить модератору
 Re: SQL в VBA  [new]
Frost_Imp
Member

Откуда: Белокаменная
Сообщений: 1643
Воспользовался советами
Private Sub Кнопка39_Click()
    Me.Поле21.Value = Null
    Me.Поле23.Value = Null
    Dim strSelect As String
    strSelect = "select Списки.[Дата_приема], Списки.[Входящий], Списки.[КодТочки], Списки.[№_списка], " & _
    "Списки.[Название], Списки.[Кол-во_дог], Списки.[Не_принято], Списки.[Передал], Списки.[Принял] " & _
    "FROM [Списки] INNER JOIN [Договора] ON Списки.[№_списка] = [Акты и ПТС].[№_списка]" & _
    "INNER JOIN [Акты и ПТС] ON Договора.[№_дог] = [Акты и ПТС].[№_дог]"
    Debug.Print strSelect
    Me.RecordSource = strSelect
End Sub
Выходит ошибка, которую я не понимаю. Почему пропущен, если там ON стоит. Или VBA это не понимает?

К сообщению приложен файл. Размер - 0Kb
6 июн 06, 12:07    [2744422]     Ответить | Цитировать Сообщить модератору
 Re: SQL в VBA  [new]
..................
Guest
Frost_Imp
..................
Не ленитесь создавать сткроковую переменную для текста запроса и делать ей Debug.Print - будет гораздо проще отлаживать код.

За совет спасибо, только что это даст? (ответьте пожалуйста, если не трудно)
..................
А также научитесь переносить строку команды на новую - длинные строки неудобно читать.

Полезный совет, спасибо!

Private Sub Кнопка39_Click()
Dim strSelect as String
    strSelect = "select Списки.Дата_приема, Списки.Входящий, " & _
                "Списки.КодТочки, Списки.№_списка, Списки.Название, Списки. etc "
Debug.Print strSelect

End Sub
Выполняете. Потом нажимаете Ctrl+G. Попадаете в "Immediate Window" - окно отладки. Там печатается то, что после Debug.Print. Во-первых, видите значение строковой переменной. Если там литеральные значения (не переменные или константы или свойства объектов), то польза неочевидна (хотя тоже есть - печатается без кавычек). А вот если строка собирается из литералов и значений + переменные/константы/свойства объектов, то польза громадная - будет напечатаны их конкретные значения, а не имена.

Т.е.

Debug.Print "Select * From MyTable WHERE ID=" & Me.ID будет напечатано как
Select * From MyTable WHERE ID=25

Это можно вставить в конктруктор запросов и посмотреть, что получается - проверить синтаксис SQL, к примеру, или результаты запроса.

Также почитайте про точки останова, инструкцию Stop и другие окна VBE - Locals Window, Watch Window, пошаговое исполнение кода (F8).
6 июн 06, 12:08    [2744425]     Ответить | Цитировать Сообщить модератору
 Re: SQL в VBA  [new]
..................
Guest
Похоже, нужен пробел перед Inner Join. Результат Debug.Print strSelect покажите.
6 июн 06, 12:09    [2744437]     Ответить | Цитировать Сообщить модератору
 Re: SQL в VBA  [new]
Frost_Imp
Member

Откуда: Белокаменная
Сообщений: 1643
..................
Похоже, нужен пробел перед Inner Join. Результат Debug.Print strSelect покажите.

Так там же стоит пробел :-\ По поводу результата... Там то, о чем вы говорили
..................
Если там литеральные значения (не переменные или константы или свойства объектов), то польза неочевидна (хотя тоже есть - печатается без кавычек).

Если что - в файле

К сообщению приложен файл (immediate.txt - 2Kb) cкачать
6 июн 06, 12:19    [2744492]     Ответить | Цитировать Сообщить модератору
 Re: SQL в VBA  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
Frost_Imp
Так там же стоит пробел :-\
Frost_Imp
[№_списка]INNER JOIN
6 июн 06, 12:21    [2744511]     Ответить | Цитировать Сообщить модератору
 Re: SQL в VBA  [new]
Frost_Imp
Member

Откуда: Белокаменная
Сообщений: 1643
2 Владимир Саныч
Да, нашел, но проблему не отменило
6 июн 06, 12:22    [2744518]     Ответить | Цитировать Сообщить модератору
 Re: SQL в VBA  [new]
Hummer
Member

Откуда:
Сообщений: 2583
2 Frost_Imp
Вы читать умеете то, что вам пишется в сообщении??
Там же приведён текст запроса и ясно видно, что нет пробела перед Inner Join.
Носом меня ткните, где у вас в этой строке пробел после переноса строчкив когде vba?
Frost_Imp
[Акты и ПТС].[№_списка]" & _
"INNER JOIN



2 ..................
Да не похоже, а точно нужен.
6 июн 06, 12:23    [2744526]     Ответить | Цитировать Сообщить модератору
 Re: SQL в VBA  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
Frost_Imp
2 Владимир Саныч
Да, нашел, но проблему не отменило

"Нашел" или "нашел и исправил"?
6 июн 06, 12:24    [2744536]     Ответить | Цитировать Сообщить модератору
 Re: SQL в VBA  [new]
Программист-Любитель
Member

Откуда:
Сообщений: 16839
Помимо пропущенного пробела не хватает скобок в иннер джоинах ?

Да сделайте наконец <Ctrl+G>"? strSelect"<Enter> !
И возьмите результат в окно конструктора запросов !
6 июн 06, 12:25    [2744547]     Ответить | Цитировать Сообщить модератору
 Re: SQL в VBA  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
Программист-Любитель
Помимо пропущенного пробела не хватает скобок в иннер джоинах ?

Точно.
https://www.sql.ru/faq/faq_topic.aspx?fid=213
вопрос 26.
6 июн 06, 12:26    [2744558]     Ответить | Цитировать Сообщить модератору
 Re: SQL в VBA  [new]
Frost_Imp
Member

Откуда: Белокаменная
Сообщений: 1643
Владимир Саныч

"Нашел" или "нашел и исправил"?

Разумеется "нашел и исправил"
ПЛ
Да сделайте наконец <Ctrl+G>"? strSelect"<Enter> !
И возьмите результат в окно конструктора запросов !

Сделал. Вставил в окно запроса. Та же фигня

К сообщению приложен файл. Размер - 0Kb
6 июн 06, 12:27    [2744565]     Ответить | Цитировать Сообщить модератору
 Re: SQL в VBA  [new]
Hummer
Member

Откуда:
Сообщений: 2583
Всё, клиника:)
6 июн 06, 12:28    [2744569]     Ответить | Цитировать Сообщить модератору
 Re: SQL в VBA  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
Frost_Imp
Разумеется "нашел и исправил"

Программу в студию. Там не только пробела по-прежнему нет, но и квадратная скобка опять непарная.
6 июн 06, 12:30    [2744571]     Ответить | Цитировать Сообщить модератору
 Re: SQL в VBA  [new]
Frost_Imp
Member

Откуда: Белокаменная
Сообщений: 1643
Владимир Саныч
Точно.
https://www.sql.ru/faq/faq_topic.aspx?fid=213
вопрос 26.

Спасибо! Исправил
    strSelect = "select Списки.[Дата_приема], Списки.[Входящий], Списки.[КодТочки], Списки.[№_списка], " & _
    "Списки.[Название], Списки.[Кол-во_дог], Списки.[Не_принято], Списки.[Передал], Списки.[Принял] " & _
    "FROM (([Списки] INNER JOIN [Договора] ON Списки.[№_списка] = [Акты и ПТС].[№_списка])" & _
    " INNER JOIN [Акты и ПТС] ON Договора.[№_дог] = [Акты и ПТС].[№_дог])"
Ошибка синтаксиса в операции Join
6 июн 06, 12:33    [2744583]     Ответить | Цитировать Сообщить модератору
 Re: SQL в VBA  [new]
..................
Guest
Раз уж начал советовать, то еще добавлю чуть-чуть: ставьте пробелы единообразно, либо в конце строки, либо в начале - Ordnung muss sein - проще будет обходить такие банальные ошибки.
6 июн 06, 12:38    [2744609]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3 4   вперед  Ctrl      все
Все форумы / Microsoft Access Ответить