Мы всегда рады услышать ваше мнение и пожелания по дальнейшему развитию программы.
0
Fixed
Stepan 6 years ago 0

В версии 1.1.352.1 новые поступления у меня не работают, книги добавляю, они в выборках "неделя, месяц, год" не появляются.

Answer
Andrej Repin 6 years ago
Появляется, воспроизвести не удалось.

UPD:
Воспроизвелось, исправлено в версии 1.1.366.1
0
Fixed
Stepan 5 years ago • updated by Andrej Repin 5 years ago 3

После действия "Объединить автора с..." при обработке книги автора которого объединили, действие "Создать документ наряду со старым", выдаётся ошибка разбора:
violation of FOREIGN KEY constraint "FK_BOOK_AUTOR_AUTOR" on table "BOOK_AUTOR"
No message for error code 335544838 found.

Answer
Andrej Repin 5 years ago
Исправлено, будет доступно в следующем обновлении.
0
Completed
ve51 6 years ago • updated by Andrej Repin 6 years ago 3

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

Answer
Andrej Repin 6 years ago
Я вот даже не знаю как мне воспринимать "велосипед с квадратными колесами"?

Этот "велосипед", как вы изволили выразится, называется "Deferred Scrolling" и служит для оптимизации производительности больших списков.

UPD: Пока переключил прокрутку в нормальный режим, а там посмотрим...
0
Fixed
ve51 6 years ago • updated by Andrej Repin 6 years ago 6

1.2.456.1 - у меня внутренний редактор не изменяет файлы книг, в базе данные меняются.
Внешний (FBE) работает, только иногда при закрытии сообщение об ошибке, но без видимых последствий. Если с помощью FBE прописываю серию, то потом во внутреннем редакторе её не видно.

Answer
Andrej Repin 6 years ago
Ошибка была в коде подтверждения сохранения изменений. Исправление будет доступно в следующей версии.
0
Under review
Илья Агафонов 6 years ago 0

Вчера от IBExpert Team пришло письмо с вложенным SQL скриптом конвертирования баз в различных кодировках в том числе NONE в кодировку UTF8. Вот я и решил поделится может быть пригодится и в библиотекаре...



execute ibeblock
as
begin
--Change these variables
source='LOCALHOST:C:\db\db1.fdb';
sourcecharset='ISO8859_1';
sourcecollate='DE_DE';
target='LOCALHOST:C:\db\db1_utf8.fdb';
scriptdir='c:\db\dump\';
bakfile='C:\db\test.fbk';
--End of variables

cbb = 'execute ibeblock (
LogLine variant)
as
begin
ibec_progress(LogLine);
end';

ibec_BackupDatabase(source,bakfile,'ClientLib=fbclient.dll;Password=masterkey; User=SYSDBA; G;',cbb);

--optionally you can also restore the source database; here it has been commented out.
--ibec_RestoreDatabase(bakfile, source,'ClientLib=fbclient.dll;Password=masterkey; User=SYSDBA; C; REP; O;',cbb);

--Create a connection to the source database and open it
sourceDB = ibec_CreateConnection(__ctFirebird,'DBName="'+source+'";ClientLib=fbclient.dll;User=SYSDBA; Password=masterke; Names='+sourcecharset+'; SqlDialect=3');
use sourceDB;

--Create a comma-separated list of table names, to transfer the data
tnlist='';
komma='';
for
select trim(rdb$relations.rdb$relation_name) from rdb$relations
where rdb$relations.rdb$relation_name not containing '$'
and rdb$relations.rdb$view_blr is null
into
:tn
do
begin
tnlist=tnlist||komma||tn;
komma=',';
end

