powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / DBF структура и БД Oracle
8 сообщений из 8, страница 1 из 1
DBF структура и БД Oracle
    #32750629
Молодой Я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую, уважаемые. Вобщем тема не очень отражает суть вопроса, извиняюсь, но кратко сформулировать проблематично. Вступление: в БД Oracle есть таблица "tab1", в ней два поля Field1 Numeric(4) и Field2 VarChar2(4). В результате отработки нижеприведенного кода получается файл "Temp.dbf", в котором в полях FIELD_TYPE, FIELD_LEN и FIELD_DEC для исходных столбцов Field1 и Field2 указано
N, 6, пустое
C, 4, пустое
соответственно.
Код: plaintext
1.
2.
3.
4.
5.
IF SQLEXEC(nHandle, "SELECT Field1 , Field12 FROM tab1", 'MY_CUR')< 0 
   DO pr_ErrorDetail WITH PROGRAM( 0 ), LINENO()
ENDIF
COPY STRUCTURE EXTENDED TO Temp
BROWSE
Сам вопрос таков: почему было Numeric 4, а стало 6 ??? И почему тогда не изменилась длина символьного поля? Как бороться с изменен6ием разрядности числового поля?
...
Рейтинг: 0 / 0
DBF структура и БД Oracle
    #32751213
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подозреваю, что это связано с особенностями физического хранения полей типа Numeric в серверных базах данных и в FoxPro.

В FoxPro поля типа Numeric храняться как символьные строки. Т.е. чило 123 так физически и хранится как символьная строка "123" с ведущими пробелами.

А вот в серверных базых данных это не так. Посмотри описание типов данных для Oracle. Для MS SQL, например, размерность Numeric от 1 до 9 физически храниться в 5 байтах. Т.е. и N(1) и N(9) физически занимают одно и то же пространство в 5 байт.

Как с этим бороться и, главное, нужно ли, я не знаю. Разве это как-то влияет на работу?

PS: Для MS SQL разница составляет 3 символа. Т.е. если на сервере N(9), то в FoxPro N(12)
...
Рейтинг: 0 / 0
DBF структура и БД Oracle
    #32751590
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Молодой Я!

Если учесть что в фоксовом поле N(4) ты не сможешь хранить 4-х значные
отрицательные числа (знак минус в фоксе считается наравне с реальными
числами), а в Oracle в Numeric(4) - запросто. А также если учесть что в
Oracle в поле Numeric(4, 1) ты сможешь хранить числа с 3-мя знаками до
зяпятой + 1 после (а десятичная точка опять таки не входит в расчёт - в
отличие от фокса!) - мы и получаем что для корректного представления
Numeric-чисел в фоксе требуется накинуть 1 или 2 разряда - очевидно для
простоты (чтоб не определять есть десятичные разряды или их нету совсем)
накидывается всегда 2 "лишних" разряда - чтобы гарантированно поместились
все возможные значения из диапазона.

Posted via ActualForum NNTP Server 1.0
...
Рейтинг: 0 / 0
DBF структура и БД Oracle
    #32752449
Молодой Я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМКак с этим бороться и, главное, нужно ли, я не знаю. Разве это как-то влияет на работу?
Igor KorolyovЕсли учесть что в фоксовом поле N(4) ты не сможешь хранить 4-х значные отрицательные числа (знак минус в фоксе считается наравне с реальными числами), а в Oracle в Numeric(4) - запросто. А также если учесть что в Oracle в поле Numeric(4, 1) ты сможешь хранить числа с 3-мя знаками до зяпятой + 1 после

Поясню ситуацию: переводим DBF-ники в таблицы БД Oracle. Но для совместимости версий необходимо пока данные перекидывать в Oracle и обратно в dbf при работе программы. И вот при запуске программы надо данные вытянуть из Oracle и создать dbf-файлы. Хранить шаблоны dbf-ников не хотелось бы и писать в лоб create ... тоже, так как есть select ... from ... into DBF ... . Вот только проблема с размерностью тут получается... :(
Поле, которое N(4) - айдишник строки, следовательно там ни минусов ни знаков после запятой быть не может по определению и лишняя разрядность мне совсем не нужна, т.к. по этому полю в прогах создаются индексы, происходит seek и т.д. :(
Неужели придется хранить шаблоны dbf-ников??? ;-(
...
Рейтинг: 0 / 0
DBF структура и БД Oracle
    #32753903
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Молодой Я!

Судя по твоему описанию подобные "шаблоны" уже имебются так или иначе! Т.е.
программа работающая с dbf-ами явно ожидает увидеть таблицы вполне
определённого формата - значит тебе нужно их не создавать, а заполнять -
т.е. проводить репликацию данных. Вообще вопрос репликации весьма сложный -
и размерности полей там далеко не самая неприятная часть. Если поток данных
однонаправленный (только с сервера в dbf-ы и никогда наоборот) - то конечно
полегче будет... А с размером ты никак не разберёшься - это специфика работы
с ODBC как я понимаю. Откуда фоксу знать что у тебя там "только
положительные" и "только целые". Он работает так чтобы при всяком раскладе
ошибок не было - так что усекай, или - лучше - не создавай dbf с нуля, а
заполняй уже имеющийся через Append или в цикле по SPT курсору.

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
DBF структура и БД Oracle
    #32754337
Молодой Я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Igor Korolyov
Он работает так чтобы при всяком раскладе
ошибок не было - так что усекай, или - лучше - не создавай dbf с нуля, а
заполняй уже имеющийся через Append или в цикле по SPT курсору.
Да, спасибо. Я уже понял, что придется где-то иметь заготовку dbf-ника или в проге создавать необходимую структуру, а автоматом никак не пройдет. Единственный еще вопрос: что за SPT курсор? Как его создать и как юзать?
...
Рейтинг: 0 / 0
DBF структура и БД Oracle
    #32757928
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Молодой Я!

Единственный еще вопрос: что за SPT курсор?
Это тот курсор что ты создаёшь по SQLEXEC() - Сама технология "прямых
запросов" кратко называется SPT - или, если полно, SQL Pass Through

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
DBF структура и БД Oracle
    #32757944
Молодой Я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Igor Korolyov
Hi Молодой Я!

Единственный еще вопрос: что за SPT курсор?
Это тот курсор что ты создаёшь по SQLEXEC() - Сама технология "прямых
запросов" кратко называется SPT - или, если полно, SQL Pass Through
О, теперь понятно все. Спасибо за помощь и ответы.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / DBF структура и БД Oracle
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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