powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Modify Datastore
25 сообщений из 36, страница 1 из 2
Modify Datastore
    #33919773
SvetaSh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
подскажите можно-ли использовать Мodify с datastore
почему-то не работает.


l_origin_clause = ""
l_ac_clause = ""

StartDate = uo_1.of_start_end_date(TRUE)
EndDate = uo_1.of_start_end_date(FALSE)

l_origin_oid = dw_city.getItemNumber(1, 'city_oid')

l_ac_oid = dw_ac.getItemNumber(1, 'aircraft_oid')
if not isnull(l_origin_oid) then
l_origin_clause = ' and flight_data.origination_oid = '+ string(l_origin_oid)
end if

if not isnull(l_ac_oid) then
l_ac_clause = ' and flight_data.aircraft_oid = ' + string(l_ac_oid)
end if

if ((uo_1.em_start.text <> "00/00/00") or (uo_1.em_end.text <> "00/00/00" )) then
l_date_clause = l_date_clause + " and flight_data.actual_time_out >= '" + String(uo_1.of_start_end_Date(True)) + "' "
l_date_clause = l_date_clause + " and flight_data.actual_time_out < DateAdd(d, 1, '" + String(uo_1.of_start_end_Date(False)) + "') "
end if


ModifiedWhere = "DataWindow.Table.Select='" + OriginalWhereClause + l_origin_clause + l_ac_clause + l_date_clause + "'"

ds.Modify(modifiedWhere)
ds.Retrieve()

//if isnull(l_inv_oid) or l_inv_oid = 0 then return

total_rows = DS.RowCount() // Etot statement daet 0)
...
Рейтинг: 0 / 0
Modify Datastore
    #33919777
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SvetaSh wrote:

> подскажите можно-ли использовать Мodify с datastore

Да.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Modify Datastore
    #33919804
SvetaSh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда, в чем проблема, может я что-то пропускаю.

После Мodify, Retrive не дает ни каких результатов. (total_rows всегда 0)
...
Рейтинг: 0 / 0
Modify Datastore
    #33919810
Я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Я
Гость
а что возращает Modify
чему равно OriginalWhereClause

вот ради примера

ls_SQL = ldwc.Describe ("DataWindow.Table.Select")
ls_SQL += ' and q.id in ( '+ string(idc_1)+' , '+string(idc_2)+') '
ls_SQL = inv_string.of_globalreplace( ls_SQL, "'", "~~~'")
ls_Err = ldwc.Modify ("DataWindow.table.Select='" + ls_SQL + "'")
...
Рейтинг: 0 / 0
Modify Datastore
    #33919821
SvetaSh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OriginalWhereClause возвращает query from Datawindow, эта часть работает, а вместе с Modify нет.

я пыталась run select statement отдельно, все работает, а в скрипте нет. ???
...
Рейтинг: 0 / 0
Modify Datastore
    #33919837
SvetaSh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OriginalWhereClause возвращает query from Datawindow, эта часть работает, а вместе с Modify нет.

я пыталась run select statement отдельно, все работает, а в скрипте нет. ???
...
Рейтинг: 0 / 0
Modify Datastore
    #33919873
Фотография Dmitry.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробуйте устанавливать SQL с помощью ф-ции SetSQLSelect() вместо modify.

//
а не работает т.к. не экранированы кавычки:

l_date_clause = .... + " ' "
...
ModifiedWhere = "DataWindow.Table.Select= ' " + OriginalWhereClause + l_origin_clause + l_ac_clause + l_date_clause + " ' "


т.е. в ModifiedWhere у вас что-то вроде
Код: plaintext
1.
DataWindow.Table.Select='select ....and flight_data.actual_time_out < DateAdd(d, 1, '01/ 11 / 1970 ')  '

где начинаются строки, где заканчиваются - PB разобрать не может...
...
Рейтинг: 0 / 0
Modify Datastore
    #33919908
SvetaSh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pomeniala...
if ((uo_1.em_start.text <> "00/00/00") or (uo_1.em_end.text <> "00/00/00" )) then
l_date_clause = l_date_clause + " and flight_data.actual_time_out >= ~~~'" + String(uo_1.of_start_end_Date(True)) + "~~~' "
l_date_clause = l_date_clause + " and flight_data.actual_time_out < DateAdd(d, 1, ~~~'" + String(uo_1.of_start_end_Date(False)) + "~~~') "
end if


ModifiedWhere = "'" + OriginalWhereClause + l_origin_clause + l_ac_clause + l_date_clause + "'"

DS.Reset()
DS.SetSQLSelect(modifiedWhere)

DS.Retrieve()

//if isnull(l_inv_oid) or l_inv_oid = 0 then return

l_file_dir = "\\ntserver02\LOG_PAGE\"
total_rows = DS.RowCount()

