AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Insert-Statement nicht verstanden
Thema durchsuchen
Ansicht
Themen-Optionen

Insert-Statement nicht verstanden

Ein Thema von HerWin · begonnen am 6. Dez 2021 · letzter Beitrag vom 7. Dez 2021
Antwort Antwort
HerWin

Registriert seit: 6. Dez 2021
5 Beiträge
 
#1

AW: Insert-Statement nicht verstanden

  Alt 6. Dez 2021, 21:09
Hallo DeddyH,
danke für die Antwort. Ich habe es aber immer noch nicht verstanden.

Woher kommen die Buchstaben N, D und P?

Sollen das Datentypen sein? N = Numerisch, D = Dezimal? P = ???
Sind das einfach nur beliebige Bezeichner, die der Reihe nach abgearbeitet werden?

Wozu brauche ich das hier, wenn nur ein Datensatz verarbeitet wird (Schutz vor SQL-Injection)?

VG
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.656 Beiträge
 
Delphi 12 Athens
 
#2

AW: Insert-Statement nicht verstanden

  Alt 6. Dez 2021, 21:14
Ein SQL-Parameter beginnt immer mit einem Doppelpunkt. Danach kann jeder gültige Bezeichner kommen, den kannst Du frei vergeben. In diesem Beispiel könnte man theoretisch auch auf Parameter verzichten, müsste dann aber beispielsweise String-Werte selber quoten. Im realen Leben ist es aber meist eher so, dass die Werte eben nicht hartkodiert im Code stehen, sondern aus Benutzereingaben stammen. Diese sind grundsätzlich als potenziell gefährlich zu betrachten, da ist es äußerst wichtig, sich gegen SQL-Injection zu schützen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
HerWin

Registriert seit: 6. Dez 2021
5 Beiträge
 
#3

AW: Insert-Statement nicht verstanden

  Alt 6. Dez 2021, 21:16
Vielen Dank,

das muß ich mir ansehen.
  Mit Zitat antworten Zitat
Benutzerbild von Guido R.
Guido R.

Registriert seit: 5. Jul 2007
141 Beiträge
 
Delphi 12 Athens
 
#4

AW: Insert-Statement nicht verstanden

  Alt 7. Dez 2021, 01:35
Hallo HerWin!
Zitat:
Sollen das Datentypen sein? N = Numerisch, D = Dezimal? P = ???
Mein Tipp anhand des SQL-Befehls ist eher N = CategoryName, D = Description, P = Picture
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.687 Beiträge
 
Delphi 2007 Enterprise
 
#5

AW: Insert-Statement nicht verstanden

  Alt 7. Dez 2021, 02:23
Um die Verwendung im Code zu verdeutlichen:

Delphi-Quellcode:
Query1.SQL.Text := 'INSERT INTO Categories (CategoryName, Description, Picture) VALUES (:N, :D, :P)';
Query1.ParamByName['N'].AsString := 'New category';
Query1.ParamByName['D'].AsString := 'New description';
Query1.ParamByName['P'].AsInteger := $0334;
Query1.Execute;
Das würde genau das ausführen, was du in deinem Beispiel gezeigt hast. Die möglichen Vorteile wurden ja bereits von DeddyH genannt. Zudem empfinde ich es schlicht als besseren Stil Parameter zu nutzen, statt umständlich in Strings umgewandelte und ''gequotedte'' Ausdrücke zu nehmen.

Man könnte die Parameter allerdings noch sprechender benennen für meinen Geschmack. Auch kann man sie statt mit ParamByName() indiziert via Params[i] referenzieren, finde ich aber nicht so schön, da dann die Reihenfolge im SQL-Statement wichtig wird. Man kann übrigens auch denselben Parameter mehrmals im selben SQL-Statement verwenden, was in manchen Fällen auch praktisch sein kann.
"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
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.326 Beiträge
 
Delphi 12 Athens
 
#6

