Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   sort by oder nicht sort by (https://www.delphipraxis.net/179447-sort-oder-nicht-sort.html)

blutigerAnfänger 7. Mär 2014 19:53

Datenbank: firebird • Version: 2 • Zugriff über: interbase

sort by oder nicht sort by
 
Hallo

Mit folgenden Zeilen erstelle ich meine Abfrage.
Delphi-Quellcode:
procedure TForm1.AbfrageClick(Sender: TObject);
var SQLString1 , SQLString2 :String; k:integer;
begin
Edit1.Text :   blabla

  with Query1 do
  begin
    Active:=False;
    SQL.Clear;
    SQL.Add('Select * from '+ combobox1.text +' where Name Like :text1 ');
    SQL.Add('And Upper (Bezeichnung) Like Upper (:text2) order by '+ combobox2.Text +'');
    ParamByName('text1').asString := SQLString1;
    ParamByName('t


blabla
end;
in Combobox2.text steht die Feldbezeichnung nach der sortiert werden soll.
wenn Combobox2.text leer ist bekomme ich unexpected end Fehler.
Was muß in combobox2.text stehen damit nicht sortiert wird?

Danke für eure Hilfe.

jaenicke 7. Mär 2014 19:55

AW: sort by oder nicht sort by
 
Du musst prüfen, ob die Eingabe in ComboBox2.Text leer ist oder nicht (oder einen Text "ohne Sortierung" oder so enthält) und in dem Fall auch kein order by hinzufügen.

blutigerAnfänger 7. Mär 2014 20:03

AW: sort by oder nicht sort by
 
@ jänicke
ja natürlich If then else Prüfung. Warum ich nicht selbst darauf gekommen bin? Danke.

Furtbichler 8. Mär 2014 07:04

AW: sort by oder nicht sort by
 
Dein Code öffnet SQL-Injection Tür und Tor. Wenn ich als Tabellenname nun eingebe
'DeineTabelle where 1=0; DROP DATABASE DeineDB --'. Und dann ist deine Datenbank weg. Oder deine Tabelle. Oder deine Festplatte. Oder Du hast gerade einen Trojaner downgeloaded. Oder Oder Oder.

Weiterhin würde ich versuchen, die Sortierung in-Memory vorzunehmen, d.h. die Daten in ein Dateset laden und dort sortieren. Einige TQuery-Abkömmlinge können das. Wenn nicht, bleibt noch ein TClientDataset oder ein Memory-Dataset, damit geht das auch sehr einfach.

blutigerAnfänger 11. Mär 2014 21:18

AW: sort by oder nicht sort by
 
Zitat:

Zitat von Furtbichler (Beitrag 1251191)
Dein Code öffnet SQL-Injection Tür und Tor. Wenn ich als Tabellenname nun eingebe
'DeineTabelle where 1=0; DROP DATABASE DeineDB --'. Und dann ist deine Datenbank weg. Oder deine Tabelle. Oder deine Festplatte. Oder Du hast gerade einen Trojaner downgeloaded. Oder Oder Oder.

Mein Gedankengang ist hoffentlich erkennbar. Was schlägst du stattdessen vor?

Furtbichler 11. Mär 2014 21:41

AW: sort by oder nicht sort by
 
Sorge dafür, das die Combobox nicht editierbar ist (falls sie das nicht schon ist).
Verwende ein TDataset-Derivat, das die Angabe einer Tabelle erlaubt, z.B. TADODataset oder TADOTable, o.ä.

Allerdings sollte es reichen, wenn Du die Combobox sowohl selbst füllst, als auch nicht editierbar machst. Die möglichen Tabellen solltest Du aus der Datenbank lesen können.

Medium 12. Mär 2014 00:19

AW: sort by oder nicht sort by
 
Noch besser ist die Verwendung von SQL Parametern für variable Anteile in der Query. Das geht jedoch nur für "Werte", nicht für Strukturelemente. Wenn das gefragt ist, wären Prepared Statements der bessere Weg. Beim von Furtbichler vogeschlagenen Weg gäbe es zumindest noch die relativ einfache Möglichkeit den Controls mit SendMessage() und WM_SETTEXT einen beliebigen Inhalt unterzujubeln, auch wenn das Control via UI nicht mehr editierbar ist.

Sowohl zu SQL Parametern als auch zu Prepared Statements dürfte sich einiges in der DP finden lassen. (Zumindest zu ersterem, bei PS sollte die jeweilige SQL Server Doku Aufschluss geben.)

Hansa 12. Mär 2014 01:20

AW: sort by oder nicht sort by
 
Ich würde mal nicht so oft "blabla" in Quelltexte schreiben. Wo wird denn die Variable SqlString1 überhaupt mit Wert bestückt ? Im "blabla" irgendwo ? Solange das nicht geklärt ist braucht man zumindest nicht über SQL Injections o.ä. zu lamentieren. 8-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:15 Uhr.

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