|
|
|
Modify Datastore
|
|||
|---|---|---|---|
|
#18+
подскажите можно-ли использовать М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) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2006, 18:16 |
|
||
|
Modify Datastore
|
|||
|---|---|---|---|
|
#18+
SvetaSh wrote: > подскажите можно-ли использовать Мodify с datastore Да. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2006, 18:19 |
|
||
|
Modify Datastore
|
|||
|---|---|---|---|
|
#18+
Тогда, в чем проблема, может я что-то пропускаю. После Мodify, Retrive не дает ни каких результатов. (total_rows всегда 0) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2006, 18:28 |
|
||
|
Modify Datastore
|
|||
|---|---|---|---|
|
#18+
а что возращает 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 + "'") ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2006, 18:33 |
|
||
|
Modify Datastore
|
|||
|---|---|---|---|
|
#18+
OriginalWhereClause возвращает query from Datawindow, эта часть работает, а вместе с Modify нет. я пыталась run select statement отдельно, все работает, а в скрипте нет. ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2006, 18:37 |
|
||
|
Modify Datastore
|
|||
|---|---|---|---|
|
#18+
OriginalWhereClause возвращает query from Datawindow, эта часть работает, а вместе с Modify нет. я пыталась run select statement отдельно, все работает, а в скрипте нет. ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2006, 18:42 |
|
||
|
Modify Datastore
|
|||
|---|---|---|---|
|
#18+
попробуйте устанавливать SQL с помощью ф-ции SetSQLSelect() вместо modify. // а не работает т.к. не экранированы кавычки: l_date_clause = .... + " ' " ... ModifiedWhere = "DataWindow.Table.Select= ' " + OriginalWhereClause + l_origin_clause + l_ac_clause + l_date_clause + " ' " т.е. в ModifiedWhere у вас что-то вроде Код: plaintext 1. где начинаются строки, где заканчиваются - PB разобрать не может... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2006, 18:59 |
|
||
|
Modify Datastore
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2006, 19:17 |
|
||
|
Modify Datastore
|
|||
|---|---|---|---|
|
#18+
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: Как правильно задавать вопросы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2006, 19:55 |
|
||
|
Modify Datastore
|
|||
|---|---|---|---|
|
#18+
PL991)... 2)... 3)...Полностью согласен. А SetTransObject вы используете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2006, 10:48 |
|
||
|
Modify Datastore
|
|||
|---|---|---|---|
|
#18+
Retrieve() = -1, proverila code oshibki = "" ?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2006, 16:33 |
|
||
|
Modify Datastore
|
|||
|---|---|---|---|
|
#18+
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 . Сравните его с тем, что Вы ожидаете. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2006, 20:50 |
|
||
|
Modify Datastore
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2006, 20:54 |
|
||
|
Modify Datastore
|
|||
|---|---|---|---|
|
#18+
А SetTransObject вы используете? Da ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2006, 21:46 |
|
||
|
Modify Datastore
|
|||
|---|---|---|---|
|
#18+
SvetaShА SetTransObject вы используете? Da Пришлите тогда еще раз кусок кода выполняющий SetSQLSelect и Retrieve. И что возвращает SetSQLSelect? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2006, 10:51 |
|
||
|
Modify Datastore
|
|||
|---|---|---|---|
|
#18+
я использую 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) *****Огромное спасибо всем за помощь***** ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2006, 16:39 |
|
||
|
Modify Datastore
|
|||
|---|---|---|---|
|
#18+
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!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2006, 18:10 |
|
||
|
Modify Datastore
|
|||
|---|---|---|---|
|
#18+
нужно по дэфолту сделать DataObject без аргументов, а вместо них изменять WHERE в запросе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2006, 18:23 |
|
||
|
Modify Datastore
|
|||
|---|---|---|---|
|
#18+
pomeniala nazad na Modify() ds.modify() vozvraschaet error .. Line 1, Column 439, Incorrect syntax. Ia ne vizhu nichego wrong s syntax.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2006, 22:22 |
|
||
|
Modify Datastore
|
|||
|---|---|---|---|
|
#18+
2 SvetaSh попробуйте перед Retrieve получить SQL запрос через GetSQLSelect и запустить его через какойто SQL клиент. правдо у меня подозрения на использование: String(uo_1.of_start_end_Date(True)) откуда вам известно что формат даты на вашей машине такойже что и на сервере ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2006, 10:40 |
|
||
|
Modify Datastore
|
|||
|---|---|---|---|
|
#18+
SvetaShpomeniala nazad na Modify() ds.modify() vozvraschaet error .. Line 1, Column 439, Incorrect syntax. Ia ne vizhu nichego wrong s syntax.. Ну так запостите нам строку передаваемую в Modify или посмотрите что находится рядом с 439-ым символом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2006, 12:33 |
|
||
|
Modify Datastore
|
|||
|---|---|---|---|
|
#18+
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'' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2006, 17:03 |
|
||
|
Modify Datastore
|
|||
|---|---|---|---|
|
#18+
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'' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2006, 17:14 |
|
||
|
Modify Datastore
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2006, 17:41 |
|
||
|
|

start [/forum/topic.php?fid=15&msg=33927013&tid=1337634]: |
0ms |
get settings: |
10ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
48ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
84ms |
get tp. blocked users: |
1ms |
| others: | 257ms |
| total: | 437ms |

| 0 / 0 |
