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

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

Запись сообщения в таблице [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;

Не поле это, а параметр.


Наверх

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