Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Daten editieren mit TQuery (https://www.delphipraxis.net/68153-daten-editieren-mit-tquery.html)

LOMBI 25. Apr 2006 14:10

Datenbank: Paradox • Version: 7 • Zugriff über: TQuery/DataSource

Daten editieren mit TQuery
 
Hallo,

wie kann ich bitte Daten editieren?

Delphi-Quellcode:
TAdrListe.BtnEditClick(Sender: TObject); //Daten ändern
...
with FAdr.QueryAdr do
  begin
    SQL.Text := 'SELECT * FROM Adr';
    Open;
    Edit;
    FAdr.EditName.Text := FAdr.QueryAdr['Name'];
    FAdr.EditVorname.Text := FAdr.QueryAdr['Vorname'];
    ...
end;
Fehlermeldung: Typkonvertierung von Variant ungültig!

Gruß
Lombi

mkinzler 25. Apr 2006 14:26

Re: Daten editieren mit TQuery
 
Warum versetzt du den Query in den Edit-Modus?

LOMBI 25. Apr 2006 14:47

Re: Daten editieren mit TQuery
 
Um eine gespeicherte Adresse auf der Eingabeform anzeigen zu
lassen und ggf. zu ändern.

mkinzler 25. Apr 2006 14:51

Re: Daten editieren mit TQuery
 
Zum Auslesen muß sicg die Datenmeneg nicht im Edit-mosus befinden und sollte sie auch nicht. Was für Typen haben die Datanbankfelder? hast du es schon mit DBEdits versucht? Alternative Ausleseverfahren( FieldByName)?

marabu 25. Apr 2006 21:36

Re: Daten editieren mit TQuery
 
Hallo Lombi,

was wahrscheinlich nicht jedem sofort klar ist - du möchtest eine Benutzerschnittstelle ohne die datensensitiven DB-Controls gestalten. Außerdem bemühst du dich um den Einsatz von Queries anstelle von Tables.

Ein Problem beim konkurrierenden Zugriff auf einen Datensatz ist stets die Konsistenzerhaltung. Zwei Sperrverfahren sind da weithin bekannt. Pessimistisches Sperren entspricht dem Vorgehen "Ressourcenbeschaffung - Operation - Ressourcenfreigabe", wie du es an vielen Stellen in deinem Programm anwendest. Bei Datenbanken (Okay - Paradox ist nicht wirklich ein RDBMS) ist dieses Verfahren allerdings verpönt, da es erfahrungsgemäß hohe Transaktionszahlen durch eine unnötig lange Lebensdauer der Sperren verhindert. Favorisiert wird mehr das Optimistische Sperrverfahren, bei dem man annimmt "es wird schon nicht schief gehen" und über einen timestamp stellt das RDBMS intern fest, ob doch etwas schief gegangen ist.

Wenn Markus dich auffordert, die Edit-Methode beim Auslesen zu meiden, dann sicher deswegen, weil auch er ein Anhänger des optimistischen Verfahrens ist. Bei Desktop-Datenbanken (wie Paradox, Access, dBase) ist aber auch der pessimistische Ansatz keine so große Sünde.

Dein SQL-Statement ist sicher nur ein Schnellschuss, in deiner Anwendung wirst du mit der Query oft genau einen einzigen Datensatz besorgen (WHERE ID = 4711). Deinen Bearbeitungsdialog solltest du so gestalten, dass er für INSERT und UPDATE verwendet werden kann. Wenn du ihm eine public Methode function Execute(ds: TDataSet): Boolean; spendierst wirst du dein Ziel wohl am schnellsten erreichen.

Deinen Konvertierungsfehler kannst du vielleicht so vermeiden:

Delphi-Quellcode:
TAdrListe.BtnEditClick(Sender: TObject); //Daten ändern
...
with FAdr do
begin
  QueryAdr.SQL.Text := Format('SELECT * FROM Adr WHERE ID = %d', [AktuellerSchluesselAusAdrListe]);
  QueryAdr.Open;
  EditName.Text := QueryAdr.FieldByName('Name').AsString;
  EditVorname.Text := QueryAdr.FieldByName('Vorname').AsString;
  // ...
  QueryAdr.Close;
end;
Verursacht wurde er wahrscheinlich durch einen NULL-Wert in einem der Felder.

Freundliche Grüße vom marabu

mkinzler 25. Apr 2006 21:56

Re: Daten editieren mit TQuery
 
Zitat:

Bei Desktop-Datenbanken (wie Paradox, Access, dBase) ist aber auch der pessimistische Ansatz keine so große Sünde.
Allerdings neigt ein Programmieren gern dazu, dies auch beizubehalten, wenn er einmal auf "richtige" SQL-Datenbanken umsteigt und dann bekommt u.U. Performanceprobleme bis hin zu Deadlocks.
Aber ich gebe zu das mein Einwand in diesem Fall nicht sein Problem gelöst hat.

LOMBI 27. Apr 2006 17:29

Re: Daten editieren mit TQuery
 
Danke zunächst für die Meldungen! Ich bin davon ausgegangen, dass die
Query ähnlich der TTable verwendet wird, also mit Query.Edit ein bestehender Datensatz in der Detailansicht geändert werden kann.
In einem früheren Versuch konnte ich mit Table.Edit ohne weiteres
die Daten anzeigen lassen. Wie bitte könnte ich denn das genauer mit der "function Execute" bewerkstelligen? Bei Grundlagen-und Profiwissen von Doberenz habe ich nicht das Richtige gefunden. Ungern würde ich wieder
auf die TTable zurückgreifen.

Ist mit [AktuelleSchlüsselAusAdrListe] der Primärschlüssel aus Paradox-Tabelle Adr gemeint?

Beste Grüße
Lombi

mkinzler 27. Apr 2006 17:37

Re: Daten editieren mit TQuery
 
Zitat:

Zitat von LOMBI
Danke zunächst für die Meldungen! Ich bin davon ausgegangen, dass die
Query ähnlich der TTable verwendet wird, also mit Query.Edit ein bestehender Datensatz in der Detailansicht geändert werden kann.
In einem früheren Versuch konnte ich mit Table.Edit ohne weiteres
die Daten anzeigen lassen.

Zum Anzeigen brauchst du das .Edit nicht. es dient, wie der Methodennamen schon andeutet, dazu den aktuellen Datensatz in den Editmodus zu versetzen. Das würde ich aber nur machen wenn wirklich geändert werden soll.
Zitat:

Ungern würde ich wieder auf die TTable zurückgreifen.
Werden wir dir bestimmt auch nicht raten.

Zitat:

Ist mit [AktuelleSchlüsselAusAdrListe] der Primärschlüssel aus Paradox-Tabelle Adr gemeint?

Beste Grüße
Lombi
[/quote]Ja.

LOMBI 28. Apr 2006 10:18

Re: Daten editieren mit TQuery
 
Das Anzeigenproblem -durch Nullwerte in einem bzw. mehreren Feldern-
habe ich leider noch nicht gelöst.

Delphi-Quellcode:
QueryAdr.SQL.Text := Format ('SELECT*FROM Adr WHERE ID=%d',['ID']);
Fehlermeldung: "'%d' ungültig oder inkompatibel mit Argument"

Wer kann bitte helfen?

Gruß
Lombi

mkinzler 28. Apr 2006 10:23

Re: Daten editieren mit TQuery
 
Delphi-Quellcode:
QueryAdr.SQL.Text := 'SELECT * FROM Adr WHERE ID='+IntToStr(ID);


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:16 Uhr.
Seite 1 von 2  1 2      

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