AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Datenbank-Programmierung mit UPDATE (SQL)

Datenbank-Programmierung mit UPDATE (SQL)

Offene Frage von "haentschman"
Ein Thema von Reedx · begonnen am 19. Feb 2020 · letzter Beitrag vom 26. Feb 2020
Antwort Antwort
Seite 1 von 3  1 23   
Reedx

Registriert seit: 19. Feb 2020
26 Beiträge
 
Delphi 7 Enterprise
 
#1

Datenbank-Programmierung mit UPDATE (SQL)

  Alt 19. Feb 2020, 14:07
Datenbank: Access • Version: office 16 • Zugriff über: OLEB Provider Microsoft Jet
Hallo
bin neu hier, deswegen entschuldige ich mich im Vorfeld, falls ich hier etwas schreibe, was schon tausend mal nachgefragt wurde. Zudem entschuldige ich mich, falls ich hier etwas falsch einstelle ..

Ich muss derzeit für die Schule ein Projekt erarbeiten mit Delphi 7 Enterprise und habe mich für ein Quiz entschieden. Nun möchte ich, dass der Admin bereits bestehende Fragen (aus meiner Datenbank) ändern kann. Die Fragen lasse ich in einer DBGrid darstellen, bestehend aus folgenden Spalten: ID Fach Schwierigkeit Frage L1 L2 L3 Lösung
Ich hab es folgend programmiert. Fehlermeldung kommt keine mehr! Allerdings wird die Änderung nicht ausgeführt und nicht in meiner Datenbank geändert. Die Art und Weise wie ich programmiere, hab ich so in der Schule gelernt. Zudem muss ich noch sagen, dass mir programmieren einfach nicht liegt und ich es auch nicht sonderlich mag. Bin aber trotzdem sehr stolz auf das bisher erreichte.

Im Anhang hab ich noch ein Bild vom Formular eingefügt, zum besseren Vorstellen. Die erste Zeile hab ich provisorisch so eingegeben, um zu testen.

Delphi-Quellcode:
procedure TFormbearb.ButtonbearbClick(Sender: TObject);
var antw:integer; query:ANSIstring;
begin

if (EditID.Text='') and (EditFach.Text='') and (EditSchw.Text='') and (Editfr.Text='') and (Editl1.Text='') and (Editl2.Text='') and (Editl3.Text='') and (Editlr.Text='') then
     begin
     application.MessageBox('Bitte alle Felder ausfüllen','Fehler');
     end else
      begin
        antw:= MessageDlg('Frage wirklich bearbeiten? ',mtConfirmation,[mbyes,mbNo],0);
                                          //Message mit Fragezeichen, Möglk. Ja/Nein
        Datamodule1.ADOQuery4.SQL.Clear;
      if antw = mrYes then //mrYes - Benutzer auf yes
       begin //Frage bearbeiten
        query:= 'UPDATE Fragen SET Fach=' +quotedstr(Editfr.Text)+ ', Schwierigkeit='+quotedstr(Editschw.Text)+', Frage='+quotedstr(Editfr.Text)+', L1='+quotedstr(Editl1.Text)+', L2='+quotedstr(Editl2.Text)+', L3='+quotedstr(Editl3.Text)+', Lösung='+quotedstr(Editlr.Text)+' '+
                'WHERE ID= :ID';
        Datamodule1.ADOQuery4.SQL.Add(query);
        Datamodule1.ADOQuery4.ExecSQL;
        application.MessageBox('Frage wurde überarbeitet!','Meldung');
   end else
   begin
     application.MessageBox('Frage wird nicht überarbeitet!','Meldung');
   end;
   end;



end;
Miniaturansicht angehängter Grafiken
formular.jpg  
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.606 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Datenbank-Programmierung mit UPDATE (SQL)

  Alt 19. Feb 2020, 14:27
Die Bedingung welches Feld ein update erfahren soll, wo wird :ID mit einem Wert belegt?
Datamodlule1.ADOQuery4.Parameters.ParamByName('ID').Value := 123; Grüße
Klaus
Klaus

Geändert von Klaus01 (19. Feb 2020 um 14:35 Uhr)
  Mit Zitat antworten Zitat
Reedx

Registriert seit: 19. Feb 2020
26 Beiträge
 
Delphi 7 Enterprise
 
#3

AW: Datenbank-Programmierung mit UPDATE (SQL)

  Alt 19. Feb 2020, 14:40
Hab es so gemacht:
Datamodule1.ADOQuery4.Parameters.ParamByName('ID') .Value:= Editid.Text;
nun kommt als Fehlermeldung: EDatabaseError, 'AdoQuer4: Parameter 'ID' nicht gefunden'. Und nun?
Kann ja die ID im Quelltext nicht vorher festschreiben, wenn die Datenbank ja "feste" ID vorgibt..
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.794 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Datenbank-Programmierung mit UPDATE (SQL)

  Alt 19. Feb 2020, 14:49
