rsst-sor
Goto Top

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

Content-ID: 655658

Url: https://administrator.de/contentid/655658

Ausgedruckt am: 26.11.2024 um 20:11 Uhr

em-pie
em-pie 24.02.2021 um 20:59:15 Uhr
Goto Top
Moin,

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
RSST-SOR
RSST-SOR 24.02.2021, aktualisiert am 21.04.2022 um 16:22:08 Uhr
Goto Top
Also die Spalte 110Historie gibt es in der DB

db_screenshot 2021-02-24 210637

Zitat von @em-pie:

Moin,

Funktioniert nicht
der Fehler lautet bei

INSERT INTO ProjektRegisterBearbeitszeit (MitarbeiterId, Bearbeitungsdatum, 110Historie) VALUES ('101044', '24.02.2021', '21:05:10')  

screenshot 2021-02-24 210538
em-pie
em-pie 24.02.2021 um 21:32:22 Uhr
Goto Top
Zitat von @RSST-SOR:
INSERT INTO ProjektRegisterBearbeitszeit (MitarbeiterId, Bearbeitungsdatum, 110Historie) VALUES ('101044', '24.02.2021', '21:05:10')  
> 
Und das ist 1:1 so aus Excel herauskopiert?

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?
mbehrens
mbehrens 24.02.2021 um 21:44:30 Uhr
Goto Top
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')

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.
em-pie
em-pie 24.02.2021 aktualisiert um 21:56:15 Uhr
Goto Top
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 face-smile

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...

Mit einem
SQLString = "INSERT INTO ProjektRegisterBearbeitszeit (" _  
    & "MitarbeiterId, Bearbeitungsdatum, " & """" & WSAktiveZeit & """" & ")" _  
    & " VALUES " _  
    & "('" & MitarbeiterID & "'," _  
    & " '" & Datum & "'," _  
    & " '" & ArbeitsBeginn & "')" 'Rev b  
sollte es klappen
RSST-SOR
RSST-SOR 24.02.2021, aktualisiert am 21.04.2022 um 16:23:15 Uhr
Goto Top
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.

Habe daher folgendes Versucht:

INSERT INTO ProjektRegisterBearbeitszeit (MitarbeiterId, Bearbeitungsdatum, (110Historie)) VALUES ('101044', '24.02.2021', '21:59:42')  

jedoch leider Vergebens ==> Fehler (80040e14)

fehler klammer screenshot 2021-02-24 220003
em-pie
em-pie 24.02.2021 um 22:05:43 Uhr
Goto Top
DU darfst keine runden Klammern verwenden sondern nur Eckige.
Alternativ halt Anführungszeichen/ Gänsefüßchen...
mbehrens
mbehrens 24.02.2021 um 22:12:05 Uhr
Goto Top
Zitat von @RSST-SOR:

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.

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 .
RSST-SOR
RSST-SOR 24.02.2021, aktualisiert am 21.04.2022 um 16:25:48 Uhr
Goto Top
Mit einem
> SQLString = "INSERT INTO ProjektRegisterBearbeitszeit (" _  
>     & "MitarbeiterId, Bearbeitungsdatum, " & """" & WSAktiveZeit & """" & ")" _  
>     & " VALUES " _  
>     & "('" & MitarbeiterID & "'," _  
>     & " '" & Datum & "'," _  
>     & " '" & ArbeitsBeginn & "')" 'Rev b  
> 
sollte es klappen

leider Nein

INSERT INTO ProjektRegisterBearbeitszeit (MitarbeiterId, Bearbeitungsdatum, "100Historie") VALUES ('101044', '24.02.2021', '22:13:59')  

fehler klammer2screenshot 2021-02-24 221625
em-pie
em-pie 24.02.2021 um 22:20:12 Uhr
Goto Top
Oben war es doch die ganze Zeit die Spalte 110Historie, jetzt hast du "plötzlich" 100Historie.
Ist das der Grund?
RSST-SOR
RSST-SOR 24.02.2021, aktualisiert am 21.04.2022 um 16:23:35 Uhr
Goto Top
Nein ist nicht der Grund

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

lösung_screenshot 2021-02-24 225110
RSST-SOR
RSST-SOR 24.02.2021 um 23:07:10 Uhr
Goto Top
Zitat von @em-pie:

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
ukulele-7
ukulele-7 25.02.2021 aktualisiert um 08:31:31 Uhr
Goto Top
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');