Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» InterBase и FireBird: вопросы по работе и их решение

Автор: X11
Дата сообщения: 23.11.2010 08:58

Цитата:
как правильнее всего организовать обработку отключения от сервера с последующим восстановлением подключения и открытием датасетов/выполнением последней команды обновления данных?
FireBird 2.1.3, Delphi, FIB.

Да, тоже давно хочу такое реализовать. Не знаю, как правильно. Думаю, что нужно такой вопрос задавать на форуме разработчиков.
Автор: OXDBA
Дата сообщения: 23.11.2010 11:07

Цитата:
Подскажите, пожалуйста, как правильнее всего организовать обработку отключения от сервера с последующим восстановлением подключения и открытием датасетов/выполнением последней команды обновления данных?

Давно реализовано в FIB+
Новый пакет примеров для FIBPlus 6.9.9 ConnectionLost.dpr

X11

Цитата:
давно хочу такое реализовать

"Все уже украдено до нас" (с)

Автор: Granmer
Дата сообщения: 23.11.2010 17:49
OXDBA
Да, спасибо, соединение с БД восстанавливается. Но вот с датасетами сложнее - при открытии после восстановления соединения выдают ошибку:

Цитата:
Unsuccessful execution caused by system error that does not preclude successful execution of subsequent statements.
Invalid transaction handle (expecting explicit transaction start).

Пока не могу разобраться из-за чего. Транзакция рестартует вместе с коннекшеном. Может сталкивались или направите хотя бы в нужную сторону?
Автор: OXDBA
Дата сообщения: 24.11.2010 09:29
Granmer
Какая версия FIB+?
Ошибка проявляется только при открытии одного датасета или любого?

Цитата:
Транзакция рестартует вместе с коннекшеном.

Код можно глянуть?

Автор: tanaseduard
Дата сообщения: 24.11.2010 19:38
Granmer

Код в студию.
Автор: X11
Дата сообщения: 25.11.2010 09:01

Цитата:
Плохой канал, глюки сервера и т.п. приводят к периодическому отключения программы от сервера с БД. Буквально через секунду соединение восстанавливается, но нужно реконнектить отключившиеся датасеты. Подскажите, пожалуйста, как правильнее всего организовать обработку отключения от сервера с последующим восстановлением подключения и открытием датасетов/выполнением последней команды обновления данных?
FireBird 2.1.3, Delphi, FIB.


С форума DevRace


Цитата:
У TpFIBDatabase есть два свойства

function FIBDataSetsCount:integer;
property FIBDataSets[Index: Integer]:TFIBCustomDataSet read GetFIBDataSet;

Это перечень всех датасетов подключенных к базе. И открытых и закрытых. Само же открытие-закрытие централизованно можно отслеживать в компоненте TDataSetsContainer. Впрочем там же можно централизованно отслеживать и обрабатывать и другие события происходящие с датасетами.

devrace.com/ru/support/forum/index.php?PAGE_NAME=message&FID=16&TID=670&MID=2708#message2708
Автор: EugeneBoss3
Дата сообщения: 02.12.2010 02:11
Знатоки, подскажите как правильно создать домен с типом TIME и присвоить значение по умолчанию 00:00:00? SQL-диалект 3.
Автор: data man
Дата сообщения: 02.12.2010 02:37
EugeneBoss3

CREATE DOMAIN TIME_DOMAIN AS TIME DEFAULT '00:00:00';
Автор: EugeneBoss3
Дата сообщения: 03.12.2010 00:22
data man
Спасибо, получилось. Почему IB Expert показывал ошибку раньше не понятно? Мой код был таким же.
Автор: kolyas
Дата сообщения: 09.12.2010 18:17
Ранее я поднимал проблему
Ссылка
потом она ушла.. а сейчас снова проявилась.

Может у кого-нить есть что-нить выполняющее примерную задачу. Ну или наметки в какую сторону смотреть, чтоб макрос наваять.
Автор: MedvedevDM
Дата сообщения: 09.12.2010 21:17
А кто знает чем принципиально отличается Firebird от
своего сертифицированного аналога RED BAZA ?
Автор: X11
Дата сообщения: 10.12.2010 08:59

Цитата:
Подскажите плиз.
Есть база, в ней одна таблица содержит в blob полях jpeg и gif файлы.
С помощью чего - попроще, можно вытащить эти картинки.
Программка мож какая. Чтобы экспортировать и сразу в папочку.

Экспортировать в виде картинки?
Можно попробовать IBEScript.exe из набора IBExpert. Поддерживает не только FB блоки (EXECUTE BLOCK), но также и блоки своего формата (EXECUTE IBEBLOCK)

Можно попробовать эти инструменты FBEXPORT, FBCOPY:
http://fbexport.sourceforge.net/
сам не пробовал

Добавлено:

Цитата:
А кто знает чем принципиально отличается Firebird от
своего сертифицированного аналога RED BAZA ?

