Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / FreeAndNil Dataset / 25 сообщений из 47, страница 1 из 2
10.08.2020, 15:47
    #39988254
wsnet
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FreeAndNil Dataset
Добрый день не могу понять, есть код:
Код: pascal
1.
2.
if Assigned(DM.datasource1.dataset) then FreeAndNil(DM.datasource1.dataset) // ошибка 
DM.datasource1.dataset := unit1.getDataSet;


Но освободить не могу FreeAndNil выдаёт ошибку, динамические элементы не даёт освободить, как все же удалить с помощью FreeAndNil ? Через Free работает.
...
Рейтинг: 0 / 0
10.08.2020, 15:57
    #39988261
x1ca4064
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FreeAndNil Dataset
wsnet
Добрый день не могу понять, есть код:
Код: pascal
1.
2.
if Assigned(DM.datasource1.dataset) then FreeAndNil(DM.datasource1.dataset) // ошибка 
DM.datasource1.dataset := unit1.getDataSet;


Но освободить не могу FreeAndNil выдаёт ошибку, динамические элементы не даёт освободить, как все же удалить с помощью FreeAndNil ? Через Free работает.


Вы читали текст ошибки? Смотрели, какие аргументы у FreeAndNil?
Почему хотите применить именно FreeAndNil?
...
Рейтинг: 0 / 0
10.08.2020, 16:04
    #39988270
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FreeAndNil Dataset
wsnetкак все же удалить с помощью FreeAndNil ?

Никак. FreeAndNil - для переменных. А DM.datasource1.dataset - свойство. Назад за парту,
читать букварь.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
10.08.2020, 17:49
    #39988341
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FreeAndNil Dataset
Это, видимо, под впечатлением от прочитанного в Курилке.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
10.08.2020, 18:16
    #39988351
Victor Cookin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FreeAndNil Dataset
wsnet,

На

Код: pascal
1.
FreeAndNil(DM.datasource1.dataset);



Компилятор ругается
Код: sql
1.
 [dcc32 Error] : E2197 Constant object cannot be passed as var parameter


Так же он будет ругаться и на
Код: pascal
1.
2.
3.
4.
5.
6.
var a : string;
const b = 'bbb'; c = 'ccc';
begin
  a := b;
  FreeAndNil (b);
  a := c;


И по той же причине

Если
Код: pascal
1.
DM.datasource1.dataset 

больше Вам не треба, то сделайте хотя бы Close перед тем как его Free.
...
Рейтинг: 0 / 0
10.08.2020, 18:32
    #39988358
FreeAndNil Dataset
Victor Cookin,

У тебя Delphi 10.4

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
procedure FreeAndNil(const [ref] Obj: TObject);
var
  Temp: TObject;
begin
  Temp := Obj;
  TObject(Pointer(@Obj)^) := nil;
  Temp.Free;
end;



В старых такого ещё нету.
...
Рейтинг: 0 / 0
10.08.2020, 18:36
    #39988359
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FreeAndNil Dataset
Гаджимурадов Рустам
Это, видимо, под впечатлением от прочитанного в Курилке.
это братья по разуму
...
Рейтинг: 0 / 0
10.08.2020, 19:12
    #39988376
Victor Cookin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FreeAndNil Dataset
ВсеРазумный
Victor Cookin,

У тебя Delphi 10.4



У меня Delphi 10.0 Seattle. А в старых что?
...
Рейтинг: 0 / 0
10.08.2020, 19:28
    #39988379
FreeAndNil Dataset
Victor Cookin,

Может обновления тебе прилетели.

В старых
Код: pascal
1.
procedure FreeAndNil(var Obj);



Суй всё, что хочешь
...
Рейтинг: 0 / 0
10.08.2020, 20:47
    #39988404
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FreeAndNil Dataset
ВсеРазумный
Суй всё, что хочешь

Ага, щаз он тебе даст в var запихнуть свойство, которое ещё и рид-онли небось.
...
Рейтинг: 0 / 0
10.08.2020, 21:29
    #39988412
FreeAndNil Dataset
alekcvp,

Это не означает что в такой var нельзя пихать строки, интерфейся и всё остальное.

И быть анальным гением.
...
Рейтинг: 0 / 0
11.08.2020, 00:00
    #39988449
Victor Cookin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FreeAndNil Dataset
ВсеРазумный, у меня в 10.0:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
procedure FreeAndNil(var Obj);
{$IF not Defined(AUTOREFCOUNT)}
var
  Temp: TObject;
begin
  Temp := TObject(Obj);
  Pointer(Obj) := nil;
  Temp.Free;
end;
{$ELSE}
begin
  TObject(Obj) := nil;
end;
{$ENDIF}
...
Рейтинг: 0 / 0
11.08.2020, 00:02
    #39988450
Victor Cookin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FreeAndNil Dataset
а ругается, т.к. сую ему константу, а не переменную.
Если сунуть строку, будет AV
...
Рейтинг: 0 / 0
11.08.2020, 00:03
    #39988451
FreeAndNil Dataset
Victor Cookin,

В новой версии
[dcc32 Error] Unit2.pas(29): E2010 Incompatible types: 'TObject' and 'string'
...
Рейтинг: 0 / 0
11.08.2020, 00:04
    #39988452
FreeAndNil Dataset
Victor Cookin,

Старая раздвинула булки, и впустила в себя
...
Рейтинг: 0 / 0
11.08.2020, 17:22
    #39988715
Док
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FreeAndNil Dataset
а если скастовать строку к TObject, как будет ругаться? :)

зы. поставил-таки винду десятку, неохота мусорить в реестре установкой дельфей для проверки, а выложенные на руборде портабельные сборки работают только под семерку :(
...
Рейтинг: 0 / 0
11.08.2020, 17:37
    #39988718
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FreeAndNil Dataset
Док
а если скастовать строку к TObject, как будет ругаться? :)
AV будет.

Иногда делаю так PInteger(nil)^, когда необязательный параметр функции объявлен как var
...
Рейтинг: 0 / 0
11.08.2020, 17:40
    #39988719
Victor Cookin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FreeAndNil Dataset
Док,

а всё так и так будет скастоваться к ТObject, строка тоже. Так что то же самое AV на str.Destroy
...
Рейтинг: 0 / 0
11.08.2020, 17:44
    #39988721
FreeAndNil Dataset
Док,

Что, ручки уже тянуться запихнуть не впехуемое ? Какие шаловливые.
...
Рейтинг: 0 / 0
11.08.2020, 17:48
    #39988723
Victor Cookin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FreeAndNil Dataset
А FreeAndNil (Dataset) совершенно нормально проходит и в 10.0 и в 10.4.
А вот интересно, Close надо делать или оно само случится?
...
Рейтинг: 0 / 0
11.08.2020, 21:13
    #39988769
x1ca4064
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FreeAndNil Dataset
Victor Cookin

А вот интересно, Close надо делать или оно само случится?


Посмотрите исходник TDataset.Destroy: там есть вызов Close
...
Рейтинг: 0 / 0
12.08.2020, 01:44
    #39988814
Док
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FreeAndNil Dataset
ВсеРазумный
Что, ручки уже тянуться запихнуть не впехуемое ? Какие шаловливые.

скорее, голова любознательная. Иногда проще сделать и посмотреть на результат, чем теорией заниматься :)
...
Рейтинг: 0 / 0
12.08.2020, 02:06
    #39988815
FreeAndNil Dataset
Док,

Скушает так

Код: pascal
1.
 FreeAndNil(TObject(ValueString));



Всё кушает, что состоит в иерархии TObject
...
Рейтинг: 0 / 0
27.12.2020, 00:17
    #40031474
Mechanic17
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FreeAndNil Dataset
Вопрос по FreeAndNil. Решил не плодить тем.
Есть процедура
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
 [code=pascal]
procedure TForm1.Button7Click(Sender: TObject);
var
  OtvJSAr, OtvJSArNotDuble: TJSonArray;
begin
  OtvJSAr := TJSonArray.Create;
  OtvJSArNotDuble := TJSonArray.Create;
 try
  ...
 finally
  FreeAndNil (OtvJSAr);
  ShowMessage ('конец2');  // для отладки, чтобы понять какая строка дает ошибку
  FreeAndNil (OtvJSArNotDuble);
  end;

end;



Компиляция проходит без ошибок. НО при выполнении на последней строке FreeAndNil (OtvJSArNotDuble); выдает ошибку "Access violation at address 006xxxxx in module AAA.exe. Read of address 00000008" .
Причем если строки FreeAndNil (OtvJSAr); и FreeAndNil (OtvJSArNotDuble); поменять местами то ошибка остается на второй строке.

В чем проблема?
...
Рейтинг: 0 / 0
27.12.2020, 00:20
    #40031476
defecator
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FreeAndNil Dataset
Mechanic17
Вопрос по FreeAndNil. Есть процедура
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
 [code=pascal]
procedure TForm1.Button7Click(Sender: TObject);
var
  OtvJSAr, OtvJSArNotDuble: TJSonArray;
begin
  OtvJSAr := TJSonArray.Create;
  OtvJSArNotDuble := TJSonArray.Create;
 try
  ...
 finally
  FreeAndNil (OtvJSAr);
  ShowMessage ('конец2');  // для отладки, чтобы понять какая строка дает ошибку
  FreeAndNil (OtvJSArNotDuble);
  end;

end;



Компиляция проходит без ошибок. НО при выполнении на последней строке FreeAndNil (OtvJSArNotDuble); выдает ошибку "Access violation. Read address 000008" .
Причем если строки FreeAndNil (OtvJSAr); и FreeAndNil (OtvJSArNotDuble); поменять местами то ошибка остается на второй строке.

В чем проблема?

у тебя где-то что-то уже умерло, но ты продолжаешь обращаться по несуществующему адресу

обычно то, что внутри твоего
try
...
finally

гораздо интереснее посмотреть
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / FreeAndNil Dataset / 25 сообщений из 47, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]