Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Динамический массив [D5, Win95/98, Win2k]


BJValentine ©   (2002-05-20 09:58:00) 

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


USAtyj   (2002-05-21 12:42:00) [1]

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

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;


USAtyj   (2002-05-21 12:32:00) [2]


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;


koks   (2002-05-21 10:10:00) [3]

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


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

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


BJValentine   (2002-05-20 20:53:00) [5]

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


BJValentine   (2002-05-20 19:45:00) [6]

Извините, но ламерство иногда берёт верх. Ситуация на самом деле следующая. Я перегоняю большие массивы данных в 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?


cult   (2002-05-20 18:48:00) [7]

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


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

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


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

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


cult   (2002-05-20 15:54:00) [10]

мВо:

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


BJValentine   (2002-05-20 15:36:00) [11]

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


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

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


MBo   (2002-05-20 15:09:00) [13]

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


cult   (2002-05-20 15:04:00) [14]

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


MBo   (2002-05-20 14:58:00) [15]

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


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

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


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

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо