powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Запрос
36 сообщений из 36, показаны все 2 страниц
Запрос
    #33618008
мышьбелая
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как может быть такое, что в SQL менеджере запрос выполняется, а в процессе выполнения программы - нет?
запрос такого рода:

..f day=std:1:endd d
...s ddt="SELECT dd.Cz as ids FROM Table1 as ds, Table2 as dd, Table3 as dt WHERE ds.Date=? AND ds.ID=dd.DId AND dd.Code=? AND ds.DocType=1 AND ds.Destroyed=0 AND dt.Docs=dd.DId AND dt.CSupp<>133"
...d ddrez.Prepare(ddt)
...d ddrez.Execute(day,chkdrug)
...f q:'ddrez.Next() s cena=ddrez.Get("ids")
....d MApplication.MessageBox(chkdrug,cena)

Т.е. общий смысл запроса, мы ищем только те документы, в тов.строках которого встречается chkdrug за конкретную дату обозначенную в day + некоторые доп. условия.
Тело документа это Table2, Шапочка - Table3, Table1 параметры документа.

Так вот, в коде программы этот запрос выполняется, но результат всегда, что ничего не найдено по запросу.
...
Рейтинг: 0 / 0
Запрос
    #33618315
Maksim UM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
скорее всего ошибка в формате даты (ds.Date=?)...
я так понимаю, что day - в формате $H,
тогда нужно
Код: plaintext
set ddrez.RuntimeMode= 0 
иначе нужно в текстовом виде дату передавать
в Execute
(см. доку по классу %Library.ResultSet)
...
Рейтинг: 0 / 0
Запрос
    #33619029
та же мышь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нет. в ds.Date они как раз хранятся в том виде, в каком выдает их $Horolog
...
Рейтинг: 0 / 0
Запрос
    #33619846
Maksim UM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
та же мышьНет. в ds.Date они как раз хранятся в том виде, в каком выдает их $Horolog
Храняться да, а в запросе это другое.
Нужно проэксперементировать с RuntimeMode
...
Рейтинг: 0 / 0
Запрос
    #33620058
оно же
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А можно поподробнее о RunTimeMode? В справке что то ничего о нет не нашел.
...
Рейтинг: 0 / 0
Запрос
    #33620124
то же
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да и судя по всему дело не в поле с датой.
Потому что даже если убрать из запроса условие с датой и искать просто все товарные строки, тоже ничего не выводится.

Хотя банальный select sd.Name from Dname as sd where Code="_chkdrug работает нормально.
...
Рейтинг: 0 / 0
Запрос
    #33620157
yvv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
yvv
Гость
>>...f q:'ddrez.Next() s cena=ddrez.Get("ids") d
>>....d MApplication.MessageBox(chkdrug,cena)


Для этих двух строчек пропущен оператор "d"
...
Рейтинг: 0 / 0
Запрос
    #33620213
???
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и на каком же основании там должен быть d?
...
Рейтинг: 0 / 0
Запрос
    #33620225
Maksim UM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
оно жеА можно поподробнее о RunTimeMode? В справке что то ничего о нет не нашел.
позволю себе выдержку из справки:
property RuntimeMode As %String
Use this method to set the SQL runtime mode for the query to be executed. Setting the runtime mode for this ResultSet does not permanently change the $zu(115,5) value. Possible values mode are:
0 for LOGICAL mode. (это внутренний формат Cache, например $H)
1 for ODBC mode.
2 for DISPLAY mode.
"" to use the process wide $zu(115,5) value.
...
Рейтинг: 0 / 0
Запрос
    #33620405
-((((
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
теперь вообще никакие запросы не выполняются. -(

Просто голый кусок кода. После него ничего нет и перед ним ничего нет и все равно.

s ddr=##class(%ResultSet).%New("%DynamicQuery.SQL")
s ddt="SELECT FullName FROM Prep WHERE ExtCode=4966 and destroyed=0"
d ddr.Prepare(ddt)
d ddr.Execute()
f q:'ddr.Next() s nm=ddr.Get("FullName")
.d MApplication.MessageBox(nm,"BLA")
...
Рейтинг: 0 / 0
Запрос
    #33620510
newbuy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
f q:'ddr.Next() d
.s nm=ddr.Get("FullName")
.d MApplication.MessageBox(nm,"BLA")
...
Рейтинг: 0 / 0
Запрос
    #33620670
-(((((
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Щас это запрос стал выдавать результат в такой вот конструкции

s nm=ddr.Get("FullName")
f q:'ddr.Next() s nm=ddr.Get("FullName")
.d MApplication.MessageBox(nm,"BLA")
d MApplication.MessageBox(nm,"BLA")

Но это для простейшего запроса.
А изначальный запрос, какой был в начале темы так и не проходит
...
Рейтинг: 0 / 0
Запрос
    #33620707
newbuy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-(((((Щас это запрос стал выдавать результат в такой вот конструкции

s nm=ddr.Get("FullName")
f q:'ddr.Next() s nm=ddr.Get("FullName")
.d MApplication.MessageBox(nm,"BLA")
d MApplication.MessageBox(nm,"BLA")

Но это для простейшего запроса.
А изначальный запрос, какой был в начале темы так и не проходит

Cтрочка ".d MApplication.MessageBox(nm,"BLA")" не выполняется.
А "d MApplication.MessageBox(nm,"BLA")" выводит сообщение с последним полученным значением FullName и выводится 1 раз. См. предыдущий пост.
...
Рейтинг: 0 / 0
Запрос
    #33620731
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-((((теперь вообще никакие запросы не выполняются. -(

Неправильно:
s ddr=##class(%ResultSet).%New("%DynamicQuery.SQL")
Правильно так:
s ddr=##class(%ResultSet).%New("%DynamicQuery:SQL")
...
Рейтинг: 0 / 0
Запрос
    #33622642
=))
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
=))
Гость
Да без разницы. Что с :, что с .
...
Рейтинг: 0 / 0
Запрос
    #33622833
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) может области разные
2) функции Prepare - Execute возвращают %Status, имеет смысл обратить на него внимание, там иногда полезное бывает.
...
Рейтинг: 0 / 0
Запрос
    #33622996
yvv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
yvv
Гость
мля.. поставьте оператор "d" и всё заработает

>>...f q:'ddrez.Next() s cena=ddrez.Get("ids") D
>>....d MApplication.MessageBox(chkdrug,cena)
...
Рейтинг: 0 / 0
Запрос
    #33623261
-((
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
-((
Гость
Да даже если и с d.
Результат нулевой.

Дата в поле Date хранится в виде $H. При этом само поле Date является типа String. никакие to_char не помогают.

Есть еще одно поле типа Date.
Там пробовал такое: where DateEdit=to_date('26.03.2006','DD.MM.YYYY')
опять же, в SQL менеджере работает, в программе нет.
...
Рейтинг: 0 / 0
Запрос
    #33623363
yvv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
yvv
Гость
а строку запроса не пробовали явно формировать?
Вот так, например:

...s ddt="SELECT dd.Cz as ids FROM Table1 as ds, Table2 as dd, Table3 as dt WHERE ds.Date='"_day_"' AND ds.ID=dd.DId AND dd.Code='"_chkdrug_"' AND ds.DocType=1 AND ds.Destroyed=0 AND dt.Docs=dd.DId AND dt.CSupp<>133"

тогда здесь параметры уже не нужны
...d ddrez.Execute()
...
Рейтинг: 0 / 0
Запрос
    #33623402
-(((
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Щас она у меня как раз явная...
там даже все полностью прописано и данные из переменных она не берет.
И все равно бестолку. Спотыкается на конвертации данных в поле Date.
...
Рейтинг: 0 / 0
Запрос
    #33623469
newbuy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
quot -(((]
Щас она у меня как раз явная...
там даже все полностью прописано и данные из переменных она не берет.
И все равно бестолку. Спотыкается на конвертации данных в поле Date.[/quot]


Как определили что "спотыкается", MessageBox не появляется?
Этот "явный" запрос имеет результат в SQL Manager?
Проверяли ли возврат (%Status) у Prepare и Execute?
И D наконец поставили?
...
Рейтинг: 0 / 0
Запрос
    #33623516
-(
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
-(
Гость
d стоит.
Определяю что спотыкается, когда после where ставишь например Date=60339 AND DocType=1 and Destroyed=0 - Результат запроса пустой.
Если просто where DocType=1 and Destroyed=0, то выводится результат по условию.
Явный запрос результаты в SQL менеджере выводит.
...
Рейтинг: 0 / 0
Запрос
    #33623543
yvv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
yvv
Гость
этj, наверно, из за несоответствия типов..
поэксперементируйте с преобразованиями.
мож так +Date=60339
мож так Date='60339'
или еще как то. Должно помочь
...
Рейтинг: 0 / 0
Запрос
    #33623549
-((
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
-((
Гость
%Статус возвращает единицу.
...
Рейтинг: 0 / 0
Запрос
    #33623577
-(
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
-(
Гость
Нет. Такие варианты пробовал. Не помогает.
...
Рейтинг: 0 / 0
Запрос
    #33623992
VadimF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуйте, например, без ограничений по дате выполнить запрос в Вашей программе.
Созраните в переменную дату или посмотрите на нее в терминале.
Используйте именно этот формат даты.
Или просто в терминал выведите.

Если не поможет, то Вам будет нужно создать проектик с Вашими классами, программой для заполнения тесовых данных и Вашей программой, в которой у Вас есть многострадальный запрос.

В терминале наберите $ZV и определите точную версию Cache'.

Этот проект можно экспортировать и отправить Вашему техническому консультанту в InterSystems и в SQL.RU.

Вадим
...
Рейтинг: 0 / 0
Запрос
    #33624033
-(
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
-(
Гость
Без даты все отлично работает в программе.
Но мне нужна обязательная выборка по дате.

Версия Каши 5.0.2 Билд 607

На данный момент запрос выглядит так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 n nm, zpr, ztxt, st, dt
 s dt=+..SDate.Date
 s nm=""
 s zpr=##class(%ResultSet).%New("%DynamicQuery.SQL")
 s ztxt="SELECT ds.ID as ID FROM Docs as ds, DocTitles as dt WHERE ds.DateCreate="_dt_" AND ds.DocType=1 AND ds.Destroyed=0 AND ds.Titles=dt.ID AND dt.CodeOfSupplier<>133"
 d zpr.Prepare(ztxt)
 d zpr.Execute()
 f  q:'zpr.Next()  s nm=zpr.Get("ID")  d
 .d MApplication.MessageBox(nm,"BLA")
 d MApplication.MessageBox("END","")

Пробовалась переменная dt в кавычках и без них. Вот так:
SELECT ds.ID as ID FROM Docs as ds, DocTitles as dt WHERE ds.DateCreate='60339' AND ds.DocType=1 AND ds.Destroyed=0 AND ds.Titles=dt.ID AND dt.CodeOfSupplier<>133

Поле DateCreate - типа string.
...
Рейтинг: 0 / 0
Запрос
    #33624081
yvv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
yvv
Гость
Здесь
ds.DateCreate="_dt_"
нужно кавычки одиночные добавить.
Вот так:

ds.DateCreate='"_dt_"'
...
Рейтинг: 0 / 0
Запрос
    #33624085
-(устало....
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
там же написано.. пробовалось и с кавычками.
...
Рейтинг: 0 / 0
Запрос
    #33624102
yvv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
yvv
Гость
ааай ... не заметил что уже пробовались кавычки
...
Рейтинг: 0 / 0
Запрос
    #33624121
yvv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
yvv
Гость
Ну тогда остается эксперимент.
Уберите из запроса проверку ds.DateCreate, и выводите пары значений ds.DateCreate и dt на терминал или в файл. Только обрамляйте их какими нибудь символами, что бы пробел увидеть, если будет..
Тогда можно глазами посмотреть равны ли эти значения.. Если равны - ошибается компилятор. Если не равны, нужно понять как их преобразовывать.
...
Рейтинг: 0 / 0
Запрос
    #33624145
yvv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
yvv
Гость
И ещё... не знаю есть ли в этом смысл, но...

Я не использую конструкцию типа
s zpr=##class(%ResultSet).%New("%DynamicQuery.SQL")

а пишу просто
s xx=##class(%ResultSet).%New()

тоесть без "%DynamicQuery.SQL"

Есть ли разница - не знаю, но попробуйте, может поможет.
...
Рейтинг: 0 / 0
Запрос
    #33624188
yvv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
yvv
Гость
Хе..
а это то что?
s dt=+..SDate.Date
и в то же время
DocTitles as dt

НЕПОРЯДОК, однако
...
Рейтинг: 0 / 0
Запрос
    #33624224
VadimF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему у Вас такая старая версия Cache'.
Советую переходить на Cache' 5.0.21 или 5.1.

Как дата выводится в Терминал или в программу, если её выбрать ?

Вадим
...
Рейтинг: 0 / 0
Запрос
    #33624284
-(
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
-(
Гость
VadimFПочему у Вас такая старая версия Cache'.
Советую переходить на Cache' 5.0.21 или 5.1.

Как дата выводится в Терминал или в программу, если её выбрать ?

Вадим

По поводу новой версии Каши ничего сказать не могу. Работаем с тем, что есть. К тому же вопрос по поводу перехода на новую версию щас не стоит, и заканчивать вот эту программку нужно на той версии, что доступна в данный момент.

---
Дата из базы выводится *60124* и в переменной с которой мы ее сравниваем тоже *60124*
Символы специальные, чтоб заметить пробел если че.
...
Рейтинг: 0 / 0
Запрос
    #33624355
-ыы-((((
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
УБЕЙТЕ... УБЕЙТЕ МЕНЯ!!!!.... ЙАДУ....
SQL Manager выполнялся в другой области..............
А программа писалась в старой копии базы.........................................
три дня убилось.....

----
спасибо за ваше терпение....
но по крайней мере что то новое подчерпнулось из нашей беседы.....
...
Рейтинг: 0 / 0
36 сообщений из 36, показаны все 2 страниц
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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