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

________________________________
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
26.02.2004, 19:38
    #32423342
Varan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
Ну ты и извращенец. Мне кажется, лучше функцию свою функцию написать, чем с этими уродскими IIF извращаться.
...
Рейтинг: 0 / 0
26.02.2004, 19:45
    #32423351
Varan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
Он вообще чего должен вывести, книжки, у которых что-то больше 0 и которые каким-то конкретным товарищам отгружены, что-ли?
...
Рейтинг: 0 / 0
26.02.2004, 19:57
    #32423358
Globusovich
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
Выводит накладную по книгам, проданным определенному клиенту за определенную дату или период.
...
Рейтинг: 0 / 0
26.02.2004, 20:02
    #32423360
Varan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
А зачем столько IIF-ов?
...
Рейтинг: 0 / 0
26.02.2004, 20:09
    #32423363
Globusovich
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
Для реализации вот этого:
_________________________________________________
В запросе дата выводится следующим образом:

Если поле "конкретная дата" не ноль, то дата = "конкретная дата"
Если поля "дата с" и "дата по" не ноль, то дата между ними.
Если поле "дата с" не пустое, а поле "дата по" пустое, то дата > "дата с"
Если поле "дата по" не пустое, а поле "дата с" пустое, то дата < "дата по"
Если все 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
26.02.2004, 20:11
    #32423366
Varan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
Я думаю, что
Если поле "конкретная дата" не ноль, то дата = "конкретная дата"
Если поля "дата с" и "дата по" не ноль, то дата между ними.
Если поле "дата с" не пустое, а поле "дата по" пустое, то дата > "дата с"
Если поле "дата по" не пустое, а поле "дата с" пустое, то дата < "дата по"
Если все 3 поля пустые, то дата = *
лучше в кодом реализовать, а не в запросе
Сделай функицию
function Attemble_tail(поле1, поле2 ... ) as string
if ...
select case..
...
end function
Ее можно в дебаггере отладить, чтоб возвращала он то, что надо
На вход ей подаешь поля, она там все проверяет, и возвращает "хвост" запроса
strTail=Assemble_Tail()
потом клеишь
strSQL=strMainPart & strTail
и выполняешь его.
...
Рейтинг: 0 / 0
26.02.2004, 20:24
    #32423375
Темный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
Ну так и разделяй дальше...
Мне уже не нравится первый IIF. Выдели его в отдельный запрос
...
Рейтинг: 0 / 0
26.02.2004, 20:29
    #32423379
Varan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
Темный,
а мне IIF вообще не нравится.
...
Рейтинг: 0 / 0
26.02.2004, 20:33
    #32423382
Лифчик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
Мне кажется, что поле Конкретная дата можно убрать. Пусть конкретная дата - это когда Дата1=Дата2. При вводе в поле Дата1 заполняй Дата2=Дата1 автоматом, если надо искать "До", опустошай поле Дата1, если "После" - то поле Дата2, если для любой даты - опустошай оба поля. Все меньше будет условий.
...
Рейтинг: 0 / 0
26.02.2004, 20:34
    #32423383
Темный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
2 Varan:
Главное - вовремя остановиться при использовании его в запросах
...
Рейтинг: 0 / 0
26.02.2004, 20:42
    #32423394
Globusovich
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
вот мне вариант с функцией больше всего нравится. Только я - чайник с ручкой, не понимаю, как это сделать.
1. Я пишу запрос.
2. я пишу функцию, возвращающую кусок инструкции SQL

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

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

в том коде, что открывает отчет или форму на событие "Загрузка" или "открытие" пишешь типа
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
26.02.2004, 21:01
    #32423409
Globusovich
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
О! Спасибо большое!
Осталось только придумать, как это в какую-нить форму запихнуть. :)
Предполагалось, что у меня маленькая всплывающая формочка с полями, который заполняет юзер (те самые параметры), с кнопочкой "выход" и кнопочкой "показать накладную", на которую как раз и повешен запрос.
Но это уже не такой трабл. :)
...
Рейтинг: 0 / 0
26.02.2004, 21:08
    #32423413
Varan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
Globusovich,
Ну так в Load или Open и запихни, а на событие "нажатие кнопки" показа отчета поставь обработчик ошибок и запусти на всякий пожарный случай функцию до запуска отчета, чтобы отчет не открывался, если ошибка, и выдай сообщение "Извините, показ отчета не состоится, поскольку...дата начала больше даты конца"
...
Рейтинг: 0 / 0
26.02.2004, 21:22
    #32423422
Globusovich
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
Всё, всё, уже иду! :)
...
Рейтинг: 0 / 0
27.02.2004, 09:42
    #32423663
Sfagnum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
ошибка на вскидку
>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
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса) / 24 сообщений из 24, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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