Announcement

Collapse
No announcement yet.

ADO <> ODBC -> Treiber dafür

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

  • ADO <> ODBC -> Treiber dafür

    Hallo,</p>
    <p>ich &ouml;ffne mittels ADO eine DBF-Tabelle und konvertiere diese in Exel.
    Nun gibt es daf&uuml;r zwei ODBC Treiber, einmal in Deutsch und einmal in Englisch,
    zumindest auf meinem System. Auf einem anderen System gab es keinen &quot;Treiber&quot;
    daf&uuml;r einen &quot;driver&quot;. Kann man das irgendwie allgemein halten,
    dass es sowohl f&uuml;r &quot;driver&quot; sowie auch f&uuml;r &quot;Treiber
    funktioniert?</p>
    <p>Vielen Dank schon mal. Gr&uuml;&szlig;e, Mario Noack</p>
    <p><font face="Courier New, Courier, mono" size="2" color="#000066"><b>var</b>
    ConvertConnection : TAdoConnection;<br>
    iRows : Integer;<br>
    TableName, TablePath : String;<br>
    <br>
    </font><font face="Courier New, Courier, mono" size="2" color="#000066"><b>begin</b><br>
    TableName := ExtractFileName(Edit1.Text);<br>
    TablePath := ExtractFilePath(Edit1.Text);</font></p>
    <p></p>
    <p><font face="Courier New, Courier, mono" size="2" color="#000066"><b>WITH</b>
    TIniFile.Create(TablePath + TableName + '.dsn') <b>DO</b><br>
    <b>BEGIN</b><br>
    WriteString('ODBC','DRIVER' ,'Microsoft dBase Driver (*.dbf)');<b><font color="#FF0000">//Microsoft
    dBase-Treiber (*.dbf)');</font></b><br>
    WriteString('ODBC','UID' ,'admin');<br>
    WriteString('ODBC','UserCommitSync' ,'Yes');<br>
    WriteString('ODBC','Threads' ,'3');<br>
    WriteString('ODBC','Statistics' ,'0');<br>
    WriteString('ODBC','SafeTransactions' ,'0');<br>
    WriteString('ODBC','PageTimeout' ,'5');<br>
    WriteString('ODBC','MaxScanRows' ,'8');<br>
    WriteString('ODBC','MaxBufferSize' ,'2048');<br>
    WriteString('ODBC','FIL' ,'dBase 5.0');<br>
    WriteString('ODBC','DriverId' ,'533');<br>
    WriteString('ODBC','Deleted' ,'0');<br>
    WriteString('ODBC','DefaultDir' ,TablePath);<br>
    WriteString('ODBC','CollatingSequence','ASCII');<b r>
    Free;<br>
    <b>END</b>; // WITH IniFile </font></p>
    <p><font face="Courier New, Courier, mono" size="2" color="#000066"> ConvertConnection
    := TADOConnection.Create(Self);<br>
    ConvertConnection.LoginPrompt := False;</font></p>
    <p><font face="Courier New, Courier, mono" size="2" color="#000066"> ConvertConnection.ConnectionString
    := 'Provider=MSDASQL.1;Persist Security Info=False;' +<br>
    'Extended Properties=&quot;CollatingSequence=ASCII;' +<br>
    'DefaultDir=' + TablePath +<br>
    ';Deleted=0;' +<br>
    'Driver={Microsoft dBase Driver (*.dbf)};' + <b><font color="#FF0000">//Microsoft
    dBase-Treiber (*.dbf)};' +</font></b><br>
    'DriverId=533;' +<br>
    'FIL=dBase 5.0;' +<br>
    'FILEDSN=' + TablePath + TableName + '.dsn' +<br>
    ';MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;' +<br>
    'SafeTransactions=0;Statistics=0;Threads=3;' +<br>
    'UID=admin;UserCommitSync=Yes;&quot;';</font></p>
    <p><font face="Courier New, Courier, mono" size="2" color="#000066"> <b>TRY</b><br>
    ConvertConnection.Connected := True;</font></p>
    <p><font face="Courier New, Courier, mono" size="2" color="#000066"> <b>TRY</b><br>
    DeleteFile(ChangeFileExt(TablePath + TableName, '.xls'));<br>
    ConvertConnection.Execute('SELECT * INTO Tabelle1 IN ' + ChangeFileExt(TableName,
    '.xls') +<br>
    ' &quot;Excel 8.0;&quot; FROM ' + ChangeFileExt(TableName, ''),<br>
    iRows);<br>
    <b>FINALLY</b><br>
    ConvertConnection.Connected := False;<br>
    <b>END</b>; //TRY</font></p>
    <p><font face="Courier New, Courier, mono" size="2" color="#000066"> ShowMessage(Format('Es
    wurden %d Datens&auml;tze exportiert.', [iRows]));<br>
    <b>EXCEPT</b><br>
    on E: Exception do MessageDlg(E.Message, mtError, [mbOK], E.HelpContext);<br>
    <b>END</b>; //TRY</font></p>
    <p><font face="Courier New, Courier, mono" size="2" color="#000066"> ConvertConnection.Free;</font><br>
    </p>
    Schöne Grüße, Mario

  • #2
    Hallo,

    für diese Aufgabe wird kein ODBC-Treiber benötigt, das die Jet Engine dies auch ohne ODBC-Treiber kann:
    <pre>
    ADOConnImport.Provider := 'Microsoft.Jet.OLEDB.4.0';
    ADOConnImport.Properties['Extended Properties'].Value := 'dBASE 5.0';
    ADOConnImport.Properties['Data Source'].Value := 'C:\Temp';
    ADOTableImport.TableName := 'Export';
    ADOConnImport.Connected := True;
    ADODataSetImport.Active := True;
    </pre&gt

    Comment


    • #3
      Danke, das funktioniert.<p>
      Schöne Grüße, Mario Noac
      Schöne Grüße, Mario

      Comment


      • #4
        Hallo,<br>
        gibt es bei dieser Art von Zugriff (via Jet Engine) auf dBase Dateien
        auch eine Möglichkeit die Codepage anzugeben? Wir bekommen regelmässig Daten von einer AS400 mit Codepage 850, wobei die Umlaute nicht korrekt ausgegeben werden. Ich behelfe mir mit dem Umweg über ODBC-Treiber und BDE (der ODBC Treiber nimmt ja neuerdings den Weg über die BDE, falls diese vorgefunden wird). In der BDE kann ich dann den gewünschten Zeichencode angeben. Das funktioniert auch soweit ganz gut, nur ist man immer auf die BDE angewiesen.<br>
        Viele Grüsse<br>
        Herman

        Comment


        • #5
          Hallo,

          in der Microsoft Platform SDK-Hilfe sind diese Informationen auf der Hilfeseite <i>Microsoft OLE DB Provider for Microsoft Jet</i> zu finden. Über <b>Locale Identifier</b> legt der Connection String fest, wie ADO die Daten interpretieren soll.

          Außerdem gibt es Provider-spezifische Einträge. Im Fall des <i>OLE DB Provider for DB2</i> zum Beispiel die Parameter CCSID (Code Character Set Identifier) und PCCodePage

          Comment

          Working...
          X