Форум: "Основная";
Текущий архив: 2002.06.03;
Скачать: [xml.tar.bz2];
ВнизДинамический массив Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.006 c