| Начало » Использование СУБД » 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? Примеров в сети практически нет, ИИ тоже молчит. Пробовал код из инета: 
 На этапе регистрации Alerter выдает такое исключение
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;
 ODBC 18, MS SQL 2022 Developer
Project warehouse.exe raised exception class EFDException with message '[FireDAC][Phys][MSSQL]-326. Cannot perform the action, because the previous action is in 
progress'.
 |  
	|  |  |  
	|  |  
	|  |  
	|  |  
	|  |  
	|  |  
	|  |  
	|  |  
	|  |  
	|  |  
	|  |  
	|  |  
	|  |  
	|  |  
	| 
		
			| 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 секунды. А по-вашему нужен отдельный сервис, а это лишний порт, его проброска, лишняя экзеха....Не вижу смысла. Да и в рамках этого чата летают невидимые служебные сообщения типа запросить нужный товар, попросить скидку для себя индивидуальную и т.п. |  
	|  |  | 
 
 
 Текущее время: Fri Oct 31 00:41:40 GMT+3 2025 
 Общее время, затраченное на создание страницы: 0.00990 секунд |