![]() |
Letzte Zeile von SQL Befehl löschen
Hallo
ich habe eine Tabelle die ich nach verschieden kriterien sotieren will. Jetzt habe ich dies mit SQL.Add gemacht. Mein Code sieht so aus.
Code:
Jetzt ist mein Problem das ich ja nicht meine SQL Text zwischen drin lösche.
procedure TForm6.ArbeiterClick(Sender: TObject);
begin Nummer.Checked := False; Geber.Checked := False; DeviceName.Checked := False; Aufloesung.Checked := False; Seriennummer.Checked := False; Datum.Checked := False; // Arbeiter.Checked := False; Abteilung.Checked := False; if Arbeiter.Checked = true then begin unit1.Form1.qrSuchen.Active := False; unit1.Form1.qrSuchen.SQL.Add('ORDER BY Arbeiter ASC'); unit1.Form1.qrSuchen.Active := True; end; end; procedure TForm6.AbteilungClick(Sender: TObject); begin Nummer.Checked := False; Geber.Checked := False; DeviceName.Checked := False; Aufloesung.Checked := False; Seriennummer.Checked := False; Datum.Checked := False; Arbeiter.Checked := False; // Abteilung.Checked := False; if Abteilung.Checked = true then begin unit1.Form1.qrSuchen.Active := False; unit1.Form1.qrSuchen.SQL.Add('ORDER BY Abteilung ASC'); unit1.Form1.qrSuchen.Active := True; end; end; Wenn ich jetzt also beim zweiten mal sotieren will, dann bekomme ich eine Fehlermeldung. Ist es möglich nur die letzte Zeile zulöschen oder kann ich nur alles löschen. Danke. abi |
Re: Letzte Zeile von SQL Befehl löschen
Hai abi,
arbeite auch hier mit Parametern in deinem Query. Dann wirst Du viel glücklicher sein ;-)
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin ZQuery1.Close; ZQuery1.SQL.Text := 'SELECT * FROM standorte ORDER BY :feld'; // hier definiere ich den Parameter ZQuery1.ParamCheck := True; ZQuery1.ParamByName('feld').AsString := 'bezeichnung'; // Hier sortiere ich nach dem Feld 'bezeichnung' ZQuery1.Open; end; procedure TForm1.Button1Click(Sender: TObject); begin ZQuery1.Close; ZQuery1.ParamByName('feld').AsString := 'id'; // Jetzt sortiere ich nach dem Feld 'id' ZQuery1.Open; end; procedure TForm1.Button2Click(Sender: TObject); begin ZQuery1.Close; ZQuery1.ParamByName('feld').AsString := 'ort'; // Und jetzt sortiere ich nach dem Feld 'ort' ZQuery1.Open; end; |
Re: Letzte Zeile von SQL Befehl löschen
Hallo Sharky
danke für die schnelle Antwort. Wollte das auch zuerst so machen hab aber denn Befehl nicht gefunden. Jetzt hab ich des auch ausprobiert aber leider bring ich nicht zum laufen. Wollte des jetzt in meinen SQL Befehl hineinschreiben. Aber des mag er nicht.
Code:
Wenn ich es so mache saagt er mir das er BY nicht kennt.
SELECT
G.Nummer, G.Geber_Bezeichnung, G.Device_Name, G.Knotennummer, G.BaudrateID, B.Baudrate, H.Hw_Version As Hardware_Version, S.Sw_Version As Software_Version, G.Auflösung, G.Preset_Wert, G.Min_Toleranz, G.Max_Toleranz, G.Nocken_Position_1, G.Nocken_Position_2, G.Hysterese_1_Nocken, G.Hysterese_2_Nocken, G.Cyclic_Zeit, G.Seriennummer, G.Producer_Heart_Time, G.Consumer_Heart_Time, G.Datum_Uhrzeit, A.Nachname || ' ' || A.Vorname As Arbeiter, A.Abteilung, G.Bemerkung FROM "Geber Datenbank.db" G LEFT OUTER JOIN Baudrate B ON (G.BaudrateID = B.Nummer) LEFT OUTER JOIN "Hw Version.db" H ON ((G.HwVersionID) = H.Nummer) LEFT OUTER JOIN "Sw Version.db" S ON (G.SwVersionID = S.Nummer) LEFT OUTER JOIN Arbeiter A ON (G.ArbeiterID = A.Nummer) ORDER BY :SuchenSortFeld Und wenn ich "ORDER BY ..." genau unters FROM "Geber ..." setze. Weiss er nicht mehr was Left ist. Brauche ich da vielleicht noch ne klammer. Oder geht des aus Prinzip nicht. abi |
Re: Letzte Zeile von SQL Befehl löschen
Hai abi,
ungetestet: Setze mal deine gesamte "FROM" in eine extra Klammer
SQL-Code:
FROM (
"Geber Datenbank.db" G LEFT OUTER JOIN Baudrate B ON (G.BaudrateID = B.Nummer) LEFT OUTER JOIN "Hw Version.db" H ON ((G.HwVersionID) = H.Nummer) LEFT OUTER JOIN "Sw Version.db" S ON (G.SwVersionID = S.Nummer) LEFT OUTER JOIN Arbeiter A ON (G.ArbeiterID = A.Nummer) ) ORDER BY :SuchenSortFeld |
Re: Letzte Zeile von SQL Befehl löschen
Zitat:
SQL-Code:
Deshalb musst du wohl doch die SQL-Anweisungen zur Laufzeit modifizieren.
-- erlaubt, richtig
WHERE Feld17=:Feld17 -- verboten, nicht möglich WHERE :Feld17=False ORDER BY :OrderFeld Dazu hilft folgende Procedure:
Delphi-Quellcode:
Beispiele:
procedure ImplantSqlOrderByClause(SQL:TStrings; const OrderByClause:string);
var i : Integer; s : string; begin if OrderByClause = '' then begin for i := SQL.Count - 1 downto 0 do begin s := UpperCase(Trim(SQL.Strings[i])); if AnsiSameText('ORDER BY', Copy(s, 1, 8)) then begin SQL.Delete(i); Exit; end; end; end else begin for i := SQL.Count - 1 downto 0 do begin s := UpperCase(Trim(SQL.Strings[i])); if s = '' then Continue; if AnsiSameText('ORDER BY', Copy(s, 1, 8)) then begin SQL.Strings[i] := OrderByClause; Exit; end; end; SQL.Add(OrderByClause); end; end;
Delphi-Quellcode:
PS: das ORDER BY muss immer in einer eigenen Zeile stehen, sonst funktioniert ImplantSqlOrderByClause nicht.
ImplantSqlOrderByClause(qrSuchen.SQL, 'ORDER BY Abteilung ASC'); // sortieren nach Abteilung
ImplantSqlOrderByClause(qrSuchen.SQL, ''); // keine Sortierung |
Re: Letzte Zeile von SQL Befehl löschen
Zitat:
bei mySQL mit den Zeos geht es zumindest für die ORDER BY Klausel. Wobei das hier nicht geht:
Delphi-Quellcode:
SQL.Text := 'SELECT * FROM :tname';
ParamByName ('tname').AsString := 'blubb'; |
Re: Letzte Zeile von SQL Befehl löschen
Zitat:
Code:
DB component | ORDER BY :sortfield | WHERE :field=0
===================================================== Zeos Lib Yes yes(?) ADO Express No no BDE (TQuery) ? ? DB Express ? ? IBQuery No (?) ? |
Re: Letzte Zeile von SQL Befehl löschen
Hallo ihr beiden
irgendwie komme ich doch nicht weiter. Wenn ich jetzt deinen shmia eingebe. Dann bekomme ich zwar kein Fehler meldung mehr aber dafür sehe ich auch nichts mehr. Wenn ich dann nach der funktion.
Code:
mache.
Query1.Open
Dann bekomme ich wieder eine Fehlermeldung. Zitat:
|
Re: Letzte Zeile von SQL Befehl löschen
Hai abi,
wenn Du sicherstellest das eine ORDER BY - Klausel immer in der letzten Zeile steht kannst Du diese ja so löschen:
Delphi-Quellcode:
@shmia:
unit1.Form1.qrSuchen.SQL.Delete (unit1.Form1.qrSuchen.SQL.Count-1);
Es wäre echt einmal interessant solch eine Liste zu erstellen. |
Re: Letzte Zeile von SQL Befehl löschen
Zitat:
SQL-Code:
Probiere es mal aus, ob er _wirklich_ nach den Spalten sortiert. In Oracle per DOA meckert er natürlich auch nicht, genauso wie auch per ADO, etc.
SELECT X
FROM Y ORDER BY 'Hallo' |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:20 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