Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
7-7248
Nazya
2002-03-07 14:14
2002.06.03
Мастера помогите ! Мне нужно написать сервис


1-7028
DenNNis
2002-05-21 14:08
2002.06.03
Копирование


1-6999
ga3
2002-05-23 01:56
2002.06.03
программный маус-клик


1-6959
Novak
2002-05-22 17:08
2002.06.03
StringGrid.


14-7197
YuriyOL
2002-04-23 13:14
2002.06.03
DELAY





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский