Announcement

Collapse
No announcement yet.

Export von Daten aus Interbase nach Excel

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Export von Daten aus Interbase nach Excel

    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

  • #2
    void __fastcall TForm1::ExportDBase2Excel<br>
    (String ExportDirStr,String ExportFileName)<br>
    {<br>
    TADOConnection *ConnectionTmp;<br>
    TADOCommand *CommandTmp;<br>
    ConnectionTmp = new TADOConnection(Application);<br>
    ConnectionTmp->Provider = "Microsoft.Jet.OLEDB.4.0";<br>
    ConnectionTmp-ConectionString=
    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
    ExportDirStr +
    ";Extended Properties=dBASE 5.0;
    Persist Security Info=False";<br>
    ConnectionTmp->LoginPrompt = false;<br>
    ConnectionTmp->Mode = cmShareDenyNone;<br>
    ConnectionTmp->Open();<br>
    if (ConnectionTmp->Connected)<br>
    {<br>
    CommandTmp = new TADOCommand(Application);<br>
    CommandTmp->Connection = ConnectionTmp;<br>
    CommandTmp->CommandType = cmdText;<br>
    CommandTmp->CommandText = "select * into TabelDummy in \"" +
    ExportDirStr + "\\" + ExportFileName + ".XLS\"" +
    " \"Excel 8.0;\" from "+ ExportFileName;<br>
    //ShowMessage(CommandTmp->CommandText);<br>
    CommandTmp->Execute();<br>
    delete CommandTmp;<br>
    }<br>
    delete ConnectionTmp;<br>
    }<br&gt

    Comment

    Working...
    X