Ошибка при вставке записи в БД Oracle

Alexander1980
Дата: 13.05.2011 15:18:04
Помогите, пожалуйста, разобраться... БД Oracle, использую компоненты Direct Oracle Access.
OracleDataSet.SQL = 'select t.*, p.name, t.rowid
from T_Employees t, T_Posts p
where t.post_id = p.id
order by t.lastname, t.firstname, t.surname'
Надо добавить запись в таблицу T_Employees.
Есть форма для заполнения полей новой записи...
Если заполнять только поля таблицы T_Employees, то вылетает ошибка 'Поле NAME должно быть заполнено...'
При попытке присвоить ему значение вылетает ошибка ORA-00904, что якобы NAME не является правильным идентификатором...
defecator
Дата: 13.05.2011 15:20:05
Alexander1980
Помогите, пожалуйста, разобраться... БД Oracle, использую компоненты Direct Oracle Access.
OracleDataSet.SQL = 'select t.*, p.name, t.rowid
from T_Employees t, T_Posts p
where t.post_id = p.id
order by t.lastname, t.firstname, t.surname'
Надо добавить запись в таблицу T_Employees.
Есть форма для заполнения полей новой записи...
Если заполнять только поля таблицы T_Employees, то вылетает ошибка 'Поле NAME должно быть заполнено...'
При попытке присвоить ему значение вылетает ошибка ORA-00904, что якобы NAME не является правильным идентификатором...


А написать:

Insert Into T_Posts(name)
Values(<значение или переменная?>)

не пробовал ?
Alexander1980
Дата: 13.05.2011 16:07:58
defecator, дело в том, что у меня все остальные справочники работают по одной схеме...
Заполняются поля на форме элемента справочника и далее вызывается метод TOracleDataSet.Post.
Так вот, если запрос из одной таблицы - все работает отлично...
А вот если запрос из двух таблиц, то при вызове метода Post возникает ошибка...
Можно было, конечно, создать еще один DataSet, но мне хочется обойтись одним... Тут скорее проблема в том, что запрос DataSet состоит из двух таблиц...
defecator
Дата: 13.05.2011 16:23:05
Alexander1980
defecator, дело в том, что у меня все остальные справочники работают по одной схеме...
Заполняются поля на форме элемента справочника и далее вызывается метод TOracleDataSet.Post.
Так вот, если запрос из одной таблицы - все работает отлично...
А вот если запрос из двух таблиц, то при вызове метода Post возникает ошибка...
Можно было, конечно, создать еще один DataSet, но мне хочется обойтись одним... Тут скорее проблема в том, что запрос DataSet состоит из двух таблиц...


Опять двадцать пять.
Зачем использовать таблицы, если сервер поддерживает нормальный SQL ?
tru55
Дата: 13.05.2011 16:24:45
Если у тебя 2 таблицы, откуда DataSet знает, в какую вставлять?
Ramin Hashimzade
Дата: 13.05.2011 16:42:31
1) рекоменду писать процку на сервере и вызвать её с параметрами
2) использовать UPDATESQL
Alexander1980
Дата: 13.05.2011 17:02:58
Всем спасибо за советы!!!
!Ramin
Дата: 13.05.2011 20:09:27
Alexander1980, а хелп читать не пробовал?
автор
If the dataset is updateable, joined tables must be placed after the updating table in the select statement. The first table in the from clause is assumed the updating table. You can also set the UpdatingTable property to indicate which table in a join statement can be updated.

Т.е. тебе в select-е поля p.name и t.rowid местами надо поменять.

tru55
Если у тебя 2 таблицы, откуда DataSet знает, в какую вставлять?

По умолчанию - в первую в секции from, а если надо во вторую или сразу в две, то использовать событие OnApplyRecord,
что-то типа:
procedure TMainForm.DeptDataSetApplyRecord(Sender: TOracleDataSet; Action: Char; 
  var Applied: Boolean; var NewRowId: string);
begin
  if Action = 'I' then
  begin
    with TOracleQuery.Create(nil) do
    begin
      SQL.Text := 'begin insert into table1...; insert into table2...; end;';
      ...
      Execute;
      Free;
    end;
    Applied := True;
  end;
end;

Ramin
1) рекоменду писать процку на сервере и вызвать её с параметрами
2) использовать UPDATESQL

Рамин, это 3.14здец какой-то, что ты все на "процках" зациклился или ты счетчик накручиваешь? Нужны они или не нужны - это не твое дело!
Можно морду к БД, умеючи, написать без единого вызова хранимых процедур и функций, при этом вызываться они будут.
Johnmen
Дата: 13.05.2011 20:33:15
!Ramin
Рамин, это 3.14здец какой-то, что ты все на "процках" зациклился или ты счетчик накручиваешь? Нужны они или не нужны - это не твое дело!

Он обычный параноик. Который мало знаком с основами и ничего другого не знает.
!Ramin
Дата: 13.05.2011 21:25:01
Alexander1980
ну и если не работает, то попробуй установить свойство UpdatingTable в "T_Employees"