AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQL-Abfrage mit BETWEEN geht nicht.

SQL-Abfrage mit BETWEEN geht nicht.

Ein Thema von Die Muhkuh · begonnen am 24. Jul 2004 · letzter Beitrag vom 25. Jul 2004
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#1

SQL-Abfrage mit BETWEEN geht nicht.

  Alt 24. Jul 2004, 20:40
Hi,


bin grad in SQL eingestiegen und schon kommen die Fehler

Mein Code:

Delphi-Quellcode:
SQL.Close;
  SQL.SQL.Add('SELECT * FROM artikel' +
              'WHERE verkaufspreis BETWEEN 80 AND 500');
  SQL.Open;
Kommt eine Meldung:

---------------------------
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 .
  Mit Zitat antworten Zitat
bttb930

Registriert seit: 6. Okt 2003
372 Beiträge
 
#2

Re: SQL-Abfrage mit BETWEEN geht nicht.

  Alt 24. Jul 2004, 21:35
füg mal ein freizeichen vor dem WHERE ein, dann geht's
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#3

Re: SQL-Abfrage mit BETWEEN geht nicht.

  Alt 25. Jul 2004, 06:34
Zitat von Spider:
Hi,
bin grad in SQL eingestiegen und schon kommen die Fehler

Mein Code:

Delphi-Quellcode:
SQL.Close;
  SQL.SQL.Add('SELECT * FROM artikel' +
              'WHERE verkaufspreis BETWEEN 80 AND 500');
  SQL.Open;
.
Hai Spider,
den Grund für die Fehlermeldung hat bttb930 ja schon gesagt
Zur Zeit schaut dein SQL-Befehl ja so aus:
SELECT * FROM artikelWHERE verkaufspreis BETWEEN 80 AND 500 Dann noch drei Tips zu deinem Code:

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
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#4

Re: SQL-Abfrage mit BETWEEN geht nicht.

  Alt 25. Jul 2004, 07:41
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;
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#5

Re: SQL-Abfrage mit BETWEEN geht nicht.

  Alt 25. Jul 2004, 07:50
Zitat von Spider:
..
zu c) Wie meinst du das genau? So:
.
.
.
Hai Spinnengetier

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;
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#6

Re: SQL-Abfrage mit BETWEEN geht nicht.

  Alt 25. Jul 2004, 07:58
@Nicht_Säugetierfähige_Gatung


Aso. Und bei den Werten muss immer ein Doppelpunk( : ) davor sein? Warum?
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#7

Re: SQL-Abfrage mit BETWEEN geht nicht.

  Alt 25. Jul 2004, 08:01
Zitat von Spider:
@Nicht_Säugetierfähige_Gatung


Aso. Und bei den Werten muss immer ein Doppelpunk( davor sein? Warum?
Hi

Weils Parameter sind, muss der Doppelpunkt stehen. Dann kannst du sie mit ParamByName z.B. ansprechen

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#8

Re: SQL-Abfrage mit BETWEEN geht nicht.

  Alt 25. Jul 2004, 08:02
Zitat von Spider:
...muss immer ein Doppelpunk( davor sein? Warum?
Damit sie als Parameter erkannt werden
Wie Du sie dann nennst ist egal, nur der Doppelpunkt davor ist wichtig.
Hier hatte ich schon einmal etwas zu den Parametern geschrieben. Dann wird es sicher auch einleuchtender warum Du sie verwenden solltest.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#9

Re: SQL-Abfrage mit BETWEEN geht nicht.

  Alt 25. Jul 2004, 08:08
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:

SQL.Params.ParamByName('name').AsString := Edit1.Text und

SQL.ParamByName('name').AsString := Edit1.Text ?
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#10

Re: SQL-Abfrage mit BETWEEN geht nicht.

  Alt 25. Jul 2004, 11:27
Zitat von Spider:
...und das gleiche könnte ich auch mit INSERT INTO machen?..
Jup. Du kannst Parameter aber nicht für z.B. den Tabellennamen nehmen.
Delphi-Quellcode:
begin
  SQL.Close;
  SQL.SQL.Clear;
  SQL.SQL.ADD ('SELECT * FROM :tabelle');
  ParamByName ('tabelle').AsString := 'artikel';
end;
Geht z.B. nicht.

Zitat:
Wo ist der Unterschied zwischen:...
Es gibt keinen, der Compiler erkennt das ParamByName eine "untereigenschaft" von Params ist.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

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 10:21 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