AGB  ·  Datenschutz  ·  Impressum  







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

Sql insert into

Ein Thema von Never01 · begonnen am 15. Mär 2020 · letzter Beitrag vom 29. Mär 2020
Antwort Antwort
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.431 Beiträge
 
Delphi 12 Athens
 
#1

AW: Sql insert into

  Alt 17. Mär 2020, 09:34
Moin...
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]
  Mit Zitat antworten Zitat
Never01

Registriert seit: 1. Mär 2020
15 Beiträge
 
#2

AW: Sql insert into

  Alt 17. Mär 2020, 09:48
Moin...
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;

Geändert von Never01 (17. Mär 2020 um 11:28 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#3

AW: Sql insert into

  Alt 17. Mär 2020, 22:24
...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:

datamodule3.ADOQuery3.Parameters.ParamByName('GD').AsDateTime := StrToDate(Trim(edit1.Text));
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.688 Beiträge
 
Delphi 2007 Enterprise
 
#4

AW: Sql insert into

  Alt 17. Mär 2020, 23:40
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.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Sql insert into

  Alt 18. Mär 2020, 04:35
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.
Heiko

Geändert von hoika (18. Mär 2020 um 04:39 Uhr)
  Mit Zitat antworten Zitat
Never01

Registriert seit: 1. Mär 2020
15 Beiträge
 
#6

AW: Sql insert into

  Alt 27. Mär 2020, 15:01
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
Anmerkung 2020-03-27 155847.jpg
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.555 Beiträge
 
Delphi 7 Professional
 
#7

AW: Sql insert into

  Alt 27. Mär 2020, 15:12
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:

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.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

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

AW: Sql insert into

  Alt 27. Mär 2020, 21:49
Xxxxxx
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector

Geändert von p80286 (27. Mär 2020 um 22:04 Uhr) Grund: gelöscht Dicke Finger!!
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

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

AW: Sql insert into

  Alt 27. Mär 2020, 22:03
Value sollte man eh nicht benutzen,
Lässt sich teilweise nicht vermeiden je nach Komponente/Treiber-Kombination. Sollte es doch gehen, dann natürlich mit asXXXXX !

Gruß
K-H

P.S.
Wenn
SQL-Code:
where Spieler1nn = :sp1nn
and Spieler1vn = :sp1vn
and Spieler2nn = :sp2nn
and Spieler2vn = :sp2vn
mehr als einen Datensatz ergibt, dann wird die Information halt doppelt abgelegt ? oder dreifach oder ....?
OK bei so einer kleinen Anwendung ist das nicht weiter wichtig, aber wenn's dann mal wichtig sein könnte, dann hat das bisher immer so geklappt und wenns zusammenklappt dann war's Coronna oder der dumme Benutzer?
Die Ansprache der Datensätze immer über die ID! das mag umständlich sein, hilft aber Fehler zu vermeiden, da diese ja wohl nicht doppelt sein sollte. Gut es gibt Spezialisten die bekommen auch das hin aber man muß es denen janicht zu leicht machen.
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Never01

Registriert seit: 1. Mär 2020
15 Beiträge
 
#10

AW: Sql insert into

  Alt 28. Mär 2020, 12:06
Hi, ich bins nochmal.

Ich muss nun auch noch verschiedene Auswertungsmöglichkeiten bieten.
Hat da von euch jemand eine Idee, wie ich das am Besten umsetzten kann? Ich habe nämlich keine Idee, wie ich das machen soll.
  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 13:37 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