Red DataBase, если правильно.
Мне кажется, отличий хватает.
Например есть полнотекстовый происк, внешние хранимки на яве (не путать с функциями UDF), есть возможности хеширование/шифрования (многофакторная аутентификация, контроль целостности файлов сервера, контроль целостности метаданных)

И здесь можно посмотреть:
http://www.red-soft.biz/files/downloads/products/2.1.3.6663_RC1/Release_Notes-ru.pdf
Автор: tanaseduard
Дата сообщения: 10.12.2010 09:11
kolyas

Если рисунки не шифрованные и есть опыт в программировании то напиши за 5 мин прогу.
Идет по всему датасету и сохраняет каждый блоб.

Или юзай IBScript
Автор: delover
Дата сообщения: 16.12.2010 08:40
Подскажите пожалуйста, кто сталкивался. Простенькая хорошая программа в грид показывает квери. База немного выросла и когда пользователь убирает фильтры, то грузится 140 тысяч записей. На 130 вылетает ошибка "Out of memory". Компоненты стандартные Интербейз плюс ГридЭх. Какими путями, обходными или как можно сделать чтобы пользователь был доволен.
Автор: OXDBA
Дата сообщения: 16.12.2010 09:38
1. Добавить памяти.
2. Ограничить кол-во записей через принудительно включаемый фильтр.
3. Тупо добавить в запрос rows 130000 + при сбросе фильтров сообщение юзверю 'Больше 130000 грузить не буду'
130 000 записей? Пользователю? И что он со всем этим счастьем будет делать? А завтра записей будет 13 000 000...
Автор: dimm78
Дата сообщения: 16.12.2010 10:08

Цитата:
Подскажите пожалуйста, кто сталкивался. Простенькая хорошая программа в грид показывает квери. База немного выросла и когда пользователь убирает фильтры, то грузится 140 тысяч записей. На 130 вылетает ошибка "Out of memory". Компоненты стандартные Интербейз плюс ГридЭх. Какими путями, обходными или как можно сделать чтобы пользователь был доволен.


Цитата:
1. Добавить памяти.
2. Ограничить кол-во записей через принудительно включаемый фильтр.
3. Тупо добавить в запрос rows 130000 + при сбросе фильтров сообщение юзверю 'Больше 130000 грузить не буду'
130 000 записей? Пользователю? И что он со всем этим счастьем будет делать? А завтра записей будет 13 000 000...


по 1 п. - Добавление памяти не прокатит - Не забывайте про ограничение количества памяти для одного процесса в системах Windows. Чтобы увеличить количество используемой процессом памяти придется переходить на использование 64-битной системы. И приложение придется тоже собирать на 64-битном компиляторе.
по 2 п. - верно. грамотно и логично построенные фильтры могут на какое то время исправить ситуацию.
по 3 п. - зачем такое сообщение? тогда ведь теряется смысл самой программы если она отказывается работать с набором данных при превышении какого то лимита))))
Таким образом - единственное более менее приемлемое решение - ограничить количество записей которое выдается пользователю. Нужно просто изучить то как пользователи работают и используют эти данные и попытаться наложить какие то ограничения.
Автор: EugeneBoss3
Дата сообщения: 16.12.2010 10:57
delover
Используй компонент DevArt IbDAC, у меня проблем с >150 000 не было! Работает шустро и корректно, а родной дельфийский Интербейз на той же задаче в 2,5 раза медленнее работает, а с фильтрами вообще тормозит.
Автор: X11
Дата сообщения: 16.12.2010 11:24
или FibPlus

Добавлено:
delover, это твоя программа или тебе её написали? В смысле есть ли исходники? Или есть доступ только к базе?
Автор: delover
Дата сообщения: 16.12.2010 13:07
Исходники как раз отданы под мою ответственность, то есть они есть. В грубом представлении программа построена на фильтрах, никаких алертеров, то есть набираются фильтры и по кнопке фильтрануть меняются данные в гриде. Там использовался вшитый в эхи футер с количеством. Я его убрал. Строю два селекта один 'select first 100000...', а второй для своего labelFooter 'select count (*)...'. Количество получается корректное а вот записей в гриде максимум 100000. Но я думаю этого счастья достаточно. Пользователь увидел что запросил много и пришлось ждать после этого подумал стоит ли рыться в таком объеме данных.

X11
Я то купил фибы, а вот на работе их надо ещё покупать...
Автор: X11
Дата сообщения: 16.12.2010 13:21
Они стоят они не дорого, уговорить начальство можно. Тем более, что будет выигрыш в скорости разработки и в скорости отображения.


Цитата:
Строю два селекта один 'select first 100000...',

А если пользователю понадобятся только те записи, которые вообще в результат не попали?
Может можно запретить пользователю нажимать кнопку ОК (Поиск), пока пользователь не укажет хотя бы один параметр для where.


