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

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

Уведомление о полученном сообщении [D7, XP]


uno ©   (2007-12-05 08:24:00) 

Привет всем! Помогите пожалуйста! Я писал модуль сообщений, его прицип в том что: ползователь A отсылает сообщение пользователю B,
это сообщение записываеться в Базу данных, а пользователю B приходит широкополосное сообщение по локальной сети, о том что пришло сообщение, и позже письмо уже извлекаеться из Б.Д. , как прописать это широкополоссное уведомление?


Sergey13   (2007-12-05 10:04:00) [1]

> [7] uno ©   (05.12.07 09:38)

+ к [11] Sergey13 ©   (05.12.07 09:53)
> ParamByName('MESSAGE_SAND_DATE').AsString := TimeToStr(Time) ;// дата отправки сообщения
Работать с датой/временем надо как с датой/временем, а не как со строкой. Иначе неизбежно нарвешься на какой нибудь 25-й месяц.


Sergey13   (2007-12-05 09:53:00) [2]

> [7] uno ©   (05.12.07 09:38)
> если не трудно то покскажите в чем заклю чаеться странность

> SQL.Add('insert into MESSAGE_EXT( MESSAGE_ID, MESSAGE_SENDER,MESSAGE_SAND_DATE, MESSAGE_SUBJECT)values (gen_id(MESSAGES_GEN,
> 1), :MESSAGE_SENDER, :MESSAGE_SAND_DATE)');// в таблице > MESSAGE_EXT заносятья данные:ID сообщения, отправитель, дата отправки
>         DataModule1.IBQShared.ParamByName('MESSAGE_ID').AsInteger := MESSAGE_ID;|| ID сообщения генерируеться
>         DataModule1.IBQShared.ParamByNam('MESSAGE_SENDER').AsString :=     USER_ID;// прописанно в тригере таблицы, MESSAGE_SENDER есть USER_ID
>         DataModule1.IBQShared.ParamByName('MESSAGE_SAND_DATE').AsString := TimeToStr(Time);// дата отправки сообщения

Ты
1. В 4 указанных поля пишешь 3 значения.
2. Присваиваешь значения параметрам, которых нет в запросе
3. Присваиваешь в клиенте значения, которые логичнее было бы присваивать на сервере.
4. НЕ присваиваешь единственное значение, которое реально знать только в клиенте (адресата)
5. Не даешь команды на выполнение составленного запроса.

> SQL.Add('insert into MSGBODIES(MESSAGEBODY_ID, MESSAGE_TEXT)
> values (gen_id(MSGBODIES_GEN, 1), :MESSAGE_TEXT)');// запись
> тела сообщения в таблицу MSGBODIES

Ты
1. добавил к тексту запроса вторую строку. Теперь там две строки - старая и новая.
2. не пишешь идентификатор родительской таблицы. У тебя его похоже просто нет. Непонятен вообще смысл таблицы MSGBODIES. Модет быть несколько сообщений в один момент времени? Сомневаюсь.


Kolan   (2007-12-05 09:53:00) [3]

> Вот мне, как пользователю, первая часть твоего предложения
> глубоко фиолетова…

Ну это я придумал для ускорения работы. Можно всегда делать
SELECT COUNT(*) FORM
WHERE


ЗЫ
 Это мой вариант решения, который пришел в голову. Подобную задачу не решал.


Плохиш   (2007-12-05 09:51:00) [4]


> Если с прощлого раза кол-во изменилась, то узнаешь изменилось
> ли кол-во для конкретного пользователя

Прикольно, предлагаешь делать двойную работу. Вот мне, как пользователю, первая часть твоего предложения глубоко фиолетова...


Kolan   (2007-12-05 09:46:00) [5]

Сканировать стаблицу через интервылы времени — оч простое решение, можно начать с него.

Ты можешь делать SELECT COUNT(*) FORM .

Если с прощлого раза кол-во изменилась, то узнаешь изменилось ли кол-во для конкретного пользователя
SELECT COUNT(*) FORM
WHERE


Если изменилось, то делать селект записей.

Ессно это плохо нагрузкой на сеть, но это просто, имхо.


uno   (2007-12-05 09:38:00) [6]

Проверить не было возможности так как он еще не дописан, восможно есть ошибки, но так как я еще только начинающий я их не вижу, если не трудно то покскажите в чем заклю чаеться странность


uno   (2007-12-05 09:38:00) [7]

Да имеено так


Kolan   (2007-12-05 09:36:00) [8]

Я понял, он хочет чтобы один человек что-то записал в БД, а другой об этом тут же узнал, так?


Sergey13   (2007-12-05 09:32:00) [9]

> [4] uno ©   (05.12.07 09:26)
Странный код (мягко сказать). Только не говори мне, что он работает.


uno   (2007-12-05 09:26:00) [10]

Я создал процедуру при нажатии кнопки отправить

procedure TMessagesForm.btnSend1Click(Sender: TObject);
begin
  with DataModule1.IBQShared do begin
         SQL.Clear;
         SQL.Add('insert into MESSAGE_EXT( MESSAGE_ID, MESSAGE_SENDER, MESSAGE_SAND_DATE, MESSAGE_SUBJECT)values (gen_id(MESSAGES_GEN, 1), :MESSAGE_SENDER, :MESSAGE_SAND_DATE)');// в таблице MESSAGE_EXT заносятья данные:ID сообщения, отправитель, дата отправки
         DataModule1.IBQShared.ParamByName('MESSAGE_ID').AsInteger := MESSAGE_ID;|| ID сообщения генерируеться
         DataModule1.IBQShared.ParamByNam('MESSAGE_SENDER').AsString :=     USER_ID;// прописанно в тригере таблицы,MESSAGE_SENDER есть USER_ID
         DataModule1.IBQShared.ParamByName('MESSAGE_SAND_DATE').AsString := TimeToStr(Time);// дата отправки сообщения
         SQL.Add('insert into MSGBODIES(MESSAGEBODY_ID, MESSAGE_TEXT)values (gen_id(MSGBODIES_GEN, 1), :MESSAGE_TEXT)');// запись тела сообщения в таблицу MSGBODIES
         DataModule1.IBQShared.ParamByName('MESSAGE_TEXT').AsBlob := redtSender1.Text;// вставка текста сообщения в поле

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


Sergey13   (2007-12-05 09:23:00) [11]

> [0] uno ©   (05.12.07 08:24)

Как вариант - пользователь B может и сам сканировать свой ящик например по таймеру.


Kolan   (2007-12-05 09:10:00) [12]

Непонятно что такое «широкополосное сообщение». Если это широковещательное сообщение, то нах оно надо если посылается 1 пользователю.


pavel_guzhanov   (2007-12-05 08:47:00) [13]

Напиши подробнее, что использовал для расылки сообщений, какая БД, и структуру программы.
В общем это представляется так: В базе должен быть триггер на вставку данных, триггер дает сообщение программе, а программа уже отсылает сообщение по сети и отправляет письмо. Программа вероятнее всего должна быть на сервере.


Наверх

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