1. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

SQL-Abfrage über Excel mit zusätzlichen VBA-Funktionen

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von Brustatta, 11 März 2017.

?

Hilfe bei SQL-Abfrage über Excel mit zusätzlichen VBA-Funktionen

  1. Bitte um Hilfe für eine SQL-Abfrage über Excel mit zusätzlichen VBA-Funktionen

    0 Stimme(n)
    0,0%
  2. Bitte um Hilfe für eine SQL-Abfrage über Excel mit zusätzlichen VBA-Funktionen

    0 Stimme(n)
    0,0%
Eine Auswahl mehrerer Antworten ist erlaubt.
  1. Brustatta

    Brustatta Benutzer

    Hallo,

    Wahrscheinlich für die meisten eine einfache Frage. Ich arbeite noch nicht so lange mit SQL und VBA. Aber hier erstmal meine Frage.


    Ich habe über VBA eine SQL-Abfrage generiert die mir eine bestimmte Tabelle mit den geforderten Kriterien anzeigt. Soweit funktioniert alles sehr gut, ich habe in Excel in den Zellen M1 und M2 jeweils ein Datum stehen, welches er mir in der Abfrage mit berücksichtigt, für die datumsabfrage lautet der korrekte text wie folgt:


    WHERE (tbSpulen.Datum Between {ts '" & Range("M1").Text & "'} And {ts '" & Range("M2").Text & "'})


    nun wollte ich noch nach einer bestimmten Nummer fragen, diese würde sich dann in der Zelle P1 befinden. Und das bekomme ich irgendwie nicht hin. Noch zu erwähnen wäre dass die Nummer eine 18 stellige Zahlen ist und ich sie nur korrekt in Excel angezeigt bekomme wenn sich die Zelle in einem Textformat befindet. Gebe ich sie direkt ein dann funktioniert es , anbei der ganze „select“-befehl, am ende ist die abfrage mit dem 18-stelligen Text der sich aber auf die Text-formatierte Zelle P1 beziehen soll.


    SELECT tbSpulen.Datum, tbSpulen.Label, tbSpulen.Maschine, tbSpulen.Feld, tbSpulen.Spinnstelle, tbSpulen.Produkt, tbSpulen.Laufzeit, CAST(tbSpulen.Menge as decimal(18,2)) AS Menge,tbSpulen.KlasseE, tbPalettenSpulen.PalettenID, tbPaletten.BasilCode, tbPalettenSpulen.LagenNr, tbPalettenSpulen.KlasseDe, tbSpulenPuffer.KlasseDe as KL_PufferDe FROM tbSpulen LEFT JOIN tbSpulenPuffer ON tbSpulen.Label = tbSpulenPuffer.SpulenID LEFT JOIN tbPalettenSpulen ON tbSpulen.Label = tbPalettenSpulen.SpulenID LEFT JOIN tbPaletten ON tbPaletten.ID = tbPalettenSpulen.PalettenID WHERE (tbSpulen.Datum Between {ts '" & Range("M1").Text & "'} And {ts '" & Range("M2").Text & "'}) and tbPaletten.BasilCode in (187135562859690373)



    Kann mir da vielleicht jemand helfen? Das wäre sehr nett. Vielen Dank schonmal im voraus.


    Gruß André 2017-03-11 17_20_16-Microsoft Excel - SDW 10, Suche Spulen und oder HU.jpg
     
  2. ukulele

    ukulele Datenbank-Guru

    Also wenn du die Nummer 187135562859690373 fest in den Select an die DB schreibst klappt die Abfrage aber du kannst die Nummer nicht aus einer Zelle in deinem Excel-Sheet als Variable in deinen Select einbauen, richtig?

    Kannst du dir den Code, der an die DB übergeben wird, vorher anzeigen lassen?
     
  3. Brustatta

    Brustatta Benutzer

     
  4. Brustatta

    Brustatta Benutzer

    Ja sehr gerne :)

    hier ist er ...


    Sub Berechnen()
    '
    ' Berechnen Makro
    '

    '
    With ActiveWorkbook.Connections("Abfrage SDW10_OBG Spulenverbleib_Ma_Puffer"). _
    ODBCConnection
    .BackgroundQuery = True
    .CommandText = Array( _
    "SELECT tbSpulen.Datum, tbSpulen.Label, tbSpulen.Maschine, tbSpulen.Feld, tbSpulen.Spinnstelle, tbSpulen.Produkt, " _
    , _
    " tbSpulen.Laufzeit, CAST(tbSpulen.Menge as decimal(18,2)) AS Menge," _
    , _
    "tbSpulen.KlasseE, tbPalettenSp" _
    , _
    "ulen.PalettenID, tbPaletten.BasilCode, tbPalettenSpulen.LagenNr, tbPalettenSpulen.Klasse" _
    , _
    "De, tbSpulenPuffer.KlasseDe as KL_PufferDe FROM" _
    , _
    " tbSpulen LEFT JOIN tbSpulenPuffer ON tbSpulen.Label = tbSpulenPuffer.SpulenID LEFT JOIN tbPalettenSpulen ON tbSpul" _
    , _
    "en.Label = tbPalettenSpulen.SpulenID LEFT JOIN tbPaletten ON tbPaletten.ID = tbPalettenSpulen.PalettenID WHERE (tbS" _
    , "pulen.Datum Between {ts '" & Range("M1").Text & "'} And {ts '" & Range("M2").Text & "'}) and tbPaletten.BasilCode in (187135562859690366)" _
    )
    .CommandType = xlCmdSql
    .Connection = Array(Array( _
    "ODBC;DSN=P01MSS;Description=SQL Server SDW10 Obernburg;UID=bdereport;PWD=bdereport;APP=Microsoft Office 2003;WSID=PHPW084;DATABASE=SDW10;LANGUAGE" _
    ), Array("=Deutsch;Regional=Yes"))
    .RefreshOnFileOpen = False
    .SavePassword = False
    .SourceConnectionFile = _
    "R:\sdw\03_qualitaet_rd\01_qualitaet\01_info\SQL-Abfragen\Abfragen\SDW10\Abfrage SDW10_OBG Spulenverbleib_Ma_Puffer.dqy"
    .SourceDataFile = ""
    .ServerCredentialsMethod = xlCredentialsMethodIntegrated
    .AlwaysUseConnectionFile = False
    End With
    With ActiveWorkbook.Connections("Abfrage SDW10_OBG Spulenverbleib_Ma_Puffer")
    .Name = "Abfrage SDW10_OBG Spulenverbleib_Ma_Puffer"
    .Description = ""
    End With
    ActiveWorkbook.Connections("Abfrage SDW10_OBG Spulenverbleib_Ma_Puffer"). _
    Refresh
    End Sub
     
  5. ukulele

    ukulele Datenbank-Guru

    Sry nur den TSQL-Code bitte, den VBA an die Datenbank weiter gibt.

    Auch ist in deinem Code keine Variable sondern der Wert für tbPaletten.BasilCode hinterlegt. Du sagst aber das hier die Übergabe nicht klappt also muss das natürlich vorher aus dem Feld ausgelesen und eingesetzt werden.
     
  6. Brustatta

    Brustatta Benutzer

    hier noch mal etwas übersichtlicher:

    SELECT tbSpulen.Datum
    ,tbSpulen.Label
    ,tbSpulen.Maschine
    ,tbSpulen.Feld
    ,tbSpulen.Spinnstelle
    ,tbSpulen.Produkt
    ,tbSpulen.Laufzeit
    ,CAST(tbSpulen.Menge AS DECIMAL(18, 2)) AS Menge
    ,tbSpulen.KlasseE
    ,tbPalettenSpulen.PalettenID
    ,tbPaletten.BasilCode
    ,tbPalettenSpulen.LagenNr
    ,tbPalettenSpulen.KlasseDe
    ,tbSpulenPuffer.KlasseDe AS KL_PufferDe
    FROM tbSpulen
    LEFT JOIN tbSpulenPuffer ON tbSpulen.Label = tbSpulenPuffer.SpulenID
    LEFT JOIN tbPalettenSpulen ON tbSpulen.Label = tbPalettenSpulen.SpulenID
    LEFT JOIN tbPaletten ON tbPaletten.ID = tbPalettenSpulen.PalettenID
    WHERE (
    tbSpulen.Datum BETWEEN {ts '" & Range("M1").Text & "'}
    AND {ts '" & Range("M2").Text & "'}
    )
    AND tbPaletten.BasilCode IN (187135562859690366)
     
  7. Brustatta

    Brustatta Benutzer

    ok, beantworte deine frage später. bin gerade auf nen sprung :)
     
  8. Brustatta

    Brustatta Benutzer

    TSQL-Code? was meinst du genau? wo finde ich das.
    sorry, bin noch nicht sooooooo fit.

    lg.
     
  9. ukulele

    ukulele Datenbank-Guru

    SELECT tbSpulen.Datum
    ,tbSpulen.Label
    ,tbSpulen.Maschine
    ,tbSpulen.Feld
    ,tbSpulen.Spinnstelle
    ,tbSpulen.Produkt
    ,tbSpulen.Laufzeit
    ,CAST(tbSpulen.Menge AS DECIMAL(18, 2)) AS Menge
    ,tbSpulen.KlasseE
    ,tbPalettenSpulen.PalettenID
    ,tbPaletten.BasilCode
    ,tbPalettenSpulen.LagenNr
    ,tbPalettenSpulen.KlasseDe
    ,tbSpulenPuffer.KlasseDe AS KL_PufferDe
    FROM tbSpulen
    LEFT JOIN tbSpulenPuffer ON tbSpulen.Label = tbSpulenPuffer.SpulenID
    LEFT JOIN tbPalettenSpulen ON tbSpulen.Label = tbPalettenSpulen.SpulenID
    LEFT JOIN tbPaletten ON tbPaletten.ID = tbPalettenSpulen.PalettenID
    WHERE (
    tbSpulen.Datum BETWEEN
    {ts '" & Range("M1").Text & "'}
    AND {ts '" & Range("M2").Text & "'}
    )
    AND tbPaletten.BasilCode IN (187135562859690366)


    Das unterstrichene ist alles TSQL. Die Variablen in geschweiften Klammern sind irgendwas was VB durch irgendwas ersetzt. Wenn du BasilCode auch als Variable aus einer Zelle ließt, wird die ebenfalls durch irgendwas ersetzt und hier ist die Frage durch was eigentlich.
     
  10. Brustatta

    Brustatta Benutzer

    "Also wenn du die Nummer 187135562859690373 fest in den Select an die DB schreibst klappt die Abfrage ..."

    JA DANN KLAPPT DIE ABFRAGE, DAS IST RICHTIG!


    "aber du kannst die Nummer nicht aus einer Zelle in deinem Excel-Sheet als Variable in deinen Select einbauen, richtig?"

    JA, ICH WEIß DEN VAB-BEFEHL NICHT. GENAU DEN SUCHE ICH DAFÜR. DAS WAR MEINE FRAGE

    Kannst du dir den Code, der an die DB übergeben wird, vorher anzeigen lassen?

    NEIN, LEIDER NICHT

    "Wenn du BasilCode auch als Variable aus einer Zelle ließt, wird die ebenfalls durch irgendwas ersetzt und hier ist die Frage durch was eigentlich."

    DER BASILCODE STEHT DURCH EINE VBA PROZEDUR IN DER ZELLE P1, SO WIE IM BILD OBEN NOCH MAL ERKLÄRT. SO WIE DAS DATUM IN DEN ZELLEN M1 UND M2 BEREITS STEHT.
     
  11. ukulele

    ukulele Datenbank-Guru

    Achso. Ich dachte du hast es mit einer Variablen probiert und es würde nicht funktionieren wie erwartet.

    Wie man in VBA eine Excel Zelle ausließt ist nicht so mein Gebiet ;)
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden