Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.04.27;
Скачать: CL | DM;

Вниз

BDE   Найти похожие ветки 

 
Loginov Dmitry ©   (2008-03-11 23:21) [0]

Выложил на свой сайт статью, касающуюся проблем, возникающих при работе с BDE.
http://matrix.kladovka.net.ru/index.php?page=bdeproblems

может быть, кому-то материал покажется полезным, а кто-то найдет в нем некорректные данные. Вопросы в конференции "Базы" по BDE все не прекращаются, а здесь будут готовые ответы на небольшую их часть.

Если у кого есть, чем можно дополнить статью, то выкладывайте сюда! :)


 
ferr   (2008-03-11 23:24) [1]

любители античности..


 
Petr V. Abramov ©   (2008-03-11 23:38) [2]

Если несколько приложений параллельно работают с одной и той же таблицей, то все изменения сохраняются в тот же самый (причем общий для всех) кэш, и физически запись в DB-файл произойдет только после того, как все приложения закроют набор данных.

a Database.commit?
не работает?
пробовать нет инструментов


 
Loginov Dmitry ©   (2008-03-11 23:41) [3]

> любители античности..


работа такая! куда от нее денешься? ;)


 
Loginov Dmitry ©   (2008-03-11 23:42) [4]

> a Database.commit?
> не работает?


не-а :)


 
Petr V. Abramov ©   (2008-03-11 23:54) [5]


> Loginov Dmitry ©   (11.03.08 23:42) [4]

приведи пример с двумя SQL-Explorer`ами
интересно


 
Loginov Dmitry ©   (2008-03-12 00:02) [6]

> приведи пример с двумя SQL-Explorer`ами
> интересно


А какой пример нужен?
Открыл 2 программы и одну и туже табличку в них. Второй экземпляр снял из диспетчера. В первом минут 5 вносил изменения и с Commit и без Commit. Затем вышел из программы и зашел заново. Никаких изменений сохранено не было!


 
Petr V. Abramov ©   (2008-03-12 00:13) [7]

в SQL-Explorer`е сommit не нашел

пусть твое плохое о бывшем будет правильно :)


 
Loginov Dmitry ©   (2008-03-12 00:18) [8]

> в SQL-Explorer`е сommit не нашел


А что за commit? Я думал, что имеется ввиду commit transaction, но соответствующая кнопка - на видном месте.


 
Petr V. Abramov ©   (2008-03-12 00:22) [9]


>  что за commit? Я думал, что имеется ввиду commit transaction,
>  но соответствующая кнопка - на видном месте.


> Loginov Dmitry ©   (12.03.08 00:18) [8]

у меня на видном нету, сам удивляюсь, может, че криво, знаю, что д.б. кнопка commit
В чем кривизна разбираться не буду по причинам что не в обиду :)


 
DrPass ©   (2008-03-12 00:33) [10]


> Вопросы в конференции "Базы" по BDE все не прекращаются,
>  а здесь будут готовые ответы на небольшую их часть.

Подозреваю, что те, кто все еще лезет в BDE, не особо утруждают себя чтением документации и статей...


 
Petr V. Abramov ©   (2008-03-12 00:58) [11]

Удалено модератором


 
Anatoly Podgoretsky ©   (2008-03-12 00:58) [12]

В статье нет главного - как настраивать БДЕ, для Парадокса, дБейса.
Надо рассмотреть каждый параметр. А то что приведено - это как бы набор встретившихся проблем, а начинающим не это нужно.


 
MsGuns ©   (2008-03-12 01:06) [13]

Статья в целом весьма полезная, хотя, ИМХО, не содержит ЯВНОГО указания технологии надежной (насколько применимо это слово к парадоксу) работы с одной и той же таблицей (таблицами) нескольких пользователей, - в частности активного использования личного каталога для копий таблиц-связок (мастеров).

Единственное замечание -вопрос: каким боком к парадоксу стоят транзакции. В "натуральном", так сказать, их смысле ?


 
Petr V. Abramov ©   (2008-03-12 01:16) [14]