Statt

Zitat:
Delphi-Quellcode:
query:= 'UPDATE Fragen SET Fach=' +quotedstr(Editfr.Text)+ ', Schwierigkeit='+quotedstr(Editschw.Text)+', Frage='+quotedstr(Editfr.Text)+', L1='+quotedstr(Editl1.Text)+', L2='+quotedstr(Editl2.Text)+', L3='+quotedstr(Editl3.Text)+', Lösung='+quotedstr(Editlr.Text)+' '+
                'WHERE ID= :ID';
        Datamodule1.ADOQuery4.SQL.Add(query);
Delphi-Quellcode:
Datamodule1.ADOQuery4.SQL.Text := 'UPDATE Fragen SET Fach=' +quotedstr(Editfr.Text)+ ', Schwierigkeit='+quotedstr(Editschw.Text)+', Frage='+quotedstr(Editfr.Text)+', L1='+quotedstr(Editl1.Text)+', L2='+quotedstr(Editl2.Text)+', L3='+quotedstr(Editl3.Text)+', Lösung='+quotedstr(Editlr.Text)+' '+
                'WHERE ID= :ID';
Datamodule1.ADOQuery4.Parameters.ParamByName('ID') .Value:= Editid.Text;
Nach dem Setzten der Abfrage werden die Parameter neu erzeugt.
Markus Kinzler
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.606 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Datenbank-Programmierung mit UPDATE (SQL)

  Alt 19. Feb 2020, 14:54
Zitat:
Delphi-Quellcode:
Datamodule1.ADOQuery4.SQL.Text := 'UPDATE Fragen SET Fach=' +quotedstr(Editfr.Text)+ ', Schwierigkeit='+quotedstr(Editschw.Text)+', Frage='+quotedstr(Editfr.Text)+', L1='+quotedstr(Editl1.Text)+', L2='+quotedstr(Editl2.Text)+', L3='+quotedstr(Editl3.Text)+', Lösung='+quotedstr(Editlr.Text)+' '+
                'WHERE ID= :ID';
Datamodule1.ADOQuery4.Parameters.ParamByName('ID') .Value:= Editid.Text;
.. sollte der Parameter ID nicht ein Integer, Cardinal oder ähnliches sein?

Datamodule1.ADOQuery4.Parameters.ParamByName('ID') .Value:= strtoInt(Editid.Text);
Klaus
  Mit Zitat antworten Zitat
Reedx

Registriert seit: 19. Feb 2020
26 Beiträge
 
Delphi 7 Enterprise
 
#6

AW: Datenbank-Programmierung mit UPDATE (SQL)

  Alt 19. Feb 2020, 14:58
es kommt zwar keine Fehlermeldung mehr, aber es wird trotzdem nicht gespeichert..
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
4.795 Beiträge
 
Delphi 10.1 Berlin Professional
 
#7

AW: Datenbank-Programmierung mit UPDATE (SQL)

  Alt 19. Feb 2020, 14:58
Moin...
Zitat:
Kann ja die ID im Quelltext nicht vorher festschreiben
...sollst du auch nicht. Du brauchst aber die DatensatzID des zu bearbeiten Datensatzes. Die mußt du irgendwo gespeichert haben. Wo holst du die Einträge in das Grid?

Delphi-Quellcode:
Datamodule1.ADOQuery4.SQL.Text := 'UPDATE Fragen SET Fach = :FA, Schwierigkeit = :SW, Frage = :FR, L1 = :L1, L2 = :L2, L3 = :L3, Lösung = :LO WHERE ID = :ID'; // besser keine Umlaute in den Feldern verwenden
Datamodule1.ADOQuery4.Parameters.ParamByName('FA').AsString := Editfr.Text; // ist das richtig? ...doppelt?
Datamodule1.ADOQuery4.Parameters.ParamByName('SW').AsString := Editschw.Text;
Datamodule1.ADOQuery4.Parameters.ParamByName('FR').AsString := Editfr.Text;
Datamodule1.ADOQuery4.Parameters.ParamByName('L1').AsString := EditL1.Text;
Datamodule1.ADOQuery4.Parameters.ParamByName('L1').AsString := EditL2.Text;
Datamodule1.ADOQuery4.Parameters.ParamByName('L3').AsString := EditL3.Text;
Datamodule1.ADOQuery4.Parameters.ParamByName('LO').AsString := EditLr.Text;
Datamodule1.ADOQuery4.Parameters.ParamByName('ID').AsInteger := StrToInt(Editid.Text); // besser aus der geladenen Datenmenge holen
Datamodule1.ADOQuery4.ExecSQL;