Vse ravno Total_rows is 0.
...
Рейтинг: 0 / 0
Modify Datastore
    #33919986
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SvetaShpomeniala...
if ((uo_1.em_start.text <> "00/00/00") or (uo_1.em_end.text <> "00/00/00" )) then
l_date_clause = l_date_clause + " and flight_data.actual_time_out >= ~~~'" + String(uo_1.of_start_end_Date(True)) + "~~~' "
l_date_clause = l_date_clause + " and flight_data.actual_time_out < DateAdd(d, 1, ~~~'" + String(uo_1.of_start_end_Date(False)) + "~~~') "
end if


ModifiedWhere = "'" + OriginalWhereClause + l_origin_clause + l_ac_clause + l_date_clause + "'"

DS.Reset()
DS.SetSQLSelect(modifiedWhere)

DS.Retrieve()

//if isnull(l_inv_oid) or l_inv_oid = 0 then return

l_file_dir = "\\ntserver02\LOG_PAGE\"
total_rows = DS.RowCount()

Vse ravno Total_rows is 0.
Скорее всего, Dmitry. прав, но Вам, SvetaSh, прежде чем задавать вопрос в форум, следовало бы проверить, какой именно запрос оправляется на сервер, возвращает ли сервер ошибку и какую именно. Вы в своем коде ничего этого не делаете, что плохо уже само по себе. Ну и, кроме того, вырванный из контекста кусок наводит меня на мысль о том, что о стиле программирования Вы тоже не задумываетесь. Подумайте, хотя бы, о тех людях, которым, вероятно, придется сопровождать Ваше творение.

Теперь советы:
1. Проверьте код возврата функции SetSQLSelect() PowerBuilder Help Return value

SetSQLSelect returns 1 if it succeeds and -1 if the SELECT statement cannot be changed. I
2. Количество строк в DW/DS не может служить критерием ошибки. Проверьте код возврата функции Retrieve() PowerBuilder Help Return value

Returns the number of rows displayed (that is, rows in the primary buffer) if it succeeds and -1 if it fails.
3. Проверьте код ошибки, которую возвращает сервер, в случае, если функция Retrieve вернула -1. Как это сделать, Вам уже объясняли

PS: Как правильно задавать вопросы
...
Рейтинг: 0 / 0
Modify Datastore
    #33920757
Estets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PL991)...
2)...
3)...Полностью согласен.

А SetTransObject вы используете?
...
Рейтинг: 0 / 0
Modify Datastore
    #33922495
SvetaSh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Retrieve() = -1,
proverila code oshibki = ""
??
...
Рейтинг: 0 / 0
Modify Datastore
    #33923257
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SvetaShRetrieve() = -1,
proverila code oshibki = ""
??Что есть code oshibki ? SQLErrText?

PowerBuilder Help SQLCode Long The success or failure code of the most recent operation.Return codes:· 0 — Success· 100 — Not found· -1 — Error (use SQLDBCode or SQLErrText to obtain the details)SQLDBCode Long The database vendor's error code.SQLErrText String The database vendor's error message
Скорее всего у Вас неправильно формируется результирующий SQL запрос.
Что именно отсылается на сервер можно посмотреть, перехватывая событие SQLPreview
PowerBuilder Help Description

Occurs immediately before a SQL statement is submitted to the DBMS. Functions that trigger DBMS activity are Retrieve, Update, and ReselectRow.
PowerBuilder event information
Event ID: pbm_dwnsql

Argument Description
request SQLPreviewFunction by value. The function that initiated the database activityFor a list of valid values, see SQLPreviewFunction
sqltype SQLPreviewType by value. The type of SQL statement being sent to the DBMSFor a list of valid values, see SQLPreviewType
sqlsyntax String by value. The full text of the SQL statement
buffer DWBuffer by value. The buffer containing the row involved in the database activity For a list of valid values, see DWBuffer
row Long by value. The number of the row involved in the database activity, that is, the row being updated, selected, inserted, or deletedВас здесь, прежде всего, будет интересовать аргумент sqlsyntax . Сравните его с тем, что Вы ожидаете.
...
Рейтинг: 0 / 0
Modify Datastore
    #33923265
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EstetsА SetTransObject вы используете?Да, кстати!
PowerBuilder Help SetSQLSelect method (DataWindows)
Syntax
PowerBuilder


integer dwcontrol. SetSQLSelect ( string statement )
...
Usage

Use SetSQLSelect to dynamically change the SQL SELECT statement for a DataWindow object in a script.
If the DataWindow is updatable, PowerBuilder validates the SELECT statement against the database and DataWindow column specifications when you call the SetSQLSelect method. Each column in the SQL SELECT statement must match the column type in the DataWindow object. The statement is validated only if the DataWindow object is updatable.
You must use the SetTrans or SetTransObject method to set the transaction object before the SetSQLSelect method will execute.
В отличие от modify.
...
Рейтинг: 0 / 0
Modify Datastore
    #33923305
