Найдено 3 результата

krants
Вт 11 фев 2014 14:16
Форум: SQL Server Data Access Components
Тема: Активация/Деактивация Fetch
Ответы: 3
Просмотры: 5055

Re: Активация/Деактивация Fetch

MSQuery1.FetchRows = 25 стоит по умолчанию,
но количество полученных записей может быть больше, в зависимости от первичного заполнения грида или последующего пролистывания записей пользователем.

потому для корректного пересчета надо перебрать их все,
можно конечно сделать похожим способом:

Код: Выделить всё

    for i := 1 to MSQuery1.RecordCount do 
    begin
      //CalcFieldsSummary
      if i < MSQuery1.RecordCount then // не фетчить следующий блок
        MSQuery1.Next;
    end;
но тогда приходится пропускать последнюю запись, что не совсем корректно.
krants
Вт 11 фев 2014 12:30
Форум: SQL Server Data Access Components
Тема: TMSChangeNotification.RemoveNotificator() удаляет сервисы других пользователей
Ответы: 1
Просмотры: 3691

TMSChangeNotification.RemoveNotificator() удаляет сервисы других пользователей

Добрый день!
метод MSAccess.TMSChangeNotification.RemoveNotificator()
при вызове под не "админ" профилем удаляет активные сервисы других пользователей

Код: Выделить всё

DECLARE @INVALID_SERVICE nvarchar(128);
SET @INVALID_SERVICE = N'SDAC_NS_52';
DECLARE @DROP_STATEMENT nvarchar(300);
WHILE @INVALID_SERVICE <> N''
BEGIN
  SET @DROP_STATEMENT = N'DROP SERVICE ' + @INVALID_SERVICE;
  EXECUTE sp_executesql @DROP_STATEMENT;
  SET @DROP_STATEMENT = N'DROP QUEUE ' + @INVALID_SERVICE + N'_QUEUE';
  EXECUTE sp_executesql @DROP_STATEMENT;
  SET @INVALID_SERVICE = N'';
 Continue; --Пока пришлось перекрыть так!
  SELECT TOP(1) @INVALID_SERVICE = [name] FROM sys.services
  WHERE
    [name] LIKE 'SDAC_NS_%' 
    AND [name] not in (
      SELECT 'SDAC_NS_' + CAST([spid] AS VARCHAR(32)) AS [name] 
      FROM master.dbo.sysprocesses WHERE [spid] >= 0 and spid <= 32767)
END;
примерно разобравшись, причиной является то, что пользователь, с мин. необходимыми для него привилегиями в БД, в отличие от администратора, видит только свои процессы из master.dbo.sysprocesses.
что и приводит к массовому "дропу" сервисов :(
krants
Вт 11 фев 2014 12:03
Форум: SQL Server Data Access Components
Тема: Активация/Деактивация Fetch
Ответы: 3
Просмотры: 5055

Активация/Деактивация Fetch

Добрый день!
При использовании FetchAll := False
имеется необходимость пересчитывать и выводить "итоги" только по полученным записям.
т.к. при переборе записей принудительно вызывается Fetch, подсчет будет проходить до тех пор пока не догрузятся все записи, что "противоречит" заданной опции. :(

на данный момент в TMSQuery имеется возможность только отключить Fetch:
OnMSQueryBeforeFetch(DataSet: TCustomDADataSet; var Cancel: Boolean);
но активировать обратно, - нету.

Можно ли, сейчас, имеющимися методами временно активировать/деактивировать Fetch или реализовать соотв. методы в будущих релизах?

Просто для примера, как необходимое использование методов "перекрытия" Fetch:

Код: Выделить всё

procedure ReCalcSummary;
var
  key: integer;
begin
  sqlQuery.DisableControls;
  try
    sqlQuery.DisableFetch; //Временно отключаем
    try
      key := sqlQueryID.AsInteger;
      while not sqlQuery.Eof do
      begin
        //CalcFieldsSummary
        sqlQuery.Next;
      end;
      if key > 0 then
        sqlQuery.Locate('ID', key, []);
    finally
      sqlQuery.EnableFetch; //Возвращаем
    end;
  finally
    sqlQuery.EnableControls;
  end;
end;