![]()  | 
	
 
  | 
| 
		 
			 
			#1  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 TOracleDataSet  при изменении текста запроса держит открытым пред. датасет и позволяет выполнить refresh() не обрывая грид. 
		
	
		
		
		
		
		
	
		
		
	
	
	TFDQuery (FireDac) сразу закрывает датасет, обновить данные можно только методом Open() Как настроить TFDQuery. чтобы он не закрывал запрос и позволял выполнить refresh() ?  | 
| 
		 
			 
			#2  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Ну, это внутренняя кухня компонента. Не уверен, что можно это поведение изменить. С другой стороны, можно заблокировать сообщения об обновлении DataSet, сделать свои мзменения, переоткрыть DataSet и потом обратно разрещить сообщения. Тогда это будет выглядеть для пользователя точно так, как ты описал, т.е. грид не будет пропадать. Только часики не забывай "вешать" на всякий случай: 
		
	
		
		
		
		
		
	
		
		
	
	
	Код: 
	  FDQuery1.DisableControls;
  Screen.Cursor := crHourGlass;
  FDQuery1.Close;
  Try
    FDQuery1.SQL.Text := 'select new_fields from here';
    FDQuery1.Open;
  Finally
    Screen.Cursor := crDefault;
    FDQuery1.EnableControls;
  End; | 
| 
		 
			 
			#3  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Огромное спасибо за отклик. 
		
	
		
		
		
		
		
	
		
		
	
	
	Попробую. У меня была подобная мысль но я не сообразил как это сделать(пришлось тупо переинициализировать грид). Желаемая цель - разобраться с TFDQuery. (может всё есть)  | 
| 
		 
			 
			#4  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Ну, если ты так кардинально меняешь запрос (меняешь список полей) и у тебя идет динамическая настройка грида, то его все-равно надо переинициализировать. Тут уж все зависит от твоего кода. Если список полей не меняется, то сам грид трогать вообще смысла нет (например, ты только достраиваешь динамически фильтрацию в запросе). 
		
	
		
		
		
		
		
	
		
		
	
	
	Кстати, а посмотри код Refresh в DOA. Есть подозрение, что он именно то, что я предложил и делает, т.к. по сути с точки зрения клиент-сервер только так и делается. Т.е. все равно просто исполняется новый запрос.  | 
| 
		 
			 
			#5  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Увы - грид не обманешь, что то ещё надо. 
		
	
		
		
		
		
		
	
		
		
	
	
	Запрос не меняет поля, только фильтр.  | 
| 
		 
			 
			#6  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 А как-то можно гриду сказать , чтоб он не слушал? 
		
	
		
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#7  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Ну вот это же - FDQuery1.DisableControls; 
		
	
		
		
		
		
		
	
		
		
	
	
	Тут скорее не то, что бы грид "не слушал", а что бы сам источник данных не сообщал об изменениях.  |