Гость
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / DW -> string внутри функции / 11 сообщений из 11, страница 1 из 1
25.01.2011, 11:50
    #37077116
Guf
Guf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW -> string внутри функции
Доброго времни суток!

PB 6.5 Build 1326
Microsoft SQL Server 2000 - 8.00.2055

Нужно получить даные из процедуры преобразовать и склеить их в строку. Пробую получть и склеить - не выходит, что я делаю не так?

Процедура в БД
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CREATE PROCEDURE dbo.my_proc
AS
BEGIN

SELECT v.name   AS name
      ,v.number AS number
    FROM master..spt_values v
    WHERE  1  =  1 
      AND v.type = 'J'

END
GO

Фунция в *.pbl
Код: plaintext
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.
33.
34.
35.
36.
37.
38.
39.
datawindow dw_new
string error_syntaxfromSQL, error_create
string new_sql, new_syntax
long rc, i
string tmpl

new_sql = "EXECUTE dbo.my_proc"

new_syntax = SQLCA.SyntaxFromSQL(new_sql, &
	"", error_syntaxfromSQL)
MessageBox("new_syntax", new_syntax)
IF Len(error_syntaxfromSQL) >  0  THEN
	MessageBox("error_syntaxfromSQL", error_syntaxfromSQL)
ELSE
	dw_new = CREATE datawindow
	dw_new.Create(new_syntax, error_create)
	IF Len(error_create) >  0  THEN
		MessageBox("error_create", error_create)
	END IF
END IF
MessageBox("IsNull(dw_new)", String(IsNull(dw_new)))
dw_new.SetTransObject(SQLCA)
MessageBox("GetSQLSelect1", dw_new.GetSQLSelect())
dw_new.SetSQLPreview(new_sql)
MessageBox("GetSQLSelect2", dw_new.GetSQLSelect())
rc = dw_new.Retrieve()

MessageBox("rc", String(rc))
tmpl = ""

FOR i =  1  TO rc
	tmpl = tmpl + dw_new.GetItemString(i, "number") + "~r~n"
NEXT

DESTROY dw_new

as_result = as_result + tmpl

return true

MessageBox("new_syntax", new_syntax)
---------------------------
new_syntax
---------------------------
release 6;

datawindow(units=0 timer_interval=0 color=1073741824 processing=0 print.margin.bottom=0 print.margin.left=0 print.margin.right=0 print.margin.top=0 print.preview.buttons=no )

table(

column=(type=char(70) updatewhereclause = yes name=name dbname="name")

column=(type=long updatewhereclause = yes name=number dbname="number")

procedure="EXECUTE dbo.my_proc")

header(height=60)

detail(height=72)

column(band=detail id=1 x="5" y="4" height="64" width="1623" edit.limit=70 alignment="0" font.face="MS Sans Serif" font.height="-8" font.weight="400" font.charset="0" font.pitch="2" font.family="2" font.underline="0" font.italic="0" border="0" color="0" background.mode="1" background.color="0" edit.autoselect=yes edit.autohscroll=yes edit.autovscroll=no edit.focusrectangle=no )

text(band=header text="Name" x="5" y="4" height="52" width="1623" font.face="MS Sans Serif" font.height="-8" font.weight="400" font.charset="0" font.pitch="2" font.family="2" font.underline="0" font.italic="0" border="0" color="0" background.mode="1" background.color="0" alignment="2" name=name_t )

column(band=detail id=2 x="1633" y="4" height="64" width="274" alignment="1" font.face="MS Sans Serif" font.height="-8" font.weight="400" font.charset="0" font.pitch="2" font.family="2" font.underline="0" font.italic="0" border="0" color="0" background.mode="1" background.color="0" edit.autoselect=yes edit.autohscroll=yes edit.autovscroll=no edit.focusrectangle=no )

text(band=header text="Number" x="1633" y="4" height="52" width="274" font.face="MS Sans Serif" font.height="-8" font.weight="400" font.charset="0" font.pitch="2" font.family="2" font.underline="0" font.italic="0" border="0" color="0" background.mode="1" background.color="0" alignment="2" name=number_t )

htmltable(border="0" cellpadding="1" cellspacing="1" generatecss="no" nowrap="no")
---------------------------
OK
---------------------------

Остальные месаги:
MessageBox("IsNull(dw_new)", String(IsNull(dw_new))) ==> false
MessageBox("GetSQLSelect1", dw_new.GetSQLSelect()) ==> пустая строка
MessageBox("GetSQLSelect2", dw_new.GetSQLSelect()) ==> пустая строка
Почему не работает dw_new.SetSQLPreview(new_sql) ?
MessageBox("rc", String(rc)) ==> -1
...
Рейтинг: 0 / 0
25.01.2011, 12:22
    #37077229
