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

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

Recordset [D7, ASA]


trever ©   (2003-12-13 12:27:00) 

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


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

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


JibSkeart   (2003-12-13 14:37:00) [2]

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

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


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

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


JibSkeart   (2003-12-13 14:24:00) [4]

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


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

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

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:11:00) [6]

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

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


JibSkeart   (2003-12-13 13:56:00) [7]

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


trever   (2003-12-13 13:52:00) [8]

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

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:44:00) [9]

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

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:29:00) [10]

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


Наверх

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