![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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]
ну, блин, хоть кто-нибудь что-нибудь скажет по этому поводу