Ikar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW -> string внутри функции
Используйте тип datastore вместо datawindow
...
Рейтинг: 0 / 0
25.01.2011, 12:29
    #37077246
Ikar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW -> string внутри функции
Вдогонку:
в цикле, где Вы пытаетесь "склеивать" значения, для поля "number" нужно использовать GetItem Number
...
Рейтинг: 0 / 0
25.01.2011, 12:50
    #37077299
PL99
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW -> string внутри функции
GufПочему не работает dw_new.SetSQLPreview(new_sql) ?


PowerBuilder Help SetSQLPreview method (DataWindows)
...
Usage

Use SetSQLPreview to modify syntax before you update the database with changes in the DataWindow object.
To obtain the current SQL statement in the SQLPreview event, look at the sqlsyntax argument.
When to call SetSQLPreview Call this method only in the script for the SQLPreview event.
...
Рейтинг: 0 / 0
25.01.2011, 12:57
    #37077314
PL99
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW -> string внутри функции
GufMessageBox("GetSQLSelect1", dw_new.GetSQLSelect()) ==> пустая строка

PowerBuilder Help GetSQLSelect method (DataWindows)

Description

Reports the SQL SELECT statement associated with a DataWindow if its data source is one that accesses a SQL database (such as SQL Select, Quick Select, or Query).
...
Рейтинг: 0 / 0
25.01.2011, 13:14
    #37077357
PL99
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW -> string внутри функции
Gufrc = dw_new.Retrieve()GufMessageBox("rc", String(rc)) ==> -1Анализируйте ошибку сервера, в вашем случае SQLCA.SQLErrText
...
Рейтинг: 0 / 0
25.01.2011, 13:39
    #37077404
Guf
Guf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW -> string внутри функции
PL99,

Вот, что значит не внимательность! Спасибо.
SetSQLSelect тоже не подойдет, т.к. ему нужен только селект.
...
Рейтинг: 0 / 0
25.01.2011, 13:44
    #37077419
Guf
Guf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW -> string внутри функции
Ikar,

Пдскажите, пожалуйста, как юзать, этот самый, датасторе. В хелпе он показывает статью и пример про DW. А для датасторе нужно указать еще и DataObject (как я понимаю датавиндоу, правильно?). Выходит датавиндоу нужно создать статически?

Про косяк с нумбером, спасибо. Я бы на него обязательно напоролся. Но это упрощенный вариант, для примера.
...
Рейтинг: 0 / 0
25.01.2011, 13:52
    #37077448
Guf
Guf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW -> string внутри функции
PL99Анализируйте ошибку сервера, в вашем случае SQLCA.SQLErrText
Там нечего анализировать. Откуда брать данные не задано. В профайлере видно, что ничего не выполняется. Сейчас проверил SQLErrText - пустая строка.

Может быть вы подскажете, как юзать DS? Мои проблемы с ним я описал постом выше. Если не указывать ДатаОбжект, все валится, с матерными сообщениями.
...
Рейтинг: 0 / 0
25.01.2011, 14:24
    #37077543
PL99
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW -> string внутри функции
Guf,
Код: plaintext
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.
33.
34.
35.
36.
37.
38.
datastore dw_new
string error_syntaxfromSQL, error_create
string new_sql, new_syntax
long rc, i
string tmpl

new_sql = "EXECUTE dbo.my_proc"

new_syntax = SQLCA.SyntaxFromSQL(new_sql, &
	"", error_syntaxfromSQL)
MessageBox("new_syntax", new_syntax)
IF Len(error_syntaxfromSQL) >  0  THEN
	MessageBox("error_syntaxfromSQL", error_syntaxfromSQL)
ELSE
	dw_new = CREATE datastore
	dw_new.Create(new_syntax, error_create)
	IF Len(error_create) >  0  THEN
		MessageBox("error_create", error_create)
	END IF
END IF
MessageBox("IsNull(dw_new)", String(IsNull(dw_new)))
dw_new.SetTransObject(SQLCA)
MessageBox("GetSQLSelect1", dw_new.GetSQLSelect())
//dw_new.SetSQLPreview(new_sql)
//MessageBox("GetSQLSelect2", dw_new.GetSQLSelect())
rc = dw_new.Retrieve()

MessageBox("rc", String(rc))
tmpl = ""

FOR i =  1  TO rc
	tmpl = tmpl + dw_new.GetItemNumber(i, "number") + "~r~n"
NEXT

DESTROY dw_new

as_result = as_result + tmpl

return true
...
Рейтинг: 0 / 0
25.01.2011, 14:38
    #37077600
Guf
Guf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DW -> string внутри функции
PL99,

Спасибо, большое!
Получилось.
...
Рейтинг: 0 / 0
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / DW -> string внутри функции / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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