powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Рекорды с методами в Delphi 2007
13 сообщений из 13, страница 1 из 1
Рекорды с методами в Delphi 2007
    #39832680
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Реализовал безобидный на первый взгляд рекорд:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
TDataValue = record
    Value: string;
    function AsString: string;
    function AsInteger(DefVal: Integer = 0): Integer;
    function AsFloat(DefVal: Double = 0.0): Double;
    function AsDateTime(DefVal: TDateTime = 0.0): TDateTime;
    function AsDate(DefVal: TDateTime = 0.0): TDateTime;
    function AsTime(DefVal: TDateTime = 0.0): TDateTime;
    function AsBoolean(DefVal: Boolean = False): Boolean;
  end;

function TDataValue.AsBoolean(DefVal: Boolean): Boolean;
begin
  if Value = '' then
    Result := DefVal
  else
    Result := Value = '1';
end;

function TDataValue.AsDate(DefVal: TDateTime): TDateTime;
begin
  Result := StrToDateDef(Value, DefVal, SafeIniFormatSettings);
end;

function TDataValue.AsDateTime(DefVal: TDateTime): TDateTime;
begin
  Result := StrToDateTimeDef(Value, DefVal, SafeIniFormatSettings);
end;

function TDataValue.AsFloat(DefVal: Double): Double;
begin
  Result := StrToFloatDefEx(Value, DefVal);
end;

function TDataValue.AsInteger(DefVal: Integer): Integer;
begin
  Result := StrToIntDef(Value, DefVal)
end;

function TDataValue.AsString: string;
begin
  Result := Value;
end;

function TDataValue.AsTime(DefVal: TDateTime): TDateTime;
begin
  Result := StrToTimeDef(Value, DefVal, SafeIniFormatSettings);
end;



Хотелось ощутить преимущество рекордов с методами в D2007.
Планировал такой способ доступа к значениям:
ADataSet.ValueByName('SUMMA').AsFloat, причем метод ValueByName датасета должен был возвращать TDataValue.
Однако при его использовании возникает External exception (в разных местах). Переделал (избавился от этого рекорда, ошибка пропала, теперь доступ ADataSet.ValF('SUMMA')). Похоже, с такими рекордами в D2007 не всё хорошо
...
Рейтинг: 0 / 0
Рекорды с методами в Delphi 2007
    #39832687
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer,

2006, 2007 имеют такие проблемы при вызове методов у возвращаемых записей. Решений два: сохранять в переменную или использовать with (with adataset.valuebyname['name'] do). Есть ещё способ, но он может не подойти - возвращать указатель на запись.
...
Рейтинг: 0 / 0
Рекорды с методами в Delphi 2007
    #39832721
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey2006, 2007 имеют такие проблемы при вызове методов у возвращаемых записейСпорить не буду, но как-то ни разу не сталкивался
...
Рейтинг: 0 / 0
Рекорды с методами в Delphi 2007
    #39832877
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey2006, 2007 имеют такие проблемы при вызове методов у возвращаемых записей. Решений два: сохранять в переменную или использовать with (with adataset.valuebyname['name'] do). Есть ещё способ, но он может не подойти - возвращать указатель на запись.С учетом дженериков подобные проблемы тянутся до Delphi XE. Только вчера фиксил...
...
Рейтинг: 0 / 0
Рекорды с методами в Delphi 2007
    #39832880
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OFF

я правильно понимаю, что "рекорды с методами" это вернувшееся из Turbo Pascal понятие "object" (когда объекты могли быть статическими) вместо дельфийского "class"?
...
Рейтинг: 0 / 0
Рекорды с методами в Delphi 2007
    #39832884
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроик СемёнOFF

я правильно понимаю, что "рекорды с методами" это вернувшееся из Turbo Pascal понятие "object" (когда объекты могли быть статическими) вместо дельфийского "class"?Нет.
...
Рейтинг: 0 / 0
Рекорды с методами в Delphi 2007
    #39832885
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Объекты кстати и сейчас существуют и работают.

Но у объектов и рекордов разные модели памяти.
...
Рейтинг: 0 / 0
Рекорды с методами в Delphi 2007
    #39832898
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
white_niggerС учетом дженериков подобные проблемы тянутся до Delphi XE. Только вчера фиксил...
Я дженериками активно не пользуюсь, но с ними проблемы и на XE2 вылазят.
...
Рейтинг: 0 / 0
Рекорды с методами в Delphi 2007
    #39832929
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatОбъекты кстати и сейчас существуют и работают.

Но у объектов и рекордов разные модели памяти.это как?
...
Рейтинг: 0 / 0
Рекорды с методами в Delphi 2007
    #39832967
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Рекорды с методами в Delphi 2007
    #39833006
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat,

как связаны упоминавшийся Object и Class ?
...
Рейтинг: 0 / 0
Рекорды с методами в Delphi 2007
    #39833023
Bali
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробуйте объявить вот так:
TDataValue = packed record
Value: string;
function AsString: string;
function AsInteger(DefVal: Integer = 0): Integer;
function AsFloat(DefVal: Double = 0.0): Double;
function AsDateTime(DefVal: TDateTime = 0.0): TDateTime;
function AsDate(DefVal: TDateTime = 0.0): TDateTime;
function AsTime(DefVal: TDateTime = 0.0): TDateTime;
function AsBoolean(DefVal: Boolean = False): Boolean;
end;
...
Рейтинг: 0 / 0
Рекорды с методами в Delphi 2007
    #39835702
Dimitry Timokhov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Бывают проблемы в Delphi2007 - то internal/external error, то память течет. Но разбираюсь по месту.

Посмотрел сейчас у себя. У меня есть обертка над varDecimal (которого, я так понял до сих пор в дельфи нет). И методы есть, и операции.

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


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