C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Вывод блоб-полей в Ёxcel, как узнать количество записей в таблице
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.
да и если это значение поставть каки-либо другим, то все равно ничего не записывается.

и так пробовал писать — не помогает sad.gif((
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 smile.gif)

надо писать вот так, тогда все выводится )))))
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



О, а это идея.... я как-то не подумал раньше.....
спасибо, ща попробую smile.gif

Вот еще вопрос возник: как программно переключаться между листами и выводить данные на разные листы????
Dimon.Ru
Отправлено: 07.05.2005, 11:18


Станционный диспетчер

Группа: Участник
Сообщений: 92



Спасибо, работает, но как-то криво....
а все-таки никто не знает как переключаться между листами???
пробую вот так:
CODE
Variant cur = App.OlePropertyGet("Worksheets").OlePropertyGet("Item", 2);

ны палучаица sad.gif(
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"); спасибо! ща попробую!

Вернуться в Работа с базами данных в C++Builder