![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запись сообщения в таблице [D7, XP]
uno © (2007-11-29 09:03:00)Здравствуйте! Скажите в чем тут ошибка ( надо записать сообщение в Базу) вот код:
function TMessagesForm.InsMessage(MESSAGE_ID : integer; MESSAGE_SENDER : integer;
MESSAGE_RECIPIENTS_NAMES : string;MESSAGE_SAND_DATE : string): boolean;
var
InsMessageOk : boolean;
begin
InsMessage := true;
InsMessageOk := true;
Message_ID := -1
with DataModule1.IBQShared do begin
SQL.Clear;
SQL.Add('select gen_id(MESAAGES_GEN, 1) from RDB$DATABASE');
Open;
Message_ID := FieldByName('GEN_ID').AsInteger;
Close;
SQL.Clear;
SQL.Add('insert into MESSAGE_EXT(MESSAGE_ID, MESSAGE_SANDER, MESSAGE_RECIPIENTS_NAMES, MASSAGE_SAND_DATE)values (:MESSAGE_ID, :MESSAGE_SENDER, :MESSAGE_RECIPIENTS_NAMES, :MESSAGE_SAND_DATE )
FieldByName('MESSAGE_ID').AsInteger := Message_ID;
FieldByName('MESSAGE_SENDER').AsInteger := USER_ID;
FieldByName('MESSAGE_RECIPIENTS_NAMES').AsString := TreeView1.Selected.Text ;
FieldByName('MESSAGE_SAND_DATE').AsString := TimeToStr(Time);
try
ExecSQL;
except
InsMessage := false;
InsMessageOk := false;
end;
end;
Sergey13 (2007-11-29 12:16:00) [1]> [2] uno © (29.11.07 09:15)
В строке
> SQL.Add('insert into MESSAGE_EXT(MESSAGE_ID, MESSAGE_SANDER,
> MESSAGE_RECIPIENTS_NAMES, MASSAGE_SAND_DATE)values (:MESSAGE_ID,
> :MESSAGE_SENDER, :MESSAGE_RECIPIENTS_NAMES, :MESSAGE_SAND_DATE
> )
ты формируешь параметрический запрос на вставку. В values ты описал список ПАРАМЕТРОВ, значения которых запишутся в поля записи. Тебе надо присвоить значения этим параметрам. А ты пытаешся операторами типа FieldByName('MESSAGE_ID').AsInteger := Message_ID; присвоить значения полям датасета, которых там нет (запрос то на вставку).
И еще, в запрос можно сразу вставить
...values ( gen_id(MESAAGES_GEN, 1), :MESSAGE_SENDER ....
и не получать его отдельно.
Anatoly Podgoretsky (2007-11-29 09:35:00) [2]Смотри в справке как работать с ТВОИМ датасет.
uno (2007-11-29 09:20:00) [3]Возможно вместо FieldByName использовать ParamByName?
uno (2007-11-29 09:15:00) [4]Я просто начинающий. Как будет провильно
Если таблица имеет следующие поля:
MESSAGE_ID
MESSAGE_SENDER
MESSAGE_RECIPIENTS_NAMES
MESSAGE_SAND_DATE
Sergey13 (2007-11-29 09:09:00) [5]> [0] uno © (29.11.07 09:03)
> Скажите в чем тут ошибка
Зачем отдельно получать значение генератора?
> FieldByName('MESSAGE_ID').AsInteger := Message_ID;
Не поле это, а параметр.