Announcement

Collapse
No announcement yet.

MS SQL 2005 Zugriff per EXCEL-VB-Makro

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

  • MS SQL 2005 Zugriff per EXCEL-VB-Makro

    Hallo zusammen, dies ist das erste Mal, dass ich eine Frage stelle. Hoffem ich mache alles richtig.

    Betriebssystem: Windows XP
    EXCEL 2003.

    Ich habe ein EXCEL-VB-Makro erstellt, welches alle Datensätze aus einer MS SQL in ein EXCEL-worksheet importiert:

    Worksheets("Tabelle2").Activate

    With ActiveSheet.QueryTables.Add(Connection:=Array( _
    "OLEDB;Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Data Source=127.0.0.1;Use Procedure for Prepare=1;Auto T" _
    , _
    "ranslate=True;Packet Size=4096;Workstation ID=H1644997;Use Encryption for Data=False;Tag with column collation when possible=Fal" _
    , "se;Initial Catalog=ahcldbtest"), Destination:=Range("A1"))
    .CommandType = xlCmdTable
    .CommandText = Array("""ahcldbtest"".""dbo"".""orderIN""")
    .Name = "127.0.0.1 ahcldbtest orderIN"
    .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .BackgroundQuery = True
    .RefreshStyle = xlInsertDeleteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .PreserveColumnInfo = True
    .SourceConnectionFile = _
    "C:\Users\Administrator\Documents\Eigene Datenquellen\127.0.0.1 ahcldbtest orderIN.odc"
    .Refresh BackgroundQuery:=False
    End With

    Funktioniert so weit. Ich bin aber immer nur an einem Datensatz interessiert. Zur Zeit suche ich mir durch das EXCEL-VB-Makro den entsprechenden Datensatz. Das müsste doch eleganter gehen, sodaß nur der eine Datensatz aus dem MSSQL-Tabelle nach EXCEL importiert wird, oder? Außerdem möchte ich ab jetzt diesen Datensatz nach dem Import ins EXCEL aus der MSSQL-Tabelle löschen. Hab so mittelmäßige Programmierkenntnisse. Wer kann mir bitte helfen?

  • #2
    Hallo Aquarius62,

    eigentlich musst Du nur 2 Sachen ändern:
    .CommandType = xlCmdTable => xlCmdSql
    und .CommandText durch ein Sql Statement mit der entsprechenden Where Klausel zum Filtern ersetzen.
    Und lass die Array(..) weg; eigentlich ist das falsch, den es wird ein String erwartet, kein Array. Aber die implizite Typkonvertierung von VB(A) "korrigiert" das weg.

    [highlight=VB]Public Sub Test()
    Worksheets("Tabelle2").Activate
    With ActiveSheet.QueryTables.Add(Connection:="OLEDB;Pro vider=SQLOLEDB.1;Integrated Security=SSPI;" & _
    "Persist Security Info=True;Data Source=127.0.0.1;" & _
    "Use Procedure for Prepare=1;Auto Translate=True;" & _
    "Packet Size=4096;Workstation ID=H1644997;" & _
    "Use Encryption for Data=False;" & _
    "Tag with column collation when possible=False;" & _
    "Initial Catalog=ahcldbtest", Destination:=Range("A1"))
    .CommandType = xlCmdSql
    .CommandText = "SELECT * " & _
    "FROM ahcldbtest.dbo.orderIN " & _
    "WHERE Feld = " & Wert ' <= Hier den Filter-Wert setzen
    .Name = "127.0.0.1 ahcldbtest orderIN"
    .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .BackgroundQuery = True
    .RefreshStyle = xlInsertDeleteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .PreserveColumnInfo = True
    .SourceConnectionFile = "C:\Users\Administrator\Documents\Eigene Datenquellen\127.0.0.1 ahcldbtest orderIN.odc"
    .Refresh BackgroundQuery:=False
    End With

    End Sub[/highlight]
    Olaf Helper

    <Blog> <Xing>
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich

    Comment


    • #3
      Hallo Olaf,
      danke für die schnelle Antwort.
      Leider funktioniert es noch nicht.
      Zunächst gibt es bei mir einen Syntaxfehler in Zeile 28:
      Laufzeitfehler 1004: Incorrect Syntax near "="
      Wenn ich die Zeile auskommentiere und wie nachfolgend ergänzt habe, läuft das Makro zwar fehlerfrei durch, importiert aber nicht den gewünschten Datensatz in das EXCEL, auch die Feldüberschriften werden nicht importiert, gar nichts. Bin mir nicht sicher, ob der neue Befehl überhaupt eine Verbidnung zur Datenbank aufbaut. Kann ich das irgendwie abfragen? An dem where-Statement kann es meines Erachtens auch nicht liegen, ich habs auch mal ohne versucht.

      Public Sub Test()

      Worksheets("Tabelle2").Activate
      With ActiveSheet.QueryTables.Add(Connection:="OLEDB;Pro vider=SQLOLEDB.1;Integrated Security=SSPI;" & _
      "Persist Security Info=True;Data Source=127.0.0.1;" & _
      "Use Procedure for Prepare=1;Auto Translate=True;" & _
      "Packet Size=4096;Workstation ID=h1644997;" & _
      "Use Encryption for Data=False;" & _
      "Tag with column collation when possible=False;" & _
      "Initial Catalog=ahcldbtest", Destination:=Range("A1"))
      .CommandType = xlCmdSql
      .CommandText = "SELECT * " & _
      "FROM ahcldbtest.dbo.orderIN " & _
      "WHERE Feld = 'orderid' & Wert = '1025'"
      .Name = "127.0.0.1 ahcldbtest orderIN"
      .FieldNames = True
      .RowNumbers = False
      .FillAdjacentFormulas = False
      .PreserveFormatting = True
      .RefreshOnFileOpen = False
      .BackgroundQuery = True
      .RefreshStyle = xlInsertDeleteCells
      .SavePassword = False
      .SaveData = True
      .AdjustColumnWidth = True
      .RefreshPeriod = 0
      .PreserveColumnInfo = True
      .SourceConnectionFile = "C:\Users\Administrator\Documents\Eigene Datenquellen\127.0.0.1 ahcldbtest orderIN.odc"
      .Refresh BackgroundQuery:=False
      End With
      End Sub

      Danke und viele Grüße

      Comment


      • #4
        Hallo.
        hat jemand noch eine Antwort für mich?
        Ich komme einfach nicht weiter.
        Danke und Gruß

        Comment

        Working...
        X