Thema Datum  Von Nutzer Rating
Antwort
18.03.2017 14:45:37 Dominik
NotSolved
19.03.2017 12:56:50 BigBen
NotSolved
29.03.2017 16:34:48 Dominik
NotSolved
29.03.2017 17:06:43 BigBen
NotSolved
30.03.2017 19:09:24 Dominik
NotSolved
30.03.2017 20:09:44 BigBen
NotSolved
31.03.2017 09:38:57 Dominik
NotSolved
01.04.2017 15:25:58 BigBen
NotSolved
03.04.2017 13:56:54 Dominik
NotSolved
03.04.2017 16:18:05 BigBen
NotSolved
04.04.2017 18:32:52 Gast3322
NotSolved
05.04.2017 21:24:41 Dominik
NotSolved
07.04.2017 15:41:11 BigBen
NotSolved
08.04.2017 12:51:19 Dominik
NotSolved
08.04.2017 19:04:05 BigBen
*****
Solved
Blau Blau Anfrage an SQL-Server per VBA-Code und Speichern der Rückgabe in ein Verzeichnis
10.04.2017 21:03:04 Dominik
NotSolved
03.04.2017 13:56:54 Dominik
NotSolved

Ansicht des Beitrags:
Von:
Dominik
Datum:
10.04.2017 21:03:04
Views:
662
Rating: Antwort:
  Ja
Thema:
Anfrage an SQL-Server per VBA-Code und Speichern der Rückgabe in ein Verzeichnis

Hallo BigBen,

dank deines letzten Codes in der Nachricht vom 08.04.2017 habe es nun geschafft. Das mit dem GetChunk-Befehl hat auch wunderbar funktioniert. Unten habe ich meinen Code nochmals aufgeführt für andere Anwender die etwas ähnliches machen möchten.  Ich hab den Code noch erweitert, sodass die Schildnummer und die Sprache aus dem Excel-Arbeitsblatt kommen. Über den Autofilter wir die Liste reduziert und nur die sichtbaren Zeilen werden verwertet. Außerdem habe ich noch eine If-Abfrage intergriert, da manche Schilder mehrfach vom SQL-Server abgefragt werden sollen im Falle das diese mehrfach in der Liste auftauchen. Außerdem gibt es in meinem Code noch einige Abfragen die sicherstellen das der SQL-Server immer eine Rückmeldung gibt und das der Bediener alles richtig macht. Ich denke das einige Dinge vielleicht andern weiterhelfen können.

 

Vielen Dank dir nochmals BigBen ohne dich wäre das nie was geworden.

 

Gruß

 

Dominik

 

Code-Teil 1:

 

Sub Anfragen_SQL_Server_nach_Auswahl()
  
    Dim Sprache As String
    Dim Nummer As String
    Dim i As Integer
    
If Sprache = "Sprachen auswählen" Then
    MsgBox ("Bitte Sprachen auswahlen")
    Exit Sub

Else
    
    For i = 6 To 102                                           'Beginnend in Zeile 6 bis 102 (je nachdem welche Zeilen für die Schilder verwendet werden)
        If Not Sheets("Tabelle1").Rows(i).Hidden = True Then   'Prüfen ob Zeile sichtbar oder durch Autofilter ausgeblendet
            Nummer = Sheets("Tabelle1").Range("D" & i).Value   'Nummer aus Zelle
            Sprache = Sheets("Tabelle1").Range("B1").Value     'Sprache aus Excel-Dropdown
            Call Bild_von_SQL_Server(Sprache, Nummer)
        End If
    
    Next

End If

End Sub

 

Code-Teil 2 (Unterprogramm):

 

