FBDataSet (библиотека доступа к данным FireBird/Interbase.)
Модератор: Модераторы
Здравствуйте!
Использую в своих проэктах UIB + FBDataset + RX. Lazarus 0.9.26. Red Hat Enterprise Linux Client release 5.2. GTK2.
Перешел с jvUIB на UIB правкой lfm-файла модуля данных. Возникло несколько проблем:
1. При попытке открыть редактор SQL ругается Error reading edtSelectSQL.Font.Quality: Unknown property: "Quality".
2. При закрытии проэкта (lazarus) возникает ошибка
An exception occured during deletion of "dbSales: TUIBDataBase" Access violation.
Но с самой программой при закрытии проблем нет.
Использую FBDataset из SVN (ревизия 47).
Использую в своих проэктах UIB + FBDataset + RX. Lazarus 0.9.26. Red Hat Enterprise Linux Client release 5.2. GTK2.
Перешел с jvUIB на UIB правкой lfm-файла модуля данных. Возникло несколько проблем:
1. При попытке открыть редактор SQL ругается Error reading edtSelectSQL.Font.Quality: Unknown property: "Quality".
2. При закрытии проэкта (lazarus) возникает ошибка
An exception occured during deletion of "dbSales: TUIBDataBase" Access violation.
Но с самой программой при закрытии проблем нет.
Использую FBDataset из SVN (ревизия 47).
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
я её собираю в текущей версии лазаря (0.9.27) - там появляются новые свойства у шрифтов. Поэтомуи ошибка.
Для решения - лучше всего - обновись до текущей версии лазаря. Работает стабильно.
Если же нет такой возможности - то при установке пакета реадктора свойств для FBDataSet (dcl_...) - пооткрывай в нём все формы - при открытии выдастся ошибка - но они откроются - после этого сохрани всё и собирай.
Для решения - лучше всего - обновись до текущей версии лазаря. Работает стабильно.
Если же нет такой возможности - то при установке пакета реадктора свойств для FBDataSet (dcl_...) - пооткрывай в нём все формы - при открытии выдастся ошибка - но они откроются - после этого сохрани всё и собирай.
Спасибо, понял. Буду обновляться до 0.9.27. Тем более, что есть и другие баги. А вдруг там уже пофиксили... 
Обновился...
1. Ошибка "An exception occured during deletion of "dbSales: TUIBDataBase" Access violation." при закрытии проекта осталась. Возможно у меня что-то не так.
2. Не могу разобраться с
Чувствительность к регистру работает. А мне нужно без учета регистра.
3. А это, наверное, баг. При организации master-detail в мастере FBDataSet пишу
а в детайле
v_users и v_receipts - представления. При этом в RxDBGrid не отображается часть данных последней колонки детайл FBDataSet. Когда переношу
в само представления v_receipts, то все отображается нормально. Не знаю, возможно в master-detail связках нельзя в SQL писать order by...
1. Ошибка "An exception occured during deletion of "dbSales: TUIBDataBase" Access violation." при закрытии проекта осталась. Возможно у меня что-то не так.
2. Не могу разобраться с
Код: Выделить всё
FBDataSet.Locate(SearchField.FieldName,SearchValue, [loCaseInsensitive,loPartialKey]);Чувствительность к регистру работает. А мне нужно без учета регистра.
3. А это, наверное, баг. При организации master-detail в мастере FBDataSet пишу
Код: Выделить всё
select id, name_users from v_usersа в детайле
Код: Выделить всё
select * from v_receipts where seller = :id
order by date_rec descv_users и v_receipts - представления. При этом в RxDBGrid не отображается часть данных последней колонки детайл FBDataSet. Когда переношу
Код: Выделить всё
order by date_rec descв само представления v_receipts, то все отображается нормально. Не знаю, возможно в master-detail связках нельзя в SQL писать order by...
Последний раз редактировалось yuray 30.12.2009 14:04:59, всего редактировалось 1 раз.
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
yuray писал(а):в само представления v_receipts, то все отображается нормально. Не знаю, возможно в master-detail связках нельзя в SQL писать order by...
нет - должно всё отображаться коректно.
Чтобы при вставке в подчинённоую таблицу новых записей FK поле заполнялось данными из главной записи - поиграйся с парамтерами в options
Хочешь легко отделаться?
Давай разберёмся только со вставкой в деталь.
Мастер-датасет такой (AutoUpdateOptions: "ID=GenID(GEN_MASTER_ID, 1)") :
Код: Выделить всё
MASTER (ID, CAPTION)
--------------------
SQLSelect: select ID, CAPTION from MASTER
SQLInsert: insert into MASTER
values(:id, :caption)Дитейл-датасет (AutoUpdateOptions: "ID=GenID(GEN_DETAIL_ID, 1)") :
Код: Выделить всё
DETAIL (ID, MASTER_ID, CAPTION)
-------------------------------
SQLSelect: select d.* from DETAIL d
where d.MASTER_ID = :id <<< 1
SQLInsert: insert into DETAIL values
(:id, :master_id, :caption) <<< 2<<< 1: Такой select работает для детали, если уже есть записи с правильным FK на Мастера.
<<< 2: Такой insert работает, если поле MASTER_ID вбивать руками (в гриде). А если оставлять пустым, то, естественно, не работает, потому что в Мастере нет поля MASTER_ID.
Но, я же не могу написать
Код: Выделить всё
SQLInsert: insert into DETAIL values
(:id, :id, :caption) Вот собственно я об этом и пытался сказать в 1-м посте на эту тему (что выкрутился на событиях).
PS. С Options естественно поигрался. Перебрал все 4 сочетания. С горя.
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
а кто тебе запрещает в мастер запросе использовать вместо id - алиас на это поле под именем master_id - скоректирууй соответсвующим образом запрос на вставку.
select:
Insert:
И волки целы и овцы сыты.
Но на самом деле - именуй одно и тоже поле одинаково во всех таблицах - и таких логических проблем не будет
для примера:
у меня в есть таблица клиентов - TB_CLIENT (TB_CLIENT_ID, TB_CLIENT_NAME)
PK в ней - TB_CLIENT_ID
и везде где есть ссылка на клиента стоит поле TB_CLIENT_ID - FK на мой справочник клиентов.
я вобще этого стиля придерживаюсь - по наименованию поля видно в какой таблице находятся данные о нём.
select:
Код: Выделить всё
select
MASTER.ID as MASTER_ID,
MASTER.CAPTION
from
MASTER
Insert:
Код: Выделить всё
insert into MASTER
(id, caption)
values
(:MASTER_ID, :CAPTION)
И волки целы и овцы сыты.
Но на самом деле - именуй одно и тоже поле одинаково во всех таблицах - и таких логических проблем не будет
для примера:
у меня в есть таблица клиентов - TB_CLIENT (TB_CLIENT_ID, TB_CLIENT_NAME)
PK в ней - TB_CLIENT_ID
и везде где есть ссылка на клиента стоит поле TB_CLIENT_ID - FK на мой справочник клиентов.
я вобще этого стиля придерживаюсь - по наименованию поля видно в какой таблице находятся данные о нём.
А как быть с чувствительностю к регистру в Locate?
Это не работает.
Код: Выделить всё
FBDataSet.Locate(SearchField.FieldName,SearchValue, [loCaseInsensitive,loPartialKey]);Это не работает.
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
Значит что-то не то с установками системной локали. Посмотри в исходниках этого метода - я использую только системные вызовы. Просто что-то где-то не инициализированно у тебя. У меня код заработал без. доп. телодвижений.
Попобуй включить дерективу FIX_UTF8LOCATE.
Попобуй включить дерективу FIX_UTF8LOCATE.
И волки целы и овцы сыты.
Не знал, что такие трюки можно проделывать. Спасибо, попробую.
именуй одно и тоже поле одинаково во всех таблицах
У меня такое не пройдет (наследование). Ключ - везде ID.
В свое время я пробовал оба подхода. Понял, что слегка раздражает дублирование имени таблицы в имени поля. Наверное, дело вкуса.
А если по-хорошему, в компоненте нужна возможность _явно_ указывать в Детали параметры связи с Мастером, как собственно и делается в SQL. ИМХО, конечно.
P.S. Аську даёшь?
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
аська в личной информации есть.
Как это ты себе представляеш?
mak писал(а):А если по-хорошему, в компоненте нужна возможность _явно_ указывать в Детали параметры связи с Мастером, как собственно и делается в SQL.
Как это ты себе представляеш?
alexs писал(а):Как это ты себе представляеш?
ФИБПлюсы используют префикс MAS_ в именах параметров Детали. Мне бы хватило.
Или можно свойство отдельное для пар <имя параметра Детали> - <имя поля Мастера> завести.
Насколько я помню - MAS - это для массиово.
Вот ссылка на статью разрбатчиков:
http://www.devrace.com/ru/fibplus/articles/1170.php
А насчёт доп. парамертров - я не вижу обосновнной необходимости. Нет нужды усложнять простые вещи.
Попробуй переубедить меня
Я просто еще один вариант привел. Префикса, как и говорил, - достаточно.
ЗЫ. Послал сообщение на аську через форум. Получил?
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
mak писал(а):Вот ссылка на статью разрбатчиков:
Ну для ленивых - можно и повторить этот функционал
Прсто я за время своих разработок никогда не испытывал в нём нужды - хотя в дельфях именно на FIB+-сах сижу.
В багтрекер на шаманграде вниси хотелку.
mak писал(а):ЗЫ. Послал сообщение на аську через форум. Получил?
Письмо из центра не дошло.
Там когда сообщение отправляется - в URL идёт номер аськи - присмотрись.
