Seite 2 von 3

Re: Python und MS SQL FILESTREAM

Verfasst: Samstag 13. April 2019, 10:13
von __deets__
Du brauchst schon einen Platzhalter PRO Argument. Also 3 in deinem Fall.

Re: Python und MS SQL FILESTREAM

Verfasst: Samstag 13. April 2019, 11:05
von badi113
Hab ich ausprobiert, leider ohne erfolg. :(

Code: Alles auswählen

	if result is None:
                
                sql_eintrag = [(123,  test ,  bild1)]

                cur.execute("insert into " + tabelle + \
                "(Id, SerialNumber, Chart)values(?, ?, ?)", sql_eintrag)    
                
                
            else:
                print("weiter")
                tkinter.messagebox.showwarning("info", "Werkzeug schon vorhanden")
                
            con.commit()
            con.close()
            abbrechen()
Fehler:
"(Id, SerialNumber, Chart)values(?, ?, ?)", sql_eintrag)
pyodbc.ProgrammingError: ('The SQL contains 3 parameter markers, but 1 parameters were supplied', 'HY000')

Re: Python und MS SQL FILESTREAM

Verfasst: Samstag 13. April 2019, 11:34
von __deets__
Und dann musst du statt einer Liste von drei Parametern eben drei Parameter angeben.

Re: Python und MS SQL FILESTREAM

Verfasst: Samstag 13. April 2019, 11:54
von badi113
So, habe jetzt variablen einzeln hingesetzt

Code: Alles auswählen

	if result is None:
                
                sql_id = 1234

                cur.execute("insert into " + tabelle + \
                "([Id], [SerialNumber], [Chart])values(?, ?, ?)", sql_id, test,  bild1)    
                
                
            else:
                print("weiter")
                tkinter.messagebox.showwarning("info", "Werkzeug schon vorhanden")
                
            con.commit()
            con.close()
            abbrechen()
Fehler:
"([Id], [SerialNumber], [Chart])values(?, ?, ?)", sql_id, test, bild1)
pyodbc.DataError: ('22018', '[22018] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Operandentypkollision: bigint ist inkompatibel mit uniqueidentifier (206) (SQLExecDirectW); [22018] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Anweisung(en) konnte(n) nicht vorbereitet werden. (8180)')
>>>

Aber müsste sich Id nicht selbst generieren?

Re: Python und MS SQL FILESTREAM

Verfasst: Samstag 13. April 2019, 12:02
von __deets__
Keine Ahnung. Das ist jetzt ODBC/Microsoft spezifisch. Nicht meine Baustelle. Mein googeln so gut wie dein googeln.

Re: Python und MS SQL FILESTREAM

Verfasst: Samstag 13. April 2019, 12:17
von Sirius3
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.

Re: Python und MS SQL FILESTREAM

Verfasst: Samstag 13. April 2019, 12:32
von badi113
@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

Re: Python und MS SQL FILESTREAM

Verfasst: Samstag 13. April 2019, 12:37
von Sirius3
Das mußt Du doch selbst wissen, denn Du hast die Tabelle erzeugt.

Re: Python und MS SQL FILESTREAM

Verfasst: Samstag 13. April 2019, 12:42
von badi113
@Sirius3: Klick jetzt weiß ich wieder, das steht bei ID drinne.

Aber so ganz genau weiß ich das nicht da ich das so kopiert habe :|

Re: Python und MS SQL FILESTREAM

Verfasst: Samstag 13. April 2019, 17:16
von sparrow
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.

Re: Python und MS SQL FILESTREAM

Verfasst: Montag 15. April 2019, 10:13
von badi113
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.

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()
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?.

Re: Python und MS SQL FILESTREAM

Verfasst: Montag 15. April 2019, 10:29
von __blackjack__
@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.

Re: Python und MS SQL FILESTREAM

Verfasst: Montag 15. April 2019, 10:42
von __deets__
@__blackjack__: die Fehlermeldung die er vorher bekommen hat, suggeriert das er eben doch mehrere Argumente uebergeben muss. Ggf. ist pyodbc da nicht-standard?

Re: Python und MS SQL FILESTREAM

Verfasst: Montag 15. April 2019, 10:50
von Sirius3
@__deets__: nein, die vorherige Fehlermeldung sagte, dass er keine Liste von Tuplen übergeben darf. Der OP hat etliche Varianten durchgeraten, aber nie die richtige erwischt.

Re: Python und MS SQL FILESTREAM

Verfasst: Montag 15. April 2019, 10:55
von __deets__
Ahhh. Nunja, der Rate-Raum ist ein grosser welcher....