Вывод записей из БД в Excel
Я подключила Excel, могу вывести значение поля записи из БД в конкретную ячейку, но вывести для всех записей в цикле - не получается.
Пробовала так:
char *A=new char[10]; int i=0;
DM->Q1->First();
while(i<DM->Q1->RecordCount)
{ i++; A="A";
StrCat(A, IntToStr(i+2).c_str()); // начать с А3
range=sheet.OlePropertyGet("Range", A); range.OlePropertySet("Value", DM->Q1->FieldValues["NAIM"]);
DM->Q1->Next();
}
- при выполнении ошибка. Кто знает, подскажите, плиз.
Во-вторых, на сколько я помню, свойство RecordCount поддерживается не всеми компонентами (Query вроде не поддерживают...), поэтому я бы использовал конструкцию while (!DM->Q1->Eof())
В-третьих, вместо Range я использовал примерно аналогичным образом свойство Cells и для доступа к полю написал бы DM->Q1->FieldByName("NAIM")->AsString
Project Otchet.exe raised exception class OleSysError with message ‘Ошибка’.
//Otchet.exe – мой проект
После нажатия OK, открывает файл sysvari.h и указывает на последнюю строку этого модуля:
template <class P1>
Variant Variant::OlePropertyGet(const String& name, P1 p1)
{
TAutoArgs<1> args;
args[1] = p1;
return OlePropertyGet(name, static_cast<TAutoArgsBase*>(&args));
}
Рекомендации твои я попробовала, но не помогло.
(Примерно аналогичный способ использования Cells - это какой?)
Рекомендации твои я попробовала, но не помогло.
(Примерно аналогичный способ использования Cells - это какой?)
Понятно, они при этой ошибке и не помогут :)
У меня похожее было, сейчас на вскидку не помню, но вечером дома посмотрю и напишу. Если хочешь можешь свой e-mail в аську 220879443 кинуть, ответ дойдёт быстрее
После нажатия на кнопку, запускающую передачу данных, открывается Excel и выдается сообщение:
Project Otchet.exe raised exception class OleSysError with message ‘Ошибка’.
//Otchet.exe – мой проект
После нажатия OK, открывает файл sysvari.h и указывает на последнюю строку этого модуля:
template <class P1>
Variant Variant::OlePropertyGet(const String& name, P1 p1)
{
TAutoArgs<1> args;
args[1] = p1;
return OlePropertyGet(name, static_cast<TAutoArgsBase*>(&args));
}
Рекомендации твои я попробовала, но не помогло.
(Примерно аналогичный способ использования Cells - это какой?)
Большое подозрение (переходящее в уверенность) что Excel таблица у тебя в отсутствии (не открыта) тебе просто некуда писать. Ты где-то раньше не делаешь, что-то типа
books.Exec(Procedure("Close"));
app.OleProcedure("Quit");
Проверь себя простой конструкцией, типа
void __fastcall TForm1::Button1Click(TObject *Sender)
{
app = CreateOleObject("Excel.Application");
books = app.OlePropertyGet("Workbooks");
books.Exec(Procedure("Open")<<"F:\\Книга2.xls");
book = books.OlePropertyGet("item",1);
sheet= book.OlePropertyGet("WorkSheets",1);
app.OlePropertySet("Visible", 1);
sheet.OlePropertyGet("Range","A8").OlePropertySet("Value",999);
books.Exec(Procedure("Close"));
app.OleProcedure("Quit");
}
Это должно работать железно (в А8 получишь 999). Если работает, то рой передачу переменных адресацию, типы. (F:\\Книга2.xls естественно свой поставь)
Примерно аналогичный способ использования Cells - это какой?
Вот обещанный кусок кода, который 100% работал:
[FONT=courier new]AnsiString Value=WellsDB->CommonX->AsString;
Variant Cell=CommonSheet.OlePropertyGet("Cells", i+2, 7);
Cell.OlePropertySet("Value", Value.c_str());[/FONT]
(В общем берётся значение поля X из таблицы Common базы WellsDB в виде строки. Дальше думаю понятно.)
Дело вроде было именно в c_str(), без него по-моему была такая же ошибка, как и у тебя.
С Вашей помощью у меня теперь всё работает!:)
Спасибо.
Подскажите, где можно взять информацию о свойствах и методах для настройки представления данных из ячеек на экране( например, параметры шрифта, окаймление ячеек, цвет) и их использовании.
Добрый день, Fuzzy222, Vlad232ua.
С Вашей помощью у меня теперь всё работает!:)
Спасибо.
Подскажите, где можно взять информацию о свойствах и методах для настройки представления данных из ячеек на экране( например, параметры шрифта, окаймление ячеек, цвет) и их использовании.
Да в общем-то не за что. :)
Настройка вида ячейки делается через свойства уже упоминавшихся Cells. Подробную информацию о них на английском можно получить из справки по Visual Basic, которую можно в MS офисе поставить (по умолчанию она не ставится, поэтому у тебя может не стоять. Конкретно по Excel, там есть файлик вроде XL9VBA.chm, если мне память не изменяет)
Если надо на русском, то посмотри в сети где-нибудь (особенно в разделах Visual Basic, там это чаще встречается, а код переделать просто). Вечером гляну у себя в закромах родины, если чего завалялось, то могу прислать.
_
Да в общем-то не за что. :)
Настройка вида ячейки делается через свойства уже упоминавшихся Cells. Подробную информацию о них на английском можно получить из справки по Visual Basic, которую можно в MS офисе поставить (по умолчанию она не ставится, поэтому у тебя может не стоять. Конкретно по Excel, там есть файлик вроде XL9VBA.chm, если мне память не изменяет)
Если надо на русском, то посмотри в сети где-нибудь (особенно в разделах Visual Basic, там это чаще встречается, а код переделать просто). Вечером гляну у себя в закромах родины, если чего завалялось, то могу прислать.
_
Очень хочется на русском. Если найдешь, будет здорово.:)
Очень хочется на русском. Если найдешь, будет здорово.:)
К сожалению то, что дома нашлось, только на английском и не очень много. Поэтому всё-таки рекомендую посмотреть тебе help к MS office - не такой уж он и сложный, или в инете поискать.
Если надо, то могу прислать пример, как я шрифт жирным делал и цвет заливки ячейки менял. (Большего мне просто не надо было)
К сожалению то, что дома нашлось, только на английском и не очень много. Поэтому всё-таки рекомендую посмотреть тебе help к MS office - не такой уж он и сложный, или в инете поискать.
Если надо, то могу прислать пример, как я шрифт жирным делал и цвет заливки ячейки менял. (Большего мне просто не надо было)
От примерчика не откажусь.
Мне бы хотелось те данные, которые я вывожу из БД, оформить в табличку.
От примерчика не откажусь.
Мне бы хотелось те данные, которые я вывожу из БД, оформить в табличку.
Извини, что задержался.
Вот то, что я использовал:
[FONT=courier new]
// Установка жирного шрифта для диапазона ячеек
Variant Range=CommonSheet.OlePropertyGet("Range", "A1:I1");
Variant Font=Range.OlePropertyGet("Font");
Font.OlePropertySet("Bold", true);
// Задание цвета для ячейки
Variant Cell=Sheet.OlePropertyGet("Cells", i, 1);
Variant Interior=Cell.OlePropertyGet("Interior");
Interior.OlePropertySet("ColorIndex", 3); //4=green; 3=red[/FONT]
Не много, но надеюсь поможет
(Получился прекрасный отчет). :)
Большое спасибо за помощь.
(Получился прекрасный отчет).
Да ладно. Всё-равно время было.