Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.02.07;
Скачать: [xml.tar.bz2];

Вниз

VarArrayCreate   Найти похожие ветки 

 
User_OKA   (2002-01-23 14:57) [0]

Уважаемые Мастера!
Возник такой вопрос в нашей среде доморощенных программистов:
имеем
function TForm1.Summa:variant;
begin
Result:=VarArrayCreate([0..10],varVariant);
...
end;
функция эта запускается несколько раз.
А с памятью,которая выделяется под массив, как быть? Освобождается ли она после отработки функции или выделяется при каждом вызове?
Или мы вообще загнались и проблемы не существует?


 
Digitman   (2002-01-23 15:02) [1]

а куда возвращается результат ф-ции ? как и где приемник результата объявлен ?


 
User_OKA   (2002-01-23 15:14) [2]

to Digitman
А результат присваевается либо переменной integer, либо extended в зависимости от необходимости. Переменные объявлены в public.
Сама функция обрабатывает SQL-запрос. Точнее, сбрасывает значения результирующих полей в массив. Такой вот универсальности захотелось. А то SQL-запросов много, возвращают то одно поле, то несколько.


 
Юрий Федоров   (2002-01-23 15:38) [3]

Что, переменной integer присваивается вариант, который является
массивом? 8(


 
Digitman   (2002-01-23 15:39) [4]

а как это ты вообще умудряешься преобразовать вариантное значение, инициализированное для хранения вариантного же массива, в целочисленное значение ? или во float-значение ? прилюдно поклонюсь тебе и уйду в монастырь, если ты приведешь неоспоримые аргументы в пользу такого утверждения)


 
User_OKA   (2002-01-24 06:43) [5]

to Digitman
Ну зачем же сразу в монастырь?
Если V:variant;
X:integer;
Y:extended;
Z:string;
V:=VarArrayCreate([0..N],varVariant);
V[0]:=1;
V[1]:=2.5;
V[3]:="asdf";
то вполне уместно (если мне наперед известны все элементы массива)
X:=V[0];
Y:=V[1];
Z:=V[2];
В моём случае V - это result функции. Но это, по-моему и неважно. Вопрос был - что с памятью делается? Освобождается она или нет после многократного вызова функции?
А Юрий Федоров тоже удивился!..


 
User_OKA   (2002-01-24 07:13) [6]

Ещё подробнее:

public
{ Public declarations }
X:integer;
Y:extended;
Z:string;
H:date;
Select, From, Where:string; //переменные для SQL-запроса
function SQL_Summa:variant;
end;

function TMainForm.SQL_Summa:variant;
var i:integer;
begin
Result:=VarArrayCreate([0,10],varVariant);
with DM.FIBQuery do begin
Close;
SQL.Clear;
SQL.Add(Select);
SQL.Add(From);
SQL.Add(Where);
ExecQuery;
for i:=0 to FieldCount-1 do
if Fields[i].Value=Null then Result[i]:=0
else Result[i]:=Fields[i].Value;
end;
end;

Затем Select:="Select ...";
From:="From ...";
Where:="Where ..."; - формирую запрос (порядок, количество и тип возвращаемых полей известны).

X:=SQL_Summa[0];
Y:=SQL_Summa[1];
Z:=SQL_Summa[2];
H:=SQL_Summa[3];


 
panov   (2002-01-24 07:50) [7]

Память не должна "утекать", т.к использование переменных типа Vatiant, не должно ничем отличаться от использования переменных других типов. (По моему мнению):-)


 
Digitman   (2002-01-24 09:08) [8]

>User_OKA
Так ведь результат-то - МАССИВ, а не ЭЛЕМЕНТ МАССИВА !) Разница есть ?

А утечка памяти в этом случае исключена.




 
User_OKA   (2002-01-24 09:36) [9]

Спасибо всем!
Особая благодарность будущему монаху Digitman за категоричность ответов! :)


 
Digitman   (2002-01-24 11:05) [10]

>User_OKA
>>"А Юрий Федоров тоже удивился!.." - как тут не удивиться))

Не за что, уважаемый).. носи - не стаптывай) ... и, пожалуйста, старайся быть предельно точным в терминологии, а то монастыри, думается, переполнены будут) ...

А по сабжу (если интересно) нужно заметитить, что контроль за вариантными переменными и состоянием памяти, относящейся к ним, полностью берет на себя сам ObjectPascal. Время жизни блока памяти, управляемого вариантами, равно времени жизни самих вариантов.


 
Дмитрий   (2002-01-24 12:17) [11]

Тут, кстати, проблема интересная - к вопросу "на чем писать" - либо на Object Pascal, который берет на себя много работы по сборке мусора, либо на С++, где memory leaks ищутся долго и нудно; так вот хотелось бы узнать - насколько вариант сборки, предлагаемый борландом, ресурсоемок и быстр (в плане работы со строками, динамическими и вариантными массивами) по сравнению с ручной "зачисткой"?


 
panov   (2002-01-24 13:26) [12]

>Дмитрий © (24.01.02 12:17)
Это к делу не относится.
Создай новую ветку.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.02.07;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.004 c
4-19038
Tosov
2001-09-13 11:44
2002.02.07
Event Log


1-18789
Виктор
2002-01-24 02:13
2002.02.07
Есть ли секреты у Hint


3-18757
Ренат
2002-01-09 08:12
2002.02.07
Только перехожу на MS SQL.


3-18726
KMZ
2002-01-10 11:24
2002.02.07
Масиера подскажите плиз,отчего возникает ошибка типа Access violation


4-19025
Art
2001-11-18 18:06
2002.02.07
Как использовать ShellExecute?????





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский