Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

HELP!!! DataSet при Insert ругается, что база read-only. [D7, IB6.x]


Muzzy ©   (2006-06-01 08:17:00) 

Ругается на строке с
FieldByName('npp').AsInteger:=StrToInt(edNpp.Text);

говорит следующее:
Cannnot modify  a read-only  dataset.

Что это такое? Я все проверил на 1024 раза. Может что в real-time нужно делать? И в IB настройки смотрел.

Делаю все по книжке вот так:

       with IBDataSetJOTKL do
       begin
         IBDataSetJOTKL.Active:=True;
         try
         Insert;
         FieldByName('npp').AsInteger:=StrToInt(edNpp.Text);
         FieldByName('fidname').AsString:=edFidname.Text;
         FieldByName('dateotkl').AsDateTime:=edDateotkl.Date;
         FieldByName('timeotkl').AsDateTime:=edTimeotkl.Time;
         FieldByName('datevkl').AsDateTime:=edDatevkl.Date;
         FieldByName('timevkl').AsDateTime:=edTimevkl.Time;
         FieldByName('lengthotkl').AsDateTime:=edLengthotkl.Time;
         FieldByName('priotkl').AsString:=edPriotkl.Text;
         FieldByName('npo').AsString:=edNpo.Text;
         FieldByName('katpotr').AsString:=edKatpotr.Text;
         FieldByName('klassif').AsInteger:=StrToInt(edKlassif.Text);
         FieldByName('nedootp').AsInteger:=StrToInt(edNedootp.Text);
         FieldByName('datepered').AsDateTime:=edDatepered.Date;
         FieldByName('timepered').AsDateTime:=edTimepered.Time;
         FieldByName('peredkomu').AsString:=edPeredkomu.Text;
         FieldByName('commentmemo').AsString:=edCommentmemo.Text;
         Post;
         finally
         IBDataSetJOTKL.Active:=False;
         end;
       end;

В чем проблема?


dolmat   (2006-06-02 09:30:00) [1]

Возможно свойство Fieds не заполнено
Щелкнуть по IBDataset правой кнопкой мышки, выбрать Fiels editor, потом тойже кнопкой мышки Add All ..


Desdechado   (2006-06-01 13:41:00) [2]

судя по скрипту таблицы - БД в 3-м диалекте
а в нем важен регистр символов для имен, если они стоят в кавычках
поэтому нет поля NPP, но есть "npp"
подправь INSERT кавычками для полей


Muzzy   (2006-06-01 13:38:00) [3]


> В данном случае ничего и писать то не надо. Надо кликнуть
> правой кнопкой на датасете и в редакторе правильно указать
> ключевые и обновляемые поля, после чего сгенерировать (кнопку
> нажать) модифицирующие запросы.

Ну сгенерил, вот что получилось:

insert into JOTKL
 (npp, fidname, dateotkl, timeotkl, datevkl, timevkl, lengthotkl, priotkl,
  npo, katpotr, klassif, nedootp, datepered, timepered, peredkomu, commentmemo)
values
 (:npp, :fidname, :dateotkl, :timeotkl, :datevkl, :timevkl, :lengthotkl,
  :priotkl, :npo, :katpotr, :klassif, :nedootp, :datepered, :timepered,
  :peredkomu, :commentmemo)

Выдает:
Column unknow NPP'
SQL error code = -206.

И что дальше?


Muzzy   (2006-06-01 12:15:00) [4]


> В данном случае ничего и писать то не надо. Надо кликнуть
> правой кнопкой на датасете и в редакторе правильно указать
> ключевые и обновляемые поля, после чего сгенерировать (кнопку
> нажать) модифицирующие запросы.

Блин! А про это в книжке не сказано!


Sergey13   (2006-06-01 12:12:00) [5]

2[6] Muzzy   (01.06.06 12:03)
> Да читал я.
Да ладно заливать то. 8-)

>Ну подскажите че написать-то
В данном случае ничего и писать то не надо. Надо кликнуть правой кнопкой на датасете и в редакторе правильно указать ключевые и обновляемые поля, после чего сгенерировать(кнопку нажать) модифицирующие запросы.


Сергей М.   (2006-06-01 12:11:00) [6]

Замени IBDataset на IBTable и не мучайся.


Muzzy   (2006-06-01 12:11:00) [7]

Было в FAQ, но что это и куда пихать???

http://www.delphimaster.ru/cgi-bin/faq.pl?look=1&id=988623447&n=14


Muzzy   (2006-06-01 12:07:00) [8]

Ну подскажите идиоту где еще порыть. Прогу срочно делать надо. Простая ведь. Того и надо, что записи вствлять.
Вот и база:

CREATE TABLE "JOTKL"
(
 "npp" INTEGER,
 "fidname" VARCHAR(64),
 "dateotkl" DATE,
 "timeotkl" TIME,
 "datevkl" DATE,
 "timevkl" TIME,
 "lengthotkl" TIME,
 "priotkl" VARCHAR(254),
 "npo" VARCHAR(254),
 "katpotr" VARCHAR(12),
 "klassif" SMALLINT,
 "nedootp" SMALLINT,
 "datepered" DATE,
 "timepered" TIME,
 "peredkomu" VARCHAR(64),
 "commentmemo" VARCHAR(254)
);


Muzzy   (2006-06-01 12:03:00) [9]

> Похоже, прежде чем написать что то, тебе придется еще многое прочитать. ИМХО.
Да читал я. Тогда уж проще через IBSQL. Но хотелось-то попроще, через DataSet. Ну подскажите че написать-то поля-то в коде есть. И вопрос-то в другом. Почему недает вставить запись? Ладно если другая ошибка, дело-то в этом.


Sergey13   (2006-06-01 11:41:00) [10]

2 [4] Muzzy   (01.06.06 11:39)
>А что там написать-то?
Похоже, прежде чем написать что то, тебе придется еще многое прочитать. ИМХО.


Muzzy   (2006-06-01 11:39:00) [11]

>> Заполни свойство InsertSQL
А что там написать-то?
INSERT и иже с ним? А зачем тогда FieldByName ?


Sergey13   (2006-06-01 09:05:00) [12]

>Делаю все по книжке вот так:
Выкинь такую книжку или почитай внимательнее. ИМХО.
Зачем открывать датасет только для того что бы вставить одну запись!


dolmat   (2006-06-01 09:03:00) [13]


> Ругается на строке с
> FieldByName('npp').AsInteger:=StrToInt(edNpp.Text);

Возможно для этого лучше генератор привязать


ANB   (2006-06-01 08:28:00) [14]

Заполни свойство InsertSQL


Наверх

Титульная страница Поиск, карта сайта Написать письмо