Настоящая статья не преследует цели раскритиковать систему Borland Database Engine, т.к. в настоящее время никто уже не станет разрабатывать новое приложение, использующее BDE для доступа к базам данных, зато при работе "старых" приложений проблемы возникают.

это для тех, кто статью не читал, но хотел бы покритиковать


 
MsGuns ©   (2008-03-12 01:19) [15]

И еще по поводу надежности.
Бакап, к сожалению, далеко не всегда помогает (имеется в виду простое архивирование раб.каталога с последующим его разархивированием) - "порченные" таблицы запросто сохраняются и восстанавливаются вместе со всеми глюками, в том числе и непосредственно в данным (не в индексах).

Я долго бился в свою очередь над этой проблемой, пока не написал специальный сервис, который состоял в том, что изначально делается "образец" БД вместе со всеми констрэинтами, ключами, индексами и т.д. В этом образце хранятся только пустые таблицы. Сохранение рабочей БД выполняется путем выборки всех записей из всех таблиц и сохранением результатов ("Answer") в таблицах-двойниках в temp-каталоге. Архивируется именно этот каталог. Восстановление выполняется путем разархивирования архива и копирования данных из этих двойников в "образцовые" таблицы БД. Конечно, пришлось поработать, чтобы сделать этот сервис универсальным, не обошлось и без специальных "сервисных" таблиц, хранимых ОТДЕЛЬНО от рабочей БД (которые на 90% процентов создаются автоматически этим же сервисом с любой БД - далее надо просто немного подкрутить иерархию таблиц - и "образец" готов). Зато эта система надежно пашет годы и пользователи после относительно непродолжительной подготовки уже обходятся без программиста.


 
Германн ©   (2008-03-12 01:55) [16]

3. Данные иногда не сохраняются при выходе из программы.
Также можно с помощью соответствующих DBI-функций можно заставить BDE в любой момент сохранить кэш в DB-файл.
Стоило бы привести названия этих функций, поскольку "начинающий" пока их сам найдет, перестанет быть начинающим. Тем более, что начинающие даже не знают где искать справку по BDE. (Кстати стОит в начале статьи указать где найти справку по BDE и по LocalSQL).

5. Портятся файлы индекса первичного ключа (PX-файлы). При открытии таблицы выдается ошибка "Index out of date". Это распространенная болезнь BDE - портить индексы. Для устранения проблемы нужно либо удалить PX-файл (но кто его будет пересобирать?)
Как кто? Сама программа, которая с данной таблицей работает. Она же знает эту таблицу. Кстати и удалить поврежденный файл PX, тоже она сможет. (Так кстати я и работаю.)

6. Не удается открыть таблицу из-за поврежденного VAL-файла. Для устранения проблемы следует удалить поврежденный VAL-файл (в этом файле хранятся ограничения на поля таблицы). Обычно и без них можно прекрасно обойтись.
Нафиг вообще эти файлы! Они нужны только DBD. И только им и используются. Все ограничения нужно делать в самой своей программе!

17. Не используйте компонент TTable.
Эту фразу выкинуть на фиг. Все остальное из этого пунта можно оставить.

18. Для изменения языкового драйвера
А что? BDEAdmin с этим не справляется? Или в параметрах TDatabase нельзя установить сей драйвер? Типа DataBase1.Params.Values["LANGDRIVER"] :="..."

Пункт 19 стоит переписать с учетом рекомендаций Борланда.


 
Loginov Dmitry ©   (2008-03-12 07:57) [17]

> В статье нет главного - как настраивать БДЕ, для Парадокса,
> дБейса.


Этого разве в интернете нет нигде? Если есть, дайте линк (возможно, вставлю его отдельным пунктом и все дела! :)


> Бакап, к сожалению, далеко не всегда помогает (имеется в
> виду простое архивирование раб.каталога с последующим его
> разархивированием)


С статье не указывается, каким образом следует делать бэпап. Можно CopyFile(), можно dbiCopyTable(), а можно с помощью запросов. Зависит от фантазии :)