Sub Bild_von_SQL_Server(Sprache As String, Nummer As String) 'Code von https://social.msdn.microsoft.com/Forums/de-DE/a73a838b-ec3f-419b-be65-8b1732fbf4d0/connect-to-a-remote-sql-server-db?forum=isvvba

    Dim Cn As New ADODB.Connection
    Dim Server_Name As String
    Dim Database_Name As String
    Dim User_ID As String
    Dim Password As String
    Dim SQLStr As String
    Dim rs As New ADODB.Recordset
    Dim strFilename As String
    Dim iFile As Integer
    Dim i2 As Integer
    Dim i3 As String
    Dim arrPicture() As Byte, lSize As Long
    Dim Speicherort As String
    
    Set rs = New ADODB.Recordset
    Set Cn = New ADODB.Connection
    Speicherort = Sheets("Tabelle1").Range("B3").Value

    Server_Name = "Server_XYZ"                        ' Servername hier eingeben
    Database_Name = "Schilder"                        ' Datenbankname hier eingeben
    User_ID = "XXX"                          ' User_ID hier eingeben
    Password = "abc"                                  ' Passwort hier eingeben
    SQLStr = "SELECT Schilder.SVG as Bild " & _
            "FROM Sprachen INNER JOIN Schilder ON Sprachen.ID = Schilder.SprachenID" & _
            " WHERE (Sprachen.Sprache = N'" + Sprache + "') AND (Schilder.MasterID = '" + Nummer + "')"
        Cn.Open "Driver={SQL Server};Server=" & Server_Name & ";Database=" & Database_Name & ";user id=" & User_ID & ";pwd=" & Password & ";"
        'Debug.Print SQLStr                                 'SQL-String in Direktfenster anzeigen
    
        rs.Open SQLStr, Cn, adOpenStatic
    
        ' Auslesen des Bildes
        If Not rs.EOF Then
            lSize = rs.Fields("Bild").ActualSize
            ReDim arrPicture(lSize)
            arrPicture = rs.Fields("Bild").GetChunk(lSize)  ' Testen, ob dieser Befehl geeignet ist

            ' Schreiben des Bildes
            iFile = FreeFile()
            If Dir(Speicherort + Nummer + Sprache + ".svg") <> "" Then                          'Prüfen ob erste Datei bereits vorhanden
                If Dir(Speicherort + Nummer + Sprache + "(2)" + ".svg") <> "" Then              'Prüfen ob zweite Datei bereits vorhanden
                    i2 = 3
                    Do
                    i3 = CStr(i2)
                    If Dir(Speicherort + Nummer + Sprache + "(" + i3 + ")" + ".svg") <> "" Then 'Prüfen ob dritte bzw. jede weitere Datei bereits vorhanden
                      i2 = i2 + 1
                    
                    Else
                        strFilename = Speicherort + Nummer + Sprache + "(" + i3 + ")" + ".svg"  'Schreiben der dritten Datei bzw. jeder weiteren
                        Open strFilename For Binary As #iFile
                            Put #iFile, , arrPicture
                            Close #iFile
                        Exit Do
                    End If
                    Loop

                    
                Else                                                                             'Schreiben der zweiten Datei falls nicht bereits vorhanden
                    strFilename = Speicherort + Nummer + Sprache + "(2)" + ".svg"
                    Open strFilename For Binary As #iFile
                        Put #iFile, , arrPicture
                        Close #iFile
                End If
            Else                                                                                 'Schreiben der erste Datei falls nicht bereits vorhanden
                strFilename = Speicherort + Nummer + Sprache + ".svg"
                Open strFilename For Binary As #iFile
                    Put #iFile, , arrPicture
                    Close #iFile
            End If
            
        Else
            MsgBox ("Datei " + Nummer + Sprache + " konnte nicht in der gewünschten Sprache gefunden werden! Bitte diese Nummer notieren und Schild entsprechend erstellen und anlegen lassen!")
            
        End If
        
        'Alles aufräumen und schließen
        rs.Close
        Set rs = Nothing
        Cn.Close
        Set Cn = Nothing

End Sub

 


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
18.03.2017 14:45:37 Dominik
NotSolved
19.03.2017 12:56:50 BigBen
NotSolved
29.03.2017 16:34:48 Dominik
NotSolved
29.03.2017 17:06:43 BigBen
NotSolved
30.03.2017 19:09:24 Dominik
NotSolved
30.03.2017 20:09:44 BigBen
NotSolved
31.03.2017 09:38:57 Dominik
NotSolved
01.04.2017 15:25:58 BigBen
NotSolved
03.04.2017 13:56:54 Dominik
NotSolved
03.04.2017 16:18:05 BigBen
NotSolved
04.04.2017 18:32:52 Gast3322
NotSolved
05.04.2017 21:24:41 Dominik
NotSolved
07.04.2017 15:41:11 BigBen
NotSolved
08.04.2017 12:51:19 Dominik
NotSolved
08.04.2017 19:04:05 BigBen
*****
Solved
Blau Blau Anfrage an SQL-Server per VBA-Code und Speichern der Rückgabe in ein Verzeichnis
10.04.2017 21:03:04 Dominik
NotSolved
03.04.2017 13:56:54 Dominik
NotSolved