SvetaSh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQLErrText is ""
...
Рейтинг: 0 / 0
Modify Datastore
    #33923310
SvetaSh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А SetTransObject вы используете?

Da
...
Рейтинг: 0 / 0
Modify Datastore
    #33923941
Estets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SvetaShА SetTransObject вы используете?

Da
Пришлите тогда еще раз кусок кода выполняющий SetSQLSelect и Retrieve.
И что возвращает SetSQLSelect?
...
Рейтинг: 0 / 0
Modify Datastore
    #33925583
SvetaSh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я использую SetTransObject в open()

DS = CREATE DATASTORE
Ret = CREATE DATASTORE

DS.DataObject = 'dw_logpage_datastore'

DS.SetTransObject(SQLCA)

OriginalWhereClause = ds.Describe("DataWindow.Table.Select")
//OriginalWhereClause = SELECT distinct
aircraft = (select aircraft_id from aircraft_data where oid = flight_data.aircraft_oid),
flight_data.log_page,
Origin = (Select location_id from location_master where oid = flight_data.origination_oid),
date = (select min(actual_time_off) from flight_data fd where log_page = flight_data.log_page)
FROM flight_data
WHERE
flight_data.status_sym = 'Completed'

//

THEN.....в clicked()



StartDate = uo_1.of_start_end_date(TRUE)
EndDate = uo_1.of_start_end_date(FALSE)

l_origin_oid = dw_city.getItemNumber(1, 'city_oid')

l_ac_oid = dw_ac.getItemNumber(1, 'aircraft_oid')
if not isnull(l_origin_oid) then
l_origin_clause = ' and flight_data.origination_oid = '+ string(l_origin_oid)
end if

if not isnull(l_ac_oid) then
l_ac_clause = ' and flight_data.aircraft_oid = ' + string(l_ac_oid)
end if
//ds.Reset()
//DS.Retrieve(StartDate, EndDate, l_origin_oid, l_ac_oid)

////***************Если Датавиндоу имеет аргументы, все работало, но мне нужно было поменять, сделать без аргументов и с Modify Select statement.
////
i
if ((uo_1.em_start.text <> "00/00/00") or (uo_1.em_end.text <> "00/00/00" )) then
l_date_clause = l_date_clause + " and flight_data.actual_time_out >= ~~~'" + String(uo_1.of_start_end_Date(True)) + "~~~' "
l_date_clause = l_date_clause + " and flight_data.actual_time_out < DateAdd(d, 1, ~~~'" + String(uo_1.of_start_end_Date(False)) + "~~~') "
end if


ModifiedWhere = "'" + OriginalWhereClause + l_origin_clause + l_ac_clause + l_date_clause + "'"

//ModifiedWhere = ' SELECT distinct
aircraft = (select aircraft_id from aircraft_data where oid = flight_data.aircraft_oid),
flight_data.log_page,
Origin = (Select location_id from location_master where oid = flight_data.origination_oid),
date = (select min(actual_time_off) from flight_data fd where log_page = flight_data.log_page)
FROM flight_data
WHERE
flight_data.status_sym = 'Completed'

and flight_data.origination_oid = 1399 and flight_data.aircraft_oid = 111 and flight_data.actual_time_out >= ~'6/1/2006 00:00:00~' and flight_data.actual_time_out < DateAdd(d, 1, ~'8/17/2006 00:00:00~') '//


//DS.Reset()
error_check = DS.SetSQLSelect(modifiedWhere)
//error_check = 1//
error_check = DS.Retrieve()
//error_check = -1//

if DS.Retrieve() = 1 then
lsErr = "Database has been updated."
commit;
else
lsErr = sqlca.SQLErrText

//lsErr = ""//
rollback;
end if;
MessageBox("Save",lsErr)


//if isnull(l_inv_oid) or l_inv_oid = 0 then return

l_file_dir = "\\ntserver02\LOG_PAGE\"
total_rows = DS.RowCount()
For CurRow = 1 To DS.RowCount()
ReturnValue = w_reports.dw_1.InsertRow(0)


l_log_page = ds.object.log_page[CurRow]


l_file_name = l_log_page + ".pdf"

l_file_location = l_file_dir + l_file_name

if not FileExists ( l_File_Location ) then
w_reports.dw_1.object.file_exists[ReturnValue] = "NO"
else
w_reports.dw_1.object.file_exists[ReturnValue] = "YES"
end if
w_reports.dw_1.object.log_page[ReturnValue] = ds.object.log_page[CurRow]
w_reports.dw_1.object.ac_id[ReturnValue] = ds.object.aircraft[CurRow]
w_reports.dw_1.object.date[ReturnValue] = ds.object.Date[CurRow]
w_reports.dw_1.object.origin[ReturnValue] = ds.object.origin[CurRow]

