|
|
|
использование COPY TO
|
|||
|---|---|---|---|
|
#18+
Есть результат выполнения SQL запроса в созданном курсоре. При использовании "Copy to" равно как и export изменяется значение точности поля типа Numeric в результирующем файле, т.е. в результирующем файле получается поле типа Numeric с нулевой точностью - N(20) Привожу кусок текста: create CURSOR c_Kart_saldo(user_id N(10),; billing_id N(10),; saldo N(15,2); ) cod=sqlexec(nora,sql_saldo_ab,'c_Kart_saldo') IF cod>0 COPY TO saldo_nas FOX2X as 866 endif Вопрос: как сделать так, чтобы точность сохранялась? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2005, 12:16:01 |
|
||
|
использование COPY TO
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. Может, 15 разрядов ( saldo N(15,2);) не хватает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2005, 12:28:26 |
|
||
|
использование COPY TO
|
|||
|---|---|---|---|
|
#18+
а к чему это создание курсора ? разве sqlexec(nora,sql_saldo_ab,'c_Kart_saldo') его не перетрет? обработайте курсор напильником до требуемых размеров после получения его от указаной команды ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2005, 12:37:54 |
|
||
|
использование COPY TO
|
|||
|---|---|---|---|
|
#18+
Hi KTN! Кривой ODBC драйвер - это часом не Oracle (если по названию переменной nora судить :)) Если так, то используй Oracle-вский ODBC драйвер, а не MS-ный (он вообще жутко криво работает с вычисляемыми полями). Дабы решить проблему с десятичной точкой при работе с Oracle сделай ПОИСК по данному разделу. Это всего одна команда ALTER SESSION :) А так вполне справедливо замечено, что SQLEXEC() банально закрывает старый курсор, он вовсе и не должен в него "добавлять" записи, или "использовать структуру". Posted via ActualForum NNTP Server 1.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2005, 03:54:49 |
|
||
|
использование COPY TO
|
|||
|---|---|---|---|
|
#18+
Igor Korolyov Вы совершенно правы, действительно нужно затолкать в файл результат выполнения SQL запроса к ORACL_у. Спасибо за наводку. Попытаюсь раздобыть ORACL_овый ODBC. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2005, 09:01:57 |
|
||
|
использование COPY TO
|
|||
|---|---|---|---|
|
#18+
Hi KTN! Он устанавливается вместе с Oracle Client - в зависимости от версии либо "напрямую" указывается Oracle ODBC Driver, либо более общее "Windows tools" или как-то так (там ещё и Ole DB провайдер, и oo4o и ещё что-то в одной куче/чекбоксе выбора). НО дабы не мучиться с проблемами этого драйвера сделай всё-же ПОИСК!!! Posted via ActualForum NNTP Server 1.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2005, 23:46:41 |
|
||
|
использование COPY TO
|
|||
|---|---|---|---|
|
#18+
Hi, Igor Korolyov В результате "поиска" и проб предложенных вариантов оправдало себя полностью только следующее предложение: -------------------------------------------------------------------------- StiletЕсли это были бы регионаальные настройки, то дробная часть пропала бы во всех полях, а она пропадаете только в select nvl(p1,0) p1,(select max(p2) from t2 where t2.p1=t1.p1) p2 from p1 лично я сначала создаю таблицу нужной структуры create cursor cur1 (p1(n(10,2),p2(n1,2)) ) retval=sqle(hndl,[select nvl(p1,0) p1,(select max(p2) from t2 where t2.p1=t1.p1) p2 from p1],[cur2]) sele cur1 append from dbf([cur2]) ------------------------------------------------------------------------------ Отработал текст: Create dbf aaa (User_id N(12,0), billing_id N(8,0),saldo N(12,2)) cod=sqlexec(nora,sql_saldo_ab,'c_Kart_saldo') IF cod>0 sele aaa append from dbf([c_Kart_saldo]) COPY TO Saldo_nas FOX2X as 866 endif ---------------------------------------------------------------------------- СПАСИБО ВСЕМ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2005, 08:47:48 |
|
||
|
использование COPY TO
|
|||
|---|---|---|---|
|
#18+
Hi KTN! Всё-же ты не всё нашёл... Да, в MS ODBC драйвере есть проблема - он результаты всех вычислений (в частности функций - как у тебя) представляет в виде N(20,0) - причём ФИЗИЧЕСКИ он таки десятичную точку шлёт - но описанный в заголовку курсора тип не позволяет увидеть дробную часть. в Oracle ODBC драйвере же такие запросы отдают корректный тип - B (aka Double) - этот тип замечателен тем, что даже если он описан как B(0) то всё равно мы НЕ теряем доступа к дробной части. единственная проблема - это то что часто (уж не знаю почему так) по умолчанию сервер шлёт число с разделителем не точкой, а запятой - и такое число попав в DBF/курсор ведёт себя неадекватно - то видна дробная часть, а то её нету - лечится через ALTER SESSION SET NLS_NUMERIC_CHARACTERS '. ' если мне не изменяет склероз - это точно есть на форуме... Posted via ActualForum NNTP Server 1.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2005, 03:52:00 |
|
||
|
использование COPY TO
|
|||
|---|---|---|---|
|
#18+
Hi, Igor Korolyov! Об ORACLE ODBC мне придется забыть - велят работать с MS ODBC. Что-то отработало, но результата не видно - программа свалилась с кодом 1581 (по поводу NULL значений). Вразумите меня, пожалуйста, как с ними поступить? В принципе ими можно попуститься (IS NOt NULL), но все же мне нужен полный об"ем. Текст в prg: sql_saldo_ab="ALTER SESSION SET NLS_NUMERIC_CHARACTERS = '. ' "+; "SELECT ss.billing_id,u.user_id, ss.saldo "+; "FROM t_users u, t_services s, t_saldo ss "+; "WHERE (u.user_id = ss.user_id and u.dept_id=26341715 and u.iscorp='N') "+; "and ss.BILLING_ID=200505 and (u.user_id=s.user_id and s.svctype='0')" c_Kart_saldo='' cod=sqlexec(nora,sql_saldo_ab,'c_Kart_saldo') IF cod>0 COPY TO Saldo_nas FOX2X as 866 endif Подскажите, пожалуйста, может еще что неверно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2005, 06:08:29 |
|
||
|
использование COPY TO
|
|||
|---|---|---|---|
|
#18+
Hi KTN! C MS драйвером ты нормальные типы полей не получишь никак. Придётся извращаться с копированием в промежуточный dbf и правкой его на низком уровне (просто COPY TO насколько я помню НЕ решает проблему - дробная часть теряется). Указанный ALTER SESSION этому драйверу по барабану будет. Если тебе вместо NULL нужны какие-то значения (например 0) то используй NVL() в запросе (эта функция есть в Oracle). А вообще проблема с NULL не возникла бы, если бы ты корректно описал поле принимающей таблицы. Posted via ActualForum NNTP Server 1.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2005, 01:35:13 |
|
||
|
использование COPY TO
|
|||
|---|---|---|---|
|
#18+
Hi, Igor Korolyov! Спасибо за внимание к моей проблеме. Судя по всему придется возвращаться к старому алгоритму: позаписно тащить из курсора все записи в файл нужной структуры. Работает это значительно медленнее и текст проги становитсь громоздким. Хотелось как лучше, получилось как всегда - топорно, но работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2005, 06:35:41 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=33147136&tid=1593928]: |
0ms |
get settings: |
12ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
393ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 241ms |
| total: | 720ms |

| 0 / 0 |