> Я долго бился в свою очередь над этой проблемой, пока не
> написал специальный сервис


с Парадоксом - только так, иначе ничего более-менее надежного не сделаешь :)


> [16] Германн ©   (12.03.08 01:55)


Спасиба! Учтем! :)


 
Jeer ©   (2008-03-12 10:00) [18]

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


 
Игорь Шевченко ©   (2008-03-12 10:28) [19]

"всякого младенца сразу по рождению, только-только перевязав пуповину, следует хорошенько вздуть розгами, приговаривая: «Не пиши, не пиши!»"
(с) А.П.Чехов

Развелось писателей - плюнуть некуда, всяко в писателя попадешь, творящего нетленку.


 
Loginov Dmitry ©   (2008-03-12 10:47) [20]


> Полагаю писать о старых технологиях следует тем, кто настолько
> же "стар" в их использовании, т.е. современникам им.


Абсолютно согласен.
Только вот пост твой - ни о чем!


 
Игорь Шевченко ©   (2008-03-12 11:05) [21]

Я, грешным делом, работаю с BDE в течение 9 лет. Все глюки, наблюдаемые мной, происходили от горе-установщиков BDE "по частям". И все.

Единственный серьезный глюк, обнаруженный и опубликованный на этом сайте в форуме "Базы" связан с тем, что BDE не поддерживает выборку большого размера - то есть, сотни тысяч записей прочитать последовательно не получится, особенно из широкой таблицы. Память кончится. Наблюдалось на Interbase.
Впрочем, dbExpress тоже ломается по той же причине.


 
Loginov Dmitry ©   (2008-03-12 11:27) [22]


> Я, грешным делом, работаю с BDE в течение 9 лет. Все глюки,
>  наблюдаемые мной, происходили от горе-установщиков BDE
> "по частям". И все.


Да. И от этого глюки тоже бывают.


 
DiamondShark ©   (2008-03-12 12:26) [23]

Ещё в копилку камушков.

Имеем связку BDE+ODBC (лично я попался на MS SQL Server ODBC driver).
Работаем на уровне изоляции read committed (для MS SQL -- по умолчанию).
Открываем TTable (или TQuery, не шибко принципиально), закачиваем несколько записей (не все!), например, показываем в гриде, потом в другом TQuery (Session, Database -- те же самые!) выполняем INSERT или DELETE.
Если "повезло" (обновлённые записи попали в закачаный диапазон) -- получаем зависание.

Результаты вскрытия.
BDE при открытии датасета не выкачивает все данные сразу, пока не было навигации до конца датасета или вызова FetchAll, BDE держит открытый курсор.
Если ODBC-драйвер возвращает SQLGetInfo(...SQL_ACTIVE_STATEMENTS...) 1, BDE при открытии нового датасета (или исполнении запроса) открывает новое ODBC-подключение (в рамках тех же самых Session и Database!) и в нём выполняет новый запрос. Естественно, этот запрос блокируется из-за наличия невыкачанного результата в другом подключении. А так как это происходит в рамках одного и того же потока, выглядит это как дедлок без всякой возможности выхода (кроме таскменеджера, конечно ;))

Вылечилось это явным вызовом FetchAll (при этом BDE закрывает и уничтожает ODBC-курсор, работая дальше с локальным кэшем), но крови попортило много, пока я не посмотрел в trace-файл ODBC и не офигел.


 
VICTOR_   (2008-03-12 13:17) [24]

Добавит в FAQ
1. Paradox
Сообщение об ошибке
Table is Full
Решение, напр.
http://rxlib.ru/faqs/faqd_en/10318.html


 
MsGuns ©   (2008-03-12 21:21) [25]

>Игорь Шевченко ©   (12.03.08 11:05) [21]
>Я, грешным делом, работаю с BDE в течение 9 лет. Все глюки, наблюдаемые мной, происходили от горе-установщиков BDE "по частям". И все.

