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

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

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

    Stimmen: 0 0,0%
  • Bitte um Hilfe für eine SQL-Abfrage über Excel mit zusätzlichen VBA-Funktionen

    Stimmen: 0 0,0%

  • Umfrageteilnehmer
    0

Brustatta

Benutzer
Beiträge
7
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
 

Anhänge

  • 2017-03-11 17_20_16-Microsoft Excel - SDW 10, Suche Spulen und oder HU.jpg
    2017-03-11 17_20_16-Microsoft Excel - SDW 10, Suche Spulen und oder HU.jpg
    165,7 KB · Aufrufe: 3
Werbung:
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?
 
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éAnhang anzeigen 1006
 
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
 
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.
 
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)
 
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.
 
"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.
 
Werbung:
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 ;)
 
Zurück
Oben