SQL Tabellenspalte mit Zahlen
Hallo Zusammen
Ich habe ein VBA Sub welches in meine Datenbank schreibt. Das Klappt solange gut solange ich nicht dafür eine Spalte wie zB "110Historie" verwende. Ich hab schon versucht mit unter ' zu stellen oder unter [ jedoch klappt auch nicht.
Funktioniert:
INSERT INTO ProjektRegisterBearbeitszeit (MitarbeiterId, Bearbeitungsdatum, Inhaltsverzeichnis) VALUES ('101044', '24.02.2021', '20:33:18')
Funktioniert nicht:
INSERT INTO ProjektRegisterBearbeitszeit (MitarbeiterId, Bearbeitungsdatum, 110Historie) VALUES ('101044', '24.02.2021', '20:10:15')
Bitte um Mithilfe
Public Sub RegisterZeitInsertSQL()
Dim conn As New ADODB.Connection 'Rev b
Dim rec As New ADODB.Recordset
Dim comm As New ADODB.Command
Dim cn As ADODB.Connection
Set cn = New ADODB.Connection
Dim WSAktiveZeit As String
Mitarbeiter = Application.UserName 'Rev b
ArbeitsBeginn = Format(Now(), "hh:mm:ss") 'Rev b
Datum = Date 'Rev b
WSAktiveZeit = ActiveSheet.Name
If WSAktiveZeit Like "*.*" Then 'SCHLEIFE 11.000 Rev b
WSAktiveZeit = Replace(WSAktiveZeit, ".", "")
End If 'SCHLEIFE 11.000 Rev b
If WSAktiveZeit Like "* *" Then 'SCHLEIFE 12.000 Rev b
WSAktiveZeit = Replace(WSAktiveZeit, " ", "0")
End If 'SCHLEIFE 12.000 Rev b
MitarbeiterID = MitarbeiterPersNr(Mitarbeiter) 'Rev b
conn.Open "driver={SQL Server};" & _
"server=RSST-OFFICEIII\RSSTSQLSERVER;database=RSSTProjektArbeitszeit;" 'Rev b
Set comm.ActiveConnection = conn 'Rev b
SQLString = "INSERT INTO ProjektRegisterBearbeitszeit (" _
& "MitarbeiterId, Bearbeitungsdatum, " & WSAktiveZeit & ")" _
& " VALUES " _
& "('" & MitarbeiterID & "'," _
& " '" & Datum & "'," _
& " '" & ArbeitsBeginn & "')" 'Rev b
Debug.Print SQLString 'Rev b
comm.CommandText = SQLString
rec.Open comm 'Rev b
conn.Close
End Sub
Ich habe ein VBA Sub welches in meine Datenbank schreibt. Das Klappt solange gut solange ich nicht dafür eine Spalte wie zB "110Historie" verwende. Ich hab schon versucht mit unter ' zu stellen oder unter [ jedoch klappt auch nicht.
Funktioniert:
INSERT INTO ProjektRegisterBearbeitszeit (MitarbeiterId, Bearbeitungsdatum, Inhaltsverzeichnis) VALUES ('101044', '24.02.2021', '20:33:18')
Funktioniert nicht:
INSERT INTO ProjektRegisterBearbeitszeit (MitarbeiterId, Bearbeitungsdatum, 110Historie) VALUES ('101044', '24.02.2021', '20:10:15')
Bitte um Mithilfe
Public Sub RegisterZeitInsertSQL()
Dim conn As New ADODB.Connection 'Rev b
Dim rec As New ADODB.Recordset
Dim comm As New ADODB.Command
Dim cn As ADODB.Connection
Set cn = New ADODB.Connection
Dim WSAktiveZeit As String
Mitarbeiter = Application.UserName 'Rev b
ArbeitsBeginn = Format(Now(), "hh:mm:ss") 'Rev b
Datum = Date 'Rev b
WSAktiveZeit = ActiveSheet.Name
If WSAktiveZeit Like "*.*" Then 'SCHLEIFE 11.000 Rev b
WSAktiveZeit = Replace(WSAktiveZeit, ".", "")
End If 'SCHLEIFE 11.000 Rev b
If WSAktiveZeit Like "* *" Then 'SCHLEIFE 12.000 Rev b
WSAktiveZeit = Replace(WSAktiveZeit, " ", "0")
End If 'SCHLEIFE 12.000 Rev b
MitarbeiterID = MitarbeiterPersNr(Mitarbeiter) 'Rev b
conn.Open "driver={SQL Server};" & _
"server=RSST-OFFICEIII\RSSTSQLSERVER;database=RSSTProjektArbeitszeit;" 'Rev b
Set comm.ActiveConnection = conn 'Rev b
SQLString = "INSERT INTO ProjektRegisterBearbeitszeit (" _
& "MitarbeiterId, Bearbeitungsdatum, " & WSAktiveZeit & ")" _
& " VALUES " _
& "('" & MitarbeiterID & "'," _
& " '" & Datum & "'," _
& " '" & ArbeitsBeginn & "')" 'Rev b
Debug.Print SQLString 'Rev b
comm.CommandText = SQLString
rec.Open comm 'Rev b
conn.Close
End Sub
13 Antworten
- LÖSUNG em-pie schreibt am 24.02.2021 um 20:59:15 Uhr
- LÖSUNG RSST-SOR schreibt am 24.02.2021 um 21:11:40 Uhr
- LÖSUNG em-pie schreibt am 24.02.2021 um 21:32:22 Uhr
- LÖSUNG RSST-SOR schreibt am 24.02.2021 um 21:11:40 Uhr
- LÖSUNG mbehrens schreibt am 24.02.2021 um 21:44:30 Uhr
- LÖSUNG em-pie schreibt am 24.02.2021 um 21:55:14 Uhr
- LÖSUNG RSST-SOR schreibt am 24.02.2021 um 22:17:09 Uhr
- LÖSUNG em-pie schreibt am 24.02.2021 um 22:20:12 Uhr
- LÖSUNG RSST-SOR schreibt am 24.02.2021 um 22:54:28 Uhr
- LÖSUNG ukulele-7 schreibt am 25.02.2021 um 08:31:00 Uhr
- LÖSUNG RSST-SOR schreibt am 24.02.2021 um 23:07:10 Uhr
- LÖSUNG RSST-SOR schreibt am 24.02.2021 um 22:54:28 Uhr
- LÖSUNG em-pie schreibt am 24.02.2021 um 22:20:12 Uhr
- LÖSUNG RSST-SOR schreibt am 24.02.2021 um 22:17:09 Uhr
- LÖSUNG RSST-SOR schreibt am 24.02.2021 um 22:02:06 Uhr
- LÖSUNG em-pie schreibt am 24.02.2021 um 22:05:43 Uhr
- LÖSUNG mbehrens schreibt am 24.02.2021 um 22:12:05 Uhr
- LÖSUNG em-pie schreibt am 24.02.2021 um 21:55:14 Uhr
LÖSUNG 24.02.2021 um 20:59 Uhr
Moin,
Eine Fehlermeldung wäre interessant.
Ferner hilft es mir (beim Debuggen) immer, wenn ich das SQL-Statement einmal irgendwo als Text/ MsgBox hinschreibe...
Dann sehe ich auch, was er da zusammenbaut.
Z.B. mit
Ich vermute mal, er findet den Spaltennamen "110Historie" nicht, weil es den in der Datenbank-Tabelle nicht gibt. Wenn du den Spaltennamen der Tabelle in der DB mit "Inhaltsverzeichnis" fest setzt, klappt es ja.
PS:
Nutze bitte Code-Tags.
Links, neben dem Textfeld gibt es div. Symbole. Das </> wäre das geeignete
Gruß
em-pie
Funktioniert nicht
ist eine nichts sagende Fehlerbeschreibung.Eine Fehlermeldung wäre interessant.
Ferner hilft es mir (beim Debuggen) immer, wenn ich das SQL-Statement einmal irgendwo als Text/ MsgBox hinschreibe...
Dann sehe ich auch, was er da zusammenbaut.
Z.B. mit
Sheets(ActiveSheet.Name).Range("A1") = SQLString
Ich vermute mal, er findet den Spaltennamen "110Historie" nicht, weil es den in der Datenbank-Tabelle nicht gibt. Wenn du den Spaltennamen der Tabelle in der DB mit "Inhaltsverzeichnis" fest setzt, klappt es ja.
PS:
Nutze bitte Code-Tags.
Links, neben dem Textfeld gibt es div. Symbole. Das </> wäre das geeignete
Gruß
em-pie
LÖSUNG 24.02.2021 um 21:11 Uhr
Also die Spalte 110Historie gibt es in der DB
https://administrator.de/images/c/1/7/5ffc38b58ebaec7b8c14887e63ef4aee.j ...
der Fehler lautet bei
https://administrator.de/images/c/1/7/da9f6b47da71d90545b2ddb9be1ea33f.j ...
https://administrator.de/images/c/1/7/5ffc38b58ebaec7b8c14887e63ef4aee.j ...
der Fehler lautet bei
INSERT INTO ProjektRegisterBearbeitszeit (MitarbeiterId, Bearbeitungsdatum, 110Historie) VALUES ('101044', '24.02.2021', '21:05:10')
https://administrator.de/images/c/1/7/da9f6b47da71d90545b2ddb9be1ea33f.j ...
LÖSUNG 24.02.2021 um 21:32 Uhr
Zitat von @RSST-SOR:
Und das ist 1:1 so aus Excel herauskopiert?INSERT INTO ProjektRegisterBearbeitszeit (MitarbeiterId, Bearbeitungsdatum, 110Historie) VALUES ('101044', '24.02.2021', '21:05:10')
>
Ich habe die Vermutung, da hängt irgendwo noch ein verstecktes Steuerzeichen o.Ä.
Kannst du, wenn du das Statement einmal per Copy&Paste ins Management Studio bringst, dann Fehlerfrei ausführen?
LÖSUNG 24.02.2021 um 21:44 Uhr
Zitat von @RSST-SOR:
Funktioniert:
INSERT INTO ProjektRegisterBearbeitszeit (MitarbeiterId, Bearbeitungsdatum, Inhaltsverzeichnis) VALUES ('101044', '24.02.2021', '20:33:18')
Funktioniert nicht:
INSERT INTO ProjektRegisterBearbeitszeit (MitarbeiterId, Bearbeitungsdatum, 110Historie) VALUES ('101044', '24.02.2021', '20:10:15')
INSERT INTO ProjektRegisterBearbeitszeit (MitarbeiterId, Bearbeitungsdatum, Inhaltsverzeichnis) VALUES ('101044', '24.02.2021', '20:33:18')
Funktioniert nicht:
INSERT INTO ProjektRegisterBearbeitszeit (MitarbeiterId, Bearbeitungsdatum, 110Historie) VALUES ('101044', '24.02.2021', '20:10:15')
Nicht alles, was man im Spaltennamen eintippen kann, sollte auch verwendet werden. Je nach Kompatibilitätslevel der DB sollte er eben nicht mit einer Zahl beginnen. Falls doch gilt wie immer die Regel:
When identifiers are used in Transact-SQL statements, the identifiers that do not comply with these rules must be delimited by double quotation marks or brackets.
LÖSUNG 24.02.2021, aktualisiert um 21:56 Uhr
Zitat von @mbehrens:
When identifiers are used in Transact-SQL statements, the identifiers that do not comply with these rules must be delimited by double quotation marks or brackets.
Jo, recht hast du, bzw. deine Quelle When identifiers are used in Transact-SQL statements, the identifiers that do not comply with these rules must be delimited by double quotation marks or brackets.
Zitat von @RSST-SOR:
Ich hab schon versucht mit unter ' zu stellen oder unter [ jedoch klappt auch nicht.
Ich hab überlesen, dass er nur ein ' und kein " nutzte...Ich hab schon versucht mit unter ' zu stellen oder unter [ jedoch klappt auch nicht.
Mit einem
SQLString = "INSERT INTO ProjektRegisterBearbeitszeit (" _
& "MitarbeiterId, Bearbeitungsdatum, " & """" & WSAktiveZeit & """" & ")" _
& " VALUES " _
& "('" & MitarbeiterID & "'," _
& " '" & Datum & "'," _
& " '" & ArbeitsBeginn & "')" 'Rev b
LÖSUNG 24.02.2021 um 22:02 Uhr
Nicht alles, was man im Spaltennamen eintippen kann, sollte auch verwendet werden. Je nach Kompatibilitätslevel der DB sollte er eben nicht mit einer Zahl beginnen. Falls doch gilt wie immer die Regel:
When identifiers are used in Transact-SQL statements, the identifiers that do not comply with these rules must be delimited by double quotation marks or brackets.
When identifiers are used in Transact-SQL statements, the identifiers that do not comply with these rules must be delimited by double quotation marks or brackets.
Habe daher folgendes Versucht:
INSERT INTO ProjektRegisterBearbeitszeit (MitarbeiterId, Bearbeitungsdatum, (110Historie)) VALUES ('101044', '24.02.2021', '21:59:42')
jedoch leider Vergebens ==> Fehler (80040e14)
https://administrator.de/images/c/1/7/a04bfe7cf46e0e463437ae9456d03ae7.j ...
LÖSUNG 24.02.2021 um 22:05 Uhr
DU darfst keine runden Klammern verwenden sondern nur Eckige.
Alternativ halt Anführungszeichen/ Gänsefüßchen...
Alternativ halt Anführungszeichen/ Gänsefüßchen...
LÖSUNG 24.02.2021 um 22:12 Uhr
Zitat von @RSST-SOR:
Habe daher folgendes Versucht:
Nicht alles, was man im Spaltennamen eintippen kann, sollte auch verwendet werden. Je nach Kompatibilitätslevel der DB sollte er eben nicht mit einer Zahl beginnen. Falls doch gilt wie immer die Regel:
When identifiers are used in Transact-SQL statements, the identifiers that do not comply with these rules must be delimited by double quotation marks or brackets.
When identifiers are used in Transact-SQL statements, the identifiers that do not comply with these rules must be delimited by double quotation marks or brackets.
Habe daher folgendes Versucht:
INSERT INTO ProjektRegisterBearbeitszeit (MitarbeiterId, Bearbeitungsdatum, (110Historie)) VALUES ('101044', '24.02.2021', '21:59:42')
>
engl.: brackets [AE] oder square brackets [BE], Unicode: U+005B und U+005D .
LÖSUNG 24.02.2021 um 22:17 Uhr
Mit einem
sollte es klappen
> SQLString = "INSERT INTO ProjektRegisterBearbeitszeit (" _
> & "MitarbeiterId, Bearbeitungsdatum, " & """" & WSAktiveZeit & """" & ")" _
> & " VALUES " _
> & "('" & MitarbeiterID & "'," _
> & " '" & Datum & "'," _
> & " '" & ArbeitsBeginn & "')" 'Rev b
>
leider Nein
INSERT INTO ProjektRegisterBearbeitszeit (MitarbeiterId, Bearbeitungsdatum, "100Historie") VALUES ('101044', '24.02.2021', '22:13:59')
https://administrator.de/images/c/1/7/cc52ab1912db60b28a36b788e754e27b.j ...
LÖSUNG 24.02.2021 um 22:20 Uhr
Oben war es doch die ganze Zeit die Spalte 110Historie, jetzt hast du "plötzlich" 100Historie.
Ist das der Grund?
Ist das der Grund?
LÖSUNG 24.02.2021 um 22:54 Uhr
Nein ist nicht der Grund
Ich hab jetzt direkt im SSMS mal probiert
und es funktioniert
jetzt muss ich das ganze noch aus dem EXCEL VBA hinbekommen
https://administrator.de/images/c/1/7/8d3117f71fef4be2f4f4a1e3e16d1ad6.j ...
Ich hab jetzt direkt im SSMS mal probiert
und es funktioniert
USE RSSTProjektArbeitszeit;
INSERT INTO ProjektRegisterBearbeitszeit
(MitarbeiterId, Bearbeitungsdatum, "110Historie")
VALUES(101044, '24.02.2021', '22:13:59');
jetzt muss ich das ganze noch aus dem EXCEL VBA hinbekommen
https://administrator.de/images/c/1/7/8d3117f71fef4be2f4f4a1e3e16d1ad6.j ...
LÖSUNG 24.02.2021 um 23:07 Uhr
Zitat von @em-pie:
Oben war es doch die ganze Zeit die Spalte 110Historie, jetzt hast du "plötzlich" 100Historie.
Ist das der Grund?
Oben war es doch die ganze Zeit die Spalte 110Historie, jetzt hast du "plötzlich" 100Historie.
Ist das der Grund?
bei mir variiert es ja jenachdem welches Registerblatt im EXCEL File aktiv ist
LÖSUNG 25.02.2021, aktualisiert um 08:31 Uhr
MSSQL nutzt von Haus aus eckige Klammern um Schlüsselwörter etc. in Spalten- oder Tabellennamen zu ermöglichen - @em-pie hat es bereits geschrieben.
INSERT INTO [tabelle]([spalte1],[spalte2]) VALUES(123,'Text');