FBDataSet (библиотека доступа к данным FireBird/Interbase.)
Модератор: Модераторы
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
текущий комит в svn - 24
под дельфином в основном Саша Литягин сейчас работает. Я давно там не проверял. Его версия исходника в бранче сейчас
Что там не давало скомпилироваться? давац патчик - я включу его в основную ветку. Просто я как раз сейчас собираюсь делать очередной релиз. Это будет последний, который работает с uib старыми. Следующий будет уже работать с текущей версией.
под дельфином в основном Саша Литягин сейчас работает. Я давно там не проверял. Его версия исходника в бранче сейчас
Что там не давало скомпилироваться? давац патчик - я включу его в основную ветку. Просто я как раз сейчас собираюсь делать очередной релиз. Это будет последний, который работает с uib старыми. Следующий будет уже работать с текущей версией.
Про 24 видел, но решил, что в бранче идут эксперименты.
Сливаться вы собираетесь? Или Дельфи так в бранче и останется?
Мои правки надо проверять - не вникал особо в код. Изменил:
--- В модуле FBDataSetRegister --- Вставил {$IFDEF FPC}
--- В модуле fbcustomdataset --- Изменил одну строку
Видимо, тут тоже директивы нужны. Для FPC - 1-й вариант, для Д7 - второй.
Сливаться вы собираетесь? Или Дельфи так в бранче и останется?
Мои правки надо проверять - не вникал особо в код. Изменил:
--- В модуле FBDataSetRegister --- Вставил {$IFDEF FPC}
Код: Выделить всё
procedure RegisterFBCustomDataSet;
begin
RegisterComponents('Jv UIB', [TFBDataSet]);
RegisterClass(TFBAnsiMemoField);
RegisterClass(TFBAnsiField);
{$IFDEF FPC} (*MK*)
RegisterClass(TFBBlobField);
{$ENDIF}(*MK*)
RegisterNoIcon([TFBAnsiMemoField, TFBAnsiField {$IFDEF FPC}(*MK*), TFBBlobField {$ENDIF}(*MK*)]);
end;
--- В модуле fbcustomdataset --- Изменил одну строку
Код: Выделить всё
procedure TFBCustomDataSet.InternalSaveRecord(const Q:TJvUIBQuery; FBuff: PChar);
. . .
//ftWideString:Q.Params.AsWideString[i]:=F.AsWideString;
ftWideString:Q.Params.AsWideString[i]:=(F as TWideStringField).Value; (*MK*)
. . .
Видимо, тут тоже директивы нужны. Для FPC - 1-й вариант, для Д7 - второй.
Уточни: в последний релиз (со старым Uib) будут включены Сашины доработки?
И скажи, если можешь, что-нить про планируемые сроки этого релиза.
И скажи, если можешь, что-нить про планируемые сроки этого релиза.
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
1. нет
2. Думал - что будет вчера. Но увидел твоё сообщение и решил подождать. Постарюсь сделать завтра, в субботу.
После этого буду сливать две ветки.
Добавлено спустя 19 часов 59 минут 30 секунд:
Релиз. 1.28
2. Думал - что будет вчера. Но увидел твоё сообщение и решил подождать. Постарюсь сделать завтра, в субботу.
После этого буду сливать две ветки.
Добавлено спустя 19 часов 59 минут 30 секунд:
Релиз. 1.28
+ Изменён редактор TAutoUpdateOptionsProperty - заполнение полей свойства
AutoUpdateOptions можно делать теперь без вызова диалогового окна
+ При Вызове метода TFBDataSet.Refresh если для нет соотвествующего поля в
запросе SelectSQL то параметр из RefreshSQL будет заполнен значением параметра из
SelectSQL
+ Исправлена обработка полей BIGINT в обработке параметров для связок master-detail
и в прочих местах
(спасибо - Сергей Смирнов)
+ Изменил нумерацию версиий - следующая версия будет 2.0.0.XXX (чётный номер)
тестовая версия будут 2.0.1.XXX (не чётный номер)
- Исправлена ошибка в связке мастер-детайл при скроле мастера если детайл закрыт
+ Введена обработка ошибки locate для FPC/Lazarus при кодировке набора данных UTF8 в
Windows
- Доработки по компиляции в Delphi
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
в новостях на шаманграде размести информацию о текущем положении дел в проекте - http://shamangrad.net/news.php?prj=FBDataSet.
2. Думал - что будет вчера.
Это гораздо быстрее, чем я надеялся
+ Исправлена обработка полей BIGINT в обработке параметров для связок master-detail
и в прочих местах
(спасибо - Сергей Смирнов)
Вот это мне в самую жилу! Спасибо.
По поводу перехода на новый UIB (и новый FBDataset).
Я собирался в будущем инсталлировать обе версии компонент параллельно. И оставить старые проекты на старых компонентах, новые - на новых. Благо в UIB'е все имена компонент изменятся и есть надежда, что можно будет править и старые проекты и новые.
А вот с FBDataset - наверное, так не получится ?
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
ты знаеш - проще перетянуть всё на новые. Я свои перетянул уже - обычный текстовый поиск и замена.большой проект (порядка 340 форм) - времени ушло минут 30. Просто менял фразу "jv" на "" - благо в своих идентификаторах это сочетание букв не разу не встретил.
А тянуть обе версии компонентов - мне не удобно. Также не удобно менять название компоненты.
А тянуть обе версии компонентов - мне не удобно. Также не удобно менять название компоненты.
- Attid
- долгожитель
- Сообщения: 2588
- Зарегистрирован: 27.10.2006 17:29:15
- Откуда: 44°32′23.63″N 41°2′25.2″E
- Контактная информация:
alexs писал(а):А тянуть обе версии компонентов - мне не удобно. Также не удобно менять название компоненты.
+1 если уибы надумают так делать боюсь легче будет отказатся от них, чтоб в будущем не трамвировать мозг.
Менять название - это я НЕ имел в виду, конечно.
В общем, риторический вопрос задал. Проехали.
По поводу UIB'а - текущий проект (один, пусть большой) можно перевести на новые компоненты.
А вот старые проекты я править не хочу (пока клиенты ошибок не поймали).
Хотя просматривать их иногда приходится. Поэтому попробую оставить пока оба набора.
Есть еще пара предложений/просьб, но бежать пора. До завтра.
В общем, риторический вопрос задал. Проехали.
По поводу UIB'а - текущий проект (один, пусть большой) можно перевести на новые компоненты.
А вот старые проекты я править не хочу (пока клиенты ошибок не поймали).
Хотя просматривать их иногда приходится. Поэтому попробую оставить пока оба набора.
Есть еще пара предложений/просьб, но бежать пора. До завтра.
Посмотри плиз на (ревизия 31, т.е. релиз 1.28)
Тип TFBBlobField определен только для FPC. Поэтому строку я предлагал такую:
Поправь, не скомпилируется в Дельфи.
Код: Выделить всё
unit FBDataSetRegister;
procedure RegisterFBCustomDataSet;
. . .
{$IFDEF FPC}
RegisterClass(TFBBlobField);
{$ENDIF FPC}
RegisterNoIcon([TFBAnsiMemoField, TFBAnsiField, TFBBlobField]); <<<<<<<<<<<<<<<<<<
Тип TFBBlobField определен только для FPC. Поэтому строку я предлагал такую:
Код: Выделить всё
RegisterNoIcon([TFBAnsiMemoField, TFBAnsiField {$IFDEF FPC},TFBBlobField{$ENDIF} ]);
Поправь, не скомпилируется в Дельфи.
Не в курсе, что с www.progdigy.com случилось?
У меня второй день не открывается.
У меня второй день не открывается.
Вопрос по реализации Master-Detail на FBDataset'ах.
Как я понял, FBDataset хорошо поддерживает схему, при которой совпадают
1) Имя поля ПК Мастера
2) Имя поля ФК Детали
3) Имена соответствующих параметров в запросах.
У меня не получилось средствами FBDataset'а организовать Мастер-Деталь вот для такой схемы (может, просто недокопал - ткните носом)
Где ID - суррогатные первичные ключи (BIGINT), MASTER_ID - FK на Мастера.
Пока выкрутился на событиях BeforeOpen и BeforePost Детали. Примерно так
DetailFBDataSetBeforeOpen:
DetailFBDataSetBeforePost:
Это работает, но, во-первых, это реализация частного случая, а во-вторых, хотелось бы более системного решения в рамках самого FBDataset'a.
Прошу подсказку - куды бедному крестьянину податься?
Как я понял, FBDataset хорошо поддерживает схему, при которой совпадают
1) Имя поля ПК Мастера
2) Имя поля ФК Детали
3) Имена соответствующих параметров в запросах.
У меня не получилось средствами FBDataset'а организовать Мастер-Деталь вот для такой схемы (может, просто недокопал - ткните носом)
Код: Выделить всё
MASTER: ID, CAPTION
DETAIL: ID, MASTER_ID, CAPTION
Где ID - суррогатные первичные ключи (BIGINT), MASTER_ID - FK на Мастера.
Пока выкрутился на событиях BeforeOpen и BeforePost Детали. Примерно так
DetailFBDataSetBeforeOpen:
Код: Выделить всё
var Detail, Master: TFBDataSet;
MasterId: Int64;
. . . . . . .
if Master.Eof then // Нет текущей записи Мастера
Detail.Params.ByNameIsNull['master_id']:= TRUE
else begin // Есть запись Мастера
// Получить значение 1-го поля (ID) текущей записи мастера
Master.GetFieldData(1, @MasterId);
// Установить значение параметра в SQLSelect
Detail.Params.ByNameAsInt64['master_id']:= MasterId;
end;
DetailFBDataSetBeforePost:
Код: Выделить всё
. . . . . .
if Master.Eof then // Нет текущей записи Мастера
Detail.SetFieldValues('master_id', Null)
else begin // Есть запись Мастера
Master.GetFieldData(1, @MasterId);
Detail.SetFieldValues('MASTER_ID', MasterId);
end;
Это работает, но, во-первых, это реализация частного случая, а во-вторых, хотелось бы более системного решения в рамках самого FBDataset'a.
Прошу подсказку - куды бедному крестьянину податься?
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
Для связки - достаточно чтобы имя параметра в подчинённой таблице совпадало с именем мастер поля из главной таблицы
наименование поля для связки в детайл таблице может быть любым. Просто правило хорошего тона - именовать их одинаково - самому проще же.
Чтобы при вставке в подчинённоую таблицу новых записей FK поле заполнялось данными из главной записи - поиграйся с парамтерами в options
наименование поля для связки в детайл таблице может быть любым. Просто правило хорошего тона - именовать их одинаково - самому проще же.
Чтобы при вставке в подчинённоую таблицу новых записей FK поле заполнялось данными из главной записи - поиграйся с парамтерами в options
