powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Trim в DataWindow
26 сообщений из 26, показаны все 2 страниц
Trim в DataWindow
    #35543661
Imperous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго дня!

Есть ДВ в которое попадают данные из обычного запроса, например:
Код: plaintext
1.
2.
3.
4.
5.
6.
Select name_a, 
         count(*), 
         min(nomer) as min_n, 
         max(nomer) as max_n
         From table_1
         Where dat_start >= '2008-01-01'  and dat_end <= '2008-02-01' 
         Group by name_a

но в поле name_a например бывает так что оно может быть либо пустым либо содержать пробел,
и как результат я вижу результирующие строки такие:
name_a compute(002) min_n max_n(пусто) 25 10023 18001(пробел) 79 12444 16238НВВ 5982 9411 19804РТОК 140 13482 15999

а хочется чтобы первые две строки объединялись в одну.
...
Рейтинг: 0 / 0
Trim в DataWindow
    #35543780
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
name_a заменить в запросе на
Код: plaintext
IsNull(name_a,' ')
синтаксис зависит от используемого SQL сервера.
...
Рейтинг: 0 / 0
Trim в DataWindow
    #35543981
Imperous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин Маркname_a заменить в запросе на
Код: plaintext
IsNull(name_a,' ')
синтаксис зависит от используемого SQL сервера.
не помогло, результат тот же

сервер - ASE 12.5
...
Рейтинг: 0 / 0
Trim в DataWindow
    #35544283
Imperous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хмм, то что я считал пусто - оказалось NULL, а то что пробел - оказалось пусто...
...
Рейтинг: 0 / 0
Trim в DataWindow
    #35544724
Imperous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
продолжение марлезонского балета, уже привожу исходник, изначально было так и показывало лишнюю строку:
Код: plaintext
1.
2.
3.
4.
SELECT seria_pl,
         count(*),min(nomer_pl) as '№ beg', max(nomer_pl) as '№ end'  
    FROM put_list  
   WHERE dbo.put_list.dat_close between :dat_beg and :dat_end   
    group by seria_pl

сделал вот так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
 SELECT "" as seria_pl,
         count(*),min(nomer_pl) as '№ beg', max(nomer_pl) as '№ end'  
    FROM put_list  
   WHERE dbo.put_list.dat_close between :dat_beg and :dat_end 
    and (dbo.put_list.seria_pl is null or dbo.put_list.seria_pl ="" )
UNION 
  SELECT seria_pl,
         count(*),min(nomer_pl) as '№ beg', max(nomer_pl) as '№ end'  
    FROM put_list  
   WHERE dbo.put_list.dat_close between :dat_beg and :dat_end   
    and (dbo.put_list.seria_pl is not null and dbo.put_list.seria_pl <>"" )
    group by seria_pl
    order by seria_pl

Теперь ПБ, просто закрывается с ошибкой на ретриве в запущенной проге :( хотя если делать ретрив самому ДВ - то все ок.
Ай нид хелп...
...
Рейтинг: 0 / 0
Trim в DataWindow
    #35544781
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поставьте везде одинарные кавычки на всякий случай и постепенно упрощайте запрос - смотрите из-за этого-ли проблема.
...
Рейтинг: 0 / 0
Trim в DataWindow
    #35544857
Imperous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
одинарные кавычки не спасли... :(
а как еще можно упростить?
...
Рейтинг: 0 / 0
Trim в DataWindow
    #35544909
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Убрать order by, убрать union, проверить что в union типы совпадают, и т.д...
...
Рейтинг: 0 / 0
Trim в DataWindow
    #35544924
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Покажите вызывающий код с зашитыми тестовыми значениями аргументов, которые вы используете при операции "ретрив самому ДВ".
...
Рейтинг: 0 / 0
Trim в DataWindow
    #35544984
Imperous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
все параметры верные, проверил несколько раз.
я в прострации - вернул старый запрос который был, и все равно вылетает (((
...
Рейтинг: 0 / 0
Trim в DataWindow
    #35545095
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Imperousвсе параметры верные, проверил несколько раз.

Я не сомневаюсь, что вы проверили, но также очевидно, что если от нас ожидается какая-то помощь, то надо предоставить как можно больше информации для анализа.
Поэтому повторяю свою просьбу: возьмите вызывающий код и перед вызовом retrieve() присвойте в передаваемые в retrieve переменные те же тестовые значения, что указываете в паинтере. Запустите код и если он также приводит к ошибке, то приведите нам текст этого кода. И приложите экспортированный исходник вызываемого DW.
...
Рейтинг: 0 / 0
Trim в DataWindow
    #35545109
Imperous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вспомнил один момент, прога была написана на ПБ 8.0, а у меня 9.0.3.
При первом открытии исходников делаю миграцию и фулл билд.
На всяк случай убрал библиотеки 8-го ПБ.
Без изменений - все отлично рабоатет.
Слегка изменяю запрос - вылетает.
Возвращаю все на место - вылетает.
закрывается и все тут.
...
Рейтинг: 0 / 0
Trim в DataWindow
    #35545724
ВасВас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Остается только одно:
занового создать DW и ручками прописать Ваш работающий запрос. После этого изменять его.
...
Рейтинг: 0 / 0
Trim в DataWindow
    #35545759
Imperous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВасВасОстается только одно:
занового создать DW и ручками прописать Ваш работающий запрос. После этого изменять его.
делал - вылетает
...
Рейтинг: 0 / 0
Trim в DataWindow
    #35545773
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А сам запрос на сервер уходит?
...
Рейтинг: 0 / 0
Trim в DataWindow
    #35545879
Imperous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробовал еще пару вариантов в isql.
1.
Код: plaintext
1.
2.
3.
4.
5.
select
case when seria_pl is null or seria_pl ='' then 'a' end as seria_pl,   
count(*), min(nomer_pl), max(nomer_pl) 
from put_list 
where dat_close between '2008-08-26' and '2008-09-18'
group by seria_pl

здесь в итоге получается две строки "а" не сгруппированные и остальные выводятся как надо

2.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
begin
select
case when seria_pl is null or seria_pl ='' then 'a' else seria_pl end as seria_pl,   
nomer_pl
into tt
from put_list 
where dat_close between '2008-08-26' and '2008-09-18'

select seria_pl, count(*) as cn, min(nomer_pl) as min_n, max(nomer_pl) as max_n from tt
group by seria_pl

drop table tt
end
а здесь, строки "а" группируются, но результирующие (все) строки отображают чушь
...
Рейтинг: 0 / 0
Trim в DataWindow
    #35545929
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы какую проблему вообще-то решаете, уж определитесь. И с запросами - это Вам в другой форум.
...
Рейтинг: 0 / 0
Trim в DataWindow
    #35545956
Imperous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин МаркА сам запрос на сервер уходит?
уходит если его (ретриев) делать в дизайнере ДВ.

вот так происходит вызов из формы:
Код: plaintext
1.
dw_1.SetTransObject(sqlca)
dw_1.retrieve( Date(w_osn.uo_1.sle_date.text),Date(w_osn.uo_2.sle_date.text) )

где, uo_1 и uo_2 это контролы (аналоги обычного календаря), которые хранят дату в виде текста, например 28/05/2008
(они используются во многих проектах и работают правильно, на них грешить нельзя)
...
Рейтинг: 0 / 0
Trim в DataWindow
    #35546065
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если убрать параметры из DataWindow и вызывать запрос без параметров - работает?
...
Рейтинг: 0 / 0
Trim в DataWindow
    #35546173
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Imperous
2.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
begin
select
case when seria_pl is null or seria_pl ='' then 'a' else seria_pl end as seria_pl,   
nomer_pl
into tt
from put_list 
where dat_close between '2008-08-26' and '2008-09-18'

select seria_pl, count(*) as cn, min(nomer_pl) as min_n, max(nomer_pl) as max_n from tt
group by seria_pl

drop table tt
end
Меня терзают смутные сомненья (C)
А это точно Imperousсервер - ASE 12.5?

Что-то типа этого:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
select
case when seria_pl is null or seria_pl ='' then 'a' 
else seria_pl
end as seria_pl,   
count(*), min(nomer_pl), max(nomer_pl) 
from put_list 
where dat_close between '2008-08-26' and '2008-09-18'
group by 
case when seria_pl is null or seria_pl ='' then 'a' else seria_pl end 
Локшин МаркВы какую проблему вообще-то решаете, уж определитесь. И с запросами - это Вам в другой форум.+1
...
Рейтинг: 0 / 0
Trim в DataWindow
    #35546176
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Imperousвот так происходит вызов из формы:
Код: plaintext
1.
dw_1.SetTransObject(sqlca)
dw_1.retrieve( Date(w_osn.uo_1.sle_date.text),Date(w_osn.uo_2.sle_date.text) )

Ну наконец-то.

Теперь приложите сюда экспорт DW до модификации, когда еще не вылетает(сразу после миграции) и после, когда начинает вылетать.
...
Рейтинг: 0 / 0
Trim в DataWindow
    #35546341
Imperous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
необъяснимым образом заработало...
остался вопрос только об объединении значений Null и пустых.
при использовании:
Код: plaintext
1.
2.
select isnull(seria_pl, ''), count(*) 
..... 
group by seria_pl
или
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select '' as seria_pl,
count(*) 
..... 
where (seria_pl is null or seria_pl = '')

union

select seria_pl, count(*) 
..... 
where (seria_pl is not null and seria_pl <> '')
group by seria_pl
происходит сначала группировка, а затем преобразование null в пусто
...
Рейтинг: 0 / 0
Trim в DataWindow
    #35546368
Imperous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как и можно ли сделать аналог вот этого:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
select 
isnull(seria_pl, '') as 'seria_pl', 
nomer_pl
into temp_table
from put_list
where dat_close between :dat_beg and :dat_end

select seria_pl, 
count(*) as 'cn',
min(nomer_pl) as 'min_n',
max(nomer_pl) as 'max_n'
from temp_table
group by seria_pl

drop table temp_table

в ПБ?
...
Рейтинг: 0 / 0
Trim в DataWindow
    #35546386
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT sum(T.A),
           T.B
FROM
(select  1  as a,
           2  as b
union 
select  3  as a,
          2  as b
) T
GROUP BY T.B
Кстати, действительно нужен именно UNION, а не UNION ALL?
...
Рейтинг: 0 / 0
Trim в DataWindow
    #35546506
Imperous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин Марк
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT sum(T.A),
           T.B
FROM
(select  1  as a,
           2  as b
union 
select  3  as a,
          2  as b
) T
GROUP BY T.B
Кстати, действительно нужен именно UNION, а не UNION ALL?
если честно - не знаю ....

идея понравилась, попробовал модифицировать и сделать вот так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
select seria_pl, count(*), min(nomer_pl) as '№ beg', max(nomer_pl) as '№ end'
from (
select 
isnull(seria_pl, '') as 'seria_pl',
nomer_pl
from put_list
where dat_close between :dat_beg and :dat_end )
group by seria_pl
order by seria_pl
На что ПБ сказал что в derived table отсутствует корреляционное имя
...
Рейтинг: 0 / 0
Trim в DataWindow
    #35546531
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Imperousесли честно - не знаю ....
Ну так прочитайте про разницу и выберите нужное...
ImperousНа что ПБ сказал что в derived table отсутствует корреляционное имя
Потому, что синтаксис другой.
...
Рейтинг: 0 / 0
26 сообщений из 26, показаны все 2 страниц
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Trim в DataWindow
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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