![]() |
Datenbank: Delphi-Datenbank • Zugriff über: SQL.Query
Datenbankeintrag über Editfelder
Hallo habe ein kleines Problem was ich irgendwie nicht beseitigt bekomme.
Ich will einen Datenbankeintrag (über Query) hinzufügen, doch wie mache ich das am bestens, wenn ich nicht das Grid nutzen will, sondern Edit-Felder. Villeicht kann mir jemand einen Tipp oder den entsprechenden Code geben. THX Scuby |
Re: Datenbankeintrag über Editfelder
Hai scuby,
Es gibt da verschiedene wege. Zum einen kannst Du dein TDataSet (Query) mit ![]() ![]() Dann kannst Du mit query.FieldByName('blubb').AsString := Edit1.Text den Inhalt von Edit1 in die Spalte blubb keiner Tabelle schreibe. In beiden Fällen ist ein abschliessendes ![]() Von diesem Weg bin ich persönlich abgekommen. Ich arbeite fast nur noch mit reinen SQL-Kommandes. Zum Beispiel;
SQL-Code:
Wenn Du anstelle eines UpDates einen neuen Datensatz einfügen möchtest dann musst Du natürlich mit dem SQL-Kommando INSERT arbeiten.
UPDATE tabelle SET feldname=wert WHERE bedingung
|
Re: Datenbankeintrag über Editfelder
Hallo scuby
Wenn Du über die UpdateSQL Komponente verfügst kannst Du diese mit der Query verbinden. 1 Query UpdateObject 2 mit der rechten Maustaste auf die UpdateSQL UpdateSQL Editor 3 Schlüsselfeld festlegen und Updatefelder 4 SQL erzeugen (kann man auch gut nutzen wenn man zu faul ist SQL-Code zu tippen) 5 Die Queryeigenschaften AutoRefresh = True und RequestLive = True dann kannst du DBEditfelder einsetzen insert edit post.... oder die erzeugten SQLs kopieren und in drei extra SQLs einfügen. Insert Update Delete Dann kannst Du die parameter mit Deinen Edit-werten beschreiben
Delphi-Quellcode:
Gruß texas
Insertsql.parambyname(´Name´).AsString := Edit1.text;
Insertsql.parambyname(´Strasse´).AsString := Edit2.text; Insertsql.parambyname(´Zahl´).AsInteger := strtoint(Edit1.text); //(auf feldtypen achten) . . .insertsql.ExecSQL; |
Re: Datenbankeintrag über Editfelder
Hm.... Irgendwie hilft mir das alles nicht weiter ich habe momentan die volle Blokade in diesem Bereich. Könnte mir jemand ein kleines beispielprogramm mal geben, amit ich mir das mal in der Praxis anschauen könnte.
THX Scuby |
Re: Datenbankeintrag über Editfelder
Liste der Anhänge anzeigen (Anzahl: 1)
Hai scuby,
im Anhang ist ein 08/15 Beispiel. Da fehlen natürlich alle möglichen Abfragen usw. Wie schon erwähnt würde ich normalerweise mit reinen SQL-Befehlen arbeiten. Aber dafür fehlt mir auf die schnelle die Zeit ;-) P.S.: Das Programm arbeitet mit einer ACCESS-DB |
Re: Datenbankeintrag über Editfelder
Danke für das Programm, doch ich wollte es etwas anders machen, villeicht könnt ihr mal gucken, wo hier der Fehler liegt, das er das nicht einträgt,wiefesagt volle blokade!! *wein*
Delphi-Quellcode:
procedure TForm4.Button2Click(Sender: TObject);
var s : String; begin s := 'select Name,Vorname,Gebdat,Straße,hnr,plz,ort,tel,fahrschule from teilnehmer'; query1.close; Query1.Sql.Clear; Query1.Sql.Add(s); Query1.ExecSQL; Query1.Active:=true; if (Edit1.Text = '') or (Edit2.Text = '') or (Edit3.Text = '') or (Edit4.Text = '') or (Edit5.Text = '') or (Edit6.Text = '') then showmessage('Bitte füllen Sie alle Felder mit einem " * " aus!') else begin Query1.FieldByName('Name').AsString := edit1.text; Query1.FieldByName('Vorname').AsString := edit2.text; Query1.FieldByName('Gebdat').AsString := edit3.text; Query1.FieldByName('Straße').AsString := edit4.text; Query1.FieldByName('Hnr').AsString := edit5.text; Query1.FieldByName('PLZ').AsString := edit6.text; Query1.FieldByName('Ort').AsString := edit7.text; Query1.FieldByName('tel').AsString := edit8.text; Query1.FieldByName('Fahrschule').AsString := edit9.text; Query1.FieldbyName('Kurs').ASString := Label2.Caption; Query1.Insert; end; end; |
Re: Datenbankeintrag über Editfelder
Hi Scuby,
in Feldnamen (Straße) solltest du besser keine Sonderzeichen verwenden. Außerdem solltest du deinen Komponenten und der Form einen aussagefähigen Namen geben. Dann solltest du deinen Code besser organisieren, damit er leichter zu lesen ist. Was ist der Primärschlüssel deiner Tabelle? Wenn du die Tabellen-Struktur für ein Insert benötigst, warum holst du dann alle Datensätze aus der Tabelle? Wenn du im Feld Kurs etwas eingeben willst, warum fehlt dann dieses Feld in deiner Abfrage? Bist du sicher, dass deine Prüfbedingung und die Meldung in Ordnung sind? Beachte bitte meine Änderungen am Quellcode:
Delphi-Quellcode:
Grüße vom marabu
function TTeilnehmerDialog.EingabeOK: boolean;
begin Result := not ( (NameEdit.Text = '') or ... or (VornameEdit.Text = '') ); end; procedure TTeilnehmerDialog.SaveButtonClick(Sender: TObject); const SQL_SELECT = 'SELECT name, vorname, gebdat, strasse, hausnr, plz, ort, tel, fahrschule, kurs ' + 'FROM teilnehmer WHERE 1 = 0'; begin if not EingabeOK then begin ShowMessage('Bitte füllen Sie alle Felder mit einem " * " aus!'); Exit; end; with Query1 do begin Sql.Text := SQL_SELECT; Open; Insert; FieldByName('Name').AsString := NameEdit.Text; ... FieldByName('Vorname').AsString := VornameEdit.text; Post; end; end; |
Re: Datenbankeintrag über Editfelder
Sagt mal geht das überhaupt so???
Soweit ich weis muss man da min. ein UPDSQL haben oder per Insert oder UPDATE die Daten in die DB Speichern. |
Re: Datenbankeintrag über Editfelder
Hi Frank,
so geht das:
Delphi-Quellcode:
marabu
Query.RequestLive := true;
|
Re: Datenbankeintrag über Editfelder
Delphi-Quellcode:
procedure TForm4.Button2Click(Sender: TObject);
var s : String; begin s := 'select Name,Vorname,Gebdat,Straße,hnr,plz,ort,tel,fahrschule from teilnehmer'; query1.close; Query1.Sql.Text := s; // Query1.ExecSQL; // falsch Query1.Active:=true; if (Edit1.Text = '') or (Edit2.Text = '') or (Edit3.Text = '') or (Edit4.Text = '') or (Edit5.Text = '') or (Edit6.Text = '') then raise Exception.Create('Bitte füllen Sie alle Felder mit einem " * " aus!'); Query1.Insert; // zuerst Insert (oder eher Append) Query1.FieldByName('Name').AsString := edit1.text; Query1.FieldByName('Vorname').AsString := edit2.text; Query1.FieldByName('Gebdat').AsString := edit3.text; Query1.FieldByName('Straße').AsString := edit4.text; Query1.FieldByName('Hnr').AsString := edit5.text; Query1.FieldByName('PLZ').AsString := edit6.text; Query1.FieldByName('Ort').AsString := edit7.text; Query1.FieldByName('tel').AsString := edit8.text; Query1.FieldByName('Fahrschule').AsString := edit9.text; Query1.FieldbyName('Kurs').ASString := Label2.Caption; Query1.Post; // und dann post end; |
Re: Datenbankeintrag über Editfelder
Zitat:
|
Re: Datenbankeintrag über Editfelder
Hi Frank,
du kannst RequestLive nicht für beliebige Anfragen setzen. Die Komponente TQuery bietet diese property in Verbindung mit CanModify an, um die Arbeit mit einem aktualisierbaren Cursor zu ermöglichen, falls ein solcher von der Datenbank resp. middle-ware unterstützt wird. In der Regel gilt, dass die Projektion einer Basis-Tabelle bearbeitet werden kann, während ein Join nur gelesen werden kann. Alles klar? marabu |
Re: Datenbankeintrag über Editfelder
Jop deshalb hat es wohl bei mir nie geklappt :-D
|
Re: Datenbankeintrag über Editfelder
Delphi-Quellcode:
In diesem Bereich steckt irgendwo ein Fehler drin, doch finde ich ihn mal wieder nicht!!! (Überlegt gerade das Programieren naczulassen)
begin
Query1.Insert; Query1.FieldByName('Name').AsString := edit1.text; Query1.FieldByName('Vorname').AsString := edit2.text; Query1.FieldByName('Gebdat').AsString := edit3.text; Query1.FieldByName('Straße').AsString := edit4.text; Query1.FieldByName('Hnr').AsString := edit5.text; Query1.FieldByName('PLZ').AsString := edit6.text; Query1.FieldByName('Ort').AsString := edit7.text; Query1.FieldByName('tel').AsString := edit8.text; Query1.FieldByName('Fahrschule').AsString := edit9.text; Query1.FieldbyName('Kurs').ASString := Label2.Caption; Query1.Post; end; Ich würde mich freuen, wenn ihr den Fehler mal wieer finden könntet. |
Re: Datenbankeintrag über Editfelder
Hi scuby,
du hast vergessen mitzuteilen, welcher Fehler in diesem Bereich gemeldet wird. marabu |
Re: Datenbankeintrag über Editfelder
Hallo ich hab da auchmal ne frage aber ich weiß nicht ob da hier überhaupt die passende stelle ist.
Ich hab am Mittwoch mit Delphi angefangen, also noch keinen Ahnung. Mein Problem ist das ich wenn ich ein neuen Tupel in eine Tabellen einfühgen will erscheint zwar ein neues Tupel aber der der datumswert ist immer auf 1.1.1900 gesetzt. In der Tabelle werden in der Spallte aber auch NULL-Werte zugelasen, und wenn ich die anfrage direkt auf der DB ausführe geht es auch.
Code:
jetzt hab ich das so wie oben mit dem if(km <> '') and (term = '') then sqlstring := 'INSERT INTO AUTOS_UNTERSUCHUNGEN '+ 'SELECT Max(PK)+1 AS PK, '+num+' AS PKAUTOS, null AS FESTER_TERMIN, ' +km+' AS NACH_KILOMETER, '+besch+' AS BESCHREIBUNG FROM AUTOS_UNTERSUCHUNGEN'; with Query_AUTOS_UNTERSUCHUNGEN do begin Close; SQL.Clear; SQL.Add(sqlstring); ExecSQL; end;
Code:
probiert das geht bei mir auchnicht. da gibt die Fehlermeldung das nur Lesender zugriff auf die datenbank gewährt wird. Hab kein Plan was ich machen muss.
with Query1 do begin
Sql.Text := SQL_SELECT; Open; Insert; FieldByName('Name').AsString := NameEdit.Text; ... FieldByName('Vorname').AsString := VornameEdit.text; Post; end; Danke im voraus Thomas |
Re: Datenbankeintrag über Editfelder
Hallo Thomas,
herzlich willkommen in der Delphi-PRAXiS. Dein erster Lösungsansatz hat doch offenbar funktioniert? Allerdings bin ich nicht sicher, ob ich verstehe, warum du die Aggregate, die du auf deiner Tabelle berechnest, auch in der gleichen Tabelle speichern willst. Sieht nach einer Auswertung aus, aber solche Ergebnisse speichert man doch nicht in der Basis-Tabelle. Dass der zweite Ansatz nicht funktioniert, könnte daran liegen, dass du bei der Query nicht RequestLive := true eingestellt hast. Grüße vom marabu |
Re: Datenbankeintrag über Editfelder
Hi,
danke für die schnelle antwort. Berechnen tue ich gar nichts, ich schaufe erst ob die eingaben km und term aus Edit-Feldern vorhanden bzw. nicht vorhanden sind. Dann will ich ein Tupel einfühgen, sodas bei FESTER_TERMIN (typ: datetime) einen Null-wert hat. Aber in der Tabelle steht dann immer '1.1.1900' und das soll nicht sein, da soll dann einfach nicht stehen. Wenn ich RequestLive auf True setze kommt das immernoch. ich weis nicht was ich falsch mache. thomas |
Re: Datenbankeintrag über Editfelder
Hi hab meine fehler.
hatte den an ner ganz ander stelle. hatte im vergleich '= null' anstelle von 'is null' sry für die umstände und nochmals danke für die schnelle hilfe gruß thomas |
Re: Datenbankeintrag über Editfelder
Delphi-Quellcode:
In diesem Bereich steckt noch imer mein ehler und zwar bekomme ich immer die Meldung das nur Lesesender zugriff haben aber keine Schreibsender. Wie kann ich das umehen, so das ich aus meinen Editfeldern einen Eintrag in die DB machen kann?!
begin
Query1.Insert; Query1.FieldByName('Name').AsString := edit1.text; Query1.FieldByName('Vorname').AsString := edit2.text; Query1.FieldByName('Gebdat').AsString := edit3.text; Query1.FieldByName('Straße').AsString := edit4.text; Query1.FieldByName('Hnr').AsString := edit5.text; Query1.FieldByName('PLZ').AsString := edit6.text; Query1.FieldByName('Ort').AsString := edit7.text; Query1.FieldByName('tel').AsString := edit8.text; Query1.FieldByName('Fahrschule').AsString := edit9.text; Query1.FieldbyName('Kurs').ASString := Label2.Caption; Query1.Post; end; |
Re: Datenbankeintrag über Editfelder
Hast du schon Query1.RequestLive := true gesetzt?
marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:24 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 by Thomas Breitkreuz