Next

w_reports.dw_1.SetSort("file_exists , date")

w_reports.dw_1.Sort()
close(w_logpage_pdf_rpt)


*****Огромное спасибо всем за помощь*****
...
Рейтинг: 0 / 0
Modify Datastore
    #33925985
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SvetaSh
DS = CREATE DATASTORE
Ret = CREATE DATASTORE

Так делать не надо.
Сделайте свой datastore унаследованный от стандартного.
SQL ошибки можно будет ловить в событии dberror вашего datastore

SvetaSh
error_check = DS.Retrieve()
//error_check = -1//

if DS.Retrieve() = 1 then
lsErr = "Database has been updated."
commit;
else
lsErr = sqlca.SQLErrText

SvetaSh, а также специалисты дающие советы - запомните - ни dw.Retrieve(), ни dw.Update() не меняют свойств транзакционного объекта. Все sql ошибки в datawindow/datastore следует ловить в dberror event!!!
...
Рейтинг: 0 / 0
Modify Datastore
    #33926022
alexis glinski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нужно по дэфолту сделать DataObject без аргументов, а вместо них изменять WHERE в запросе
...
Рейтинг: 0 / 0
Modify Datastore
    #33926327
SvetaSh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pomeniala nazad na Modify()
ds.modify() vozvraschaet error ..


Line 1, Column 439, Incorrect syntax.

Ia ne vizhu nichego wrong s syntax..
...
Рейтинг: 0 / 0
Modify Datastore
    #33927013
zuzu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 SvetaSh
попробуйте перед Retrieve
получить SQL запрос через GetSQLSelect и запустить его через какойто SQL клиент.
правдо у меня подозрения на использование:
String(uo_1.of_start_end_Date(True))
откуда вам известно что формат даты на вашей машине такойже что и на сервере ?
...
Рейтинг: 0 / 0
Modify Datastore
    #33927667
Estets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SvetaShpomeniala nazad na Modify()
ds.modify() vozvraschaet error ..


Line 1, Column 439, Incorrect syntax.

Ia ne vizhu nichego wrong s syntax..

Ну так запостите нам строку передаваемую в Modify или посмотрите что находится рядом с 439-ым символом.
...
Рейтинг: 0 / 0
Modify Datastore
    #33929090
SvetaSh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Modify...
' SELECT distinct
aircraft = (select aircraft_id from aircraft_data where oid = flight_data.aircraft_oid),
flight_data.log_page,
Origin = (Select location_id from location_master where oid = flight_data.origination_oid),
date = (select min(actual_time_off) from flight_data fd where log_page = flight_data.log_page)
FROM flight_data
WHERE flight_data.status_sym = 'Completed'
AND flight_data.actual_time_off >= '8/1/2006 00:00:00' and flight_data.actual_time_off <= '8/18/2006 00:00:00''
...
Рейтинг: 0 / 0
Modify Datastore
    #33929136
SvetaSh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DataWindow.Table.Select=' SELECT distinct
aircraft = (select aircraft_id from aircraft_data where oid = flight_data.aircraft_oid),
flight_data.log_page,
Origin = (Select location_id from location_master where oid = flight_data.origination_oid),
date = (select min(actual_time_off) from flight_data fd where log_page = flight_data.log_page)
FROM flight_data
WHERE flight_data.status_sym = 'Completed'
AND flight_data.actual_time_off >= '8/1/2006 00:00:00' and flight_data.actual_time_off <= '8/18/2006 00:00:00''
...
Рейтинг: 0 / 0
Modify Datastore
    #33929251
SvetaSh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Changed ModifyWhere
DataWindow.Table.Select=' SELECT distinct
aircraft = (select aircraft_id from aircraft_data where oid = flight_data.aircraft_oid),
flight_data.log_page,
Origin = (Select location_id from location_master where oid = flight_data.origination_oid),
date = (select min(actual_time_off) from flight_data fd where log_page = flight_data.log_page)
FROM flight_data
WHERE flight_data.status_sym = 'Completed'
AND flight_data.aircraft_oid = 111 AND flight_data.origination_oid = 1399 AND flight_data.actual_time_off >= ~'7/1/2006 00:00:00~' and flight_data.actual_time_off < DateAdd(d, 1, ~'7/31/2006 00:00:00~') '

vse ravno poluchau takuiu zhe error

Line 1, col 435 Incorrect syntax
...
Рейтинг: 0 / 0
25 сообщений из 36, страница 1 из 2
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Modify Datastore
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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