powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
24 сообщений из 24, страница 1 из 1
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
    #32423266
Globusovich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С вашей помощью создан многострочный SQL-ный текст запроса, но работать он не хочет - ругается, что, мол, ошибка синтаксиса в выражении запроса.
И как же там теперь ошибку отыскать?
А может IIf состоять из нескольких возможных вариантов, или только из двух?
...
Рейтинг: 0 / 0
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
    #32423268
Globusovich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В SQL существенно, большими или маленькими буквами написаны всякие "AND", "IIf", "[Forms] и проч.?
...
Рейтинг: 0 / 0
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
    #32423270
АСУчник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кинь мне на ящик посмотрю
...
Рейтинг: 0 / 0
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
    #32423278
help1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нет не существенно
а где запрос то делаешь какой акесс
...
Рейтинг: 0 / 0
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
    #32423291
Фотография Deminik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Показал бы строку...
...
Рейтинг: 0 / 0
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
    #32423322
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Globusovich , ты из него выкидывай частями сомнительные элементы и смотри - заработает или нет.
...
Рейтинг: 0 / 0
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
    #32423332
Globusovich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У-у! Строку. Их там столько! Вот они:

________________________________
SELECT tblBook.strBooAuthor, tblBook.strBooTitle, tblSale.intSalHowMany, tblSale.curSalPrice, [intSalHowMany]*[curSalPrice] AS Сумма, tblSale.cboSalWhoTo, tblSale.datSalWhen, tblSale.strSalDocNum, tblSale.strSalComment
FROM tblBook INNER JOIN tblSale ON tblBook.cntBooBookID = tblSale.intSalBookID
WHERE (((tblSale.intSalHowMany)>0)
AND ((tblSale.cboSalWhoTo)=[Forms]![frmInvoiceClient]![Fld_cboClient] Or [Forms]![frmInvoiceClient]![Fld_cboClient] is Null)

AND ((IIf [Forms]![frmInvoiceClient]![Fld_datDatDef] is not null, (tblSale.datSalWhen)=[Forms]![frmInvoiceClient]![Fld_datDatDef],
IIf([Forms]![frmInvoiceClient]![Fld_datDatFrom] Is Not Null And [Forms]![frmInvoiceClient]![Fld_datDatTo] Is Not Null,
(tblSale.datSalWhen) Between [Forms]![frmInvoiceClient]![Fld_datDatFrom] And [Forms]![frmInvoiceClient]![Fld_datDatTo],
IIf([Forms]![frmInvoiceClient]![Fld_datDatFrom] Is Not Null And [Forms]![frmInvoiceClient]![Fld_datDatTo] is null,
(tblSale.datSalWhen) > [Forms]![frmInvoiceClient]![Fld_datDatFrom]
IIf([Forms]![frmInvoiceClient]![Fld_datDatTo] Is Not Null And [Forms]![frmInvoiceClient]![Fld_datDatFrom] is null,
(tblSale.datSalWhen) < [Forms]![frmInvoiceClient]![Fld_datDatTo]
IIf([Forms]![frmInvoiceClient]![Fld_datDatFrom] Is Null And [Forms]![frmInvoiceClient]![Fld_datDatTo] Is Null AND [Forms]![frmInvoiceClient]![Fld_datDatDef] is Null (tblSale.datSalWhen) = "*")))

AND ((tblSale.strSalDocNum)=[Forms]![frmInvoiceClient]![Fld_strDocNum] Or [Forms]![frmInvoiceClient]![Fld_strDocNum] is Null)
AND ((tblSale.strSalComment)=[Forms]![frmInvoiceClient]![Fld_strComment] Or [Forms]![frmInvoiceClient]![Fld_strComment] is Null));
_____________________________________-

Трабл, как я понимаю, заключен между пустыми строками.
Там дело вот в чем:

Есть поле "конкресная дата" ([Forms]![frmInvoiceClient]![Fld_datDatDef])
Есть поле "дата с" ([Forms]![frmInvoiceClient]![Fld_datDatFrom])
Есть поле "дата по" ([Forms]![frmInvoiceClient]![Fld_datDatTo])

В запросе дата выводится следующим образом:

Если поле "конкретная дата" не ноль, то дата = "конкретная дата"
Если поля "дата с" и "дата по" не ноль, то дата между ними.
Если поле "дата с" не пустое, а поле "дата по" пустое, то дата > "дата с"
Если поле "дата по" не пустое, а поле "дата с" пустое, то дата < "дата по"
Если все 3 поля пустые, то дата = *
...
Рейтинг: 0 / 0
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
    #32423342
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну ты и извращенец. Мне кажется, лучше функцию свою функцию написать, чем с этими уродскими IIF извращаться.
...
Рейтинг: 0 / 0
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
    #32423351
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Он вообще чего должен вывести, книжки, у которых что-то больше 0 и которые каким-то конкретным товарищам отгружены, что-ли?
...
Рейтинг: 0 / 0
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
    #32423358
Globusovich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выводит накладную по книгам, проданным определенному клиенту за определенную дату или период.
...
Рейтинг: 0 / 0
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
    #32423360
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем столько IIF-ов?
...
Рейтинг: 0 / 0
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
    #32423363
Globusovich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для реализации вот этого:
_________________________________________________
В запросе дата выводится следующим образом:

Если поле "конкретная дата" не ноль, то дата = "конкретная дата"
Если поля "дата с" и "дата по" не ноль, то дата между ними.
Если поле "дата с" не пустое, а поле "дата по" пустое, то дата > "дата с"
Если поле "дата по" не пустое, а поле "дата с" пустое, то дата < "дата по"
Если все 3 поля пустые, то дата = *
--------------------------------------------------------

А проблема действительно в ифах. чего-то там нетого. Как бы его иначе реализовать ?

Вот тут грабли:_______________________________________________
AND ((IIf [Forms]![frmInvoiceClient]![Fld_datDatDef] is not null, (tblSale.datSalWhen)=[Forms]![frmInvoiceClient]![Fld_datDatDef],
IIf([Forms]![frmInvoiceClient]![Fld_datDatFrom] Is Not Null And [Forms]![frmInvoiceClient]![Fld_datDatTo] Is Not Null,
(tblSale.datSalWhen) Between [Forms]![frmInvoiceClient]![Fld_datDatFrom] And [Forms]![frmInvoiceClient]![Fld_datDatTo],
IIf([Forms]![frmInvoiceClient]![Fld_datDatFrom] Is Not Null And [Forms]![frmInvoiceClient]![Fld_datDatTo] is null,
(tblSale.datSalWhen) > [Forms]![frmInvoiceClient]![Fld_datDatFrom]
IIf([Forms]![frmInvoiceClient]![Fld_datDatTo] Is Not Null And [Forms]![frmInvoiceClient]![Fld_datDatFrom] is null,
(tblSale.datSalWhen) < [Forms]![frmInvoiceClient]![Fld_datDatTo]
IIf([Forms]![frmInvoiceClient]![Fld_datDatFrom] Is Null And [Forms]![frmInvoiceClient]![Fld_datDatTo] Is Null AND [Forms]![frmInvoiceClient]![Fld_datDatDef] is Null (tblSale.datSalWhen) = "*")))
------------------------------------------------------
...
Рейтинг: 0 / 0
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
    #32423366
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я думаю, что
Если поле "конкретная дата" не ноль, то дата = "конкретная дата"
Если поля "дата с" и "дата по" не ноль, то дата между ними.
Если поле "дата с" не пустое, а поле "дата по" пустое, то дата > "дата с"
Если поле "дата по" не пустое, а поле "дата с" пустое, то дата < "дата по"
Если все 3 поля пустые, то дата = *
лучше в кодом реализовать, а не в запросе
Сделай функицию
function Attemble_tail(поле1, поле2 ... ) as string
if ...
select case..
...
end function
Ее можно в дебаггере отладить, чтоб возвращала он то, что надо
На вход ей подаешь поля, она там все проверяет, и возвращает "хвост" запроса
strTail=Assemble_Tail()
потом клеишь
strSQL=strMainPart & strTail
и выполняешь его.
...
Рейтинг: 0 / 0
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
    #32423375
Фотография Темный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так и разделяй дальше...
Мне уже не нравится первый IIF. Выдели его в отдельный запрос
...
Рейтинг: 0 / 0
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
    #32423379
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Темный,
а мне IIF вообще не нравится.
...
Рейтинг: 0 / 0
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
    #32423382
Фотография Лифчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне кажется, что поле Конкретная дата можно убрать. Пусть конкретная дата - это когда Дата1=Дата2. При вводе в поле Дата1 заполняй Дата2=Дата1 автоматом, если надо искать "До", опустошай поле Дата1, если "После" - то поле Дата2, если для любой даты - опустошай оба поля. Все меньше будет условий.
...
Рейтинг: 0 / 0
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
    #32423383
Фотография Темный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Varan:
Главное - вовремя остановиться при использовании его в запросах
...
Рейтинг: 0 / 0
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
    #32423394
Globusovich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот мне вариант с функцией больше всего нравится. Только я - чайник с ручкой, не понимаю, как это сделать.
1. Я пишу запрос.
2. я пишу функцию, возвращающую кусок инструкции SQL

Но как потом результат этой функции подрубить к имеющемуся коду запроса?
...
Рейтинг: 0 / 0
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
    #32423399
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я ж тебе написал

strTail=Assemble_Tail(поле1,поле2...)
потом клеишь
strSQL=strMainPart & strTail
да, и еще надо в recordsours формы или отчета эту строку засунуть.
...
Рейтинг: 0 / 0
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
    #32423404
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот тебе "псеводпример"

в том коде, что открывает отчет или форму на событие "Загрузка" или "открытие" пишешь типа
Private Sub Form_Open(Cancel As Integer)

dim strSQl as string
dim strMain as string
dim strTail as string

strMain="SELECT tblBook.strBooAuthor, tblBook.strBooTitle, tblSale.intSalHowMany, tblSale.curSalPrice, [intSalHowMany]*[curSalPrice] AS Сумма, tblSale.cboSalWhoTo, tblSale.datSalWhen, tblSale.strSalDocNum, tblSale.strSalComment
FROM tblBook INNER JOIN tblSale ON tblBook.cntBooBookID = tblSale.intSalBookID
WHERE (((tblSale.intSalHowMany)>0) "

strTail=Assemble_Tail(поле1,поле2...)
потом клеишь
strSQL=strMainPart & strTail

me.recordsource=strsql

End Sub

function Attemble_tail(поле1, поле2 ... ) as string
if ...
select case..
...
end function
...
Рейтинг: 0 / 0
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
    #32423409
Globusovich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О! Спасибо большое!
Осталось только придумать, как это в какую-нить форму запихнуть. :)
Предполагалось, что у меня маленькая всплывающая формочка с полями, который заполняет юзер (те самые параметры), с кнопочкой "выход" и кнопочкой "показать накладную", на которую как раз и повешен запрос.
Но это уже не такой трабл. :)
...
Рейтинг: 0 / 0
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
    #32423413
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Globusovich,
Ну так в Load или Open и запихни, а на событие "нажатие кнопки" показа отчета поставь обработчик ошибок и запусти на всякий пожарный случай функцию до запуска отчета, чтобы отчет не открывался, если ошибка, и выдай сообщение "Извините, показ отчета не состоится, поскольку...дата начала больше даты конца"
...
Рейтинг: 0 / 0
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
    #32423422
Globusovich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё, всё, уже иду! :)
...
Рейтинг: 0 / 0
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
    #32423663
Sfagnum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ошибка на вскидку
>AND ((IIf [Forms]![frmInvoiceClient]![Fld_datDatDef] is not null, (tblSale.datSalWhen)=[Forms]![frmInvoiceClient...

AND ((IIf ( [Forms]![frmInvoiceClient]![Fld_datDatDef] is not null, (tblSale.datSalWhen)=[Forms]![frmInvoiceClient...

Сделать можно всё!!!
Только бы знать как...
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]