AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi INSERT INTO parameterisiert funktioniert nicht
Thema durchsuchen
Ansicht
Themen-Optionen

INSERT INTO parameterisiert funktioniert nicht

Ein Thema von Mackhack · begonnen am 21. Aug 2009 · letzter Beitrag vom 21. Aug 2009
Antwort Antwort
Benutzerbild von Mackhack
Mackhack

Registriert seit: 29. Nov 2003
Ort: San Diego, CA/USA
1.446 Beiträge
 
Delphi 2006 Architect
 
#1

INSERT INTO parameterisiert funktioniert nicht

  Alt 21. Aug 2009, 04:31
Datenbank: FB • Version: 2.1 • Zugriff über: IB
Hallo DPler,

weis jemand warum dieser Code mir 2 Probleme bereitet?

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  IBDatabase1.Connected := true;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  IBQuery1.Transaction.StartTransaction;
  try
    IBQuery1.SQL.Text := 'SELECT * FROM Test';
    IBQuery1.Open;

    while not IBQuery1.Eof do
    begin
      ListBox1.Items.Add(IBQuery1.Fields[0].AsString);
      IBQuery1.Next;
    end;

    IBQuery1.Close;

  finally
    IBQuery1.Transaction.Rollback;
  end;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  IBQuery1.Active := False;
  IBQuery1.SQL.Text := 'INSERT INTO Test(acol, bcol) VALUES(:acol, :bcol)';
  IBQuery1.ParamByName('acol').AsInteger := 70001;
  IBQuery1.ParamByName('bcol').AsString := 'Tabby';
  ShowMessage(IBQuery1.SQL.Text);
  IBQuery1.ExecSQL;
  IBQuery1.Active := True;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  IBDatabase1.Connected := false;
end;
Als erstes Funktioniert das Einfuegen in die DB nicht und zum zweiten wenn ich auf Button2 klicke bekomme ich den Fehler "Transaction is active" und weis nicht wirklich was damit anzufangen.

Vlt. kann mir jemand helfen mit dem Beispielcode umzugehen?

Danke!
Um etwas Neues zu schaffen muss man seine Ohren vor den Nein-sagern verschliessen um seinen Geist öffnen zu können.
(George Lukas)
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#2

Re: INSERT INTO parameterisiert funktioniert nicht

  Alt 21. Aug 2009, 05:37
Zitat von Mackhack:
Als erstes Funktioniert das Einfuegen in die DB nicht
Bist du sicher? Wie hast du das überprüft?
Gibt es schon einen Datensatz mit [70001, 'Tabby'] ?
Hast die Tabelle weitere Felder mit dem Attribut NOT NULL dass das Einfügen verhindert?

Zitat von Mackhack:
und zum zweiten wenn ich auf Button2 klicke bekomme ich den Fehler "Transaction is active"
Du greifst hier nur lesend auf die Daten zu.
Eine Transaction ist nicht notwendig. IBQuery1.Transaction.StartTransaction und IBQuery1.Transaction.Rollback weglassen.

Ausserdem: es ist besser jeweils eine eigene Query-Komponente für jede SQL-Anweisung zu benützen.
Dann kannst du das Property SQL im Objektinspektor festlegen und dann gleich prüfen
ob ggf. vorhandene Parameter den richtigen Datentp haben.
Falls zur Entwicklungszeit keine Verbindung zur Datenbank besteht kann der Datentyp der Parameter nicht ermittelt werden.
Bei Parametern ist der Datentyp sehr wichtig; ein falscher/unbekannter Datentyp ist der Hauptgrund für Probleme mit Parametern.
fork me on Github
  Mit Zitat antworten Zitat
Benutzerbild von Mackhack
Mackhack

Registriert seit: 29. Nov 2003
Ort: San Diego, CA/USA
1.446 Beiträge
 
Delphi 2006 Architect
 
#3

Re: INSERT INTO parameterisiert funktioniert nicht

  Alt 21. Aug 2009, 06:36
Hallo,

Zitat von sx2008:
Zitat von Mackhack:
Als erstes Funktioniert das Einfuegen in die DB nicht
Bist du sicher? Wie hast du das überprüft?
Gibt es schon einen Datensatz mit [70001, 'Tabby'] ?
Hast die Tabelle weitere Felder mit dem Attribut NOT NULL dass das Einfügen verhindert?
ich habe mit ISQL nachgeschaut und da ist kein 70001, Tabby vorhanden.

