|
Добавка
|
|||
---|---|---|---|
#18+
Совершенно верно! Уважаемый vSkv просто видел создание этого чуда! В Developer можно использовать более 1-го соединения. Я бы сказал можно использовать много соединений одновременно. К сожалению, я не нашел другого способа, не иначе как динамический SQL. Эта штука правда не неписана в той самой книжке о которой говорит мой коллега. В Developer существует пакет EXEC_SQL очень (!!!) похожий на пакет SYS.DBMS_SQL (вот он как раз и описан в той самой чудной книжке). Вот все, что вспомнил... в отпуске и нет книжки под рукой : 1. открываем соеднение и сохраняем его идентификатор в переменной (вроде функция EXEC_SQL.OPEN_CONNECTION(<connect string> возвращает NUMBER) 2. открываем курсор в пределах соединения (функция EXEC_SQL.OPEN_CURSOR(<ConID> возвращает NUMBER) 3. парсим запрос (процедура EXEC_SQL.PARSE(<ConID>, <SQLString> ) 4. размечаем вывод запроса (EXEC_SQL.BIND_COLOUMN) 5. загоняем входные параметры (EXEC_SQL.BIND_VARIABLE) 6. запускаем запрос (функция EXEC_SQL.EXECUTE(<ConID>, <CursorID> возвращает NUMBER - не пользуюсь этим значением, вроде число записей в курсоре) 7. считываем запись (функция EXEC_SQL.FETCH_ROWS(<ConID>, <CursorID> возвращает NUMBER, если вернула 0, то записей больше нет) 8. считываем выходные данные (EXEC_SQL.VALUE_COLOUMN) Простите за ошибку, мог и ошибиться, главное идею я здесь раскрыл. Какие вопросы меня мучат с этой OCA: 1. Можно ли постоянно менять главный коннект формы, то на одно соединение, то на другое? 2. Можно ли через ODBC открыть любую DBF не находящуюся в рабочей директории, если путь к файлу известен? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2002, 22:51 |
|
Добавка
|
|||
---|---|---|---|
#18+
В очередной раз спутал кнопки по смыслу: Новое и Ответить! Простите великодушно ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2002, 22:53 |
|
Добавка
|
|||
---|---|---|---|
#18+
В очередной раз спутал кнопки по смыслу: Новое и Ответить! Простите великодушно ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2002, 22:53 |
|
Добавка
|
|||
---|---|---|---|
#18+
Вот и примерчик: PROCEDURE getData IS -- a connection handle must have a datatype of EXEC_SQL.conntype connection_id EXEC_SQL.CONNTYPE; BEGIN -- a connection string is typically of the form 'username/password@database_alias' connection_id := EXEC_SQL.OPEN_CONNECTION('connection_string'); END; ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2002, 11:21 |
|
Добавка
|
|||
---|---|---|---|
#18+
Вот примерчик, так примерчик: DECLARE v_alert NUMBER; v_recid btb_alga_file.recid%TYPE; v_connect EXEC_SQL.CONNTYPE; v_cursor EXEC_SQL.CURSTYPE; v_sql VARCHAR2(500); v_dbfcnt NUMBER; v_exec NUMBER; v_flag BOOLEAN; t_amount NUMBER; t_p_kod VARCHAR2(20); t_count NUMBER; v_fcnt NUMBER; v_fwrn NUMBER; v_ferr NUMBER; v_rstat CHAR(1); v_list NUMBER; v_plist PARAMLIST; BEGIN -- Check for all fields are filled IF :BTBM0007.BANK_C IS NULL OR :BTBM0007.GROUPC IS NULL OR :BTBM0007.CCY IS NULL OR :BTBM0007.CMP_CODE IS NULL OR :BTBM0007.FILEID IS NULL OR :BTBM0007.SLIP_NR IS NULL THEN SET_ALERT_PROPERTY('ERROR', ALERT_MESSAGE_TEXT, 'All fileds must be entered!'); v_alert := SHOW_ALERT('ERROR'); ELSE -- Create DBF file descriptor SELECT btb_alga_file_seq0.NEXTVAL INTO v_recid FROM dual; INSERT INTO btb_alga_file (recid, bank_c, groupc, ccy, emp_code, slip_nr, fileid) VALUES (v_recid, :BTBM0007.BANK_C, :BTBM0007.GROUPC, :BTBM0007.CCY, :BTBM0007.CMP_CODE, :BTBM0007.SLIP_NR, :BTBM0007.FILEID); MESSAGE('DBF file descriptor created. RECID = ' || TO_CHAR(v_recid), NO_ACKNOWLEDGE); -- Open DBF DataBase v_connect := EXEC_SQL.OPEN_CONNECTION('SYSTEM/MANAGER@ODBC:BTB_ALGA'); MESSAGE('DBF DataBase opened for import data.', NO_ACKNOWLEDGE); -- Count records in DBF file (table) v_cursor := EXEC_SQL.OPEN_CURSOR(v_connect); v_sql := 'SELECT COUNT(*) FROM '|| :BTBM0007.FILEID; EXEC_SQL.PARSE(v_connect, v_cursor, v_sql); EXEC_SQL.DEFINE_COLUMN(v_connect, v_cursor, 1, v_dbfcnt); v_exec := EXEC_SQL.EXECUTE_AND_FETCH(v_connect, v_cursor, v_flag); EXEC_SQL.COLUMN_VALUE(v_connect, v_cursor, 1, v_dbfcnt); EXEC_SQL.CLOSE_CURSOR(v_cursor); MESSAGE('Found ' || v_dbfcnt || ' rows in DBF file.', NO_ACKNOWLEDGE); -- Import records from DBF into Oracle v_cursor := EXEC_SQL.OPEN_CURSOR(v_connect); v_sql := 'SELECT AMOUNT, P_KOD FROM ' || :BTBM0007.FILEID; EXEC_SQL.PARSE(v_connect, v_cursor, v_sql); EXEC_SQL.DEFINE_COLUMN(v_connect, v_cursor, 1, t_amount); EXEC_SQL.DEFINE_COLUMN(v_connect, v_cursor, 2, t_p_kod, 20); v_exec := EXEC_SQL.EXECUTE(v_connect, v_cursor); t_count := 0; P_PROGRESS_INIT(0, v_dbfcnt); SET_ALERT_PROPERTY('INFORM', ALERT_MESSAGE_TEXT, 'FORM starts DBF file records loading. Press OK button and wait.'); v_alert := SHOW_ALERT('INFORM'); set_item_property('BTBM0007.BN_UNLOAD', enabled, property_false); set_item_property('BTBM0007.BN_PROCESS', enabled, property_false); UPDATE btb_alga_file SET status = 'B' WHERE recid = v_recid; --ORA_PROF.STOP_TIMER('BTB_TIMER'); WHILE EXEC_SQL.FETCH_ROWS(v_connect, v_cursor) > 0 LOOP EXEC_SQL.COLUMN_VALUE(v_connect, v_cursor, 1, t_amount); EXEC_SQL.COLUMN_VALUE(v_connect, v_cursor, 2, t_p_kod); t_amount := t_amount * power(10, F_CCY_EXP(:BTBM0007.CCY)); INSERT INTO btb_alga_file_desc (recid, p_kod, amount) VALUES (v_recid, t_p_kod, t_amount); P_PROGRESS_NEXT; t_count := t_count + 1; MESSAGE( 'Record loaded from DBF file: ' || TO_CHAR(t_count) || ': ' || t_p_kod || ' - ' || TO_CHAR(t_amount), NO_ACKNOWLEDGE); END LOOP; --ORA_PROF.START_TIMER('BTB_TIMER'); EXEC_SQL.CLOSE_CURSOR(v_cursor); EXEC_SQL.CLOSE_CONNECTION(v_connect); SET_ALERT_PROPERTY('INFORM', ALERT_MESSAGE_TEXT, 'DBF file loading complette.'); v_alert := SHOW_ALERT('INFORM'); SELECT COUNT(*) INTO v_fcnt FROM btb_alga_file_desc WHERE recid = v_recid; SELECT COUNT(*) INTO v_fwrn FROM btb_alga_file_desc WHERE recid = v_recid AND status = 'B'; SELECT COUNT(*) INTO v_ferr FROM btb_alga_file_desc WHERE recid = v_recid AND status = 'C'; v_fcnt := NVL(v_fcnt, 0); v_fwrn := NVL(v_fwrn, 0); v_ferr := NVL(v_ferr, 0); IF v_fwrn > 0 AND v_ferr > 0 THEN SET_ALERT_PROPERTY('ERROR', ALERT_MESSAGE_TEXT, 'Found errors and warnings. File cannot be processed into Issuing 2.0.'); v_alert := SHOW_ALERT('ERROR'); v_rstat := 'E'; ELSIF v_fwrn > 0 THEN SET_ALERT_PROPERTY('INFORM', ALERT_MESSAGE_TEXT, 'Found warnings. File may be processed into Issuing 2.0. But only if it is a new company or you are shure that it is correct.'); v_alert := SHOW_ALERT('INFORM'); v_rstat := 'D'; SET_ALERT_PROPERTY('WARNING', ALERT_MESSAGE_TEXT, 'If it is a new company, then do you want to make workers list permanent?'); IF SHOW_ALERT('WARNING') = ALERT_BUTTON1 THEN BTB_ALGA.P_MAKE_WORKERS_PERMANENT(v_recid); END IF; ELSIF v_ferr > 0 THEN SET_ALERT_PROPERTY('ERROR', ALERT_MESSAGE_TEXT, 'Found errors. File cannot be processed into Issuing 2.0.'); v_alert := SHOW_ALERT('ERROR'); v_rstat := 'E'; ELSE SET_ALERT_PROPERTY('INFORM', ALERT_MESSAGE_TEXT, 'File loaded successfully without any errors and warnings.'); v_alert := SHOW_ALERT('INFORM'); v_rstat := 'C'; END IF; UPDATE btb_alga_file SET status = v_rstat WHERE recid = v_recid; :SYSTEM.MESSAGE_LEVEL := 10; COMMIT; :SYSTEM.MESSAGE_LEVEL := 5; v_plist := GET_PARAMETER_LIST('BTB_PARAMETER'); IF NOT ID_NULL(v_plist) THEN DESTROY_PARAMETER_LIST(v_plist); END IF; v_plist := CREATE_PARAMETER_LIST('BTB_PARAMETER'); ADD_PARAMETER(v_plist, 'P_RECID', TEXT_PARAMETER, TO_CHAR(v_recid)); RUN_PRODUCT(REPORTS, 'BTBR0007', SYNCHRONOUS, RUNTIME, FILESYSTEM, v_plist, NULL); END IF; v_list := POPULATE_GROUP('RGRP_FILE_LOAD'); POPULATE_LIST('LIST_LOAD', 'RGRP_FILE_LOAD'); v_list := POPULATE_GROUP('RGRP_FILE_PROCESS'); POPULATE_LIST('LIST_PROCESS', 'RGRP_FILE_PROCESS'); set_item_property('BTBM0007.BN_UNLOAD', enabled, property_true); set_item_property('BTBM0007.BN_PROCESS', enabled, property_true); EXCEPTION WHEN OTHERS THEN EXEC_SQL.CLOSE_CURSOR(v_cursor); EXEC_SQL.CLOSE_CONNECTION(v_connect); MESSAGE(SQLERRM || '>>> ' || to_char(t_amount) || ' : ' || t_p_kod); MESSAGE(SQLERRM || '>>> ' || to_char(t_amount) || ' : ' || t_p_kod); set_item_property('BTBM0007.BN_UNLOAD', enabled, property_true); set_item_property('BTBM0007.BN_PROCESS', enabled, property_true); END; ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2002, 21:35 |
|
|
start [/forum/topic.php?fid=52&fpage=2849&tid=1993378]: |
0ms |
get settings: |
12ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
39ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
2ms |
others: | 279ms |
total: | 418ms |
0 / 0 |