Delphi-PRAXiS
Seite 3 von 5     123 45      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Sql insert into (https://www.delphipraxis.net/203708-sql-insert-into.html)

Never01 17. Mär 2020 09:29

AW: Sql insert into
 
Zitat:

Zitat von p80286 (Beitrag 1459892)
Zitat:

Zitat von Never01 (Beitrag 1459863)

Nein, das Feld ist ja nicht falsch geschrieben. Das habe ich schon überprüft. Habe danach sofort alle verglichen, aber es funktioniert nicht.

Nur weil Du zweimal das gleiche siehst, muß es ja nicht dasselbe sein! Seit es diese unsäglichen Proportionalfonts gibt, schleichen sich immer wieder Leerzeichen an Stellen ein, wo sie nichts zu suchen haben.

Gruß
K-H

Ich habe in Access auch noch einmal die Bezeichnung geändert und auch in Delphi verändert, allerdings funktioniert das immer noch nicht. Zudem lese ich jetzt nur noch das Jahr ein und dies funktioniert auch nicht und es erscheint die selbe Fehlermeldung.

haentschman 17. Mär 2020 09:34

AW: Sql insert into
 
Moin...8-)
Zitat:

in Access
[OT]
Frage: Warum muß es Access sein? Access hat seine Eigenheiten. Könntest du dir vorstellen auf ein anderes DB System zu wechseln? (Firebird usw.)
[/OT]

Never01 17. Mär 2020 09:48

AW: Sql insert into
 
Zitat:

Zitat von haentschman (Beitrag 1459915)
Moin...8-)
Zitat:

in Access
[OT]
Frage: Warum muß es Access sein? Access hat seine Eigenheiten. Könntest du dir vorstellen auf ein anderes DB System zu wechseln? (Firebird usw.)
[/OT]

Nein, es wurde uns vorgegeben, dass wir das mit Access machen müssen- leider.

Ich habe jetzt komplett die Spalten Geburtsdatum und Mitglied gelöscht. Nun kommt auch keine Fehlermeldung mehr.
Nachdem dies nun endlich funktioniert hat, versuchte ich, das Geburtsdatum wieder aufzunehmen, allerdings
kommt nun folgende Meldung: "Datentypen in Kriterienausdruck unverträglich".

Delphi-Quellcode:
if (ednn.Text='') or (edvn.Text='') or (comge.Text='') or (edit1.Text='') or(edstr.Text='') or (edhnr.Text='') or (edort.Text='') or (edplz.Text='') or (edtele.Text='')
    then begin
    showmessage ('Daten eingeben') ;
    end else
      begin
        datamodule3.ADOQuery3.SQL.Text:='INSERT INTO Spieler(SpNName,SpVName,Geschlecht,Geburstsdatum,Straße,Hausnummer,Ort,PLZ,Telefon) VALUES (:NN, :VN, :GE, :GD, :ST, :HN, :OR, :PL, :TE);';
        datamodule3.ADOQuery3.Parameters.ParamByName('NN').Value:= ednn.Text;
        datamodule3.ADOQuery3.Parameters.ParamByName('VN').Value:= edvn.Text;
        datamodule3.ADOQuery3.Parameters.ParamByName('GE').Value:= comge.Text;
        datamodule3.ADOQuery3.Parameters.ParamByName('GD').Value:= edit1.Text;
        datamodule3.ADOQuery3.Parameters.ParamByName('ST').Value:= edstr.Text;
        datamodule3.ADOQuery3.Parameters.ParamByName('HN').Value:= edhnr.Text;
        datamodule3.ADOQuery3.Parameters.ParamByName('OR').Value:= edort.Text;
        datamodule3.ADOQuery3.Parameters.ParamByName('PL').Value:= edplz.Text;
        datamodule3.ADOQuery3.Parameters.ParamByName('TE').Value:= edtele.Text;
        //datamodule3.ADOQuery3.Parameters.ParamByName('MI').Value:= edmitglied.Text;
        datamodule3.ADOQuery3.ExecSQL;

Union 17. Mär 2020 22:24

AW: Sql insert into
 
Zitat:

Zitat von Never01 (Beitrag 1459917)
...kommt nun folgende Meldung: "Datentypen in Kriterienausdruck unverträglich".

Delphi-Quellcode:
if (ednn.Text='') or (edvn.Text='') or (comge.Text='') or (edit1.Text='') or(edstr.Text='') or (edhnr.Text='') or (edort.Text='') or (edplz.Text='') or (edtele.Text='')
    then begin
    showmessage ('Daten eingeben') ;
    end else
      begin
        datamodule3.ADOQuery3.SQL.Text:='INSERT INTO Spieler(SpNName,SpVName,Geschlecht,Geburstsdatum,Straße,Hausnummer,Ort,PLZ,Telefon) VALUES (:NN, :VN, :GE, :GD, :ST, :HN, :OR, :PL, :TE);';
        datamodule3.ADOQuery3.Parameters.ParamByName('NN').Value:= ednn.Text;
        datamodule3.ADOQuery3.Parameters.ParamByName('VN').Value:= edvn.Text;
        datamodule3.ADOQuery3.Parameters.ParamByName('GE').Value:= comge.Text;
        datamodule3.ADOQuery3.Parameters.ParamByName('GD').Value:= edit1.Text;
        datamodule3.ADOQuery3.Parameters.ParamByName('ST').Value:= edstr.Text;
        datamodule3.ADOQuery3.Parameters.ParamByName('HN').Value:= edhnr.Text;
        datamodule3.ADOQuery3.Parameters.ParamByName('OR').Value:= edort.Text;
        datamodule3.ADOQuery3.Parameters.ParamByName('PL').Value:= edplz.Text;
        datamodule3.ADOQuery3.Parameters.ParamByName('TE').Value:= edtele.Text;
        //datamodule3.ADOQuery3.Parameters.ParamByName('MI').Value:= edmitglied.Text;
        datamodule3.ADOQuery3.ExecSQL;

Also erst mal schreibst Du Geburstsdatum. Und versuchst den Parameter als string zu setzen. Vermutliche ist das ein DATE. Also:

Delphi-Quellcode:
datamodule3.ADOQuery3.Parameters.ParamByName('GD').AsDateTime := StrToDate(Trim(edit1.Text));

Medium 17. Mär 2020 23:40

AW: Sql insert into
 
Ohne die Tabellendefinition, die offenbar ein Staatsgeheimnis ist, bleibt das alles hier ein fruchtloses Rätselraten. Mir wäre meine Zeit dafür zu schade.

hoika 18. Mär 2020 04:35

AW: Sql insert into
 
Hallo,
ist Geburtsdatum wirklich so falsch angelegt worden?
Mit 2 s?

Value sollte man eh nicht benutzen,
siehe etwa hier
https://stackoverflow.com/questions/...e-in-ms-access

AsDateTime wurde ja bereits vorgeschlagen.

Never01 27. Mär 2020 15:01

AW: Sql insert into
 
Liste der Anhänge anzeigen (Anzahl: 1)
Vielen Dank, für die vielen Antworten. Ich konnte das Problem klären. Es war ein ein Speicherfehler. Ich habe zunächst in der Backupdatei gearbeitet und aber die Datenbank im normalen Ordner bearbeitet.
Ich weiß, ich hätte euch einige Nerven ersparen können. Es tut mir leid...

Nun habe ich aber ein richtiges Problem:

Ich trage zuerst Spielernamen in die Datenbank und nachdem dies geschehen ist, möchte ich den dazu passenden Punktestand eintragen. Allerdings wird dies nicht alles in einer Zeile gespeichert, sondern in 2. Weiß jemand, wie ich beim Punkte eintragen die Daten mit in die vorher gesetzte Zeile schreiben kann.

Vielen Dank im Voraus

Delphi-Quellcode:
procedure TForm4.Button1Click(Sender: TObject);
var frage: Cardinal;
begin
// Frage, ob das neue Mitglied wirklich gespeichert werden soll
 if (edsp1nn.Text='') or (edsp1vn.Text='') or (edsp2vn.Text='') or (edsp2nn.Text='')
    then begin
    showmessage ('Daten eingeben') ;
     end else

frage := MessageDlg('Möchten Sie das Spiel erzeugen?',mtConfirmation,[mbYes,mbNo,mbcancel],0);
if frage = IDYES {IDNO} then
  begin
  showmessage('Spiel erfolgreich erstellt')
   end;

      begin
        datamodule3.ADOQuery3.SQL.Text:='INSERT INTO Spiel(Spieler1nn,Spieler1vn,Spieler2nn,Spieler2vn) VALUES (:sp1nn, :sp1vn, :sp2nn, :sp2vn);';
        datamodule3.ADOQuery3.Parameters.ParamByName('sp1nn').Value:= edsp1nn.Text;
        datamodule3.ADOQuery3.Parameters.ParamByName('sp1vn').Value:= edsp1vn.Text;
        datamodule3.ADOQuery3.Parameters.ParamByName('sp2nn').Value:= edsp2nn.Text;
        datamodule3.ADOQuery3.Parameters.ParamByName('sp2vn').Value:= edsp2vn.Text;
        datamodule3.ADOQuery3.ExecSQL;


      end;
                               // damit Punkte einragen erst beim Betätigen erscheint
      edrunde1.Visible:=true;
      edrunde2.Visible:=true;
      edrunde3.Visible:=true;
      edsnn.Visible:=true;
      label3.Visible:=true;
      label4.Visible:=true;
      label5.Visible:=true;
      label6.Visible:=true;
      btrein.Visible:=true;


