Cannot modify

nikomp
Дата: 11.05.2012 11:28:51
Исрользую IBDataSet

Form5.ibDtsTabPeriod.Open;
Form5.ibDtsTabPeriod.InsertSQL.Clear;
Form5.ibDtsTabPeriod.InsertSQL.Add('INSERT INTO TSEANS (IDTIME,'+stPole+') VALUES (0,'+stVal+')');
Form5.ibDtsTabPeriod.Insert; // ОШИБКА! Cannot modify Read-Only DataSet
Form5.ibDtsTabPeriod.Transaction.Commit;

Запросы update,insert,delete,refresh есть. Свойство ReadOnly может где-то есть? у dataset'а не нашел такого
Помогите плиизззз
.
Дата: 11.05.2012 11:49:54
Пользователь каким ты подключен к базе имеет права на вставку данных?
nikomp
Дата: 11.05.2012 11:54:04
да, пользователь SysDBA, таблица TSeans создавалась в RunTime тут что не так. Таблица не может быть ReadOnly&
Dimitry Sibiryakov
Дата: 11.05.2012 12:07:05

nikomp
Form5.ibDtsTabPeriod.InsertSQL.Add('INSERT INTO TSEANS (IDTIME,'+stPole+') VALUES
(0,'+stVal+')');

прочитай справку о том как должны формироваться запросы на модификацию и ТАК больше
никогда не делай.

Posted via ActualForum NNTP Server 1.5

nikomp
Дата: 11.05.2012 12:08:09
какую справку то? и что страшного в моем запросе?
Dimitry Sibiryakov
Дата: 11.05.2012 12:12:33

nikomp
какую справку то?

Штатную дельфийскую, разумеется.

nikomp
что страшного в моем запросе?

Фффсё!

Posted via ActualForum NNTP Server 1.5

nikomp
Дата: 11.05.2012 12:20:54
бум смотреть )) Dimitry Sibiryakov не пугайтесь вы так ))
kdv
Дата: 11.05.2012 16:54:37
http://www.ibase.ru/devinfo/ibx.htm
тут все написано.
nikomp
Дата: 12.05.2012 09:00:50
Dimitry Sibiryakov, почитал справку, попробовал с таким кодом

Form5.IBDatabase1.Open;
Form5.IBTW.StartTransaction;
Form5.ibDtsTabPeriod.Open; // БЕЗ ЭТОЙ СТРОКИ ГОВОРИТ НЕ МОГУ РАБОТАТЬ С ЗАКРЫТЫМ DATASET'ом
Form5.ibDtsTabPeriod.Insert;
Form5.ibDtsTabPeriod.FieldByName('P1').AsFloat:=2;
Form5.ibDtsTabPeriod.Post;
Form5.IBTW.Commit;

все ок, вставлять запись получается, но вот вопрос, как мне тогда программно добавить поля в ibDtsTabPeriod, и почему у меня так и не получилось вставить строку по запросу

Form5.ibDtsTabPeriod.InsertSQL.Clear;
Form5.ibDtsTabPeriod.InsertSQL.Add('INSERT INTO TSEANS (IDTIME,'+stPole+') VALUES (:0,'+stVal+')');
Form5.ibDtsTabPeriod.Transaction.StartTransaction;
Form5.ibDtsTabPeriod.Insert;
Form5.ibDtsTabPeriod.Transaction.Commit;

Попробовал даже вместо

Form5.ibDtsTabPeriod.InsertSQL.Add('INSERT INTO TSEANS (IDTIME,'+stPole+') VALUES (:0,'+stVal+')');

вот этот тестовый пример

Form5.ibDtsTabPeriod.InsertSQL.Add('insert into TSEANS (IDTIME, P1, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21) values (1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)');

тоже самое READ-ONLY DATASET

статью http://www.ibase.ru/devinfo/ibx.htm перечитал, но там много всего куда смотреть конкретно, ткните плиз
nikomp
Дата: 12.05.2012 10:36:51
тихо сам с собою я веду беседу ... ))

то что мне надо делает вот этот код, может пригодится еще кому

Form5.IBDatabase1.Open;
Form5.IBTW.StartTransaction;
Form5.ibDtsTabPeriod.Open;
Form5.ibDtsTabPeriod.Insert;
for i:=1 to Form5.ibDtsTabPeriod.FieldDefs.Count-1 do
begin
Form5.ibDtsTabPeriod.Fields[i].Value:=<ЗНАЧЕНИЕ>;
end;
Form5.ibDtsTabPeriod.Post;
Form5.IBTW.Commit;

Вычитал, в какой-то теме форума вот это
автор
Member

Откуда: Новосибирск
Сообщений: 2656
При открытии DataSet-а список полей возвращается сервером и переводится компонентами доступа в формат TField-а. Если список пуст - он заполняется, если нет - то проверяется на корректность. Точно так же список заполняется при выборе "Add all fields" в дизайнере полей DataSet.