Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.06.03;
Скачать: CL | DM;

Вниз

Динамический массив   Найти похожие ветки 

 
BJValentine ©   (2002-05-20 09:58) [0]

Ребята, как мне в программе организовать динамический массив, чтобы можно было задать ему размер не фиксированный, программно и работать с ним?


 
Виктор Щербаков ©   (2002-05-20 10:14) [1]

var Massiv: array of Sometype; // объявляешь
...
SetLength(Massiv, 10); // задаешь размер
Massiv[1] := SomeVar; // работаешь


 
denis_v   (2002-05-20 14:54) [2]

Все гениальное просто - лучше не придумаешь!


 
MBo ©   (2002-05-20 14:58) [3]

и не забудь, что нумерация с 0, т.е. в указанном примере последний элемент - Massiv[9]


 
cult ©   (2002-05-20 15:04) [4]

А вот можно ли как-нибудь передавать в процедуру динамический массив, и в процедуре изменять его размеры? У меня при передаче по Var это вызывало чудовищные глюки...


 
MBo ©   (2002-05-20 15:09) [5]

вроде нет глюков, надо только объявить тип
type
ArrInt=array of integer;
и в процедуре
procedure DoSmth(a:ArrInt);


 
Alan_v   (2002-05-20 15:29) [6]

Можно и просто
procedure Do(a: array of integer)


 
BJValentine ©   (2002-05-20 15:36) [7]

Это всё класно, а как обьявить двумерный динамический массив типа OleVariant?


 
cult ©   (2002-05-20 15:54) [8]

мВо:

это я знаю, дело в другом, кажется, если в процедуре менять размерность передаваемого массива, то в вызвавшей процедуре это вызывает глюки.


 
MBo ©   (2002-05-20 16:00) [9]

>cult
не должно быть. может, вызывающая проц. обращается к уже несуществующему элементу?


 
pb   (2002-05-20 16:06) [10]

var
av:Array of array of Variant;
begin
setLength(av,2,5);
end;


 
cult ©   (2002-05-20 18:48) [11]

мВо:
нет, это уж слишком:)Она работает от его длины, замеренной уже после вызова. И глючит... ужасно(Access Violation..). Пришлось все массивы вытащить из параметров в возвращаемые значения. Так - работает.


 
BJValentine ©   (2002-05-20 19:45) [12]

Извините, но ламерство иногда берёт верх. Ситуация на самом деле следующая. Я перегоняю большие массивы данных в Excel таким способом:

var V: OleVariant;
XL: Variant;
begin
......
V:=VarArrayCreate([0,0],VarVariant);
......
V[0]:=VarArrayOf([значение1, значение2, ...., значениеN]);
XL.range["A1:N1"]:=V[0];
......
end;

таким образом я перегоняю данные построчно. А как можно сделать, чтобы загнать все данные из базы данных в массив, а затем одним махом сбросить их в Excel?


 
BJValentine ©   (2002-05-20 20:53) [13]

Ребят, помогите, ну?!


 
antonl   (2002-05-21 01:55) [14]

С динамическими массивами я лично предпочитаю не связоватся появляется много трудно уловимых глюков. Лучше использовать TList или TCollection.


 
koks ©   (2002-05-21 10:10) [15]

2 BJVValentine - то, что ты хочешь сделать оччень хорошо описано в "Королевстве Delphi". Пощи там в статьях. Назывется "По волнам интеграции".


 
USAtyj ©   (2002-05-21 12:32) [16]


FCells: Variant;
Excel: Variant;
...

...
FCells:=VarArrayCreate([1,ROWS_COUNT,1,COLUMNS_COUNT],varVariant);
...
while not(MyDataSet.EOF) do
begin
FCells[i,1]:=FieldByName("F1").AsFloat;
FCells[i,2]:=FieldByName("F2").AsInteger;
FCells[i,3]:=FieldByName("F3").AsString;
FCells[i,4]:=FieldByName("F4").AsInteger;
FCells[i,5]:=FieldByName("F5").AsFloat;
Inc(i);
Next;
end;
Excel.ActiveSheet.Range[Excel.ActiveSheet.Cells[1,1],Excel.ActiveSheet.Cells[MyDataSet.RecordCount,COLUMNS_COUNT]]:=FCells;



 
USAtyj ©   (2002-05-21 12:42) [17]

Пожалуй правильнее будет так:

FCells: Variant;
Excel: Variant;
...

...
FCells:=VarArrayCreate([1,ROWS_COUNT,1,COLUMNS_COUNT],varVariant);
...
i:=0;
while not(MyDataSet.EOF) do
begin
FCells[i,1]:=MyDataSet.FieldByName("F1").AsFloat;
FCells[i,2]:=MyDataSet.FieldByName("F2").AsInteger;
FCells[i,3]:=MyDataSet.FieldByName("F3").AsString;
FCells[i,4]:=MyDataSet.FieldByName("F4").AsInteger;
FCells[i,5]:=MyDataSet.FieldByName("F5").AsFloat;
...
FCells[i,COLUMNS_COUNT]:=FieldByName("Fn").AsFloat;
Inc(i);
Next;
end;
Excel.ActiveSheet.Range[Excel.ActiveSheet.Cells[1,1],Excel.ActiveSheet.Cells[MyDataSet.RecordCount,COLUMNS_COUNT]]:=FCells;




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

Текущий архив: 2002.06.03;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.009 c
1-7063
Nikolay
2002-05-20 21:38
2002.06.03
Создание переменных.


6-7142
yaJohn
2002-03-22 17:12
2002.06.03
Таймаут у ClientSocket.


8-7116
Surprising
2002-01-11 23:24
2002.06.03
Как из двух bmp файлов сделать один.


1-6978
AlexMey
2002-05-22 23:57
2002.06.03
Програмное нажатие на TToolButton


14-7232
Vlad_GEOKEN
2002-04-24 11:01
2002.06.03
Вопросы