Dimon.Ru |
Отправлено: 03.05.2005, 15:55 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 92
|
Мне надо перенести в эксель таблицу, которая получается выборкой по БД.
toExcelCell() — переносит данные в нужную ячейку.
Есть вот такой фрагмент кода:
CODE |
TVariant stroka;
for(int j=0; j<WordQuery->RecordCount; j++)
{
toExcelCell(j+5,1, Variant(j+1));
for(int i=0;i<WordQuery->FieldCount; i++)
{
if(WordQuery->Fields->Fields[i]->IsBlob())
stroka=WordQuery->Fields->Fields[i]->Text.c_str();
else stroka=WordQuery->Fields->Fields[i]->AsString.c_str();
toExcelCell(j+5,i+2, Variant(stroka));
}
WordQuery->Next();
}
|
Если я выбираю любые поля (не блоб), то все переносится бэз вопросов, но если у меня в компоненте Query появляется блоб-поле, то значение WordQuery->RecordCount сразу же становится равным -1.
да и если это значение поставть каки-либо другим, то все равно ничего не записывается.
и так пробовал писать — не помогает ((
stroka=WordQuery->Fields->Fields[i]->Value;
что делать? практически только из-за этого не могу продвинуться дальше.
PS: база — IB6, работаю через БДЕ.
вот еще. в блоб-поле у меня строка цыфирь. длинная
Отредактировано Dimon.Ru — 03/05/2005, 16:00 |
|
Dimon.Ru |
Отправлено: 05.05.2005, 12:13 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 92
|
Люди!
неужели никто не знает??? или я написал непонятно?
если что-то не указал, то хоть спросите что еще надо.....
очень жду ответа. заранее всем спасибо! |
|
** olegenty |
Отправлено: 05.05.2005, 13:01 |
|
Не зарегистрирован
|
качни AfalinaSoft XLReport с soft.0zones.com, и будет тебе счастье. |
|
Dimon.Ru |
Отправлено: 05.05.2005, 17:04 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 92
|
Дело в том, что я ограничен использованием только стандартных компонентов.
одну проблему решил.
блоб-поле вывел в Ёxcel )
надо писать вот так, тогда все выводится )))))
CODE |
TVariant stroka;
for(int j=0; j<WordQuery->RecordCount; j++)
{
toExcelCell(j+5,1, Variant(j+1));
for(int i=0;i<WordQuery->FieldCount; i++)
{
stroka=AnsiString(WordQuery->Fields->Fields[i]->Value).c_str();
toExcelCell(j+5,i+2, Variant(stroka));
}
WordQuery->Next();
}
|
а вот получить количество выбранных строк пока никак не удаётся.....
Отредактировано Dimon.Ru — 05/05/2005, 17:08 |
|
avc* |
Отправлено: 05.05.2005, 17:14 |
|
Не зарегистрирован
|
QUOTE |
а вот получить количество выбранных строк пока никак не удаётся.....
|
А это вам действительно нужно?
Постройте цикл так
for (WordQuery->First(); !WordQuery->Eof; WordQuery->Next())
{
.....
} |
|
Dimon.Ru |
Отправлено: 05.05.2005, 20:48 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 92
|
О, а это идея.... я как-то не подумал раньше.....
спасибо, ща попробую
Вот еще вопрос возник: как программно переключаться между листами и выводить данные на разные листы???? |
|
Dimon.Ru |
Отправлено: 07.05.2005, 11:18 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 92
|
Спасибо, работает, но как-то криво....
а все-таки никто не знает как переключаться между листами???
пробую вот так:
CODE | Variant cur = App.OlePropertyGet("Worksheets").OlePropertyGet("Item", 2); |
ны палучаица ( |
|
Dimon.Ru |
Отправлено: 10.05.2005, 17:45 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 92
|
точнее даже так: переключается, но ничего не выводицца ((((
как же быть?
и вот еще одна проблема:
мне надо предварительно (перед выводом информации) посчитать количество записей. Делаю так:
CODE | int quanRecords=0;
for (WordQuery->First(); !WordQuery->Eof; WordQuery->Next())
{
quanRecords++;
}
WordQuery->First() |
потом делаю вывод в эксэль. возникают какие-то ошибки. почему — не могу понять....
Отредактировано Dimon.Ru — 10/05/2005, 17:48 |
|
** avtoritet |
Отправлено: 15.05.2005, 00:07 |
|
Не зарегистрирован
|
WordQuery — это TQuery. Я правильно думаю?
Если да, то как сделал выборку, пишешь следующее:
WordQuery->RecordCount();
Не знаю как у тебя, но у меня всегда выдает количество выбранных записей?!
По поводу листа экселя:
Variant cur = App.OlePropertyGet("Worksheets").OlePropertyGet("Item", 2)
cur.OleProcedure("Activate"); — не берусь утверждать, но, по моему, работать должно.
|
|
Dimon.Ru |
Отправлено: 15.05.2005, 10:34 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 92
|
1.)
WordQuery — это действительно TQuery.
для определения количества записей я раньше и использовал
WordQuery->RecordCount();
но почему-то, когда среди выбранных полей нет блоб(мемо)-полей, то все работает, а когда есть, то WordQuery->RecordCount() всегда возвращает значение -1. Почему так происходит? я понять не могу.
а мне это значение нужно для того, чтобы изменять значение в прогрессбаре. таблица большая и сохраняется долго, поэтому мне просто необходимо отображать ход процесса передачи данных.
2.)
cur.OleProcedure("Activate"); спасибо! ща попробую! |
|