AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Umgang mit Query's

Ein Thema von Ykcim · begonnen am 2. Dez 2016 · letzter Beitrag vom 2. Dez 2016
Antwort Antwort
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
856 Beiträge
 
Delphi 12 Athens
 
#1

AW: Umgang mit Query's

  Alt 2. Dez 2016, 11:25
Das habe ich versucht:

das habe ich in das "Insert_SQL-Statement" geschrieben:
Delphi-Quellcode:
insert into kommentar
(ticket_id, user_id, kommentar_datum, kommentar)
values
(:ticket_id, :user, :Datum, :kommentar)

und das habe ich in die procedure geschrieben:
Delphi-Quellcode:
procedure TForm1.UniQuery4BeforeInsert(DataSet: TDataSet);
begin
   UniQuery4.ParamByName('ticket_id').AsInteger:=UniQuery1.FieldByName('ticket_id').AsInteger;
   UniQuery4.ParamByName('user').AsInteger:=2;
   UniQuery4.ParamByName('datum').AsDateTime:=now;
   UniQuery4.ParamByName('kommentar').AsString:=DBAdvMemo2.Lines.Text;
end;
Aber die Parameter werden nicht gefunden. Sie tauchen auch nicht in der Parameterliste der Query auf. Siehe Anhang
Der Parameter Ticket_ID stammt aus dem Select Statement.

Vielen Dank
Patrick
Angehängte Grafiken
Dateityp: jpg Query4_Parameterliste.jpg (56,4 KB, 14x aufgerufen)
Patrick
  Mit Zitat antworten Zitat
Benutzerbild von mikhal
mikhal

Registriert seit: 11. Sep 2003
Ort: Linz am Rhein
796 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Umgang mit Query's

  Alt 2. Dez 2016, 11:32
Warum lässt du dir die Statements nicht automatisch generieren? Doppelklick auf die Komponente, 3. Reiter Generate, auswählen, welche Statements erstellt werden sollen (Obacht, es werden nur die Statements erzeugt, die aktiviert sind, vorher werden alle anderen Statements gelöscht!), Button Generieren drücken und auf dem 2. Reiter die Statements kontrollieren.

Dabei wirst du feststellen, dass UniDAC als Parameter die Feldnamen mit vorgestelltem Doppelpunkt verwendet und diese Parameter auch nicht in der Parameterliste der Query auftrauchen...

Grüße
Mikhal
Michael Kraemer
Computer erleichtern die Arbeit...
...und die Erde ist eine Scheibe!
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
856 Beiträge
 
Delphi 12 Athens
 
#3

AW: Umgang mit Query's

  Alt 2. Dez 2016, 11:47
Das habe ich jetzt versucht. (Bild 1)

An der Parameterliste hat sich nichts geändert.

Wenn ich auf insert klicke bekomme ich den Fehler das der Parameter "user_id" nicht gefunden wurde...
Und wenn ich die user_id weglasse und nur die ticket_id zuweise, bekomme ich zwar nicht die Fehlermeldung, aber der zugewiesene Wert wird nicht angezogen...

Also auf der einen Seite kann ich die Parameter nicht definieren und auf der anderen kann ich ihnen keinen Wert zuweisen. Ich habe offensichtlich die Funktionsweise noch nicht geblickt...

Könnt Ihr mir helfen?

Vielen Dank
Patrick
Angehängte Grafiken
Dateityp: jpg Query4_SQL_Statement.jpg (70,8 KB, 22x aufgerufen)
Patrick
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: Umgang mit Query's

  Alt 2. Dez 2016, 11:51
Ist ParamCheck true?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von mikhal
mikhal

Registriert seit: 11. Sep 2003
Ort: Linz am Rhein
796 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Umgang mit Query's

  Alt 2. Dez 2016, 11:56
Dein Fehler ist bereits hier begründet:

