Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / web на asa / 3 сообщений из 3, страница 1 из 1
14.02.2006, 12:02
    #33543040
old_joy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
web на asa
Чего в супе не хватает?
авторALTER PROCEDURE "DBA"."create_html"( in inName char(16) default 'tmp', in inQuery long varchar DEFAULT
'SELECT mesto.nomer as mn,kod_ceh_otd as rrt,abonent,adres from mesto where nomer=''52288''')
BEGIN
declare strVar long varchar;
declare meQueryBegin long varchar;
declare meQueryEnd long varchar;
declare meFetch long varchar;
declare meHeader long varchar;
declare meString long varchar;
declare meColumn char(25);
declare meColumnAs char(25);
declare meVar smallint;
set meQueryEnd = 'select ';
set meFetch = 'fetch next lider into ';
set meHeader = 'set chtml=chtml+''<TR>'';\n';
set meString = ' set chtml=chtml+''<TR>'';\n';
set meQueryBegin = substr(inQuery,8);
set strVar = 'CREATE PROCEDURE "DBA"."' + inName + '"()\n';
set strVar = strVar + 'result(chtml long varchar)\n';
set strVar = strVar + 'begin\n';
set strVar = strVar + 'declare chtml long varchar;\n';
set strVar = strVar + 'declare myQuery long varchar;\n';
while left(ltrim(meQueryBegin),4)<>'from' loop
//Ищем запятые
set meVar = locate(meQueryBegin,',');
//Если не найдено - значит последняя колонка
if meVar = 0 then
set meVar = locate(meQueryBegin,' from');
end if;
//Выделяем название колонки
set meColumn = trim(substr(meQueryBegin,1,meVar-1));
set meQueryBegin = ltrim(substr(meQueryBegin,meVar+1));
//На случай точек и as
set meVar = locate(meColumn,' as');
if meVar = 0 then
set meColumnAs = replace(meColumn,'.','_');
else
set meColumnAs = trim(substr(meColumn,meVar+4));
set meColumn = substr(meColumn,1,meVar-1);
end if;
//Преобразуем конечный запрос
set meQueryEnd = meQueryEnd + 'string(' + meColumn +'), ';
//Строим заголовок таблицы
set meHeader = meHeader + 'set chtml=chtml+''<TH>' + meColumnAs + '</TH>'';\n';
//Образуем переменную для отображения
set strVar = strVar + 'declare my_' + meColumnAs + ' char(64);\n';
//Добавляем эту переменную в fetch
set meFetch = meFetch + 'my_' + meColumnAs + ',';
//Строим строку таблицы
set meString = meString + ' set chtml=chtml+''<TD>''+isnull(my_' + meColumnAs + ','' '')+''</TD>'';\n';
end loop;
//Оформление конечного запроса (рубим последнюю запятую в meQueryEnd)
set meQueryEnd = left(meQueryEnd,length(meQueryEnd)-2) + ' ' + meQueryBegin;
set meQueryEnd = replace(meQueryEnd,'''','''''');
set meFetch = left(meFetch,length(meFetch)-1);
set meString = meString + ' set chtml=chtml+''</TR>'';\n';
set strVar = strVar + 'set myQuery =''' + meQueryEnd +''';\n';
set strVar = strVar + '//call dba.html_head_c();\n';
set strVar = strVar + 'set chtml=''<html>'';\n';
set strVar = strVar + 'set chtml=''<head>'';\n';
set strVar = strVar + 'set chtml=chtml+''<TITLE>Скажите разработчику, что он забыл про заголовок</TITLE>'';\n';
set strVar = strVar + 'set chtml=chtml+''</head>'';\n';
set strVar = strVar + 'set chtml=chtml+''<body bgcolor="#C0C0C0">'';\n';
set strVar = strVar + 'set chtml=chtml+''<TABLE BORDER WIDTH=100%>'';\n';
set strVar = strVar + meHeader;
set strVar = strVar + 'set chtml=chtml+''</TR>'';\n';
set strVar = strVar + 'begin\n';
set strVar = strVar + ' declare err_notfound exception for sqlstate value ''02000'';\n';
set strVar = strVar + ' declare lider dynamic scroll cursor using myQuery;\n';
set strVar = strVar + ' open lider;\n';
set strVar = strVar + ' liderLoop: loop \n';
set strVar = strVar + ' ' + meFetch + ';\n';
set strVar = strVar + ' if sqlstate = err_notfound then\n';
set strVar = strVar + ' leave liderLoop\n';
set strVar = strVar + ' end if;\n';
set strVar = strVar + meString;
set strVar = strVar + ' end loop liderLoop;\n';
set strVar = strVar + ' close lider;\n';
set strVar = strVar + 'end;\n';
set strVar = strVar + 'set chtml=chtml+''</TABLE>'';\n';
set strVar = strVar + '//set chtml=chtml+rtrim(dba.html_notes(1));\n';
set strVar = strVar + 'set chtml=chtml+''</body>'';\n';
set strVar = strVar + 'set chtml=chtml+''</html>'';\n';
set strVar = strVar + 'select chtml;\n';
set strVar = strVar + 'end';
execute immediate strVar;
END

Генерируется результат
авторALTER PROCEDURE "DBA"."tmp"()
result(chtml long varchar)
begin
declare chtml long varchar;
declare myQuery long varchar;
declare my_mn char(64);
declare my_rrt char(64);
declare my_abonent char(64);
declare my_adres char(64);
set myQuery ='select string(mesto.nomer), string(kod_ceh_otd), string(abonent), string(adres) from mesto where nomer=''52288''';
//call dba.html_head_c();
set chtml='<html>';
set chtml='<head>';
set chtml=chtml+'<TITLE>Скажите разработчику, что он забыл про заголовок</TITLE>';
set chtml=chtml+'</head>';
set chtml=chtml+'<body bgcolor="#C0C0C0">';
set chtml=chtml+'<TABLE BORDER WIDTH=100%>';
set chtml=chtml+'<TR>';
set chtml=chtml+'<TH>mn</TH>';
set chtml=chtml+'<TH>rrt</TH>';
set chtml=chtml+'<TH>abonent</TH>';
set chtml=chtml+'<TH>adres</TH>';
set chtml=chtml+'</TR>';
begin
declare err_notfound exception for sqlstate value '02000';
declare lider dynamic scroll cursor using myQuery;
open lider;
liderLoop: loop
fetch next lider into my_mn,my_rrt,my_abonent,my_adres;
if sqlstate = err_notfound then
leave liderLoop
end if;
set chtml=chtml+'<TR>';
set chtml=chtml+'<TD>'+isnull(my_mn,' ')+'</TD>';
set chtml=chtml+'<TD>'+isnull(my_rrt,' ')+'</TD>';
set chtml=chtml+'<TD>'+isnull(my_abonent,' ')+'</TD>';
set chtml=chtml+'<TD>'+isnull(my_adres,' ')+'</TD>';
set chtml=chtml+'</TR>';
end loop liderLoop;
close lider;
end;
set chtml=chtml+'</TABLE>';
//set chtml=chtml+rtrim(dba.html_notes(1));
set chtml=chtml+'</body>';
set chtml=chtml+'</html>';
select chtml;
end
Прикручиваем к web service и все...
...
Рейтинг: 0 / 0
14.02.2006, 12:07
    #33543064
ASCRUS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
web на asa
В конце перед SELECT не хватает:
Код: plaintext
call dbo.sa_set_http_header('Content-Type','text/html');
Без жесткой установки заголовка по умолчанию стоять будет text, а значит некоторые браузеры и будут воспринимать не html, а text (например IE на PocketPC).
...
Рейтинг: 0 / 0
14.02.2006, 14:54
    #33543744
old_joy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
web на asa
Это подразумевается здесь

call dba.html_head_c();

т.е. это процедурка, формирующая заголовок для всех страниц. Вставлется закомментаренной.
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / web на asa / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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