FBDataSet (библиотека доступа к данным FireBird/Interbase.)
Модератор: Модераторы
- Сергей Смирнов
- энтузиаст
- Сообщения: 595
- Зарегистрирован: 28.04.2005 13:23:25
- Откуда: Москва
- Контактная информация:
Это извращенный путь какой-то. После FBDataSet.Append; значения параметров скорее всего пытаются автоматом заполниться и всё, что было присвоено до этого теряется. Можно попробовать переместить установку параметров между Append и Post. Но лучше всё же устанавливать значения полей, а не параметров. Разумеется, именовать параметры надо также, как поля.
- Attid
- долгожитель
- Сообщения: 2588
- Зарегистрирован: 27.10.2006 17:29:15
- Откуда: 44°32′23.63″N 41°2′25.2″E
- Контактная информация:
[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
- долгожитель
- Сообщения: 2588
- Зарегистрирован: 27.10.2006 17:29:15
- Откуда: 44°32′23.63″N 41°2′25.2″E
- Контактная информация:
alexs писал(а):Attid писал(а):FBDataSet.ExecSql;
Там же такого метода кажись вобще нет
ой точно. надо прекращать писать сообщения ночью =)
надо добавить!
причину скажу на вскидку если у меня в приложении только один FBDataset то зачем мне еще и кверю держать это рал, а два это то что в твоем датасете нет проблем с датой,а у фибов они есть.
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
А чем вариант
не устраивает? Вобще ничего не нужно
Я наооборот люблю больше когда для кажого запроса свой квери - визуально легче воспринимать
Код: Выделить всё
Transaction.ExecuteImmediate(SQLText)не устраивает? Вобще ничего не нужно
Attid писал(а):если у меня в приложении только один FBDataset то зачем мне еще и кверю держать
Я наооборот люблю больше когда для кажого запроса свой квери - визуально легче воспринимать
2 Attid
Первый вариант: FBDataSet.ExecSql; - такого же метода нет.
Второй вариант: как и ранее (что и ожидаемо
) сообщается, что при Post поля пустые, как и раньше.
FBDataSet.Params - для чего нужен, так и не понял.
Следующий код работает, но про параметрические запросы пришлось забыть:
Конструкиция
должна работать? Ругается на
Первый вариант: FBDataSet.ExecSql; - такого же метода нет.
Второй вариант: как и ранее (что и ожидаемо
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"
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
VAshot
Чего ты хочеш добиться вобще?
FBDataSet предназначен для того чтобы сделать редактируемым select запрос к БД. Не стоит его использовать не по прямому назначению. Это из пушки по воробьям, и вдобавок сам себе делаеш трудности.
Если тебе просто надо вставить данные простым оператором insert без предварительной выборки данных - то используй TJvUIBQuery напрмую.
Это нужо для передачи параметров в select запрос к БД, на вставку дангных это не влияет вобще.
Ну а сюда зачем ты полез (c) Гена Крокодил
Этот метод предназначен длс создания потока для мемо/blob поля, и, фактически, является внутренним методом компоненты. Вызывать напрямую его не стоит. Используй
TBlobField(FBDataSet.FieldByName('PARAMETRES')).LoadFromStream и TBlobField(FBDataSet.FieldByName('PARAMETRES')).SaveToStream
PS.
Если хочеш разобраться досконально как работает FBDataSet почитай документацию в FibPlus-кому tpFIBDataSet - я именно на его функционал оринтируюсь, да и методы стараюсь также называть.
Чего ты хочеш добиться вобще?
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 писал(а):vital писал(а):при установке под Delphi 2006
У меня только 7-й дельфин
давай изменения, включу в исходникиvital писал(а):TJvUIBStoredProc
этого ещё нетvital писал(а):Я понимаю, конечно, что D7 - это классика, но уже 5 лет прошло как-никак
он у меня официально куплен, для ведения наших задач полностью его хватает, поэтому переходить на более новый - смысла нет.
Для D2006 пакет UIB - JvUIBD10Win32R, SynEdit - SynEdit_R2006.
Кроме того, почему-то потребовалось подключать *.dcr ресурс вручную, через {$R} - турба автоматом не подцепляет.
Кстати, датасет, по ходу, подтекает - в 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 такого не наблюдается.
"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 такого не наблюдается.