Zitat:
procedure TForm1.UniQuery4BeforeInsert(DataSet: TDataSet);
begin
UniQuery4.ParamByName('ticket_id').AsInteger:=UniQ uery1.FieldByName('ticket_id').AsInteger;
UniQuery4.ParamByName('user').AsInteger:=2;
UniQuery4.ParamByName('datum').AsDateTime:=now;
UniQuery4.ParamByName('kommentar').AsString:=DBAdv Memo2.Lines.Text;
end;
Ich verwende normalerweise das Event OnNewRecord, aber es sollte auch in dem gewählten Event funktionieren.

Dann verwende ich den Variablennamen DataSet, weil es mir einfach zu lästig ist, über den Query-Namen nachzudenken...

Aber der Fehler ist dein Versuch, über die Parameterliste zu gehen. Gehe über die Feldnamen und weise diesen die Werte zu...

Code:
procedure TForm1.UniQuery4BeforeInsert(DataSet: TDataSet);
begin
    UniQuery4.FieldByName('ticket_id').AsInteger:=UniQuery1.FieldByName('ticket_id').AsInteger;
    UniQuery4.FieldByName('user').AsInteger:=2;
    UniQuery4.FieldByName('datum').AsDateTime:=now;
    UniQuery4.FieldByName('kommentar').AsString:=DBAdvMemo2.Lines.Text;
Grüße
Mikhal
Michael Kraemer
Computer erleichtern die Arbeit...
...und die Erde ist eine Scheibe!
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
856 Beiträge
 
Delphi 12 Athens
 
#6

AW: Umgang mit Query's

  Alt 2. Dez 2016, 12:54
Hervorragend! Damit funktioniert es. Ich bin nicht darauf gekommen, dass ich über die Felder gehen muss...

Aber bedeutet das, das wenn ich einen Parameter habe, der nicht mit Hilfe eines DBEdit-Feldes eingegeben wird, ich das Update-Statement für alle Felder manuell machen muss?

Vielen Dank
Patrick
Patrick
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
856 Beiträge
 
Delphi 12 Athens
 
#7

AW: Umgang mit Query's

  Alt 2. Dez 2016, 12:57
@haentschman

Vielen Dank für Deine guten Tipps. Ich werde sie beherzigen. Ich denke an eine Kombination. Ich möchte schon eine klasse für alle Datenbank-Interaktionen haben. In dieser würde ich reinschreiben, was ich gerade zu Testzwecken zusammenklicke. Ich finde die Verwendung von DB-Komponenten bei Eingaben sehr charmant. Bei nur anzeigenden oder berechnenden Prozeduren würde ich es auch ohne DataSources und DB-Komponenten wieder von Hand machen.

Vielen Dank.
Patrick
Patrick
  Mit Zitat antworten Zitat
Benutzerbild von mikhal
mikhal

Registriert seit: 11. Sep 2003
Ort: Linz am Rhein
796 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Umgang mit Query's

  Alt 2. Dez 2016, 13:24
Nein, bei Änderungen übergibt UniQuery die Feldinhalte an die Parameter, du kümmerst dich nur um die zu ändernden Felder - entweder durch eine direkte Zuweisung (z.B. im Event BeforePost der UniQuery) oder ohne eigene Aktion, wenn du die verpönten datensensitiven Komponenten einsetzt (für irgendwas müssen die ja gut sein...).

Wenn du das in einer Klasse einsetzt, verwaltest du dort die Feldinhalte und schreibst letztlich wirklich alle Feldinhalte in die Parameter (weil der Verwaltungsaufwand, welches Feld geändert wurde, zu aufwändig ist).

Grüße
Mikhal
Michael Kraemer
Computer erleichtern die Arbeit...
...und die Erde ist eine Scheibe!
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#9

AW: Umgang mit Query's

  Alt 2. Dez 2016, 15:53
Noch eine Anmerkung zu "Datum":
Falls Du das aktuelle Datum und oder die aktuelle Zeit benötigst solltest du auf das SYSDATE() der DB zurück greifen. Bei Now bekommst Du das lokale Datum und Zeit zurück, und das könnte unterschiedlich sein zu dem der DB.
"Brauch ich nicht, ist alles lokal" haben schon viele gesagt, und aus lauter Gewohnheit im entscheidenden Moment Fehler in die DB hineingeschoben.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  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 04:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz