FBDataSet (библиотека доступа к данным FireBird/Interbase.)

Модератор: Модераторы

Re: FBDataSet (библиотека доступа к данным FireBird/Interbase.)

Сообщение yuray » 25.12.2008 11:39:05

Здравствуйте!

Использую в своих проэктах 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).
yuray
новенький
 
Сообщения: 95
Зарегистрирован: 22.05.2008 14:19:19
Откуда: Ровно, Украина

Re: FBDataSet (библиотека доступа к данным FireBird/Interbase.)

Сообщение alexs » 25.12.2008 13:10:17

я её собираю в текущей версии лазаря (0.9.27) - там появляются новые свойства у шрифтов. Поэтомуи ошибка.
Для решения - лучше всего - обновись до текущей версии лазаря. Работает стабильно.
Если же нет такой возможности - то при установке пакета реадктора свойств для FBDataSet (dcl_...) - пооткрывай в нём все формы - при открытии выдастся ошибка - но они откроются - после этого сохрани всё и собирай.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: FBDataSet (библиотека доступа к данным FireBird/Interbase.)

Сообщение yuray » 25.12.2008 13:31:35

Спасибо, понял. Буду обновляться до 0.9.27. Тем более, что есть и другие баги. А вдруг там уже пофиксили... :)
yuray
новенький
 
Сообщения: 95
Зарегистрирован: 22.05.2008 14:19:19
Откуда: Ровно, Украина

Re: FBDataSet (библиотека доступа к данным FireBird/Interbase.)

Сообщение yuray » 26.12.2008 16:44:39

Обновился...

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 desc

v_users и v_receipts - представления. При этом в RxDBGrid не отображается часть данных последней колонки детайл FBDataSet. Когда переношу
Код: Выделить всё
order by date_rec desc

в само представления v_receipts, то все отображается нормально. Не знаю, возможно в master-detail связках нельзя в SQL писать order by...
Последний раз редактировалось yuray 30.12.2009 15:04:59, всего редактировалось 1 раз.
yuray
новенький
 
Сообщения: 95
Зарегистрирован: 22.05.2008 14:19:19
Откуда: Ровно, Украина

Re: FBDataSet (библиотека доступа к данным FireBird/Interbase.)

Сообщение alexs » 26.12.2008 19:01:56

yuray писал(а):в само представления v_receipts, то все отображается нормально. Не знаю, возможно в master-detail связках нельзя в SQL писать order by...

нет - должно всё отображаться коректно.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: FBDataSet (библиотека доступа к данным FireBird/Interbase.)

Сообщение mak » 26.12.2008 19:42:27

Чтобы при вставке в подчинённоую таблицу новых записей FK поле заполнялось данными из главной записи - поиграйся с парамтерами в options

