/Den/ |
Отправлено: 07.05.2004, 16:29 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 3
|
Нужно прочитать поля базы данных(InterBase) и вывести их в Excel.
Выводить записи за выбранный пользователем интервал дат в таблицу EXCEL ,таблица проиндекирована по полю DATA.
C экселем более менее понятно ,подскажите как читать поля в базе и "соорудить"выборку по датам.
Заранее благодарен. |
|
olegenty |
Отправлено: 11.05.2004, 07:31 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
SELECT ... FROM ... WHERE DATE_FIELD <= :DATE_START AND DATE_FIELD>=:DATE_FINISH
|
|
** /DEN/ |
Отправлено: 11.05.2004, 10:32 |
|
Не зарегистрирован
|
А как с помощью OLE читать поля? |
|
olegenty |
Отправлено: 11.05.2004, 11:47 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
из Interbase? ну посредством ADO, написуя макросы на VBA, естественно, а ты как хотел?
|
|
/Den/ |
Отправлено: 11.05.2004, 13:31 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 3
|
Можеш привести описание функций,или пример. |
|
olegenty |
Отправлено: 11.05.2004, 13:34 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
если я правильно тебя понял, и тебе надо, находясь на листе Excel, вытащить данные из Interbase и разместить их на листе, то могу.
|
|
olegenty |
Отправлено: 11.05.2004, 14:03 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
Вот тебе файл с примером. Там я цепляюсь к файлу ISC4.GDB (в нём все пользователи твои описаны), и выцепляю все логины, которые и выводятся на лист. Макрос прописан на событии нажатия на кнопку. Всё, что тебе надо, чтобы пример заработал, это подставить свою строку коннекта. А для её создания тебе нужен либо ODBC драйвер для Interbase/Firebird/Yaffil, либо OLEDB провайдер. это добро можешь качнуть на IBASE.RU. предполагаю так же, что понятие о том, что такое строка коннекта, ты имеешь.
|
|
olegenty |
Отправлено: 11.05.2004, 14:07 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
упс. вот файл:
|
|
/Den/ |
Отправлено: 11.05.2004, 15:47 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 3
|
Это не то.Я имел в ввиду вот это
[CODE]
void __fastcall TForm1::bToExcelClick(TObject *Sender)
{
// устанавливаем путь к файлу шаблона
AnsiString sFile = GetCurrentDir()+"\\NaclSf.xlt";
// инициализируем Excel, открываем этот шаблон
try {
App=Variant::GetActiveObject("Excel.Application");
} catch(...) {
try { App=Variant::CreateObject("Excel.Application"); }
catch (...) {
Application->MessageBox("Невозможно открыть Microsoft Excel!"
" Возможно этого приложения на компьютере не установлено.","Ошибка",MB_OK+MB_ICONERROR);
}}
try {
App.OlePropertyGet("WorkBooks").OleProcedure("Open",sFile.c_str(),0,false,1);
Sh=App.OlePropertyGet("WorkSheets",1);
} catch(...) {
Application->MessageBox("Ошибка открытия книги Microsoft Excel!","Ошибка",MB_OK+MB_ICONERROR);
}
// определяем в n количество (строк для ввода в шаблон)
Table1->First();
int n = 0;
while(!Table1->Eof)
{ n++;
Table1->Next();
}
// вставляем в шаблон нужное количество строк
Variant C;
App.OlePropertyGet("WorkSheets",1).OleProcedure("Select");
C=App.OlePropertyGet("Range","ТоварСФ");
C=App.OlePropertyGet("Rows",(int) C.OlePropertyGet("Row")+1);
for(int i=1;i
App.OlePropertyGet("WorkSheets",2).OleProcedure("Select");
C=App.OlePropertyGet("Range","ТоварНАКЛ");
C=App.OlePropertyGet("Rows",(int) C.OlePropertyGet("Row")+1);
for(int i=1;i
// вывод данных из накладной в эти строки
Table1->First();
int i = 0;
while(!Table1->Eof){
//выводим в Excel
toExcel(App,"ТоварНАКЛ",i,Table1KR->Value.c_str());
..........................
...........................
................................
.........................................
i++; Table1->Next();
}
}
//---------------------------------------------------------------------------
[CODE]
почти написал,появился глюк:после вывода шаблон не открывается
или показывает ерунду.(код правильный)
Спасибо за ответ. |
|