AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Variablen übergeben bei insert

Variablen übergeben bei insert

Ein Thema von BBoy · begonnen am 19. Aug 2016 · letzter Beitrag vom 21. Aug 2016
Antwort Antwort
hoika

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

AW: Variablen übergeben bei insert

  Alt 19. Aug 2016, 15:46
Hallo,

SQLConnection.ExecuteDirect(FSQLCommandText);
hat doch keine Parameter-Option oder doch?

aus der Hilfe.

Mit ExecuteDirect können Sie eine SQL-Anweisung ohne Parameter ausführen. Sie umgehen auf diese Weise sowohl die Verwendung einer SQL-Datenmenge als auch die Vorbereitung der Anweisung. Wenn die Anweisung einen Cursor zurückgibt, führt ExecuteDirect sie aus, ohne einen Cursor zurückzugeben.

SQL ist die auszuführende Anweisung.

ExecuteDirect gibt 0 zurück, wenn die Anweisung erfolgreich ausgeführt wurde. Andernfalls wird ein dbExpress-Fehlercode zurückgeliefert.
Anmerkung: Verwenden Sie für SQL-Anweisungen, die Parameter enthalten oder einen Cursor zurückgeben, die Methode Execute.
Heiko

Geändert von hoika (19. Aug 2016 um 15:48 Uhr)
  Mit Zitat antworten Zitat
BBoy

Registriert seit: 17. Jan 2007
418 Beiträge
 
Delphi 10 Seattle Professional
 
#2

AW: Variablen übergeben bei insert

  Alt 19. Aug 2016, 19:15
Stimmt. Eigentlich wäre SQLConnection.Execute die bessere Wahl. Aber ich denke für meinen einfachen Zweck ist es auch so ok. Sind ja nicht wirklich Parameter bei mir.
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

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

AW: Variablen übergeben bei insert

  Alt 20. Aug 2016, 09:15
Hallöle...
Zitat:
Aber ich denke für meinen einfachen Zweck ist es auch so ok...
Ein "vergessener" Parameter reicht schon für SQL Injection aus... Lieber gleich richtig...
  Mit Zitat antworten Zitat
BBoy

Registriert seit: 17. Jan 2007
418 Beiträge
 
Delphi 10 Seattle Professional
 
#4

AW: Variablen übergeben bei insert

  Alt 20. Aug 2016, 12:34
Stimmt auch wieder
Aber in diesem Fall nutze nur ich das Programm als kleines Hilfsmittel zur Erfassung.
  Mit Zitat antworten Zitat
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
497 Beiträge
 
Delphi 12 Athens
 
#5

AW: Variablen übergeben bei insert

  Alt 21. Aug 2016, 09:06
Sorry Leute, aber bin ich irgendwie Blöd? Muss man in SQL nicht die Pascal-Strings verwenden?
Also mit ' und nicht mit "...? Das nur am Rande, ich kenne mich mit Delphi SQL-API Zeugs nicht so gut aus.

Außerdem empfehle ich persönlich die AUTO_INCREMENT-Option bei IDs. Das macht es deutlich leichter, da man auch im nachhinein noch Einträge einfügen kann, ohne die höcchste ID zu kennen. Geht allerdings nur bei UNIQUE bzw. PRIMARY-Spalten. Auch würde ich persöhnlich zur Fehlervermeidung empfehlen, alle Strings in SQL in Anführungszeichen zu packen. Denn wenn der Spalten-/Zeilenbezeichner oder der Kästchenwert Leerzeichen oder andere reservierte Zeichen/Ausdrücke enthält (wieso auch immer) dann kriegst du einen Fehler oder noch schlimmer, es wird eine falsche Anfrage ausgeführt.
Dennis
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#6

AW: Variablen übergeben bei insert

  Alt 21. Aug 2016, 09:54
@Dennis:

Also wenn ich sowas mache und keine Parameter verwende, dann nutze ich QuotedStr. Damit hab' ich dann immer das Richtige, ohne weiter drüber nachdenken zu müssen.

Delphi-Quellcode:
const
  csSQL = 'INSERT INTO Buecher(BuchID,Titel, Aid, ISBN) VALUES (NULL, %s, %d, %s)';
...
begin
...
  FSQLCommandText := Format(csSQL,[QuotedStr('B1'), AId, QuotedStr('123')]);
...
So kann man auch recht einfach SQL-Scripte erstellen, die man dann später mit anderen Mitteln, über irgendeine Datenbankoberfläche ... in die Datenbank "jagen" kann.
  Mit Zitat antworten Zitat
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
497 Beiträge
 
Delphi 12 Athens
 
#7

AW: Variablen übergeben bei insert

  Alt 21. Aug 2016, 19:40
Also wenn ich sowas mache und keine Parameter verwende, dann nutze ich QuotedStr. Damit hab' ich dann immer das Richtige, ohne weiter drüber nachdenken zu müssen.
Naja, wie du hier ja lesen kannst, macht QuotedStr ja nichts außer den String in ' zu packen. Nur warem im ersten Beitrag ja normale Anfhrungszeichen (") zu sehen:
FSQLCommandText := 'INSERT INTO Buecher(BuchID,Titel, Aid, ISBN) VALUES (NULL,"B1",1,"123");';
Und das ist meines Wissens nach in alle SQL-Dialekten falsch. Es gibt meines Wissens nach kein gängiges SQL, das nicht die Pascal-Strings verwendet, also Apostrophe ('). SQL müsste als bei " einen Fehler ausgeben.

Außerdem bleibt hier immer noch das Problem, dass falls der String selbst Zeichen wie ' enthält, diese so noch nicht "escaped" werden. Das muss man noch über eine Kodierungs-/Dekodierungs-Routine machen. Ansonsten kriegst du nämlich wurstsalat wenn dein String zum Beispiel ' Zeichen enthält.

Außerdem musst du darauf achten, dass du AnsiQuotedStr bei Multibyte-Strings benutzt.
Dennis
  Mit Zitat antworten Zitat
Antwort Antwort

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 +1. Es ist jetzt 02:12 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