"Insert" in MSSQL-DB
"Insert" in MSSQL-DB
Hallo,
versuche seit Tagen erfolglos über eine TSqlQuery-Komponente einen neuen Datensatz in eine MSSQL-Datenbank einzufügen,
"Select" und "Update" funktionieren problemlos, nur "Insert" will nicht klappen!
Hätte hier vielleicht jemand mal ein funktionierendes Beispiel für ein "Insert",
wäre für etwas Nachhilfe sehr Dankbar!
Grüße eiko
versuche seit Tagen erfolglos über eine TSqlQuery-Komponente einen neuen Datensatz in eine MSSQL-Datenbank einzufügen,
"Select" und "Update" funktionieren problemlos, nur "Insert" will nicht klappen!
Hätte hier vielleicht jemand mal ein funktionierendes Beispiel für ein "Insert",
wäre für etwas Nachhilfe sehr Dankbar!
Grüße eiko
Re: "Insert" in MSSQL-DB
Wie sieht/sehen denn dein(e) Versuch(e) aus?
Was funktioniert nicht, welche Fehlermeldungen bekommst du?
Was funktioniert nicht, welche Fehlermeldungen bekommst du?
Re: "Insert" in MSSQL-DB
Hallo,
danke schonmal vorab für deine Unterstützung!
Meine Versuche sehen so aus:
Es läuft auch alles sowaeit fehlerlos durch,
erst bei "ApplyUpdates" kommt als Fehler:
danke schonmal vorab für deine Unterstützung!
Meine Versuche sehen so aus:
Code: Alles auswählen
SqlQueryQuery.Close;
SqlQueryQuery.InsertSQL.Clear;
SqlQueryQuery.InsertSQL.ADD('INSERT INTO Tabelle ');
SqlQueryQuery.InsertSQL.ADD('(Feld1, Feld2, Feld3) ');
SqlQueryQuery.InsertSQL.ADD('VALUES (''AAA'', 1, 'BBB'') ');
SqlQueryQuery.Open;
SqlQueryQuery.Insert;
SqlQueryQuery.Post;
SqlQueryQuery.ApplyUpdates;
erst bei "ApplyUpdates" kommt als Fehler:
Zuletzt geändert von Lori am Mo 26. Mär 2012, 18:04, insgesamt 1-mal geändert.
Grund: Bitte richtigen Highlighter nehmen
Grund: Bitte richtigen Highlighter nehmen
-
- Beiträge: 90
- Registriert: Fr 2. Nov 2007, 13:32
- OS, Lazarus, FPC: Win (L 1.0 FPC 2.6.0)
- CPU-Target: 32Bit
- Wohnort: Ulm
Re: "Insert" in MSSQL-DB
Ah, der klassische Fehler:
für Abfragen "Open", aber für Updates,Inserts etc. immer SQLQuery.ExecSQL
für Abfragen "Open", aber für Updates,Inserts etc. immer SQLQuery.ExecSQL
Re: "Insert" in MSSQL-DB
Wenn ich aber statt "Open" dann "ExecSQL" ausführe bekomme ich als Fehler:
"Operation cannot be performed on an inactive Dataset"
Gebs zu, bin etwas ratlos!
"Operation cannot be performed on an inactive Dataset"
Gebs zu, bin etwas ratlos!
Re: "Insert" in MSSQL-DB
Versuchs mal mit parametrisierte Abfragen, Beispiel für Insert am Ende.
http://wiki.lazarus.freepascal.org/Work ... Parameters" onclick="window.open(this.href);return false;
http://wiki.lazarus.freepascal.org/Work ... Parameters" onclick="window.open(this.href);return false;
Re: "Insert" in MSSQL-DB
So, neuer Stand!
Bekomme dann leider nur die Fehlermeldung:
"Paramater "FLD1" not found!
Hab auch versuchsweise mal FLD1 in SqlNrQuery.Parameters von Hand angelegt,
aber auch dann kommt die gleiche Fehlermeldung.
Noch jemand Ideen?
Grüße eiko
Code: Alles auswählen
SqlQuery.Close;
SqlQuery.InsertSQL.Clear;
SqlQuery.InsertSQL.Add('INSERT INTO Tabelle ');
SqlQuery.InsertSQL.Add('(Feld1 Feld2, Feld2) ');
SqlQuery.InsertSQL.Add('VALUES (:FLD1, :FLD2, :FLD3) ');
SqlQuery.Params.ParamByName('FLD1').AsString := 'AAA';
SqlQuery.Params.ParamByName('FLD2').AsInteger := 1;
SqlQuery.Params.ParamByName('FLD3').AsString := 'BBB';
SqlQuery.ExecSQL;
SqlTransaction.Commit;
"Paramater "FLD1" not found!
Hab auch versuchsweise mal FLD1 in SqlNrQuery.Parameters von Hand angelegt,
aber auch dann kommt die gleiche Fehlermeldung.
Noch jemand Ideen?
Grüße eiko
Re: "Insert" in MSSQL-DB
Nimm mal nicht insertSQL sondern tatsächlich wie im Beispiel SqlQuery.Text und SqlQuery.ExecSQL;
Re: "Insert" in MSSQL-DB
Code: Alles auswählen
SqlQuery.Close;
SqlQuery.SQL.Clear;
SqlQuery.SQL.Text := 'INSERT INTO Tabelle (Feld1 Feld2, Feld2) VALUES (:FLD1, :FLD2, :FLD3)';
SqlQuery.Params.ParamByName('FLD1').AsString := 'AAA';
SqlQuery.Params.ParamByName('FLD2').AsInteger := 1;
SqlQuery.Params.ParamByName('FLD3').AsString := 'BBB';
SqlQuery.ExecSQL;
SqlTransaction.Commit;
Re: "Insert" in MSSQL-DB
"Zeichenfolge oder Binärdaten werden abgeschnitten"
Wie sieht denn die Tabellendefinition aus?
Wie sieht denn die Tabellendefinition aus?
-
- Beiträge: 90
- Registriert: Fr 2. Nov 2007, 13:32
- OS, Lazarus, FPC: Win (L 1.0 FPC 2.6.0)
- CPU-Target: 32Bit
- Wohnort: Ulm
Re: "Insert" in MSSQL-DB
Fehlt ein Komma zwischen Feld1 und Feld2 bzw. Feld2 doppelt?
Schon mal mitprobiert, ob es prinzipiell klappt?
Schon mal mit
Code: Alles auswählen
INSERT INTO Tabelle (Feld1,Feld2,Feld3) VALUES ('AAA',1,'BBB')
-
- Beiträge: 340
- Registriert: Di 12. Sep 2006, 08:57
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
- Kontaktdaten:
Re: "Insert" in MSSQL-DB
Du musst beim Insert den Not-Null-Feldern Werte zufügen. Das ist obligatorisch. Und wo bitte heißen denn in der Tabelle Felder "Feld1", "Feld2" etc.?
Grüße, Antrepolit
care only if your os is really burning
care only if your os is really burning
Re: "Insert" in MSSQL-DB
Tschuldigung daß ich nicht gleich alle Firmendetails preisgegeben hab!Antrepolit hat geschrieben:Du musst beim Insert den Not-Null-Feldern Werte zufügen. Das ist obligatorisch. Und wo bitte heißen denn in der Tabelle Felder "Feld1", "Feld2" etc.?
Das Not-Null-Feld "ID" ist ein sich automatisch selber hochzählendes Feld, da darf ich keinen Wert angeben
und das Feld "Zusatz" hat als Standardwert "".
Hier dann also das Original!
Code: Alles auswählen
SqlQuery.SQL.Text := 'INSERT INTO SNSerienNr (IdentNr, SerienNr, EtikettTyp) VALUES (:IDNR, :SERNR, :TYP)';
SqlQuery.Params.ParamByName('IDNR').AsString := 'AAA';
SqlQuery.Params.ParamByName('SERNR').AsInteger := 1;
SqlQuery.Params.ParamByName('TYP').AsString := 'BBB';
SqlQuery.ExecSQL;
SqlTransaction.Commit;
Schade!
Grüße eiko
Re: "Insert" in MSSQL-DB
Grundsätzlich funktioniert dieses Beispiel. Es müssen aber auch die Voraussetzungen im 'Hintergrund' gegeben sein. Dazu gehört, daß allen Feldern mit NOT NULL ein Wert zugewiesen wird. Wenn wie in deinem Beispiel ein Feld (ID) automatisch von der Datenbank belegt werden soll, dann verwendet man dafür üblicherweise Trigger (z.B. einen Before-Insert-Trigger). Möglicherweise ist dir irgendwo ein Tippfehler unterlaufen, der die korrekte Zuordnung verhindert und so zu einem Fehler führt.
knight
knight