Zitat von sx2008:
Zitat von Mackhack:
und zum zweiten wenn ich auf Button2 klicke bekomme ich den Fehler "Transaction is active"
Du greifst hier nur lesend auf die Daten zu.
Eine Transaction ist nicht notwendig. IBQuery1.Transaction.StartTransaction und IBQuery1.Transaction.Rollback weglassen.
Ich weis zu meiner Schande noch nicht mal so recht warum ich das IBQuery1.Transaction.StartTransaction und IBQuery1.Transaction.Rollback drin habe. Ich bin recht neu was FB angeht so verzeiht mir bitte. Auch was die IB Kompos angeht so ist es mein aller erstes mal.

Zitat von sx2008:
Ausserdem: es ist besser jeweils eine eigene Query-Komponente für jede SQL-Anweisung zu benützen.
Dann kannst du das Property SQL im Objektinspektor festlegen und dann gleich prüfen
ob ggf. vorhandene Parameter den richtigen Datentp haben.
Falls zur Entwicklungszeit keine Verbindung zur Datenbank besteht kann der Datentyp der Parameter nicht ermittelt werden.
Bei Parametern ist der Datentyp sehr wichtig; ein falscher/unbekannter Datentyp ist der Hauptgrund für Probleme mit Parametern.
Zur Entwicklungszeit ist die Verbindung zur DB getrennt. Was meinst du denn mit dem "Property SQL im OI festlegen"???
Um etwas Neues zu schaffen muss man seine Ohren vor den Nein-sagern verschliessen um seinen Geist öffnen zu können.
(George Lukas)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: INSERT INTO parameterisiert funktioniert nicht

  Alt 21. Aug 2009, 06:37
Wie sind die Transkationseinstellungen?

BTW ist der Cast des Parametertyps dann auch nicht nötig
Zitat:
IBQuery1.ParamByName('acol').AsInteger := 70001;
IBQuery1.ParamByName('acol').Value := 70001; [Edit:
Zitat:
Zur Entwicklungszeit ist die Verbindung zur DB getrennt. Was meinst du denn mit dem "Property SQL im OI festlegen"???
Eine extra Kompo nehmen, in welche du das INSERT-Statement im Designer einträgst. Oder du mimmst gleich ein IBDataSet
]
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Mackhack
Mackhack

Registriert seit: 29. Nov 2003
Ort: San Diego, CA/USA
1.446 Beiträge
 
Delphi 2006 Architect
 
#5

Re: INSERT INTO parameterisiert funktioniert nicht

  Alt 21. Aug 2009, 06:44
Hab mal n Screenshot angehaengt.

Und warum ist bei IBQuery1 ein gelbes dickes Fragezeichen?

//Edit: Ich hab jetzt ca. 12 mal 70001 drin da ich es zig mal wohl eingetragen habe. Ich hab dieses
IBQuery1.Transaction.StartTransaction; und
IBQuery1.Transaction.Rollback; rausgemacht und sie werden angezeigt.

Was genau machen denn diese 2 Zeilen?
Miniaturansicht angehängter Grafiken
transactions_157.png  
Um etwas Neues zu schaffen muss man seine Ohren vor den Nein-sagern verschliessen um seinen Geist öffnen zu können.
(George Lukas)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: INSERT INTO parameterisiert funktioniert nicht

  Alt 21. Aug 2009, 07:31
.StartTransaction startet eine Transaktion und .RollBack verwirft die Änderungen
Da aber AutoCommit aktiviert ist ist dies nicht notwendig.
Bei Select-Abfragen ist es übrigens egal ob Commitet oder zurückgefahren wird.
Markus Kinzler
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: INSERT INTO parameterisiert funktioniert nicht

  Alt 21. Aug 2009, 07:52
Will mich nicht wirklich einmischen, aber bei meinem letzten und bisher einzigen Projekt mit FB und IB-Komponenten musste ich um jede, aber auch wirklich jede Anweisung in eine Transaktion kapseln, selbst ein SELECT musst so abgesetzt werden. Nur dann hat es funktioniert.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: INSERT INTO parameterisiert funktioniert nicht

  Alt 21. Aug 2009, 07:55
Die Autocommit-Option macht dies automatisch. Diese macht imho aber nur bei Selects Sinn.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Mackhack
Mackhack

Registriert seit: 29. Nov 2003
Ort: San Diego, CA/USA
1.446 Beiträge
 
Delphi 2006 Architect
 
#9

Re: INSERT INTO parameterisiert funktioniert nicht

  Alt 21. Aug 2009, 07:56
Zitat von mkinzler:
Die Autocommit-Option macht dies automatisch. Diese macht imho aber nur bei Selects Sinn.
Ich sehe das AutoCommit gar nicht. Wo ist denn das?
Um etwas Neues zu schaffen muss man seine Ohren vor den Nein-sagern verschliessen um seinen Geist öffnen zu können.
(George Lukas)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: INSERT INTO parameterisiert funktioniert nicht

  Alt 21. Aug 2009, 07:58
DefaultAction: TACommit
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz