Обсуждение возникших проблем, предложений и ошибок SDAC компонентов
-
vso
- Сообщения: 39
- Зарегистрирован: Чт 24 янв 2013 11:08
Сообщение
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
Сообщение
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
Сообщение
vso » Чт 19 июн 2014 12:28
Я запустил ваш пример, все сработало. решил сделать как у меня чтобы в VirtualTable копировалось в событии AfterOpen, но тоже выдает OK.
Но стоит раскомментировать две эти строчки и в момент изменения макроса приложение вылетает.
-
Alexp
- Devart Team
- Сообщения: 349
- Зарегистрирован: Пн 27 дек 2010 10:34
Сообщение
Alexp » Чт 19 июн 2014 12:44
Пожалуйста пришлите небольшой пример воспроизводящий проблему на alexp*devart*com .
-
vso
- Сообщения: 39
- Зарегистрирован: Чт 24 янв 2013 11:08
Сообщение
vso » Пн 23 июн 2014 14:13
Все, проблема разрешилась.
Адресс не мог прочитать, не Ваш компонент, другой. Т.ч. пришлось присвоение макросам взять в try finally и внутри организовать DisableControl/EnableControl, и еще в некоторых местах проверять на существование и все заработало.
То, что ошибка вылетала во время трассировки на обращении к макросу связано с тем, что при присвоении макрасу значениия, датасет закрывается, а у меня в событии AfterClose происходит еще куча действий, вызывающие другие действи, и эта ошибка пряталась где-то в глубине. Наткнулся же совершенно случайно.
Спасибо за помощь.
-
Alexp
- Devart Team
- Сообщения: 349
- Зарегистрирован: Пн 27 дек 2010 10:34
Сообщение
Alexp » Вт 24 июн 2014 10:23
Я рад что Вы нашли решение данной проблемы. Если у Вас возникнут дальнейшие вопросы, пожалуйста пишите нам.