![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TIBDataset [IB6.x, Yaffil]
maxbgmz © (2004-04-21 21:42:00)Помогите справиться с этим компонентом
никак не удается insert,
говорит dataset read-only.
пробовал также ibclient dataset
но там тоже какие-то проблемы.
база исключительно локальная
для одного клиента.
я никак не могу понять где в этих ibdataset'ах
происходит выбор таблицы.
в selectsql что ли?
maxbgmz (2004-04-27 17:08:00) [1]всем спасибо!
разобрался
kaif (2004-04-27 02:55:00) [2]Как выглядит окошко DataSet Editor-а можешь посмотреть на моем сайте (там не Delphi описано, но все равно сойдет в качестве примера)
http://gaapinvest.com/allegro/doc/book2/doc034.html
kaif (2004-04-27 02:53:00) [3]У IBDataSet есть запросы ModifySQL, DeleteSQL, InsertSQL и RefreshSQL. Нужно их аккуратно все прописать. Вписываешь параметрические запросы типа
insert into table1 (id, name) values (:id, :name)
update table1 set id := :id, name = :name where id = :old_id
:id и :name это имена параметров. Параметры IBDataSet сам подставит из одноименных полей (компоненты Field). Если не найдет среди полей, то поищет в свойстве DataSource (мало ли, мжет это Master-Detail связь компонентов...).
имена параметров могут иметь префиксы old_, что значит прежнее значение одноименного поля.
Для простоты впиши свой SELECT в свойство SelectSQL и вызови DataSet Editor с помощью контекстного меню компонента (правая кнопка мыши). Нажми Generate SQLs и редактор сам сгенерит тебе все нужные запросы. Убедись, что в условии Where запроса ModifaySQL используются ключевые поля.
Сохрани и попробуй открыть IBDataSet.Active := True или Open.
Он должен нормально заработать с сеткой.
Поля типа BLOB обслуживаются им автоматически. По крайней мере, картинки (TDBImage) и Мемо-поля (TDBMemo) будут работать сразу.
Дальше - читай внимательно Help.
Разберешься.
Курдль (2004-04-26 21:22:00) [4]
> IBDSTH.InsertSQL.Text:='insert into NEW_TABLE(PHOTOID) values(12365651)';
> в результате работы этой программы всегда получается
> 12365651 в поле PHOTOID, и никогда 2212312312,
А если вы на заборе напишете [censored], неужто там появится слово "МИР"? :)
IBDSTH.InsertSQL.Text:='insert into NEW_TABLE(PHOTOID) values(:PHOTOID)';
maxbgmz (2004-04-26 21:09:00) [5]
IBDBTH.Open;
IBDSTH.InsertSQL.Text:='insert into NEW_TABLE(PHOTOID) values(12365651)';
IBDSTH.Open;
IBDSTH.Insert;
IBDSTH.Edit;
IBDSTH.FieldByName('PHOTOID').AsInteger :=2212312312;
IBDSTH.Post;
IBDSTH.ApplyUpdates;
IBDBTH.CloseDataSets;
тут я не рассматриваю blob для простоты примера.
в результате работы этой программы всегда получается
12365651 в поле PHOTOID, и никогда 2212312312,
менять команды местами пробовал по разному....
если работать можно только путём insertSQL,
и никакие варианты с IBDSTH.FieldByName()
непопустимы, скажите мне тогда, как засунуть
blob в sql строку.
ЮЮ (2004-04-24 06:15:00) [6]Начем с начала:
maxbgmz (21.04.04 21:44) [1]
суперсодержательный пример от борланда мне совершенно ничем не помогает. help!
DataSet1.Insert;
// после этого добавится запись в локальныйDataSet
DataSet1.FieldByName('QUANTITY').AsInteger := StrToInt
(Edit1.Text);
// заполнятся поля вставленной записи
DataSet1.Post;
{а вот здесь выполнится запрос(InsertSQL), в который в качестве параметров проставятся данные из полей записи. Если cashedupdates = true, то запрос сразу выполняться не станет. А выполнятся все запросы для всех модифицированных/вставленных/удаленных для всего DataSeta при применении соответствующего метода}
Аналогтчно, после DataSet1.Edit;...;DataSet1.Post; выполнится UpdateSQL, а после DataSet.Delete - DeleteSQL.
>maxbgmz (23.04.04 22:09) [15]
>insertsql всегда разный
Он должен быть всегда один (как и UpdateSQL и DeleteSQL), но правильный. А подставлять туда параметры, это дело самого DataSet-а
Johnmen (2004-04-24 01:43:00) [7]Долбать не надо. Надо спокойно вдумчиво почитать хелп....
maxbgmz (2004-04-24 01:21:00) [8]to Жук
1.забудем про ClientDataSet.
пробовать устал, правда.
да, insertsql исполняется,
и я пытаюсь после этого редактировать запись,
но ничего не выходит, туда упорно заносится только
то что в insertsql и ничего более.
столько времени угрохано, столько всего прочитано...
такая элементарная вещь и никак не раздолбать.
help :'-(
maxbgmz (2004-04-23 22:09:00) [9]cashedupdates=true не помогает, cannot modify read-only dataset и
всё и точка. неделю бъюсь, всё без толку.
insertsql всегда разный, вы мне предлагаете вставить туда blob?
Жук (2004-04-23 08:47:00) [10]При инсерт/аппенд выполняется запрос, прописанный в InsertSQL
Oldman (2004-04-23 06:47:00) [11]А попробуй перед Insert написать:
ClientDataSet1.Edit;
Кщд (2004-04-23 06:17:00) [12]maxbgmz (22.04.04 22:36) [11]
TIBCustomDataSet.CreateBlobStream с примером
maxbgmz (2004-04-22 22:36:00) [13]знаком с этими компонентами, с их помощью мне удаётся
прочитывать информацию.
но проблема insert'a остаётся.
help весь перелопатил, но там нет ни слова об ошибках при вставке...
Vlad (2004-04-22 20:52:00) [14]TBlobStream, TMemoryStream + F1
maxbgmz (2004-04-22 20:36:00) [15]я чувствую что на мой вопрос народу не ответить, ок.
забудем про dataset.
ответьть мне только на один простой вопрос.
как в ib вставить blob?
никому не приходилось вставлять бинарные объекты в интербазу???
maxbgmz (2004-04-22 17:23:00) [16]в selectSql стоит:
select * from NEW_TABLE
но разве это может повлиять на успешность insert'f?
а что мне исать в insertsql, для того чтобы вогнать
в таблицу blob? и зачем тогда вообще коматна tdataset().insert,
если получается что она не работает.
Kadr (2004-04-22 08:24:00) [17]InsertSQL, UpdateSQL, DeleteSQL как раз и предназначены для того, чтобы датасет не был ReadOnly
Кщд (2004-04-22 07:12:00) [18]maxbgmz (21.04.04 22:27) [3]
что прописано в SelectSQL и модифицирующих?
Hawk2 (2004-04-22 00:30:00) [19]Да хелп по IBX не блещет примерами, знаю по собственному опыту. :)
maxbgmz (2004-04-21 23:17:00) [20]помогите хотя бы integer вставить, про blob я уже и нем мечтаю