Форум: "Начинающим";
Текущий архив: 2007.12.30;
Скачать: [xml.tar.bz2];
ВнизУведомление о полученном сообщении Найти похожие ветки
← →
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]> Вот мне, как пользователю, первая часть твоего предложения
> глубоко фиолетова…
Ну это я придумал для ускорения работы. Можно всегда делать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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.011 c