end;

procedure TForm4.edrunde1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  edrunde1.Hint:='Bitte den Spielstand getrennt mit : (Doppelpunkt) eingeben!';
  edrunde1.ShowHint:=true;
  edrunde2.Hint:='Bitte den Spielstand getrennt mit : (Doppelpunkt) eingeben!';
  edrunde2.ShowHint:=true;
  edrunde3.Hint:='Bitte den Spielstand getrennt mit : (Doppelpunkt) eingeben!';
  edrunde3.ShowHint:=true;



end;

procedure TForm4.btreinClick(Sender: TObject);
var frage: Cardinal;
begin



if (edrunde1.Text='') or (edrunde2.Text='') or (edrunde3.Text='') or (edsnn.Text='')
    then begin
    showmessage ('Daten eingeben') ;
     end else

frage := MessageDlg('Möchten Sie die Spielergebnis eintragen?',mtConfirmation,[mbYes,mbNo,mbcancel],0);
if frage = IDYES {IDNO} then
  begin
  showmessage('Ergebnis erfolgreich eingetragen')
   end;

      begin
        datamodule3.ADOQuery3.SQL.Text:='INSERT INTO Spiel(Punktestand1,Punktestand2,Punktestand3,Sieger_NN) VALUES (:r1, :r2, :r3, :snn); ';
        datamodule3.ADOQuery3.Parameters.ParamByName('r1').Value:= edrunde1.Text;
        datamodule3.ADOQuery3.Parameters.ParamByName('r2').Value:= edrunde2.Text;
        datamodule3.ADOQuery3.Parameters.ParamByName('r3').Value:= edrunde3.Text;
        datamodule3.ADOQuery3.Parameters.ParamByName('snn').Value:= edsnn.Text;
        datamodule3.ADOQuery3.ExecSQL;



end;
 end;
Hier noch das Bild aus der Datenbank
Anhang 52276

Delphi.Narium 27. Mär 2020 15:12

AW: Sql insert into
 
Insert macht immer 'nen neuen Datensatz.

Willst Du einen Datensatz ändern, musst Du ein Update machen.

Beim Speichern der Punkte musst Du also wissen, welchen Datensatz du ändern möchtest und diesen in der Where-Bedingung des Updates benennen.

Da ich dein Datenmodell nicht wirklich kenne mal geraten in etwa sowas:

SQL-Code:
update spiel set r1 = :r1, r2 = :r2, r3 = :r3, snn = :snn where sp1nn = :sp1nn and sp1vn = :sp1vn and sp2nn = :sp2nn and sp2vn = :sp2vn


Das Befüllen der Paramter erfolgt ananlog zu Deinem bisherigen Code.

Never01 27. Mär 2020 15:56

AW: Sql insert into
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Delphi.Narium (Beitrag 1460647)
Insert macht immer 'nen neuen Datensatz.

Willst Du einen Datensatz ändern, musst Du ein Update machen.

Beim Speichern der Punkte musst Du also wissen, welchen Datensatz du ändern möchtest und diesen in der Where-Bedingung des Updates benennen.

Da ich dein Datenmodell nicht wirklich kenne mal geraten in etwa sowas:

SQL-Code:
update spiel set r1 = :r1, r2 = :r2, r3 = :r3, snn = :snn where sp1nn = :sp1nn and sp1vn = :sp1vn and sp2nn = :sp2nn and sp2vn = :sp2vn


Das Befüllen der Paramter erfolgt ananlog zu Deinem bisherigen Code.

Vielen Dank, für deine bisherige Hilfe. Es wäre nett, wenn du mir nochmal helfen könntest. :oops:
Ich habe auch noch ein Bild von der Datenbank angehängt.
Schon mal vielen Dank

Anhang 52277

jobo 27. Mär 2020 16:20

AW: Sql insert into
 
Das Bild ist nett, aber was ist das Problem?


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:49 Uhr.
Seite 3 von 5     123 45      

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