![]() |
Datenbank: Access • Version: 365 • Zugriff über: Access
Sql insert into
Hallo liebe Gemeinde.
Ich habe ein grundlegendes Problem: Ich versuche mit Hilfe von INSERT INTO Datensätze aus Feldern in die Datenbank einzutragen. Allerdings bekomme ich immer wieder die selbe Fehlermeldung. Die Namen stimmen überein. Ich würde mich freuen, wenn mir jemand helfen könnte. Vielen Dank im Voraus
Delphi-Quellcode:
if (ednn.Text='') or (edvn.Text='') or (comge.Text='') or (ednn.Text='') or (edstr.Text='') or (edhnr.Text='') or (edort.Text='') or (edplz.Text='') or (edtele.Text='') or (edmitglied.Text='')
then begin showmessage ('Daten eingeben') ; end else begin datamodule3.ADOQuery3.SQL.Text:='INSERT INTO Spieler(SpNName, SpVName, Geschlecht, Geburtsdatum, Straße, Hausnummer, Ort, PLZ, Telefon, Mitglied) VALUES (:NN, :VN, :GE, :GD, :ST, :HN, :OR, :PL, :TE, :MI);'; 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:= dategeb.Date; 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; |
AW: Sql insert into
Und welche Fehlermeldung ist das?
|
AW: Sql insert into
Der Parameter OR könnte ein Problem sein? (SQL Schlüsselwort)
datamodule3.ADOQuery3.Parameters.ParamByName('OR') .Value:= edort.Text; |
AW: Sql insert into
So ohne Fehlermeldung würde ich mal schätzen, dass das Quoten der Strings fehlt.
|
AW: Sql insert into
Da SQL-Parameter verwendet werden, sollten Strings automatisch gequotet werden.
|
AW: Sql insert into
Ich würde auf Sonderzeichen in Bezeichnern verzichten oder sie escapen.
|
AW: Sql insert into
Stimmt, Straße könnte das Problem sein.
|
AW: Sql insert into
Unter Umständen muß es 'Insert into Spieler([SpNName], [SpVName].....'
oder sogar 'Insert into Spieler([Spieler].[SpNName], [Spieler].[SpVName].....' heißen. Acces ist manchmal etwas seltsam. Gruß K-H |
AW: Sql insert into
Zitat:
Also insofern lobenswert, dass es eine große Konstanz bei seinen Eigenarten zeigt. Für MS Verhältnisse bemerkenswert konstant. |
AW: Sql insert into
Zitat:
|
AW: Sql insert into
Zitat:
Die Fehlermeldung: Im Projekt ist eine Exception der Klasse EOleException aufgetreten. Meldung: Die INSERT INTO- Anweisung enthält folgenden unbekannten Feldnamen: Geburtsdatum. Stellen sie sicher, dass sie den Namen richtig eingegeben haben... |
AW: Sql insert into
Zitat:
|
AW: Sql insert into
Hallo,
gibt es das Feld Geburtsdatum überhaupt? |
AW: Sql insert into
Hallo
[OT] Das ist ja mal der Hammer! Nur weil sich der Threadstarter zu Schade ist zu seinem Quelltext auch noch die Fehlermeldung mit zu Posten wurden ihm erstmal alle anderen Fehler aufgezeigt. Und nun stellt sich heraus das es nur fehlendes / falsch geschriebenes Feld ist. :lol: [/OT] |
AW: Sql insert into
Zitat:
|
AW: Sql insert into
Fakt ist aber, dass Access das Feld nicht findet.
|
AW: Sql insert into
Hallo,
lass das Geburtsdatum einfach mal im SQL-Statement weg. |
AW: Sql insert into
Hallo,
etwas ist mir aufgefallen if (ednn.Text='') or (edvn.Text='') or (comge.Text='') or (ednn.Text='') ednn = Nachname wird doppelt abgefragt der DateTimePicker das Geburtsdatum aber gar nicht. Das sollte aber nicht das Problem für den Fehler sein. PS: dategeb muss ersetzt werden durch DTPGebDatum, sonst klappt das nicht wegen schlechter Lesbarkeit ... |
AW: Sql insert into
Zitat:
|
AW: Sql insert into
Zitat:
Gruß K-H |
AW: Sql insert into
Zitat:
|
AW: Sql insert into
Moin...8-)
Zitat:
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] |
AW: Sql insert into
Zitat:
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; |
AW: Sql insert into
Zitat:
Delphi-Quellcode:
datamodule3.ADOQuery3.Parameters.ParamByName('GD').AsDateTime := StrToDate(Trim(edit1.Text));
|
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.
|
AW: Sql insert into
Hallo,
ist Geburtsdatum wirklich so falsch angelegt worden? Mit 2 s? Value sollte man eh nicht benutzen, siehe etwa hier ![]() AsDateTime wurde ja bereits vorgeschlagen. |
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:
Hier noch das Bild aus der Datenbank
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; Anhang 52276 |
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. |
AW: Sql insert into
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Ich habe auch noch ein Bild von der Datenbank angehängt. Schon mal vielen Dank Anhang 52277 |
AW: Sql insert into
Das Bild ist nett, aber was ist das Problem?
|
AW: Sql insert into
Zitat:
|
AW: Sql insert into
Zitat:
SQL-Code:
Statt des Insertsstatements weist Du dem SQL-Text halt das Updatestatement zu.
update Spiel
set Punktestand1 = :r1, Punktestand2 = :r2, Punktestand3 = :r3, Sieger_NN = :snn where Spieler1nn = :sp1nn and Spieler1vn = :sp1vn and Spieler2nn = :sp2nn and Spieler2vn = :sp2vn Das Zuweisen der Parameter hast Du ja beim Insert schon gemacht, das geht beim Update genauso, da kannst Du den vorhandenen Quelltext beibehalten, musst halt dafür sorgen, dass alle Parameter mit den zutreffenden Werten versorgt werden. |
AW: Sql insert into
Zitat:
|
AW: Sql insert into
Xxxxxx
|
AW: Sql insert into
Zitat:
Gruß K-H P.S. Wenn
SQL-Code:
mehr als einen Datensatz ergibt, dann wird die Information halt doppelt abgelegt ? oder dreifach oder ....?
where Spieler1nn = :sp1nn
and Spieler1vn = :sp1vn and Spieler2nn = :sp2nn and Spieler2vn = :sp2vn 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:mrgreen: aber man muß es denen janicht zu leicht machen. |
AW: Sql insert into
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. |
AW: Sql insert into
Sehr grob sowas:
Delphi-Quellcode:
Damit bekommst Du z. B. alle Daten zum Spieler 1.
datamodule3.ADOQuery3.Close;
datamodule3.ADOQuery3.SQL.Text:='select * from Spiel where Spieler1vn = :sp1vn and Spieler1nn = :sp1nn'); datamodule3.ADOQuery3.Parameters.ParamByName('sp1vn').Value := edsp1vn.Text; datamodule3.ADOQuery3.Parameters.ParamByName('sp1nn').Value := edsp1nn.Text; datamodule3.ADOQuery3.Open; Prinzipiell funktioniert eine Auswertung über ein Select. In der Where-Bedingung stehen dann die Auswahlkriterien. Um an den Aufgabenstellungen im Bezug auf den Umgang mit Datenbanken nicht zu verzweifeln, solltest Du Dir eventuell mal ein Tutorial zu SQL anschauen, lesen, verstehen, z. B. sowas: ![]() Derweil: Datenbankprogrammierung ohne SQL-Kenntnisse ist annähernd sinnfrei bzw. extrem anstrengend und fehleranfällig. |
AW: Sql insert into
Zitat:
Ich möchte gern irgendwie die Spiele auswerten. Am besten mit Diagrammen. Aber ich weiß leider nicht, wie ich das am Besten umsetzen soll. |
AW: Sql insert into
Das Prinzip ist immer gleich:
SQL-Code:
select wasduhabenmöchtest from Tabelle where wasduhabenmöchtest = :wasduhabenmöchtest
Mein Delphi kennt für Datenbankdiagramme die Komponente TDBChart. Keine Ahnung, was da aktuelle Delphis alles zu bieten. Wenn Du also schon Auswertungen hast und die (vermutlich) in 'nem DBGrid anzeigst, muss Du halt schauen, ob Deine Delphi eine Komponente für die Anzeige von Daten in Chartform hat. Diese Komponente analog zum DBGrid an die Datenbankkomponente anbinden und schon sollte es bunt werden. Und nein, das macht man nicht in fünf Minuten, ist schon etwas mehr Aufwand, aber er dürfte trotztem in einem erträglichen Rahmen bleiben. |
AW: Sql insert into
Zitat:
Es wäre nett, wenn du noch etwas mehr erklären könntest. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:00 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