Технический форум

Технический форум (http://www.tehnari.ru/)
-   Базы данных (http://www.tehnari.ru/f128/)
-   -   Обновление данных в БД (http://www.tehnari.ru/f128/t9738/)

Aleksandr_06 09.03.2008 14:17

Я работаю с БД Oracle. У меня есть несколько таблиц в dataset, связанных между собой. В некоторых есть поля, которые нельзя редактировать(Например ID). Для обновления их я использую oleDataAdapter. Что нужно писать в CommandText в UpdateCommand? Или может быть по другому обновлять данные в БД?
Заранее всем уделившим внимание спасибо.

Aleksandr_06 13.03.2008 22:56

Для простоты пусть у меня есть таблица всего из трёх полей :
- ID (первичный ключ)
- Name (строковое поле).
- Date_From (служебное поле, дата ввода, это поле нельзя изменять)
В своей программе я изменяю(добавляю,удаляю,редактирую) данные и вношу изменения в dataset.
Но редактировать я могу только ID и Name.
Добавляю в dataset так : dataSet1.MYTABLE.Rows.Add(NewRow);
Удаляю из dataset так : dataSet1.MYTABLE.FindByID(Del_ID).Delete();
Вношу изменения в dataset так : dataSet1.MYTABLE.FindByID(Up_ID)[1] = textBox1.Text;
Теперь я хочу обновить саму базу данных. Для этого я использую oleDataAdapter.
Для этого я в CommandText пишу :
- для DeleteCommand: DELETE FROM "MYTABLE" WHERE (("ID" = ?) AND ("NAME" = ?) AND ("DATE_FROM" = ?))
- для InsertCommand: INSERT INTO "MYTABLE" ("ID", "NAME","DATE_FROM") VALUES (?, ?, ?)
- для SelectCommand: SELECT MYTABLE.* FROM MYTABLE
- дляUpdateCommand: UPDATE "MYTABLE" SET "ID" = ?, "NAME" = ?, "DATE_FROM" = ? WHERE (("ID" = ?) AND ("NAME" = ?) AND ("DATE_FROM" = ?))
У меня возникла проблема: Если оставить Update как здесь написано, то возникает
ошибка "ORA-20201: Программная ошибка! Попытка обновления служебного поля!"
Но по идее в update в SET не должно быть "DATE_FROM"=? , но если его убрать, то возникает другая
ошибка "ORA-01008: не все переменные привязаны".
Вот меня и мучает вопрос: что я делаю не так?
Подскажите пожалуйста ответ на этот вопрос или может вы знаете какой-нибудь другой способ
обновления данных в БД.
Заранее всем спасибо.
P.S. Ещё подскажите как организовать каскадное удаление.

andre 20.05.2008 14:27

В книге С.В.Глушакова "DELPHI 2007" (стр. 474) это решение описано так:

...Чтобы не изменять значение какого-либо поля, ему необходимо присвоить значение NIL.
В этом случае прежнее значение поля будет сохранено без изменения.
Редактирование записи с помощью метода SetFields может выглядеть примернотак:

ADOTable1.Edit;
ADOTable1SetFields(['0284','Порошок стиральный',NIL,500]);
ADOTable1.Post;

При выполнении приведенного выше кода первому полю текущей записи присваивается значение '0284' ,
второму полю - 'Порошок стиральный',
третье поле НЕ ИЗМЕНЯЕТСЯ , а четвертое получает значение 500.
...

Paf0s 03.11.2009 15:34

автоустановка винды
 
Помогите пожадуйста сделать загрузочный диск Windows .Какая нужна прога и что надо делать?:(

01pump 03.11.2009 15:36

Altai, Прошу прощения за нескромный вопрос... А из какого дистрибутива вы его (загрузочный диск) собираетесь лепить? :)

Paf0s 03.11.2009 15:39

мне надо сделать диск из Wn98

01pump 03.11.2009 15:41

Цитата:

Сообщение от Altai (Сообщение 109053)
мне надо сделать диск из Wn98

Вы хотите сделать загрузочный диск для установки Win98 ? :confused:

Paf0s 03.11.2009 15:43

да именно , саму винду сейчас качаю с http://qiq.ru/28/04/2009/operating_s...8.html?rk=5239

01pump 03.11.2009 15:47

Цитата:

Сообщение от Altai (Сообщение 109058)
да именно , саму винду сейчас качаю с http://qiq.ru/28/04/2009/operating_s...8.html?rk=5239

Ну всё зависит от того в каком виде вы это чудо скачаете, просто виде архива или в виде образа диска с кучей всякой всячины.

tych 03.11.2009 15:49

01pump, он наверное имеет ввиду кучу образов для дискет, которые перевести в 1 загрузочный СД образ


Часовой пояс GMT +4, время: 07:24.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.