Geändert von haentschman (19. Feb 2020 um 15:02 Uhr)
  Mit Zitat antworten Zitat
Reedx

Registriert seit: 19. Feb 2020
26 Beiträge
 
Delphi 7 Enterprise
 
#8

AW: Datenbank-Programmierung mit UPDATE (SQL)

  Alt 19. Feb 2020, 15:05
Moin...
Die mußt du irgendwo gespeichert haben. Wo holst du die Einträge in das Grid?
hier mit dieser procedure. so in der schule gelernt. ist für mich auch verständlich, aber evtl umständlich. aber das ist mir egal, solange ich verstehe, was ich geschrieben habe

Delphi-Quellcode:
procedure TFormbearb.ButtonausClick(Sender: TObject);
var query:ANSIstring;
begin
 datamodule1.ADOQuery3.SQL.Clear;

 if lb.ItemIndex >=0 then
 begin
 query:= 'SELECT Fr.ID, Fr.Fach, Fr.Schwierigkeit, Fr.Frage, Fr.L1, Fr.L2, Fr.L3, Fr.Lösung FROM Faecher Fa, Fragen Fr '+
         'WHERE Fa.Fach = Fr.Fach and '+
         'Fr.Fach = ' +#39+lb.Items.Strings[lb.ItemIndex]+#39 +
         'ORDER BY Fr.ID ';
          Datamodule1.ADOQuery3.SQL.Add(query);
       Datamodule1.ADOQuery3.Open;
        TStringGrid(DB2).ColWidths[1]:=30;
        TStringGrid(DB2).ColWidths[2]:=60;
        TStringGrid(DB2).ColWidths[3]:=30;
        TStringGrid(DB2).ColWidths[4]:=220;
        TStringGrid(DB2).ColWidths[5]:=150;
        TStringGrid(DB2).ColWidths[6]:=150;
        TStringGrid(DB2).ColWidths[7]:=150;
        TStringGrid(DB2).ColWidths[8]:=20;
    end else
    begin
    application.MessageBox('Auswahlfehler!','Fehler');
    end;
end;
  Mit Zitat antworten Zitat
Reedx

Registriert seit: 19. Feb 2020
26 Beiträge
 
Delphi 7 Enterprise
 
#9

AW: Datenbank-Programmierung mit UPDATE (SQL)

  Alt 19. Feb 2020, 15:13

Delphi-Quellcode:
Datamodule1.ADOQuery4.SQL.Text := 'UPDATE Fragen SET Fach = :FA, Schwierigkeit = :SW, Frage = :FR, L1 = :L1, L2 = :L2, L3 = :L3, Lösung = :LO WHERE ID = :ID'; // besser keine Umlaute in den Feldern verwenden
Datamodule1.ADOQuery4.Parameters.ParamByName('FA').AsString := Editfr.Text; // ist das richtig? ...doppelt?
Datamodule1.ADOQuery4.Parameters.ParamByName('SW').AsString := Editschw.Text;
Datamodule1.ADOQuery4.Parameters.ParamByName('FR').AsString := Editfr.Text;
Datamodule1.ADOQuery4.Parameters.ParamByName('L1').AsString := EditL1.Text;
Datamodule1.ADOQuery4.Parameters.ParamByName('L1').AsString := EditL2.Text;
Datamodule1.ADOQuery4.Parameters.ParamByName('L3').AsString := EditL3.Text;
Datamodule1.ADOQuery4.Parameters.ParamByName('LO').AsString := EditLr.Text;
Datamodule1.ADOQuery4.Parameters.ParamByName('ID').AsInteger := StrToInt(Editid.Text); // besser aus der geladenen Datenmenge holen
Datamodule1.ADOQuery4.ExecSQL;


wenn ich das so mache, dann kommt "undefinierter bezeichner Asstring und Asinteger"...
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
4.795 Beiträge
 
Delphi 10.1 Berlin Professional
 
#10

AW: Datenbank-Programmierung mit UPDATE (SQL)

  Alt 19. Feb 2020, 15:24
Ado kennt auch Parameter mit "Asxxxx". Ich weiß schon warum ich ADO nicht mag.
Im Zweifelsfalle "Value". Da muß die Query aber die Parameter "casten". Asxxxc hast du gleich den Wert. Das ist besser.

Zitat:
so in der schule gelernt.
...von einem Lehrer?

Nachtrag:
Recherche:
Zitat:
unter D7 geht kein weg an .Value vorbei

Geändert von haentschman (19. Feb 2020 um 15:37 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 +2. Es ist jetzt 03:07 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf