powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Parameter does not exists
22 сообщений из 22, страница 1 из 1
Parameter does not exists
    #40106885
LMag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый вечер

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

Ругается на то что нет параметра в sql запросе, хотя он там присутствует

Ошибка приведена на изображении.

Кусок кода

Работа идет с компонентом FibDataSet

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
      dm_create.ds_covid_sem.Close;
       // dm_create.ds_covid_sem.SQLs.SelectSQL.Clear;
        if LookupForActForm.MCODLookupCombobox.Value<>null then begin

              dm_create.ds_covid_sem.SQLs.SelectSQL.Text:='select distinct u.id_sluch, p.mse, p.inv, u.podr, so.iotd,u.ds_onk,t.data_l,t.npr_mo, t.npr_date, u.p_per,t.nhistory, u.npolis, u.profil_k, p.w, '+
                                                      't.usl_ok, usl.umpname, t.for_pom, t.ishod, t.rslt, u.profil, sp.t_type, '+
                                                      't.date_1, t.date_2, u.ed_col as KD, u.koefk, t.ds0, t.ds1, t.ds2, t.ds3, t.c_zab, '+
                                                      'u.dn, t.c_zab, n.napr_v, t.disp,  u.npolis,  u.lpu, u.lpu_1, sl.m_namef, '+
                                                      't.det, p.fam, p.im, p.ot, p.dr, extract(year from t.date_1)-extract(year from p.dr) as VOZRAST, u.date_in, u.date_out, u.ds, m.name, t.iddokt, '+
                                                      'd.fio, d.spec, u.code_usl, sp.name_issl, t.prvs_s, u.zak, '+
                                                      'iif(u.sumv_usl=0,u.tarif*u.kol_usl,u.sumv_usl) as sumv_usl, '+
                                                      'IIF(sn.id_povod='',''Проверен'', sn.id_povod) as id_povod, '+
                                                      'sn.comment, sn.summa_v, sn.tip_exp, sn.data_exp,sk.sumoms_sht as mek '+
                                                      'from ut05s50'+LookupForActForm.cData+' u '+
                                                      'left join tt05s50'+LookupForActForm.cData+' t on u.id_sluch=t.id_sluch_tt '+
                                                      'left join pt05s50'+LookupForActForm.cData+' p on substring(p.id_sch from 9 for 6)=u.lpu and p.polis=t.id_pac and t.novor=p.novor and p.id_pac_new=t.id_pac_new '+
                                                      'left join sp_tarif sp on sp.ksg=u.code_usl '+
                                                      'left join uslmp usl on usl.idump=t.usl_ok '+
                                                      'left join s_lpu s on s.mcod=u.lpu_1 '+
                                                      'left join mkb m on m.lcod=t.ds1 '+
                                                      'left join stacotd so on so.kotd=u.podr and so.mcod=u.lpu_1 '+
                                                      'left join ( '+
                                                      '    select s.id, s.id_sluch, s.id_exp, s.id_povod, s.comment, s.summa_v, s.summa_m, s.data_exp, s.tip_exp from snk'+LookupForActForm.cData+' s '+
                                                      '     union all '+
                                                      '    select s.id, s.id_sluch, s.id_exp, s.id_povod, s.comment, s.summa_v, s.summa_m, s.data_exp, s.tip_exp from snk_stac'+LookupForActForm.cData+' s '+
                                                      ') sn on sn.id_sluch=u.id_sluch '+
                                                      'left join sankc sk on sk.id_sluch=u.id_sluch and sk."year"='+QuotedStr(LookupForActForm.cbyear.Text)+' and sk.mont='+QuotedStr(LookupForActForm.cbMonth.Text)+' ' +
                                                      'where u.lpu_1=:mcod and t.usl_ok<3 and extract(year from t.date_1)-extract(year from p.dr)>=70 and ((t.ds1 in (''U07.1'',''U07.2'')) or (t.ds2 in (''U07.1'',''U07.2'')) or (t.ds3 in (''U07.1'',''U07.2''))) ';
              Showmessage(IntToStr(dm_create.ds_covid_sem.ParamCount));
              dm_create.ds_covid_sem.ParamByName('mcod').AsString:=dm.ds_slpuMCOD.AsString;
              dm_create.ds_covid_sem.Open;
          end 
...
Рейтинг: 0 / 0
Parameter does not exists
    #40106887
Softologic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LMag, "Модную" болезнь кодите, однако...

По существу: а есть уверенность, что при дебаге "LookupForActForm.MCODLookupCombobox.Value<>null" ? Может там null и, возможно, срабатывает уже SelectSQL.Text, который задан непосредственно в дизайн-тайме. В котором искомого параметра нет (запрос может там хранится устаревший...). Я на что то подобное с фибами нарывался. Проверьте в дизайн-тайме, что у датасета прописано внутри.
...
Рейтинг: 0 / 0
Parameter does not exists
    #40106889
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LMag,

1. вместо '+LookupForActForm.cData+' используйте параметры. Оно надежнее, особенно если у юзера другой формат даты, чем вы предполагали

2. картинки тут с сообщениями не приведствуются, в редких и исключительных случаях. Как правило на почти любом сообщении об ошибке можно нажать Ctrl-C, и ТЕКСТОВОЕ сообщение скопируется. Тем более, что вы даже умудрились окно ошибки скопировать на фоне текста запроса. Это зачем?

3. вместо текста запроса из дельфей надо приводить голый текст запроса, без дельфевого кода. Как и куда вы его там вставляете - мало кому интересно.

4. вот это что - t.ds1 in (''U07.1''. По-моему оно так в дельфях не работает. разве не три одинарных кавычки там должно быть?

5. ни одного двоеточия (сиречь параметра sql) я в вашем тексте поиском не нахожу.
...
Рейтинг: 0 / 0
Parameter does not exists
    #40106891
Softologic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdv


5. ни одного двоеточия (сиречь параметра sql) я в вашем тексте поиском не нахожу.

Вот, в последней строке этот параметр mcod у него :
Код: pascal
1.
where u.lpu_1=:mcod and t.usl_ok<3 and extract(year from t.date_1)-extract(year from p.dr)>=70 and ((t.ds1 in (''U07.1'',''U07.2'')) or (t.ds2 in (''U07.1'',''U07.2'')) or (t.ds3 in (''U07.1'',''U07.2''))) 
...
Рейтинг: 0 / 0
Parameter does not exists
    #40106892
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LMag,

параметров в запросе нет, при этом написано
dm_create.ds_covid_sem.ParamByName('mcod').AsString:=dm.ds_slpuMCOD.AsString;
зачем эта шлабуда? Вы сами не могли это найти?
В отладке же у вас именно на этой строке идет exception. Или F8 не работает?
...
Рейтинг: 0 / 0
Parameter does not exists
    #40106893
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdv,

Код: sql
1.
where u.lpu_1=:mcod
...
Рейтинг: 0 / 0
Parameter does not exists
    #40106894
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Softologic,

и правда, ок, был невнимателен. Ну хорошо. В отладке у вас же есть проперть
dm_create.ds_covid_sem.SQLs.SelectSQL.Text
и вы можете ее посмотреть в отладчике ПЕРЕД строкой присвоения значения параметру, и убедиться, что текст SQL верный.
В конце-концов, взять этот текст, и попробовать выполнить в IBExpert. Он же вас попросит ввести значение параметра, если таковой обнаружит в тексте запроса.
Вдруг у вас в конкатенации еще где есть :, и текст запроса корёжится напрочь?
...
Рейтинг: 0 / 0
Parameter does not exists
    #40106898
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для начала стоит посмотреть на dm_create.ds_covid_sem.SQLs.SelectSQL.Text
...
Рейтинг: 0 / 0
Parameter does not exists
    #40106900
Softologic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hvlad
Для начала стоит посмотреть на dm_create.ds_covid_sem.SQLs.SelectSQL.Text

+1, ну да, я вот про то же. Скорее всего там параметра и нет как раз.
...
Рейтинг: 0 / 0
Parameter does not exists
    #40106901
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LMag
Добрый вечер

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

Код: pascal
1.
  'IIF(sn.id_povod='',''Проверен'', sn.id_povod) as id_povod, '+



Привет.

Мне кажется, пустая строка в сравнении должна быть представлена 4-мя одинарными кавычками:
Код: pascal
1.
  'IIF(sn.id_povod='''',''Проверен'', sn.id_povod) as id_povod, '+
...
Рейтинг: 0 / 0
Parameter does not exists
    #40106902
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Polesov,

лично меня это всегда бесило. то-ли три кавычки, то-ли четыре...
...
Рейтинг: 0 / 0
Parameter does not exists
    #40106903
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv, акамущаслихко? )
...
Рейтинг: 0 / 0
Parameter does not exists
    #40106906
LMag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Данный sql запрос , выполнял через ibexpert и он отлично выполняется, предлагает ввести значение параметра
...
Рейтинг: 0 / 0
Parameter does not exists
    #40106907
LMag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Softologic
LMag, "Модную" болезнь кодите, однако...

По существу: а есть уверенность, что при дебаге "LookupForActForm.MCODLookupCombobox.Value<>null" ? Может там null и, возможно, срабатывает уже SelectSQL.Text, который задан непосредственно в дизайн-тайме. В котором искомого параметра нет (запрос может там хранится устаревший...). Я на что то подобное с фибами нарывался. Проверьте в дизайн-тайме, что у датасета прописано внутри.


LookupForActForm.MCODLookupCombobox.Value равно определенному значению и он не равен null
...
Рейтинг: 0 / 0
Parameter does not exists
    #40106908
LMag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv
LMag,

1. вместо '+LookupForActForm.cData+' используйте параметры. Оно надежнее, особенно если у юзера другой формат даты, чем вы предполагали

2. картинки тут с сообщениями не приведствуются, в редких и исключительных случаях. Как правило на почти любом сообщении об ошибке можно нажать Ctrl-C, и ТЕКСТОВОЕ сообщение скопируется. Тем более, что вы даже умудрились окно ошибки скопировать на фоне текста запроса. Это зачем?

3. вместо текста запроса из дельфей надо приводить голый текст запроса, без дельфевого кода. Как и куда вы его там вставляете - мало кому интересно.

4. вот это что - t.ds1 in (''U07.1''. По-моему оно так в дельфях не работает. разве не три одинарных кавычки там должно быть?

5. ни одного двоеточия (сиречь параметра sql) я в вашем тексте поиском не нахожу.


Вот sql запрос

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
select distinct u.id_sluch, p.mse, p.inv, u.podr, so.iotd,u.ds_onk,t.data_l,t.npr_mo, t.npr_date, u.p_per,t.nhistory, u.npolis, u.profil_k, p.w,
    t.usl_ok, usl.umpname, t.for_pom, t.ishod, t.rslt, u.profil, sp.t_type,
    t.date_1, t.date_2, u.ed_col as KD, u.koefk, t.ds0, t.ds1, t.ds2, t.ds3, t.c_zab,
    u.dn, t.c_zab, n.napr_v, t.disp,  u.npolis,  u.lpu, u.lpu_1, sl.m_namef,
    t.det, p.fam, p.im, p.ot, p.dr, extract(year from t.date_1)-extract(year from p.dr) as VOZRAST, u.date_in, u.date_out, u.ds, m.name, t.iddokt,
    d.fio, d.spec, u.code_usl, sp.name_issl, t.prvs_s, u.zak,
    iif(u.sumv_usl=0,u.tarif*u.kol_usl,u.sumv_usl) as sumv_usl,
    IIF(sn.id_povod='','Проверен', sn.id_povod) as id_povod,
    sn.comment,
    sn.summa_v, sn.tip_exp, sn.data_exp,sk.sumoms_sht as mek
from ut05s50202108 u
left join tt05s50202108 t on u.id_sluch=t.id_sluch_tt
left join pt05s50202108 p on substring(p.id_sch from 9 for 6)=u.lpu and p.polis=t.id_pac and t.novor=p.novor and p.id_pac_new=t.id_pac_new
left join NPR05s50202108 n on n.idserv=u.idserv
left join dt05s50202108 d on d.kod=t.iddokt and d.mcod=u.lpu_1
left join sp_tarif sp on sp.ksg=u.code_usl
left join uslmp usl on usl.idump=t.usl_ok
left join s_lpu sl on sl.mcod=u.lpu_1
left join mkb m on m.lcod=t.ds1
left join stacotd so on so.kotd=u.podr and so.mcod=u.lpu_1
left join (
    select s.id, s.id_sluch, s.id_exp, s.id_povod, s.comment, s.summa_v, s.summa_m, s.data_exp, s.tip_exp from snk202108 s
    union all
    select s.id, s.id_sluch, s.id_exp, s.id_povod, s.comment, s.summa_v, s.summa_m, s.data_exp, s.tip_exp from snk_stac202108 s
) sn on sn.id_sluch=u.id_sluch
left join sankc sk on sk.id_sluch=u.id_sluch and sk."year"='2021' and sk.mont='07'
where u.lpu_1=:glpu and t.usl_ok<3 and extract(year from t.date_1)-extract(year from p.dr)>=70 and ((t.ds1 in ('U07.1','U07.2')) or (t.ds2 in ('U07.1','U07.2')) or (t.ds3 in ('U07.1','U07.2')))
...
Рейтинг: 0 / 0
Parameter does not exists
    #40106909
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LMagДанный sql запрос

В приведённом тексте нет SQL запроса. Только совершенно безумный код его
генерации. Так что не надо ля-ля про "данный запрос".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Parameter does not exists
    #40106910
LMag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы думаете , это все из за ковычек
...
Рейтинг: 0 / 0
Parameter does not exists
    #40106911
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LMagВот sql запрос

А теперь сравниваем по буквам "glpu" и "mcod". Видишь между ними что-то общее?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Parameter does not exists
    #40106912
LMag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо Всем, разобрался в запросе
...
Рейтинг: 0 / 0
Parameter does not exists
    #40106913
LMag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно закрыть
...
Рейтинг: 0 / 0
Parameter does not exists
    #40106914
Softologic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LMag,
кусок из запроса в первом посте:
Код: pascal
1.
2.
3.
4.
where u.lpu_1=:mcod and t.usl_ok<3 and extract(year from t.date_1)-extract(year from p.dr)>=70 and ((t.ds1 in (''U07.1'',''U07.2'')) or (t.ds2 in (''U07.1'',''U07.2'')) or (t.ds3 in (''U07.1'',''U07.2'')))

кусок из запроса из недавнего:
where u.lpu_1=:glpu and t.usl_ok<3 and extract(year from t.date_1)-extract(year from p.dr)>=70 and ((t.ds1 in ('U07.1','U07.2')) or (t.ds2 in ('U07.1','U07.2')) or (t.ds3 in ('U07.1','U07.2')))



Упс, уже все закончилось благополучно :)
...
Рейтинг: 0 / 0
Parameter does not exists
    #40106916
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Softologic,
меня браузер ФФ подвел. по поиску : почему-то не дал ничего в первый раз.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Parameter does not exists
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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