Главная страница
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

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


 
Loginov Dmitry ©   (2008-03-15 23:58) [41]

Статью поправил. Все элементы критики убрал. Вроде читаться по-лучше стала :)


 
Игорь Шевченко ©   (2008-03-16 00:32) [42]

"Проблема возникает из-за того, что во всех потоках по умолчанию используется объект TSession с именем "Default". "

А вот в Application Developer Guide написано, что так делать категорически не следует. Равно как и ссылаться на неинициализированные переменные, дважды освобождать одну и ту же область памяти, и плыть против течения.
Написано, что в каждом потоке должны быть свои компоненты TSession, TDatabase ну и собственно, TTable, TQuery, TStoredProc и т.д.

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


 
Loginov Dmitry ©   (2008-03-16 08:07) [43]

> А вот в Application Developer Guide написано, что так делать
> категорически не следует. Равно как и ссылаться на неинициализированные
> переменные, дважды освобождать одну и ту же область памяти,
> и плыть против течения.
> Написано, что в каждом потоке должны быть свои компоненты
> TSession, TDatabase ну и собственно, TTable, TQuery, TStoredProc
> и т.д.


Где этот Application Developer Guide был раньше? Мне пришлось наступить на все возможные грабли, чтобы самому прийти к этому ;)


 
Loginov Dmitry ©   (2008-03-16 08:21) [44]

В справке по TSession хоть и сказано, что объект для каждого потока должен быть свой, однако в нее обычно лезешь, когда сразу что-то не получается (и там не сказано, к чему приводит использование одной сессии для разных потоков). Default Session в принципе прекрасно работает и в многопоточном приложении, но только если при этом нет никаких сбоев. Чаще всего сбоев нет, однако если они есть, то приложение после этого намертво виснет (а пришлось потратить уйму времени, чтобы найти виновника ;).


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

Loginov Dmitry ©   (16.03.08 08:07) [43]


> Где этот Application Developer Guide был раньше? Мне пришлось
> наступить на все возможные грабли, чтобы самому прийти к
> этому ;)


А мы вот купили Delphi, к нему в комплекте была документация.
Намек понятен ?


> В справке по TSession хоть и сказано, что объект для каждого
> потока должен быть свой, однако в нее обычно лезешь, когда
> сразу что-то не получается


Так зачем ты пишешь статьи про глюки кривых рук ? Это интернета не хватит, чтобы написать статью о всех возможных последствиях криворукости.


 
Loginov Dmitry ©   (2008-03-16 12:39) [46]

> Так зачем ты пишешь статьи про глюки кривых рук ? Это интернета
> не хватит, чтобы написать статью о всех возможных последствиях
> криворукости.


Если бы это только моя криворукость была, то я бы в статье про это не написал.


 
Игорь Шевченко ©   (2008-03-16 12:43) [47]

Loginov Dmitry ©   (16.03.08 12:39) [46]


> Если бы это только моя криворукость была, то я бы в статье
> про это не написал.


Так ты в "Начинающие" зайди и убедишься, что на грабли наступают многие, причем по нескольку раз на одни и те же.

Об чем, собстна, базар ? Ты сам пишешь, что документацию не читаешь и в справку лезешь в последний момент. Ну так и напиши это в начале статьи большими буквами


 
Loginov Dmitry ©   (2008-03-16 12:59) [48]

> Об чем, собстна, базар ?


О том, что кое-кто любит всех опускать.



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

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

Наверх




Память: 0.62 MB
Время: 0.021 c
2-1206972240
jack128_
2008-03-31 18:04
2008.04.27
SQL запрос


15-1205675818
Loginov Dmitry
2008-03-16 16:56
2008.04.27
Очередное обновление Matrix32


8-1179149538
Veter
2007-05-14 17:32
2008.04.27
GIF


15-1205120451
Denis__
2008-03-10 06:40
2008.04.27
Школа будущего.


15-1205321613
oxffff
2008-03-12 14:33
2008.04.27
Chrome от Remobject. Есть обладатели?