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

Вниз

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

 
trever   (2003-12-13 12:27) [0]

Вообщем задача тривиальная - формирование отчетов в екселе, она решаема, но возник вопрос (как обычно из любопытства и лени :-), а можно ли одним махом заполнить диапазон ячеек данными из датасета, можно использовать Рекордсет и метод GetRows, но он меняет местами направление Fields и Rows.
Подскажите, пожалуйста, есть ли решение этой проблемы.


 
trever   (2003-12-13 13:29) [1]

ну, блин, хоть кто-нибудь что-нибудь скажет по этому поводу


 
JibSkeart ©   (2003-12-13 13:44) [2]

Если это все предварително запихать в массив
ну предположим так

Arr:Variant;
Xl:Variant;

Xl.CreateOleObject("Exel.Application");
Arr := VarArrayCreate([1..M,1..M],varVariant);
Arr[1,j] := DataSet("field1").AsString;
Arr[2,j] := DataSet("field2").AsString;
Arr[3,j] := DataSet("field3").AsString;
XL.Range["A1","D1"].Value := Arr;

7не знаю не проверял толко что придумал :))


 
trever   (2003-12-13 13:52) [3]

спасибо!!!
этим методом и пользуюсь :-)
а вот что бы что-то вроде

Xl.CreateOleObject("Exel.Application");
Arr := VarArrayCreate([1..M,1..M],varVariant);
Arr := DataSet.Recordset.GetRow(DataSet.RecordCount,0,EmptyParam);
XL.Range["A1","D1"].Value := Arr;

или

XL.Range["A1","D1"].Value := DataSet.Recordset.GetRow(DataSet.RecordCount,0,EmptyParam);

но в этом случае значения полей выводятся построчно, а записи в столбцах
хотелось бы наоборот :-)
Вот в этом вопрос.


 
JibSkeart ©   (2003-12-13 13:56) [4]

Ну не знаю попробуй поекспрементировать с массивом.


 
JibSkeart ©   (2003-12-13 14:11) [5]

ну или все таки
XL.Range["A1","A"+IntToStr(DataSet.RecorCount)].Value := DataSet.Recordset.GetRow(DataSet.RecordCount,0,EmptyParam);

так прокатит ?


 
trever   (2003-12-13 14:18) [6]

прокатит-то, прокатит, но это будет выглядеть так

f1 f2 f3
RecNo1 A1 B1 C1
RecNo2 A2 B2 C1
RecNo2 A3 B3 C1

а в Екселе будет

A B
1 A1
2 B1
3 C1

а нужен такой же порядок как и в датасете


 
JibSkeart ©   (2003-12-13 14:24) [7]

а ты как хочешь в ставлять по столбцам,
или по строкам ?
или вообще все сразу ?


 
trever   (2003-12-13 14:30) [8]

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


 
JibSkeart ©   (2003-12-13 14:37) [9]

ну пробуй меняй Range["a1",CHR(64+DataSet.RecordCount)+IntToStr(DataSet.RecordCount)] = xxx

попробуй может так повезет ,
не могу попробовать на ентом компе делфей нету :)


 
trever   (2003-12-13 14:59) [10]

Посмотрел в Variant support routines, но вроде ничего подходящего не нашел, чтобы поменять местами измерения массива, может что-то упустил? Видимо придется старым способом пользоваться :-(
Но все равно, Спасибо!!!



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

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

Наверх




Память: 0.49 MB
Время: 0.039 c
3-25262
LinOS
2003-12-08 13:48
2004.01.09
Мигает DBGrid


8-25455
gRad2003
2003-08-05 15:30
2004.01.09
Как склеить 2 AVI в 1?


3-25232
axx
2003-12-11 11:31
2004.01.09
Люди помогите с хранимой процедурой.


14-25585
Style
2003-12-17 23:12
2004.01.09
Direct Access for MSSQL 2000


1-25371
]eRoR_rrr[
2003-12-25 11:47
2004.01.09
RichEdit