Hallo <br>
Vieleicht eine kleine Hilfe zum <br>
Thema : Export von Interbase Daten nach Excel <br>
Vorlagen und Ideen habe ich zum grossen Teil aus diesem Forum<br>
(Besten Dank Andreas für Deine vielen Anregungen)<br>
Das Grundproblem liegt darin, dass es leider keinen OLE DB Provider<br>
für IB gibt der die SQL-Erweiterung select * into .. kennt.<br>
(SIBProvider und _IBProvider ausprobiert !)<br>
Ledeglich der Provider Microsoft.Jet.OLEDB.4.0 konnte diesen SQL<br>
Befehl ausführen. Mit diesem OLE DB Provider liess sich aber keine <br>
Verbindung zum Interbase aufbauen.<br>
Daher der Umweg über eine dBase Tabelle.<br>
Mein Umfeld : Windows 2000/NT 4.0 SP6<br>
C++Builder 5.0 Prof. Update 1<br>
AdoExpress Prof.<br>
Über Anmerkungen/Verbesserungsvorschläge zum Thema <br>
würde ich mich sehr freuen.<br>
Fragen meinerseits : <br>
1)Ist der Weg über eine Export<br>
Verbindung 1 <br>
Interbase -> XML :<br>
->SaveToFile("D:\\tmp\\SaveFile.xml",pfXML);<br>
Verbindung 2 Provider Microsoft.Jet.OLEDB.4.0<br>
XML -> Excel:<br>
->LoadFromFile("D:\\tmp\\SaveFile.xml");<br>
nicht besser ?<br>
Ich bekomme so die Interbase Daten in ein ADODataset Object<br>
welches mit dem richtigen Provider verbunden ist hin.<br>
Leider komme ich danach nicht weiter .<br>
2)Gibt es einen anderen OLE DB Provider für IB der o.g. SQL-Befehl<br>
ausführen kann ? oder ist ein solcher zu erwarten ?<br>
Im folgendem Beispiel werden alle Kommponenten zur Laufzeit erzeugt.<br>
Über einen Button wird via TQuery auf eine<br>
Interbastabelle(StordProc,View genauso möglich) zugegriffen,<br>
diese Daten werden via BatchMove in eine dbf Datei gespeichert und<br>
anschliessend via SQL (Provider Microsoft.Jet.OLEDB.4.0 "select *<br> into ..")in eine Excel Datei geschrieben.<br>
void __fastcall TForm1::ButtunExportClick(TObject *Sender)<br>
{<br>
String SqlStr;<br>
String ExportDirStr = "d:\\tmp";<br>
String ExportFileName = "ExBil"; // ->ExBil.dbf -> ExBil.xls<br>
SqlStr = "select * from Bilanz"; //Interbase Tabelle<br>
ExportInterbase2dBase(SqlStr,ExportDirStr,ExportFi leName);<br>
ExportDBase2Excel(ExportDirStr,ExportFileName) ;<br>
}<br>
void __fastcall TForm1::ExportInterbase2dBase<br>
(String SqlStr,String ExportDirStr,String ExportFileName)<br>
{<br>
TQuery *QueryTmp;<br>
TTable *TableTmp;<br>
TBatchMove * BatchMoveTmp;<br>
QueryTmp = new TQuery(Application);<br>
QueryTmp->DatabaseName = "DatabaseKunde";<br>
QueryTmp->SQL->Clear();<br>
QueryTmp->SQL->Add(SqlStr);<br>
QueryTmp->Open();<br>
if (!QueryTmp->Eof)<br>
{<br>
TableTmp = new TTable(Application);<br>
TableTmp->DatabaseName = ExportDirStr;<br>
TableTmp->TableType = ttDBase;<br>
TableTmp->TableName = ExportFileName +".dbf";<br>
BatchMoveTmp = new TBatchMove(Application);<br>
BatchMoveTmp->Mode = batCopy;<br>
BatchMoveTmp->Source = QueryTmp;<br>
BatchMoveTmp->Destination = TableTmp;<br>
try<br>
{<br>
//Hier koennen noch <br>
//Feldauswahlen,Umbennenungen vorgenommen werden<br>
//BatchMoveTmp->Mappings->Clear();<br>
// Feldname nicht aendern<br>
//BatchMoveTmp->Mappings->Add("ID");<br>
// DAY_ID -> Kennung umbennenen<br>
//BatchMoveTmp->Mappings->Add("Kennung=DAY_ID");<br>
BatchMoveTmp->Execute();<br>
}<br>
catch(...)<br>
{<br>
ShowMessage("BatchMove failed !");<br>
}<br>
delete BatchMoveTmp;<br>
delete TableTmp;<br>
}<br>
else<br>
{<br>
//nichts da zum exportieren<br>
}<br>
QueryTmp->Close();<br>
delete QueryTmp;<br>
}<br>
ExportDBase2Excel folgt im nächstem Kommentar (Begrenzung
Vieleicht eine kleine Hilfe zum <br>
Thema : Export von Interbase Daten nach Excel <br>
Vorlagen und Ideen habe ich zum grossen Teil aus diesem Forum<br>
(Besten Dank Andreas für Deine vielen Anregungen)<br>
Das Grundproblem liegt darin, dass es leider keinen OLE DB Provider<br>
für IB gibt der die SQL-Erweiterung select * into .. kennt.<br>
(SIBProvider und _IBProvider ausprobiert !)<br>
Ledeglich der Provider Microsoft.Jet.OLEDB.4.0 konnte diesen SQL<br>
Befehl ausführen. Mit diesem OLE DB Provider liess sich aber keine <br>
Verbindung zum Interbase aufbauen.<br>
Daher der Umweg über eine dBase Tabelle.<br>
Mein Umfeld : Windows 2000/NT 4.0 SP6<br>
C++Builder 5.0 Prof. Update 1<br>
AdoExpress Prof.<br>
Über Anmerkungen/Verbesserungsvorschläge zum Thema <br>
würde ich mich sehr freuen.<br>
Fragen meinerseits : <br>
1)Ist der Weg über eine Export<br>
Verbindung 1 <br>
Interbase -> XML :<br>
->SaveToFile("D:\\tmp\\SaveFile.xml",pfXML);<br>
Verbindung 2 Provider Microsoft.Jet.OLEDB.4.0<br>
XML -> Excel:<br>
->LoadFromFile("D:\\tmp\\SaveFile.xml");<br>
nicht besser ?<br>
Ich bekomme so die Interbase Daten in ein ADODataset Object<br>
welches mit dem richtigen Provider verbunden ist hin.<br>
Leider komme ich danach nicht weiter .<br>
2)Gibt es einen anderen OLE DB Provider für IB der o.g. SQL-Befehl<br>
ausführen kann ? oder ist ein solcher zu erwarten ?<br>
Im folgendem Beispiel werden alle Kommponenten zur Laufzeit erzeugt.<br>
Über einen Button wird via TQuery auf eine<br>
Interbastabelle(StordProc,View genauso möglich) zugegriffen,<br>
diese Daten werden via BatchMove in eine dbf Datei gespeichert und<br>
anschliessend via SQL (Provider Microsoft.Jet.OLEDB.4.0 "select *<br> into ..")in eine Excel Datei geschrieben.<br>
void __fastcall TForm1::ButtunExportClick(TObject *Sender)<br>
{<br>
String SqlStr;<br>
String ExportDirStr = "d:\\tmp";<br>
String ExportFileName = "ExBil"; // ->ExBil.dbf -> ExBil.xls<br>
SqlStr = "select * from Bilanz"; //Interbase Tabelle<br>
ExportInterbase2dBase(SqlStr,ExportDirStr,ExportFi leName);<br>
ExportDBase2Excel(ExportDirStr,ExportFileName) ;<br>
}<br>
void __fastcall TForm1::ExportInterbase2dBase<br>
(String SqlStr,String ExportDirStr,String ExportFileName)<br>
{<br>
TQuery *QueryTmp;<br>
TTable *TableTmp;<br>
TBatchMove * BatchMoveTmp;<br>
QueryTmp = new TQuery(Application);<br>
QueryTmp->DatabaseName = "DatabaseKunde";<br>
QueryTmp->SQL->Clear();<br>
QueryTmp->SQL->Add(SqlStr);<br>
QueryTmp->Open();<br>
if (!QueryTmp->Eof)<br>
{<br>
TableTmp = new TTable(Application);<br>
TableTmp->DatabaseName = ExportDirStr;<br>
TableTmp->TableType = ttDBase;<br>
TableTmp->TableName = ExportFileName +".dbf";<br>
BatchMoveTmp = new TBatchMove(Application);<br>
BatchMoveTmp->Mode = batCopy;<br>
BatchMoveTmp->Source = QueryTmp;<br>
BatchMoveTmp->Destination = TableTmp;<br>
try<br>
{<br>
//Hier koennen noch <br>
//Feldauswahlen,Umbennenungen vorgenommen werden<br>
//BatchMoveTmp->Mappings->Clear();<br>
// Feldname nicht aendern<br>
//BatchMoveTmp->Mappings->Add("ID");<br>
// DAY_ID -> Kennung umbennenen<br>
//BatchMoveTmp->Mappings->Add("Kennung=DAY_ID");<br>
BatchMoveTmp->Execute();<br>
}<br>
catch(...)<br>
{<br>
ShowMessage("BatchMove failed !");<br>
}<br>
delete BatchMoveTmp;<br>
delete TableTmp;<br>
}<br>
else<br>
{<br>
//nichts da zum exportieren<br>
}<br>
QueryTmp->Close();<br>
delete QueryTmp;<br>
}<br>
ExportDBase2Excel folgt im nächstem Kommentar (Begrenzung
Comment