Программа с БД в формате DBF

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Гость

Сообщение Гость »

Добрый день !

Давно не работал на Clarion (с 2.1 DOS), сейчас возникла
потребность написать небольшую программку с БД формата DBF
(среда С61 EE 9029 ABC).

- прописал во все списки OEM (так нужно);
- в программе соответственно указал: Locale('CLACOLSEQ','WINDOWS')
- "целые" поля индексов описал как REAL (Number=N(9,0))

и все хорошо, но индексы ведут себя странно - то работают, то не работают ... :( Причем не предсказуемо - строяться,
но запись по ключу, то считывается, то не считывается.
Pack(Список) - не помогает.

Причем, без разницы - что dBase3, что dBase4 (FoxPro не поддрживает OEM). Перевожу списки в TPS - все OK.

Вряд ли может быть такой откровенный косяк драйверов, скорее всего что-то не учел. Не подскажите - что нужно прописать (или как описать), для работы с индексированными DBF из Clarion ?

Заранее огромное спасибо.
Виталий
Гость

Сообщение Гость »

Скорее всего, косяк драйверов ВСЕХ DBase.

У меня возникла такая же проблема при переводе пректа с Clarion 5.5.
Выличилось убиранием описания 'CLACOLSEQ' или CLACOLSEQ= в файле .env

------------
С уважением, bighard
bighard@mail.ru
Написал: ClaList(2)
Гость

Сообщение Гость »

- в программе соответственно указал: Locale('CLACOLSEQ','WINDOWS')
Ну дык, если файлы OEM, такая же и CLACOLSEQ. К сожалению, нельзя прописать разные локали для разных файлов.
- "целые" поля индексов описал как REAL (Number=N(9,0))
Причем, без разницы - что dBase3, что dBase4 (FoxPro не поддрживает OEM).
А FoxProFile{Prop:OEM}=True не сработает?

Перевожу списки в TPS - все OK.

А зачем их держать в Dbase? Разгрузи по требованию...

---------------------------------------
C уважением,
Юрий Философов,
Главный программист
Корпорация "Диполь", Саратов
E-mail yufil@tacis-dipol.ru (служ)
yufil@mail.ru (дом)
ICQ#75924439
Написал: ClaList(2)
Гость

Сообщение Гость »

Да я извиняюсь, не правильно написал.
В программе конечно же указано Locale('CLACOLSEQ','OEM')

Беда в том, что для БД в формате DBF операция чтения
по ключу Access:FileDBF.Fetch(KeyFileDBF) или Get(FileDBF,KeyFileDBF)
эпизодически возвращает "Запись не найдена".

Причем от состояния ключей это не зависит.
Запускаешь программу - работает.
Еще раз запускаешь - не работает.
Причем ключ по цифровому полю - локализация вроде бы не причем здесь.

Какая - то мистика. Меняю формат файлов на TPS - все OK.

Все-таки потихоньку прихожу к мнению, что писать на Clarion с использованием индексированного DBF видимо не получиться.

Придется действительно, при необходимости, выгружать списки.
Потому, что проблемы начинаются только при попытке работать с индексами (ключами). Если работать без них - драйвер DBF работает без проблем.

С уважением, Виталий
Гость

Сообщение Гость »

Спасибо - всем, кто хотел помочь - разобрался !
По крайне мере для dBase IV - индексы работают без проблем.

Может быть кому пригодится мой печальный опыт, что бы не тратить время -
при работе с индекированными DBF файлами придерживайтесь
следующих правил:

1. В каждом списке должен быть Primary Key
(иначе записи в списка будут двоиться - но это старая проблема);

2. Все списки ОБЯЗАТЕЛЬНО должны быть с атрибутом THERAD
и открываться для многопользовательского доступа (SHARE);
- иначе в MDI интерфейсе невозможно будет открыть два окна
с доступом к одному файлу.

3. В процедурах типа Browse, Form и Report файл должен быть описан
ТОЛЬКО ОДИН РАЗ - это мой главный косяк. Т.е. если файл описан
как Browsing List Box - его нельзя повторно включать в секцию
Other Files. Если сделать таким образом, то начинаются чудеса -
файл открыт, при последовательном доступе читается, а по ключу
записи не доступны в принципе.
Причем, если списки сделать TPS формата - то эта проблема не
проявляется ...

Еще раз спасибо ! Виталий.
Ответить