powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / DW -> string внутри функции
11 сообщений из 11, страница 1 из 1
DW -> string внутри функции
    #37077116
Guf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времни суток!

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
DW -> string внутри функции
    #37077229
Фотография Ikar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Используйте тип datastore вместо datawindow
...
Рейтинг: 0 / 0
DW -> string внутри функции
    #37077246
Фотография Ikar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вдогонку:
в цикле, где Вы пытаетесь "склеивать" значения, для поля "number" нужно использовать GetItem Number
...
Рейтинг: 0 / 0
DW -> string внутри функции
    #37077299
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
DW -> string внутри функции
    #37077314
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
DW -> string внутри функции
    #37077357
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gufrc = dw_new.Retrieve()GufMessageBox("rc", String(rc)) ==> -1Анализируйте ошибку сервера, в вашем случае SQLCA.SQLErrText
...
Рейтинг: 0 / 0
DW -> string внутри функции
    #37077404
Guf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PL99,

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

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

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

Может быть вы подскажете, как юзать DS? Мои проблемы с ним я описал постом выше. Если не указывать ДатаОбжект, все валится, с матерными сообщениями.
...
Рейтинг: 0 / 0
DW -> string внутри функции
    #37077543
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
DW -> string внутри функции
    #37077600
Guf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PL99,

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


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