AW: Insert-Statement nicht verstanden

  Alt 7. Dez 2021, 03:36
Hier war einfach nur wer schreibfaul, oder wollte Speicher sparen, und es geht natürlich auch länger:
Delphi-Quellcode:
Query1.SQL.Text := 'INSERT INTO Categories (CategoryName, Description, Picture) VALUES (:CategoryName, :Description, :Picture)';
Query1.ParamByName['CategoryName'].AsString := 'New category';
Query1.ParamByName['Description'].AsString := 'New description';
Query1.ParamByName['Picture'].AsInteger := $0334;
Query1.Execute;
Und da die Parameternamen grundsätzlich egal sind:
Delphi-Quellcode:
Query1.SQL.Text := 'INSERT INTO Categories (CategoryName, Description, Picture) VALUES (:mvsdnjkfdsa, :gbvös, :jmnfkeads)';
Query1.ParamByName['mvsdnjkfdsa'].AsString := 'New category';
Query1.ParamByName['gbvös'].AsString := 'New description';
Query1.ParamByName['jmnfkeads'].AsInteger := $0334;
Query1.Execute;
Es gibt auch Statements/DBMS/Datenbankkompoenten, die garkeine Namen nutzen, sondern nur durchnummerieren, wie z.B.
Delphi-Quellcode:
Query1.SQL.Text := 'INSERT INTO Categories (CategoryName, Description, Picture) VALUES ($0, $1, $2)';
Query1.Params[0].AsString := 'New category';
Query1.Params[1].AsString := 'New description';
Query1.Params[2].AsInteger := $0334;
Query1.Execute;
Wobei das .Params[123] natürlich auch bei den oberen Varianten im Programm genutzt werden kann.


Bei deinem Beispiel werden die Namen auch nicht verwendet, sondern einfach mit dem Array ['New category', 'New description', $0334] nacheinander die Parameter gefüllt werden, egal wie sie heißen.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 7. Dez 2021 um 03:43 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

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

AW: Insert-Statement nicht verstanden

  Alt 7. Dez 2021, 08:05
Moin...
Zitat:
sondern einfach mit dem Array ['New category', 'New description', $0334]
...imho kann es aber auch Komponenten geben, die die overload Variante mit dem Array nicht kennen. Deshalb würde ich eher die klassische Variante empfehlen.
Delphi-Quellcode:
Query1.SQL.Text := 'INSERT INTO Categories (CategoryName, Description, Picture) VALUES (:CategoryName, :Description, :Picture)';
Query1.ParamByName['CategoryName'].AsString := 'New category';
Query1.ParamByName['Description'].AsString := 'New description';
Query1.ParamByName['Picture'].AsInteger := $0334;
Query1.Execute;
SQL Injection: https://de.wikipedia.org/wiki/SQL-Injection
  Mit Zitat antworten Zitat
Frickler

Registriert seit: 6. Mär 2007
Ort: Osnabrück
616 Beiträge
 
Delphi XE6 Enterprise
 
#8

AW: Insert-Statement nicht verstanden

  Alt 7. Dez 2021, 15:15
Es gibt auch Statements/DBMS/Datenbankkompoenten, die garkeine Namen nutzen, sondern nur durchnummerieren, wie z.B.
Delphi-Quellcode:
Query1.SQL.Text := 'INSERT INTO Categories (CategoryName, Description, Picture) VALUES ($0, $1, $2)';
Query1.Params[0].AsString := 'New category';
Query1.Params[1].AsString := 'New description';
Query1.Params[2].AsInteger := $0334;
Query1.Execute;
Geht das nicht so?
Delphi-Quellcode:
Query1.SQL.Text := 'INSERT INTO Categories (CategoryName, Description, Picture) VALUES (?, ?, ?)';
Query1.Params[0].AsString := 'New category';
Query1.Params[1].AsString := 'New description';
Query1.Params[2].AsInteger := $0334;
Query1.Execute;
  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 05:41 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