Es ist immer noch schlecht, dass tabelle eine Variable ist, normalerweise hat man keine Variablen Tabellennamen.
UniqueIdentifier über gibt man normalerweise nicht bei INSERT, weil die automatisch erstellt werden sollten. In Deinem ersten Post, ist der ja auch noch nicht da.
Python und MS SQL FILESTREAM
@Sirius3: was meinst du mit UniqueIdentifier?
Außerdem muss die Tabelle eine Variable sein, da es verschiedene Tabellen später sind wo das gespeichert werden soll.
Z.B.: 23422
23491
Usw.
Da die Werkzeuge zu einer bestimmten Maschine gehören
Außerdem muss die Tabelle eine Variable sein, da es verschiedene Tabellen später sind wo das gespeichert werden soll.
Z.B.: 23422
23491
Usw.
Da die Werkzeuge zu einer bestimmten Maschine gehören
Zuletzt geändert von badi113 am Samstag 13. April 2019, 12:38, insgesamt 1-mal geändert.
Dein Tabellendesign ist kaputt, wenn die Struktur der Tabellen für verschiedene Maschinen gleicht ist und sich nur anhand des Namens der Relation unterscheidet.
In dem Fall gehört der Name der Relation in eine Spalte.
Stichworte zum Googeln: "Relationale Datenbanken" und "Normalisierung".
In deinem Fall heißt das: Die Tabelle muss eine Spalte "Maschine" haben statt lauter Tabellen mit dem Maschinennamen.
In dem Fall gehört der Name der Relation in eine Spalte.
Stichworte zum Googeln: "Relationale Datenbanken" und "Normalisierung".
In deinem Fall heißt das: Die Tabelle muss eine Spalte "Maschine" haben statt lauter Tabellen mit dem Maschinennamen.
Hy Leute,
habe den Rat befolgt so das alle Wkz in eine Tabelle kommen.
Nun habe Ich die Datenbank und die Tabelle neu erstellt, um noch mal ganz von vorne damit anzufangen.
Die Tabelle ist wie folgt aufgebaut.
Nun hab ich Id nicht mit reingenommen in INTO und bekomme trotzdem die Fehlermeldung
pyodbc.IntegrityError: ('23000', '[23000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Der Wert NULL kann in die Id-Spalte, Datenbank.dbo.Werkzeuge-Tabelle nicht eingefügt werden. Die Spalte lässt NULL-Werte nicht zu. Fehler bei INSERT. (515) (SQLParamData); [23000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Die Anweisung wurde beendet. (3621)')
Obwohl id gar nicht erwähnt wird?.
habe den Rat befolgt so das alle Wkz in eine Tabelle kommen.
Nun habe Ich die Datenbank und die Tabelle neu erstellt, um noch mal ganz von vorne damit anzufangen.
Die Tabelle ist wie folgt aufgebaut.
Code: Alles auswählen
CREATE TABLE Datenbank.dbo.Werkzeuge
(
[Id] [uniqueidentifier] ROWGUIDCOL NOT NULL UNIQUE,
[Name] VARCHAR(MAX) NOT NULL,
[SerialNumber] INTEGER UNIQUE,
[Chart] VARBINARY(MAX) FILESTREAM NULL
)
GO
Code: Alles auswählen
if result is None:
sql = ("INSERT INTO Werkzeuge([Name], [SerialNumber], [Chart])values(?, ?, ?)")
cur.execute(sql, s_name, manr, bild1)
else:
print("weiter")
tkinter.messagebox.showwarning("info", "Werkzeug schon vorhanden")
con.commit()
con.close()
abbrechen()
pyodbc.IntegrityError: ('23000', '[23000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Der Wert NULL kann in die Id-Spalte, Datenbank.dbo.Werkzeuge-Tabelle nicht eingefügt werden. Die Spalte lässt NULL-Werte nicht zu. Fehler bei INSERT. (515) (SQLParamData); [23000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Die Anweisung wurde beendet. (3621)')
Obwohl id gar nicht erwähnt wird?.
- __blackjack__
- User
- Beiträge: 13919
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@badi113: Naja, was wird denn in `id` eingetragen wenn kein Wert dafür übergeben wird? Das ist wohl etwas was Du auf Datenbankseite regeln musst.
Und der `execute()`-Aufruf ist falsch. Die drei Werte müssen als *ein* Argument übergeben werden. Die API sieht für diese Methode nur zwei Argumente vor – die SQL-Anweisung als erstes Argument und optional die Werte für Platzhalter als zweites Argument. Dass da keine Ausnahme kommt, liegt an dem konkreten Datenbankmodul.
Und der `execute()`-Aufruf ist falsch. Die drei Werte müssen als *ein* Argument übergeben werden. Die API sieht für diese Methode nur zwei Argumente vor – die SQL-Anweisung als erstes Argument und optional die Werte für Platzhalter als zweites Argument. Dass da keine Ausnahme kommt, liegt an dem konkreten Datenbankmodul.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
— Scott Bellware
@__blackjack__: Aber heißt nich uniqueidentifier das der SQL Server das selber macht? Also den eintrag generieren?
Meinst du in etwa so?
Code: Alles auswählen
if result is None:
eintrag = (s_name, manr, bild1)
sql = ("INSERT INTO Werkzeuge([Name], [SerialNumber], [Chart])values(?, ?, ?)")
cur.execute(sql, eintrag)
- __blackjack__
- User
- Beiträge: 13919
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@badi113: Ja genau so war das gemeint mit den Werten.
MS SQL ist nicht meine Baustelle, keine Ahnung wie man da die DB dazu bewegt selbstständig einen Schlüssel zu generieren.
MS SQL ist nicht meine Baustelle, keine Ahnung wie man da die DB dazu bewegt selbstständig einen Schlüssel zu generieren.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
— Scott Bellware
Meine MS SQL-Zeit ist lange vorbei und die machen viel seltsames Kram - weshalb man sich damit eigentlich nicht rumschlagen will.
Ich glaube das Schlüsselwort war "identity" um eine selbstinkrementierende ID zu erhalten.
Ich glaube das Schlüsselwort war "identity" um eine selbstinkrementierende ID zu erhalten.
@sparrow: Von wollen kann keine rede sein, aber wir arbeiten nur mit ms sql
Eigentlich wahr es mal so gedacht dass alles in txt Dateien und Ordner gespeichert werden sollte, hatt auch alles geklappt. Bis jemand kam und meinte in SQL wäre besser.

Eigentlich wahr es mal so gedacht dass alles in txt Dateien und Ordner gespeichert werden sollte, hatt auch alles geklappt. Bis jemand kam und meinte in SQL wäre besser.
@badi113: bisher habe ich noch nicht gesehen, dass Du Probleme mit den Bildern hast, Du hast viel grundlegendere Probleme.
Bei großen Datenmengen (BLOBs) kann es schon Sinn machen, die auf einem Filesystem zu speichern. Kommt halt auch drauf an, was das Datenbanksystem taugt.
Bei großen Datenmengen (BLOBs) kann es schon Sinn machen, die auf einem Filesystem zu speichern. Kommt halt auch drauf an, was das Datenbanksystem taugt.
@Sirius3: Naja bisher bekam ich halt die Bilder nicht in den Filestream, ich weiß das mein Script bestimmt noch Fehler oder Unstimmigkeiten aufweisen, oder was meinst du?. Aber wie gesagt ich mach das nur nebenbei als Hobby und bringe es mir selbst bei.