![]() |
SQL-Abfrage mit BETWEEN geht nicht.
Hi,
bin grad in SQL eingestiegen und schon kommen die Fehler :mrgreen: Mein Code:
Delphi-Quellcode:
Kommt eine Meldung:
SQL.Close;
SQL.SQL.Add('SELECT * FROM artikel' + 'WHERE verkaufspreis BETWEEN 80 AND 500'); SQL.Open; --------------------------- Benachrichtigung über Debugger-Exception --------------------------- Im Projekt Project1.exe ist eine Exception der Klasse EDBEngineError aufgetreten. Meldung: 'Ungültiges Schlüsselwort Symbol-String: BETWEEN Zeilennummer: 1'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen. --------------------------- OK Hilfe --------------------------- verkaufpreis ist mit $ (Währung) angeben (in der DB). Vielleicht kann mir jemand helfen ;). |
Re: SQL-Abfrage mit BETWEEN geht nicht.
füg mal ein freizeichen vor dem WHERE ein, dann geht's
|
Re: SQL-Abfrage mit BETWEEN geht nicht.
Zitat:
den Grund für die Fehlermeldung hat bttb930 ja schon gesagt ;-) Zur Zeit schaut dein SQL-Befehl ja so aus:
SQL-Code:
Dann noch drei Tips zu deinem Code:
SELECT * FROM artikelWHERE verkaufspreis BETWEEN 80 AND 500
a) SQL ist wohl deine Querykomponente? In diesem Fall fürde ich ihr auch einen Namen geben der zeigt das es sich um ein Query handelt. b) Du fügst mit .SQL.ADD eine neue Zeile zu deiner Abfrage hinzu. Wenn diese vorher aber schon einen SQL-Befehl enthalten hat bekommst Du ein Problem. Also entweder vorher ein .SQL.Clear oder direckt die Eigenschaft SQL.Text setzen. c) Fange so früh wie möglich (jetzt gleich) an beim Aufbau deiner SQL-Befehle mit Parametern zu arbeiten. Das wird dir viel arbeit ersparen |
Re: SQL-Abfrage mit BETWEEN geht nicht.
Moin,
Thx, das war der Fehler! @Fish zu a) Im moment hab ich eh bloß eine Query, ein DBGrid, eine Datesource und ein Button aufem Formular. Das wird nix größeres nur mal so zum testen der einzelnen Funktionen von SQL. zu b) Wird gemacht! zu c) Wie meinst du das genau? So:
Delphi-Quellcode:
var
Name: String; begin Name := Edit1.Text; [...} SQL.SQL.Add('SELECT ' + Name + ' FROM [...}'); *MFG* PS: Mein Code sieht nun so aus:
Delphi-Quellcode:
SQL.Close;
SQL.SQL.Clear; SQL.SQL.Add('SELECT name, einkaufspreis FROM artikel WHERE verkaufspreis ' + 'BETWEEN 60 AND 800'); SQL.Open; |
Re: SQL-Abfrage mit BETWEEN geht nicht.
Zitat:
Nö, ich meinte Parameter In deinem Fall also so:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin With Query1 do begin Close; SQL.Text := 'SELECT name, einkaufsprei FROM artikel' + #10 + 'WHERE verkaufspreis BETWEEN :wert1 AND :wert2'; // :wert1 und :wert2 sind die Parameter. // Diese werden dann erst gesetzt. ParamCheck := True; Params.ParamByName('wert1').AsInteger := 60; Params.ParamByName('wert2').AsInteger := 800; Open; end; end; |
Re: SQL-Abfrage mit BETWEEN geht nicht.
@Nicht_Säugetierfähige_Gatung :mrgreen:
Aso. Und bei den Werten muss immer ein Doppelpunk( : ) davor sein? Warum? |
Re: SQL-Abfrage mit BETWEEN geht nicht.
Zitat:
Weils Parameter sind, muss der Doppelpunkt stehen. Dann kannst du sie mit ParamByName z.B. ansprechen ;) mfG mirage228 |
Re: SQL-Abfrage mit BETWEEN geht nicht.
Zitat:
Wie Du sie dann nennst ist egal, nur der Doppelpunkt davor ist wichtig. ![]() |
Re: SQL-Abfrage mit BETWEEN geht nicht.
Hai,
und das gleiche könnte ich auch mit INSERT INTO machen? z.B.:
Delphi-Quellcode:
SQL.Close;
SQL.SQL.Clear; SQL.SQL.Add('INSERT INTO artikel (name, einkaufspreis, verkaufspreis, bestand)' + ' VALUES (":name", ":ek", ":vk", ":bestand")'); SQL.Params.ParamByName('name').AsString := Edit1.Text; SQL.Params.ParamByName('ek').AsString := Edit2.Text; SQL.Params.ParamByName('vk').AsString := Edit3.Text; SQL.Params.ParamByName('bestand').AsString := Edit4.Text; SQL.Open; Und dann noch so ne grundlegende Frage: Wo ist der Unterschied zwischen:
Delphi-Quellcode:
und
SQL.Params.ParamByName('name').AsString := Edit1.Text
Delphi-Quellcode:
?
SQL.ParamByName('name').AsString := Edit1.Text
|
Re: SQL-Abfrage mit BETWEEN geht nicht.
Zitat:
Delphi-Quellcode:
Geht z.B. nicht.
begin
SQL.Close; SQL.SQL.Clear; SQL.SQL.ADD ('SELECT * FROM :tabelle'); ParamByName ('tabelle').AsString := 'artikel'; end; Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:44 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