|
|
|
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
|
|||
|---|---|---|---|
|
#18+
С вашей помощью создан многострочный SQL-ный текст запроса, но работать он не хочет - ругается, что, мол, ошибка синтаксиса в выражении запроса. И как же там теперь ошибку отыскать? А может IIf состоять из нескольких возможных вариантов, или только из двух? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2004, 18:31 |
|
||
|
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
|
|||
|---|---|---|---|
|
#18+
В SQL существенно, большими или маленькими буквами написаны всякие "AND", "IIf", "[Forms] и проч.? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2004, 18:33 |
|
||
|
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
|
|||
|---|---|---|---|
|
#18+
Кинь мне на ящик посмотрю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2004, 18:33 |
|
||
|
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
|
|||
|---|---|---|---|
|
#18+
нет не существенно а где запрос то делаешь какой акесс ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2004, 18:39 |
|
||
|
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
|
|||
|---|---|---|---|
|
#18+
Показал бы строку... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2004, 18:52 |
|
||
|
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
|
|||
|---|---|---|---|
|
#18+
Globusovich , ты из него выкидывай частями сомнительные элементы и смотри - заработает или нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2004, 19:26 |
|
||
|
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
|
|||
|---|---|---|---|
|
#18+
У-у! Строку. Их там столько! Вот они: ________________________________ 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 поля пустые, то дата = * ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2004, 19:32 |
|
||
|
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
|
|||
|---|---|---|---|
|
#18+
Ну ты и извращенец. Мне кажется, лучше функцию свою функцию написать, чем с этими уродскими IIF извращаться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2004, 19:38 |
|
||
|
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
|
|||
|---|---|---|---|
|
#18+
Он вообще чего должен вывести, книжки, у которых что-то больше 0 и которые каким-то конкретным товарищам отгружены, что-ли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2004, 19:45 |
|
||
|
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
|
|||
|---|---|---|---|
|
#18+
Выводит накладную по книгам, проданным определенному клиенту за определенную дату или период. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2004, 19:57 |
|
||
|
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
|
|||
|---|---|---|---|
|
#18+
А зачем столько IIF-ов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2004, 20:02 |
|
||
|
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
|
|||
|---|---|---|---|
|
#18+
Для реализации вот этого: _________________________________________________ В запросе дата выводится следующим образом: Если поле "конкретная дата" не ноль, то дата = "конкретная дата" Если поля "дата с" и "дата по" не ноль, то дата между ними. Если поле "дата с" не пустое, а поле "дата по" пустое, то дата > "дата с" Если поле "дата по" не пустое, а поле "дата с" пустое, то дата < "дата по" Если все 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) = "*"))) ------------------------------------------------------ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2004, 20:09 |
|
||
|
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
|
|||
|---|---|---|---|
|
#18+
Я думаю, что Если поле "конкретная дата" не ноль, то дата = "конкретная дата" Если поля "дата с" и "дата по" не ноль, то дата между ними. Если поле "дата с" не пустое, а поле "дата по" пустое, то дата > "дата с" Если поле "дата по" не пустое, а поле "дата с" пустое, то дата < "дата по" Если все 3 поля пустые, то дата = * лучше в кодом реализовать, а не в запросе Сделай функицию function Attemble_tail(поле1, поле2 ... ) as string if ... select case.. ... end function Ее можно в дебаггере отладить, чтоб возвращала он то, что надо На вход ей подаешь поля, она там все проверяет, и возвращает "хвост" запроса strTail=Assemble_Tail() потом клеишь strSQL=strMainPart & strTail и выполняешь его. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2004, 20:11 |
|
||
|
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
|
|||
|---|---|---|---|
|
#18+
Ну так и разделяй дальше... Мне уже не нравится первый IIF. Выдели его в отдельный запрос ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2004, 20:24 |
|
||
|
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
|
|||
|---|---|---|---|
|
#18+
Темный, а мне IIF вообще не нравится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2004, 20:29 |
|
||
|
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
|
|||
|---|---|---|---|
|
#18+
Мне кажется, что поле Конкретная дата можно убрать. Пусть конкретная дата - это когда Дата1=Дата2. При вводе в поле Дата1 заполняй Дата2=Дата1 автоматом, если надо искать "До", опустошай поле Дата1, если "После" - то поле Дата2, если для любой даты - опустошай оба поля. Все меньше будет условий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2004, 20:33 |
|
||
|
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
|
|||
|---|---|---|---|
|
#18+
2 Varan: Главное - вовремя остановиться при использовании его в запросах ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2004, 20:34 |
|
||
|
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
|
|||
|---|---|---|---|
|
#18+
вот мне вариант с функцией больше всего нравится. Только я - чайник с ручкой, не понимаю, как это сделать. 1. Я пишу запрос. 2. я пишу функцию, возвращающую кусок инструкции SQL Но как потом результат этой функции подрубить к имеющемуся коду запроса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2004, 20:42 |
|
||
|
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
|
|||
|---|---|---|---|
|
#18+
Я ж тебе написал strTail=Assemble_Tail(поле1,поле2...) потом клеишь strSQL=strMainPart & strTail да, и еще надо в recordsours формы или отчета эту строку засунуть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2004, 20:46 |
|
||
|
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
|
|||
|---|---|---|---|
|
#18+
вот тебе "псеводпример" в том коде, что открывает отчет или форму на событие "Загрузка" или "открытие" пишешь типа 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2004, 20:56 |
|
||
|
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
|
|||
|---|---|---|---|
|
#18+
О! Спасибо большое! Осталось только придумать, как это в какую-нить форму запихнуть. :) Предполагалось, что у меня маленькая всплывающая формочка с полями, который заполняет юзер (те самые параметры), с кнопочкой "выход" и кнопочкой "показать накладную", на которую как раз и повешен запрос. Но это уже не такой трабл. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2004, 21:01 |
|
||
|
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
|
|||
|---|---|---|---|
|
#18+
Globusovich, Ну так в Load или Open и запихни, а на событие "нажатие кнопки" показа отчета поставь обработчик ошибок и запусти на всякий пожарный случай функцию до запуска отчета, чтобы отчет не открывался, если ошибка, и выдай сообщение "Извините, показ отчета не состоится, поскольку...дата начала больше даты конца" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2004, 21:08 |
|
||
|
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
|
|||
|---|---|---|---|
|
#18+
Всё, всё, уже иду! :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2004, 21:22 |
|
||
|
Как найти ошибку в инструкции SQL? (В продолжение чайниковского вопроса)
|
|||
|---|---|---|---|
|
#18+
ошибка на вскидку >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]
start [/forum/topic.php?fid=45&msg=32423379&tid=1676443]: |
0ms |
get settings: |
11ms |
get forum list: |
21ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
45ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
83ms |
get tp. blocked users: |
2ms |
| others: | 229ms |
| total: | 417ms |

| 0 / 0 |