--Call the Extract Metadata script function, to create a database dump including metadata, data and blobs.
ibec_ExtractMetadata(sourceDB, scriptdir,'GenerateConnect;IncludePassword;SetGenerators;ExtractDescriptions;
SeparateComputedBy;CommitAfter=50000;MaxFileSize=100;UseCreateOrAlter;ExtractBLOBs;
ExtractPrivileges;OnlySelectedPrivileges;UseReinsert;TrimStrings;SeparateFiles;
DateFormat=YYYY-MM-DD;DataTables='||tnlist,cbb);

--If the target database already exists, then drop it, if errors occur, then ignore.
try
res = ibec_dropdatabase(__ctFirebird,
'DBName="'+target+'";
ClientLib=fbclient.dll;
User=SYSDBA; Password=masterke;');
except
end;
if (res is not null)
then ibec_Progress('Datenbank erfolgreich gelцscht');

--Create a new database with the character set UTF8
TargetDb = ibec_createdatabase(__ctFirebird,'DBName="'+target+'";ClientLib=fbclient.dll;PageSize=16384;User=SYSDBA; Password=masterke; DefaultCharset=UTF8; SqlDialect=3;');
ibec_Progress('UTF8 Datenbank erfolgreich erzeugt');

--Reconnect to the source database and make some changes to the header script:
use sourcedb;
txt=ibec_LoadFromFile(scriptdir+'_ibe$start_.sql');

--All fields and variables longer that 8190 bytes need to be cropped, because UTF8 is a multibyte character set.
for select distinct rdb$fields.rdb$field_length from rdb$fields where rdb$fields.rdb$field_length>8190 into :lx
do txt=ibec_StringReplace(txt,'('||lx||')','(8190)', __rfReplaceAll + __rfIgnoreCase);

txt=ibec_StringReplace(txt,'SET NAMES NONE;','SET NAMES '+sourcecharset+';', __rfReplaceAll + __rfIgnoreCase);
txt=ibec_StringReplace(txt,'COLLATE '+sourcecollate,'COLLATE UTF8', __rfReplaceAll + __rfIgnoreCase);
txt=ibec_StringReplace(txt,source,target, __rfReplaceAll + __rfIgnoreCase);
ibec_SaveToFile(scriptdir+'_ibe$start_.sql',txt,__stfOverwrite);

--do the same in the footer script
txt=ibec_LoadFromFile(scriptdir+'_ibe$finish_.sql');
for select distinct rdb$fields.rdb$field_length from rdb$fields where rdb$fields.rdb$field_length>8190 into :lx
do txt=ibec_StringReplace(txt,'('||lx||')','(8190)', __rfReplaceAll + __rfIgnoreCase);
ibec_SaveToFile(scriptdir+'_ibe$finish_.sql',txt,__stfOverwrite);


txt=ibec_LoadFromFile(scriptdir+'runme.all.sql');
txt=ibec_StringReplace(txt,'INPUT ''','INPUT '''+scriptdir, __rfReplaceAll + __rfIgnoreCase);
ibec_SaveToFile(scriptdir+'runme.all.sql',txt,__stfOverwrite);

res = ibec_Exec('ibescript.exe '+scriptdir+'runme.all.sql -N -VD:\db\db1\runme.all.log ','',cbb);
end;

Answer
Andrej Repin 6 years ago
Cпасибо, может и пригодиться.
0
Fixed
Stepan 6 years ago • updated by Andrej Repin 6 years ago 7

Зарядил с утра добавляться книги в режиме Индексирования, пришёл, а тут ошибка:

System.InvalidOperationException: Модуль записи закрыт из-за ошибки.
в System.Xml.XmlWellFormedWriter.AdvanceState(Token token)
в System.Xml.XmlWellFormedWriter.WriteEndElement()
в System.Xml.XmlWellFormedWriter.WriteEndDocument()
в  .    (XmlWriter ,    , IEnumerable`1 , IEnumerable`1 )
в Fb2Library.ImportView.(String )
в Fb2Library.ImportView.()
в Fb2Library.ImportView..(Object , RunWorkerCompletedEventArgs )
в System.ComponentModel.BackgroundWorker.OnRunWorkerCompleted(RunWorkerCompletedEventArgs e)
в System.ComponentModel.BackgroundWorker.AsyncOperationCompleted(Object arg)
в System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
в MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)

Answer
Andrej Repin 6 years ago
0
Answered
Андрей Туманов 4 years ago • updated by Andrej Repin 4 years ago 1
Сортировка по нескольким колонкам в списке книг, как в FB2Librarian, а то без нее у в авторов с большим количеством серий полная каша получается
Answer
Andrej Repin 4 years ago
Сортировка по нескольким колонкам возможна либо через контекстное меню, либо использованием комбинации Ctrl+Click на заголовке.
0
Answered
Илья Агафонов 6 years ago • updated by Andrej Repin 6 years ago 8

Мне вот интересно почему так долго? 20 часов импортирует ~16к книг, в дельфевом намного шустрее было...

Answer
Andrej Repin 6 years ago
Три основные причины:
  1. Катастрофическая деградация производительности Firebird базы с увеличением объема
  2. Обновление UI
  3. Маршалинг из Manged в Unmanaged в FirebirdSql драйвере.


1. О производительности Firebird я уже писал:

https://plus.google.com/u/0/117645144499921711425/posts/NLce8cFRfTf
https://plus.google.com/u/0/117645144499921711425/posts/AoRCbSXfcyH

и тут:
https://plus.google.com/u/0/117645144499921711425/posts/Bz8xyoWqu5N

2. Отключение динамического обновления UI возможно даст увеличение производительности на пару процентов.

3. Протокол обмена данными между ADO .NET драйвером и Firebird сервером построен на использовании достаточно больших структур. При каждом запросе к БД происходит заполнение структуры данными в Managed памяти, затем эта структура копируется runtime'ом .NET в Unmanaged память (происходит так называемый маршалинг) и указатель на неё передается дальше в код Firebird'a.

Всё это, в конечном итоге, сказывается на производительности операции импорта.

По поводу базы данных.
  1. Размер странницы рекомендуется выбирать равным размеру кластера в файловой системе. Для NTFS стандартный размер кластера равен 4к (4096)
  2. Флаг "Force Write" заставляет Firebird после каждого изменения в БД скидывать файловые буфера на диск. При этом повышается надёжность, но понижается производительность.
0
Александр 6 years ago • updated by ve51 6 years ago 1

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

0
Fixed
Андрей Нагибин 2 years ago • updated 2 years ago 10
Как работать с OPDS каталогом?
Answer
Andrej Repin 2 years ago
Исправлено в версии 1.4.1207.0