Дело, наверное, не только в биде, но и в самой базе данных, нес па ?


 
MsGuns ©   (2008-03-12 21:24) [26]

Мне вот вообще непонятна логика разработчиков, использующих для доступа к скл-серверным БД биде.
Доводы о "легкой" переносимости баз с одного сервера на другой не приводить.


 
Игорь Шевченко ©   (2008-03-12 21:28) [27]

MsGuns ©   (12.03.08 21:21) [25]

Дело исключительно в разработчиках. База данных - Interbase, но так как BDE для Cached Updates организует парадоксовские таблицы, то и Paradox тоже. И многопоточный доступ наличествует, и работает без проблем, так как сделан по описанию в Help-е (или в Application Developer Guide - уже не помню за давностью лет).
Через ODBC тоже работали посредством BDE - никаких особенных глюков замечено не было.

А то, что пишет автор - это из серии "я мало знаю, но хочу о себе заявить, наехав на чужой продукт".

Я к чему все это - в Borlandе люди несколько поопытней автора статьи, потому как BDE появился еще до Delphi, как альтернатива ODBC, кстати, и протестирован был оч-чень многими разработчиками по всему миру.


 
Игорь Шевченко ©   (2008-03-12 21:41) [28]

MsGuns ©   (12.03.08 21:24) [26]


> Мне вот вообще непонятна логика разработчиков, использующих
> для доступа к скл-серверным БД биде.


А удобно, знаешь ли.


> Доводы о "легкой" переносимости баз с одного сервера на
> другой не приводить.


Эта...Interbase того времени сильно отличался от Firebird сейчас. Да и с прямым доступом в 1998-1999 году худо было.


 
MsGuns ©   (2008-03-12 21:44) [29]

Мне все же непонятна твоя резкость в отношении к человеку, стремящемуся поделиться опытом и не боящегося попасть под критику "аксакалов".
Следуя твоей идее, петь вообще никому нельзя, кроме Поваротти. Даже на свадьбах ;)


 
Игорь Шевченко ©   (2008-03-12 22:14) [30]

MsGuns ©   (12.03.08 21:44) [29]


> Мне все же непонятна твоя резкость в отношении


А ты статью почитай - поймешь. Это как мода - вот решили, что BDE маст дай, так все будут объявлять, что он маст дай.
Автор где-то пишет, что если снимать приложение из диспетчера задач, то данные не сохраняются. Натурально BDE в этот виноват. Я могу посоветовать снять среду из диспетчера задач. И почаще. Авось тоже что-то не сохранится.


 
Petr V. Abramov ©   (2008-03-12 22:55) [31]

нормальня статья.
не без недостатков, есть такое на моё ИМХО.
но если б я только с описываемым чудом (BDE)  столкнулся (брррр) че-0то было б полезно


 
Loginov Dmitry ©   (2008-03-12 23:00) [32]

> А то, что пишет автор - это из серии "я мало знаю, но хочу
> о себе заявить, наехав на чужой продукт


Игорь, Вы верно что-то лишнее между строк вычитали. Цель статьи - не наезды, а описание реальных (зачастую неочевидных) проблем, возникающих при работе с BDE. Причем в начале статьи сразу говорится, что речь пойдет о таблицах Paradox. Я с интербейзом не работал через BDE, поэтому не могу знать, какие глюки у BDE возникают в отношении этой СУБД.


> протестирован был оч-чень многими разработчиками по всему
> миру

Верю! Вы совершенно правы! Любой продукт подобного уровня тщательно тестируется и "обкатывается". Но я-то здесь причем? Я просто пишу про то, что мы сейчас имеем.  
Я вижу, что статья Вам не интересна. Вы и так все, описанное в ней, знаете. Но опыты здесь зачем сравнивать... как-то это не в тему...


> Автор где-то пишет, что если снимать приложение из диспетчера
> задач, то данные не сохраняются. Натурально BDE в этот виноват.
> Я могу посоветовать снять среду из диспетчера задач. И почаще.
> Авось тоже что-то не сохранится.