Хочешь легко отделаться? :D Или я плохо объяснил :(
Давай разберёмся только со вставкой в деталь.
Мастер-датасет такой (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 сочетания. С горя.
Аватара пользователя
mak
новенький
 
Сообщения: 24
Зарегистрирован: 26.11.2008 18:14:07
Откуда: г.Обнинск

Re: FBDataSet (библиотека доступа к данным FireBird/Interbase.)

Сообщение alexs » 26.12.2008 23:31:42

а кто тебе запрещает в мастер запросе использовать вместо id - алиас на это поле под именем master_id - скоректирууй соответсвующим образом запрос на вставку.
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 на мой справочник клиентов.
я вобще этого стиля придерживаюсь - по наименованию поля видно в какой таблице находятся данные о нём.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: FBDataSet (библиотека доступа к данным FireBird/Interbase.)

Сообщение yuray » 28.12.2008 00:04:33

А как быть с чувствительностю к регистру в Locate?
Код: Выделить всё
FBDataSet.Locate(SearchField.FieldName,SearchValue, [loCaseInsensitive,loPartialKey]);

Это не работает. :(
yuray
новенький
 
Сообщения: 95
Зарегистрирован: 22.05.2008 14:19:19
Откуда: Ровно, Украина

Re: FBDataSet (библиотека доступа к данным FireBird/Interbase.)

Сообщение alexs » 28.12.2008 11:13:24

Значит что-то не то с установками системной локали. Посмотри в исходниках этого метода - я использую только системные вызовы. Просто что-то где-то не инициализированно у тебя. У меня код заработал без. доп. телодвижений.
Попобуй включить дерективу FIX_UTF8LOCATE.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: FBDataSet (библиотека доступа к данным FireBird/Interbase.)

Сообщение mak » 29.12.2008 13:13:58

И волки целы и овцы сыты.

Не знал, что такие трюки можно проделывать. Спасибо, попробую.
именуй одно и тоже поле одинаково во всех таблицах

У меня такое не пройдет (наследование). Ключ - везде ID.
В свое время я пробовал оба подхода. Понял, что слегка раздражает дублирование имени таблицы в имени поля. Наверное, дело вкуса.
А если по-хорошему, в компоненте нужна возможность _явно_ указывать в Детали параметры связи с Мастером, как собственно и делается в SQL. ИМХО, конечно.
P.S. Аську даёшь? :)
Аватара пользователя
mak
новенький
 
Сообщения: 24
Зарегистрирован: 26.11.2008 18:14:07
Откуда: г.Обнинск

Re: FBDataSet (библиотека доступа к данным FireBird/Interbase.)

Сообщение alexs » 29.12.2008 18:36:04

аська в личной информации есть.
mak писал(а):А если по-хорошему, в компоненте нужна возможность _явно_ указывать в Детали параметры связи с Мастером, как собственно и делается в SQL.

Как это ты себе представляеш?
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: FBDataSet (библиотека доступа к данным FireBird/Interbase.)

Сообщение mak » 29.12.2008 20:27:43

alexs писал(а):Как это ты себе представляеш?

ФИБПлюсы используют префикс MAS_ в именах параметров Детали. Мне бы хватило.
Или можно свойство отдельное для пар <имя параметра Детали> - <имя поля Мастера> завести.
Аватара пользователя
mak
новенький
 
Сообщения: 24
Зарегистрирован: 26.11.2008 18:14:07
Откуда: г.Обнинск

Re: FBDataSet (библиотека доступа к данным FireBird/Interbase.)

Сообщение alexs » 29.12.2008 21:03:12

Насколько я помню - MAS - это для массиово.
А насчёт доп. парамертров - я не вижу обосновнной необходимости. Нет нужды усложнять простые вещи.
Попробуй переубедить меня :-)
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: FBDataSet (библиотека доступа к данным FireBird/Interbase.)

Сообщение mak » 29.12.2008 21:45:47

Насколько я помню - MAS - это для массиово.

Вот ссылка на статью разрбатчиков:
http://www.devrace.com/ru/fibplus/articles/1170.php
А насчёт доп. парамертров - я не вижу обосновнной необходимости. Нет нужды усложнять простые вещи.
Попробуй переубедить меня

Я просто еще один вариант привел. Префикса, как и говорил, - достаточно.
ЗЫ. Послал сообщение на аську через форум. Получил?
Аватара пользователя
mak
новенький
 
Сообщения: 24
Зарегистрирован: 26.11.2008 18:14:07
Откуда: г.Обнинск

Re: FBDataSet (библиотека доступа к данным FireBird/Interbase.)

Сообщение alexs » 29.12.2008 23:00:36

mak писал(а):Вот ссылка на статью разрбатчиков:

Ну для ленивых - можно и повторить этот функционал :-)...
Прсто я за время своих разработок никогда не испытывал в нём нужды - хотя в дельфях именно на FIB+-сах сижу.
В багтрекер на шаманграде вниси хотелку.
mak писал(а):ЗЫ. Послал сообщение на аську через форум. Получил?

Письмо из центра не дошло.
Там когда сообщение отправляется - в URL идёт номер аськи - присмотрись.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Пред.След.

Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

Рейтинг@Mail.ru