Начало » Использование СУБД » 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 секунды. А по-вашему нужен отдельный сервис, а это лишний порт, его проброска, лишняя экзеха....Не вижу смысла. Да и в рамках этого чата летают невидимые служебные сообщения типа запросить нужный товар, попросить скидку для себя индивидуальную и т.п.
		
		
		
 |  
	| 
		
	 | 
 
 
 |   
Переход к форуму:
 
 Текущее время: Tue Nov 04 14:55:56 GMT+3 2025 
 Общее время, затраченное на создание страницы: 0.01720 секунд 
 |