Цитата:
Там использовался вшитый в эхи футер с количеством.

Последние версии EhLib меня не очень устраивали. Глючные. Посмотри др. гриды.
Автор: OXDBA
Дата сообщения: 16.12.2010 15:18

Цитата:
по 3 п. - зачем такое сообщение?

В следующий раз вместо смайлика буду тонко намекать что это шутка.

Цитата:
Используй компонент DevArt IbDAC, у меня проблем с >150 000 не было

Повторяю вопрос про 13 000 0000 и зачем все это это счастье пользователю.

Цитата:
Может можно запретить пользователю нажимать кнопку ОК (Поиск), пока пользователь не укажет хотя бы один параметр для where.

Мы так и сделали, после того как "некто" сформировал отчет на ~4000 страниц.
OFF Давно забросил EhLib, поэтому глупый вопрос, а разве сейчас EhLib нельзя заставить не фетчить все данные на клиента?
Автор: and23
Дата сообщения: 16.12.2010 18:07
2dimm78:
Нескромный вопрос: а какого рожна все записи сразу фетчатся? 8-O
По идее, грид должен вытягивать их пачками, не превышающими его буфер - а это даже не тысячи записей, максимум сотни.
Копайте код на предмет крамолы: опция fetchAll, прОпеть recordCount и т.п. Или SQL-монитор + дебаггер, чтобы поймать негодяя, кусающего шире горла.
Автор: dimm78
Дата сообщения: 16.12.2010 20:56

Цитата:
2dimm78:
Нескромный вопрос: а какого рожна все записи сразу фетчатся? 8-O
По идее, грид должен вытягивать их пачками, не превышающими его буфер - а это даже не тысячи записей, максимум сотни.
Копайте код на предмет крамолы: опция fetchAll, прОпеть recordCount и т.п. Или SQL-монитор + дебаггер, чтобы поймать негодяя, кусающего шире горла.


ну тогдa уж не 2dimm78 а 2delover)))
Автор: delover
Дата сообщения: 17.12.2010 13:32
and23
Просто сейчас вопрос о 2 не стоит. Надо подцепить ФБ клиента провайдера для Сишарп. Вроде всё по реадмишкам делал. Да и как бы опять же всё ручками приходится. Однако в вижуал студии 10 при введении первой буквы логина диалог коннекшен стринга сваливает и всё. Нет чтобы инсталлер простенький наваять. Незнаю чём дот нет от линукса тогда отличается. Может кто цеплял уже нативного клиента в вижуал?
Автор: OXDBA
Дата сообщения: 17.12.2010 13:58
delover
Читал два раза, ничего не понял.
Автор: and23
Дата сообщения: 19.12.2010 18:58
2dimm78:
Цитата:
ну тогдa уж не 2dimm78 а 2delover)))
Sorry :-)))

2delover:
Опять пробило на поток сознания? >:-E
А ведь в этот раз так вразумительно начали :-(
Автор: delover
Дата сообщения: 20.12.2010 06:55
OXDBA
and23
Решил вопрос, после того как использовал GACUtil и выяснил номер версии (2.6.0.0) для библиотеки и прописал корректный номер Visual Studio 10 скушал базу и создал датасет. Создал все таблицы, но я сейчас элементарно не знаю как написать чтение из одной таблицы хотябы одной строки. Мне нужно типа:

Код:
Query1.open;
s := Field1.Value;
MessageBox(s, 'value');
Автор: jonikDk
Дата сообщения: 20.12.2010 09:03
delover

Цитата:
Но как это пишется на C# я не знаю. Нашёл какой-то CreateDataReader но дальше не знаю что делать...

надо читать доку, я думаю это быстрее будет, чем ждать ответа на не профильном форуме
Автор: delover
Дата сообщения: 20.12.2010 13:22
jonikDk
CreateDataReader не тема. Надо брать пример по MSSQL и заменять Sql на Fb. Все работает точно так же типа:

Код:
FbDataReader myReader = null;
FbConnection fb1 = new FbConnection("character set=WIN1251;"+
"data source=localhost;initial catalog=\\Base.fdb;user id=SYSDBA;password=m");

try
{
fb1.Open();

FbCommand myCommand = new FbCommand("select * from TABLE1", fb1);
myReader = myCommand.ExecuteReader();
while(myReader.Read())
{
s = myReader["ID"].ToString();
MessageBox.Show(s, "ID");
}
}
catch(Exception e)
{
MessageBox.Show(e.ToString(), "Ошибка");
}
Автор: ndch
Дата сообщения: 21.12.2010 13:43
Firebird 2.1 (2.1.2.18118)
есть "вытащеный" security2.fdb
как восстановить пароль или добавить юзера с достаточными полномочиями?
админский пароль неизвестен.

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465

Предыдущая тема: Сравнение двух строк


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.