VirtualTable портит макросы!

Обсуждение возникших проблем, предложений и ошибок SDAC компонентов
Ответить
vso
Сообщения: 39
Зарегистрирован: Чт 24 янв 2013 11:08

VirtualTable портит макросы!

Сообщение vso » Ср 18 июн 2014 14:09

Добрый день!

использую такую конструкцию

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

procedure TmodData.QslImportDevAfterOpen(DataSet: TDataSet);
begin
  DataSet.Fields.FieldByName('fdFlag').ReadOnly := false;
  DataSet.Fields.FieldByName('REF_TYPE').ReadOnly := false;
  DataSet.Fields.FieldByName('REF_CONTROL').ReadOnly := false;
  QslListType.Open;
  TslListMesta.Open;
  VirtualTable.Assign(DataSet);
  VirtualTable.Active := true;
end;
при далнейшем обращении к макросам в коде вылетает ошибка о невозможности прочесть память по такому-то адресу.

Если закомментировать строчки с VirtualTable, то работоспособность восстанавливается, но при это завязанная на использовании VirtualTable функциональность пропадает. :(

Alexp
Devart Team
Сообщения: 349
Зарегистрирован: Пн 27 дек 2010 10:34

Re: VirtualTable портит макросы!

Сообщение Alexp » Чт 19 июн 2014 07:09

Добрый день,

Мы не можем воспроизвести проблему на последней версии SDAC. Пожалуйста измените приведенный ниже код, чтобы проблема воспроизводилась и отправьте его нам.

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

program Project14;

{$APPTYPE CONSOLE}

uses
  SysUtils, MSAccess, ActiveX, VirtualTable, DB;

var
  MSConnection: TMSConnection;
  MSQuery: TMSQuery;
  VirtualTable: TVirtualTable;

procedure test(DataSet: TDataSet);
begin
  VirtualTable.Assign(DataSet);
  VirtualTable.Active := true;
end;

begin
  CoInitialize(nil);
  try
    MSConnection := TMSConnection.Create(nil);
    try
      MSConnection.ConnectString := 'Data Source=DBMSSQL\MSSQL2008R2;Initial Catalog=andrz;Integrated Security=False;User ID=sa';
      MSConnection.Connect;
      MSQuery := TMSQuery.Create(nil);
      try
        MSQuery.Connection := MSConnection;
        MSQuery.SQL.Text := 'SELECT * FROM &m1';
        MSQuery.MacroByName('m1').Value := 'dept';
        MSQuery.Open;
        VirtualTable := TVirtualTable.Create(nil);
        try
          test(MSQuery);
          MSQuery.MacroByName('m1').Active := False;
          MSQuery.MacroByName('m1').Active := True;
          MSQuery.Open;
          Writeln('OK');
        finally
          VirtualTable.Free;
        end;
      finally
        MSQuery.Free;
      end;
    finally
      MSConnection.Free;
    end;
  finally
    CoUninitialize;
    readln;
  end;
end.

vso
Сообщения: 39
Зарегистрирован: Чт 24 янв 2013 11:08

Re: VirtualTable портит макросы!

Сообщение vso » Чт 19 июн 2014 12:28

Я запустил ваш пример, все сработало. решил сделать как у меня чтобы в VirtualTable копировалось в событии AfterOpen, но тоже выдает OK.

Но стоит раскомментировать две эти строчки и в момент изменения макроса приложение вылетает. :?:

Alexp
Devart Team
Сообщения: 349
Зарегистрирован: Пн 27 дек 2010 10:34

Re: VirtualTable портит макросы!

Сообщение Alexp » Чт 19 июн 2014 12:44

Пожалуйста пришлите небольшой пример воспроизводящий проблему на alexp*devart*com .

vso
Сообщения: 39
Зарегистрирован: Чт 24 янв 2013 11:08

Re: VirtualTable портит макросы!

Сообщение vso » Пн 23 июн 2014 14:13

Все, проблема разрешилась.

Адресс не мог прочитать, не Ваш компонент, другой. Т.ч. пришлось присвоение макросам взять в try finally и внутри организовать DisableControl/EnableControl, и еще в некоторых местах проверять на существование и все заработало.

То, что ошибка вылетала во время трассировки на обращении к макросу связано с тем, что при присвоении макрасу значениия, датасет закрывается, а у меня в событии AfterClose происходит еще куча действий, вызывающие другие действи, и эта ошибка пряталась где-то в глубине. Наткнулся же совершенно случайно.

Спасибо за помощь.

Alexp
Devart Team
Сообщения: 349
Зарегистрирован: Пн 27 дек 2010 10:34

Re: VirtualTable портит макросы!

Сообщение Alexp » Вт 24 июн 2014 10:23

Я рад что Вы нашли решение данной проблемы. Если у Вас возникнут дальнейшие вопросы, пожалуйста пишите нам.

Ответить