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

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

Сообщение VAshot » 27.11.2007 18:28:10

C UIBQuery работает, но хочеться с датасет, по причине множественных изменений в одной транзакции и отображением изменений в гриде, а через Квери она автоматом проходит.

Или это не лучший вариант (множественные изменения в dataset)?
Аватара пользователя
VAshot
постоялец
 
Сообщения: 128
Зарегистрирован: 01.11.2007 12:31:21
Откуда: Пермь

Сообщение Сергей Смирнов » 27.11.2007 18:38:58

Это извращенный путь какой-то. После FBDataSet.Append; значения параметров скорее всего пытаются автоматом заполниться и всё, что было присвоено до этого теряется. Можно попробовать переместить установку параметров между Append и Post. Но лучше всё же устанавливать значения полей, а не параметров. Разумеется, именовать параметры надо также, как поля.
Аватара пользователя
Сергей Смирнов
энтузиаст
 
Сообщения: 595
Зарегистрирован: 28.04.2005 13:23:25
Откуда: Москва

Сообщение alexs » 27.11.2007 19:07:16

FBDataSet для указанного кода не предназначен :-)

используй TJvUIBQuery - это самое то

а ещё проще - Transaction.ExecuteImmediate(SQLText); - это вобще для разовых вставок самое то
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4054
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Сообщение Attid » 28.11.2007 00:14:25

[quote="VAshot"][/quote]

и правда извращенец, может так

Код: Выделить всё
FBDataSet.UpdateTransaction.StartTransaction;

FBDataSet.SQLSelect.Text:='insert into MATERIAL (ID, NAME, MATERIALTYPE, PARAMETRES) '
+'values (:IDT, :NAMET, :MATERIALTYPET) '

FBDataSet.Params.ByNameAsInteger['IDT']:=StrToInt(LeID.Text);
FBDataSet.Params.ByNameAsString['NAMET']:=LeNAME.Text;
FBDataSet.Params.ByNameAsString['MATERIALTYPET']:='gsdfgs';

FBDataSet.ExecSql;

FBDataSet.UpdateTransaction.Commit;


или хотябы так
Код: Выделить всё
FBDataSet.UpdateTransaction.StartTransaction;

FBDataSet.SQLInsert.Text:='insert into MATERIAL (ID, NAME, MATERIALTYPE, PARAMETRES) '
+'values (:IDT, :NAMET, :MATERIALTYPET) '

FBDataSet.Insert;

FBDataSet.Params.ByNameAsInteger['IDT']:=StrToInt(LeID.Text);
FBDataSet.Params.ByNameAsString['NAMET']:=LeNAME.Text;
FBDataSet.Params.ByNameAsString['MATERIALTYPET']:='gsdfgs';

FBDataSet.Post;

FBDataSet.UpdateTransaction.Commit;


но первый вариант предпочтительней.
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Сообщение alexs » 28.11.2007 11:13:49

Attid писал(а):FBDataSet.ExecSql;

Там же такого метода кажись вобще нет :-)

Attid писал(а):или хотябы так

Ага - а select запрос?

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

Сообщение Attid » 28.11.2007 11:29:27

alexs писал(а):
Attid писал(а):FBDataSet.ExecSql;

Там же такого метода кажись вобще нет :-)


ой точно. надо прекращать писать сообщения ночью =)

надо добавить!

причину скажу на вскидку если у меня в приложении только один FBDataset то зачем мне еще и кверю держать это рал, а два это то что в твоем датасете нет проблем с датой,а у фибов они есть.
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Сообщение alexs » 28.11.2007 11:47:19

А чем вариант
Код: Выделить всё
Transaction.ExecuteImmediate(SQLText)

не устраивает? Вобще ничего не нужно :-)

Attid писал(а):если у меня в приложении только один FBDataset то зачем мне еще и кверю держать

Я наооборот люблю больше когда для кажого запроса свой квери - визуально легче воспринимать :-)
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4054
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Сообщение Attid » 28.11.2007 13:52:33

не устраивает?


отсутствием параметров, потом будут разные клоуны жаловаться на СКЛиньекции =)
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Сообщение VAshot » 28.11.2007 14:55:01

2 Attid

Первый вариант: FBDataSet.ExecSql; - такого же метода нет.

Второй вариант: как и ранее (что и ожидаемо :( ) сообщается, что при Post поля пустые, как и раньше.


FBDataSet.Params - для чего нужен, так и не понял.

Следующий код работает, но про параметрические запросы пришлось забыть:
Код: Выделить всё
FBDataSet.Append;

FBDataSet.FieldByName('ID').AsInteger:=StrToInt(LeID.Text);
FBDataSet.FieldByName('NAME').AsString:=LeNAME.Text;
FBDataSet.FieldByName('MATERIALTYPE').AsString:=CbMATERIALTYPE.Items[CbMATERIALTYPE.ItemIndex];
FBDataSet.MemoValue[FBDataSet.FieldByName('PARAMETRES')]:=MemoPARAMETRES.Lines.Text;

FBDataSet.Post;



Конструкиция
Код: Выделить всё
MS:=FMain.FBDataSet.CreateBlobStream(FBDataSet.FieldByName('PARAMETRES'),bmRead);

должна работать? Ругается на
umaterialedit.pas(77,87) Error: Identifier not found "bmRead"
Аватара пользователя
VAshot
постоялец
 
Сообщения: 128
Зарегистрирован: 01.11.2007 12:31:21
Откуда: Пермь

Сообщение alexs » 28.11.2007 15:12:32

VAshot
Чего ты хочеш добиться вобще?
FBDataSet предназначен для того чтобы сделать редактируемым select запрос к БД. Не стоит его использовать не по прямому назначению. Это из пушки по воробьям, и вдобавок сам себе делаеш трудности.
Если тебе просто надо вставить данные простым оператором insert без предварительной выборки данных - то используй TJvUIBQuery напрмую.

VAshot писал(а):FBDataSet.Params - для чего нужен, так и не понял.

Это нужо для передачи параметров в select запрос к БД, на вставку дангных это не влияет вобще.

VAshot писал(а):Конструкиция Код:
MS:=FMain.FBDataSet.CreateBlobStream(FBDataSet.FieldByName('PARAMETRES'),bmRead);
должна работать? Ругается на

Ну а сюда зачем ты полез (c) Гена Крокодил :-)
Этот метод предназначен длс создания потока для мемо/blob поля, и, фактически, является внутренним методом компоненты. Вызывать напрямую его не стоит. Используй

TBlobField(FBDataSet.FieldByName('PARAMETRES')).LoadFromStream и TBlobField(FBDataSet.FieldByName('PARAMETRES')).SaveToStream

PS.
Если хочеш разобраться досконально как работает FBDataSet почитай документацию в FibPlus-кому tpFIBDataSet - я именно на его функционал оринтируюсь, да и методы стараюсь также называть.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4054
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Сообщение VAshot » 28.11.2007 15:23:27

PS.
Если хочеш разобраться досконально как работает FBDataSet почитай документацию в FibPlus-кому tpFIBDataSet - я именно на его функционал оринтируюсь, да и методы стараюсь также называть.


Спасибо. Ну на конец-то я услышал где доки можно взять.
Аватара пользователя
VAshot
постоялец
 
Сообщения: 128
Зарегистрирован: 01.11.2007 12:31:21
Откуда: Пермь

Сообщение alexs » 28.11.2007 16:11:17

Разберёшся в FBDataSet - опиши все свои проблемы и их решение - будет и к нему документация

У меня просто на это (документация) нет времени абсолютно, да и не нужна она мне...
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4054
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Сообщение vital » 29.11.2007 02:02:46

alexs писал(а):
vital писал(а):при установке под Delphi 2006

У меня только 7-й дельфин
давай изменения, включу в исходники
vital писал(а):TJvUIBStoredProc

этого ещё нет

vital писал(а):Я понимаю, конечно, что D7 - это классика, но уже 5 лет прошло как-никак

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


Для D2006 пакет UIB - JvUIBD10Win32R, SynEdit - SynEdit_R2006.
Кроме того, почему-то потребовалось подключать *.dcr ресурс вручную, через {$R} - турба автоматом не подцепляет.
vital
новенький
 
Сообщения: 86
Зарегистрирован: 17.10.2007 14:52:59

Сообщение vital » 29.11.2007 02:18:39

Кстати, датасет, по ходу, подтекает - в D2006 ставлю контроль за утечками памяти, при завершении работы программы выдает:
"An unexpected memory leak has occurred. The unexpected small block leaks are:
1-12 bytes: Stringx1
13-20 bytes: Stringx2
21-28 bytes: Stringx1
29-36 bytes TFieldHeaderx2"

P.S. С входящим в состав UIB датасетом TJvUIBDataSet такого не наблюдается.
vital
новенький
 
Сообщения: 86
Зарегистрирован: 17.10.2007 14:52:59

Сообщение alexs » 29.11.2007 09:19:47

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

Пред.След.

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

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

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

Рейтинг@Mail.ru