Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.12.30;
Скачать: CL | DM;

Вниз

Уведомление о полученном сообщении   Найти похожие ветки 

 
uno ©   (2007-12-05 08:24) [0]

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


 
pavel_guzhanov ©   (2007-12-05 08:47) [1]

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


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

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


 
Sergey13 ©   (2007-12-05 09:23) [3]

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

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


 
uno ©   (2007-12-05 09:26) [4]

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

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:32) [5]

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


 
Kolan ©   (2007-12-05 09:36) [6]

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


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

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


 
uno ©   (2007-12-05 09:38) [8]

Да имеено так


 
Kolan ©   (2007-12-05 09:46) [9]

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

Ты можешь делать SELECT COUNT(*) FORM <Твоя таблица>.

Если с прощлого раза кол-во изменилась, то узнаешь изменилось ли кол-во для конкретного пользователя
SELECT COUNT(*) FORM <Твоя таблица>
WHERE <Нужный пользователь>


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

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


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


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

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


 
Sergey13 ©   (2007-12-05 09:53) [11]

> [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) [12]

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

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


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


 
Sergey13 ©   (2007-12-05 10:04) [13]

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

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



Страницы: 1 вся ветка

Текущий архив: 2007.12.30;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.014 c
15-1196153253
Evanescence
2007-11-27 11:47
2007.12.30
Сколько стоит лицензионная Windows 2003 Server?


2-1196447952
aspid03
2007-11-30 21:39
2007.12.30
как вытащить из Access базы Word document


2-1197017050
brother
2007-12-07 11:44
2007.12.30
быстрая выборка из кучи


15-1196249867
ocean
2007-11-28 14:37
2007.12.30
Excel


2-1196612331
@!!ex
2007-12-02 19:18
2007.12.30
Частый вызов SetLength(Count+10)