Начало » Использование СУБД » Microsoft SQL Server » MS SQL+Alerts+FireDAC (успешный опыт скрещивания)
MS SQL+Alerts+FireDAC [сообщение #2312] |
Sun, 21 May 2023 22:48 |
GrigoryFomin
Сообщений: 91 Зарегистрирован: April 2023
|
Member |
|
|
У кого-то получилось настроить уведомления от MS SQL сервера в FireDAC? Примеров в сети практически нет, ИИ тоже молчит. Пробовал код из инета:
procedure TChatForm.btn1Click(Sender: TObject);
begin
qryFireEvents.SQL.Clear;
if qryFireEvents.Connection.ConnectionMetaDataIntf.EventSupported then begin
qryFireEvents.Connection.ExecSQL('delete from dbo.Test');
qryFireEvents.Connection.ExecSQL('insert into dbo.Test values (1, ''Test1'')');
qryFireEvents.Connection.ExecSQL('delete from dbo.Test2');
qryFireEvents.Connection.ExecSQL('insert into dbo.Test2 values (1, ''Test2'')');
end;
end;
procedure TChatForm.ea1Alert(ASender: TFDCustomEventAlerter;
const AEventName: string; const AArgument: Variant);
var
i: Integer;
sArgs: String;
begin
if VarIsArray(AArgument) then
begin
sArgs := '';
for i := VarArrayLowBound(AArgument, 1) to VarArrayHighBound(AArgument, 1) do
begin
if sArgs <> '' then
sArgs := sArgs + ', ';
sArgs := sArgs + VarToStr(AArgument[i]);
end;
end
else if VarIsNull(AArgument) then sArgs := '<NULL>'
else if VarIsEmpty(AArgument) then sArgs := '<UNASSIGNED>'
else sArgs := VarToStr(AArgument);
Mem1.Lines.Add('Event - [' + AEventName + '] - [' + sArgs + ']');
end;
procedure TChatForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if not ea1.Active then Exit;
ea1.Unregister;
end;
procedure TChatForm.FormCreate(Sender: TObject);
begin
if ea1.Active then Exit;
ea1.Names.Clear;
ea1.Names.Add('QUEUE=?');
ea1.Names.Add('SERVICE=?');
ea1.Names.Add('CHANGE1=ev1;select id, name from dbo.Test');
ea1.Names.Add('CHANGE2=ev2;select id, name from dbo.Test2');
ea1.Options.Synchronize := True;
ea1.Register;
end;
На этапе регистрации Alerter выдает такое исключение
Project warehouse.exe raised exception class EFDException with message '[FireDAC][Phys][MSSQL]-326. Cannot perform the action, because the previous action is in
progress'.
ODBC 18, MS SQL 2022 Developer
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Re: MS SQL+Alerts+FireDAC [сообщение #2402 является ответом на сообщение #2399] |
Sat, 27 May 2023 18:05 |
GrigoryFomin
Сообщений: 91 Зарегистрирован: April 2023
|
Member |
|
|
SD писал(а) Sat, 27 May 2023 14:26
Сервер чата проще с нуля написать, чем пытаться заставить СУБД им работать. Где этот сервер будет хранить историю сообщений, пользователей и прочие данные - совершенно отдельный вопрос.
Вобще не вижу проблемы - те, кто онлайн - это пользователи, подключенные к субд (думаю, код для MS SQL надыбаю для этого), 1 таблица для хранения истории сообщений, настроить алертер при выводе/входе в чат и поступлении нового сообщения. Для сообщений - одна таблица с минимум полей - откуда, кому, тип сообщения, текст, сообщения, дата.
А писать с нуля - это нового демона писать, ему цеплять опять-таки какую-то субд, пробрасывать еще один порт, клиент тоже усложнится из-за применения сокетов.
|
|
|
|
Re: MS SQL+Alerts+FireDAC [сообщение #2406 является ответом на сообщение #2403] |
Sun, 28 May 2023 14:08 |
GrigoryFomin
Сообщений: 91 Зарегистрирован: April 2023
|
Member |
|
|
BlackEric писал(а) Sat, 27 May 2023 19:07Это не так делается. Клиенты подключаются к серверу приложений. Он же сохраняет сообщения в бд. А отправка сообщений с сервера на клиенты делается через SignalR.
Я ни разу не видел что бы бд использовали для массовой рассылки. Есть вариант при котором клиенты опрашивают бд, но он то же не очень.
Спасибо за ссыль - полюбопытствуюсь. Насчет чата на основе СУБД - приложение уже установило связь с СУБД, в нем же и крутится чат на отдельной вкладке, писем там ну 30 в день, и то, когда кого-то с ДР поздравляют )) Там вполне хватает опроса таблицы на новые сообщения раз в 3 секунды. А по-вашему нужен отдельный сервис, а это лишний порт, его проброска, лишняя экзеха....Не вижу смысла. Да и в рамках этого чата летают невидимые служебные сообщения типа запросить нужный товар, попросить скидку для себя индивидуальную и т.п.
|
|
|
Переход к форуму:
Текущее время: Thu Nov 21 16:03:46 GMT+3 2024
Общее время, затраченное на создание страницы: 0.01566 секунд
|