Вам бы всех только критиковать! Ваши приложения, наверно никогда в жизни не зависали, и Вам не приходолось ни разу пользоваться диспетчером задач. Я рад за Вас, но не все же такие совершенные!


 
Германн ©   (2008-03-13 02:18) [33]


> Loginov Dmitry ©   (12.03.08 23:00) [32]
>
> > А то, что пишет автор - это из серии "я мало знаю, но
> хочу
> > о себе заявить, наехав на чужой продукт
>
>
> Игорь, Вы верно что-то лишнее между строк вычитали. Цель
> статьи - не наезды, а описание реальных (зачастую неочевидных)
> проблем, возникающих при работе с BDE. Причем в начале статьи
> сразу говорится, что речь пойдет о таблицах Paradox.

Да ты не переживай так сильно. Ты сам в сабже первой строчкой укорил именно BDE, а не Парадокс. :)


 
Loginov Dmitry ©   (2008-03-13 07:34) [34]

> Ты сам в сабже первой строчкой укорил именно BDE, а не Парадокс


Перечитал. Укора не увидел. Так что же за строка всех так задела?


 
data ©   (2008-03-13 09:55) [35]

а по-моему статья полезная. Я сама правда давно со многим из этого сталкивалась.


>  Я с интербейзом не работал через BDE, поэтому не могу знать,
>  какие глюки у BDE возникают в отношении этой СУБД.


я работала с Ораклом через BDE, глюков тоже достаточно. Чего стоит хотябы подсовывание лишних байтов при чтении Lob полей.


 
Anatoly Podgoretsky ©   (2008-03-13 18:04) [36]


> Этого разве в интернете нет нигде? Если есть, дайте линк
> (возможно, вставлю его отдельным пунктом и все дела! :)

Информация разбросана по разным сайта, цельной нет.
Твоя статья называется

Проблемы, которые могут возникать при использовании BDE и способы их решения

Главная проблема у начинающего - это настройка БДЕ.


 
Loginov Dmitry ©   (2008-03-13 21:10) [37]

> [36] Anatoly Podgoretsky ©   (13.03.08 18:04)


Уже прошелся по поисковикам. Гугл материала достаточно выдал (по большей части - на английском). Четкой расшифровки некоторых параметров настройки BDE не нашел - все уровня "установи здесь такую-то циферьку и будет счастье". В справке по BDEAdmin разделов по этой теме почему-то не оказалось.
Но постараюсь еще поискать и добавлю после в статью.


 
oldman ©   (2008-03-14 08:04) [38]

Чего наехали-то? :)

Ну наступил человек на 19 граблей.
Ну выложил описание граблей на видном месте (у себя, кстати, выложил, а не у вас).
Ну и хорошо.
Все лучше, чем никак...


 
oldman ©   (2008-03-14 08:08) [39]


> Loginov Dmitry ©  


т.к. в настоящее время никто уже не станет разрабатывать новое приложение, использующее BDE для доступа к базам данных,

"Это вы сами так решили, или вам кто-то сказал?" ©


 
Loginov Dmitry ©   (2008-03-14 17:38) [40]

Еще камешек, заслуживающий внимания
http://www.delphikingdom.com/asp/answer.asp?IDAnswer=18617

Обязательно добавлю! :)



Страницы: 1 2 вся ветка

Текущий архив: 2008.04.27;
Скачать: CL | DM;

Наверх




Память: 0.59 MB
Время: 0.018 c
9-1169396515
Samarik
2007-01-21 19:21
2008.04.27
Программа установки игры


2-1207157583
TCrash
2008-04-02 21:33
2008.04.27
Кодировка???


6-1185333580
R.O.O.T
2007-07-25 07:19
2008.04.27
Port Mapping своими силами


15-1205501602
sds
2008-03-14 16:33
2008.04.27
TADOTable


8-1175341389
Vasilit
2007-03-31 15:43
2008.04.27
Независимое управление несколькими видеопотоками на VMR9