Entwickler-Ecke

Datenbanken - Fehler bei "select ... where"-Anweisung


hanshermann - Sa 25.02.12 09:40
Titel: Fehler bei "select ... where"-Anweisung
Ich quäle mich seit Tagen mit folgender Anweisung:

SQL-Anweisung
1:
select * from Kunden where Onr = 14;                    


Quelltext
1:
2:
DBGrid1.DataSource := ds_Radix;
nn := query_Radix.recordcount;

Aus der Datei werden 14 selektiert (nn)
aber es werden ALLE 1200 Sätze im DBGrid angezeigt!
Weiss jemand Rat??

Moderiert von user profile iconTh69: SQL-Tags hinzugefügt
Moderiert von user profile iconTh69: Code-Tags hinzugefügt
Moderiert von user profile iconTh69: Titel geändert.
Moderiert von user profile iconTh69: Topic aus Datenbanken (inkl. ADO.NET) verschoben am Sa 25.02.2012 um 12:49


Th69 - Sa 25.02.12 09:59

Hallo Hans,

ich nehme mal an ds_Radix ist ein DataSet. Wie genau befüllst du es denn (Code)?

P.S: Bitte demnächst Code-Tags selber setzen


hanshermann - Sa 25.02.12 11:37

hier ist der ganze code

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
  Pgm_Pfad := ExtractFilePath(Application.Exename);
  DB_Name := 'Radix.abs';
  ABSDB_Radix.DatabaseName := 'Radix_DB';
  ABSDB_Radix.DatabaseFileName := Pgm_Pfad + 'HoroskDB\Radix.abs';
  ABSTable_Radix.DatabaseName := 'Radix_DB';
  ABSTable_Radix.TableName := 'Horoskope';
  with ABSTable_Radix do begin
    DataBaseName := 'Radix_DB';
    TableName := 'Horoskope';
    Active := true;
    anz := recordcount;
  end;

  FillGrid(Nr);

procedure TOpen_Form.FillGrid(ONr : String);
var Sql_String, str, Ordner : string;
  i, j, OrdnerNr, Anzahl : Integer;
  DBGrid1.DataSource := F_AllStar.ds_Radix;
  With F_AllStar.ABSQuery_Radix do begin
    DataBaseName := F_AllStar.ABSDB_Radix.DatabaseName;
    Close;
    Sql.Clear;
    Sql_String := 'Select * ';
    Sql_String := Sql_String + 'from Horoskope ';
    Sql_String := Sql_String + 'Where Ordner_Nr = ';
    Sql_String := Sql_String + ONr;
    Sql_String := Sql_String + ' Order By Zuname';
    Sql.Add(Sql_String);
    open;
  end;


Moderiert von user profile iconTh69: Code- durch Delphi-Tags ersetzt


Th69 - Sa 25.02.12 11:47

Hallo Hans,

das sieht mir aber sehr nach Delphi-Code aus, oder?
Dann bist du nämlich hier im falschen Unterforum und ich würde den Beitrag verschieben...


Xion - Sa 25.02.12 13:26

Die DataSource F_AllStar.ds_Radix ist auch mit dem Query F_AllStar.ABSQuery_Radix verbunden?


Delete - Sa 25.02.12 16:37

user profile iconhanshermann hat folgendes geschrieben Zum zitierten Posting springen:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
procedure TOpen_Form.FillGrid(ONr : String);
var Sql_String, str, Ordner : string;
  i, j, OrdnerNr, Anzahl : Integer;
  DBGrid1.DataSource := F_AllStar.ds_Radix;
  With F_AllStar.ABSQuery_Radix do begin
    DataBaseName := F_AllStar.ABSDB_Radix.DatabaseName;
    Close;
    Sql.Clear;
    Sql_String := 'Select * ';
    Sql_String := Sql_String + 'from Horoskope ';
    Sql_String := Sql_String + 'Where Ordner_Nr = ';
    Sql_String := Sql_String + ONr;
    Sql_String := Sql_String + ' Order By Zuname';
    Sql.Add(Sql_String);
    open;
  end;


Also, den Datenbanknamen einer Query sollte man nicht ändern, solange diese geöffnet ist.
Die lokale String Variable Sql_String benötigst du nicht. Schreibe stattdessen:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
    Sql.Clear;
    Sql.Add('Select *');
    Sql.Add('from Horoskope');
    Sql.Add('Where Ordner_Nr = ');
    Sql.Add(ONr);
    Sql.Add('Order By Zuname');
    open;
  end;


Danach empfiehlt es sich, im Debugger den Wert der übergebenen Stringvariablen ONr überprüfen, ob sie den von dir gewünschten Wert hat. Wenn es sich um eine Zahl handeln muß, übergebe besser ein Integer oder was auch immer du benötigst, statt einem String, und wandle erst dann, wenn du's benötigst, den Integer in einen String um.


vagtler - Sa 25.02.12 19:28

Das hat aber so rein gar nichts mit dem Problem zu tun. Ich denke eher, dass Xion den richtige Riecher hatte, aber das kann nur der Threadersteller beantworten.


Delete - So 26.02.12 10:44

user profile iconvagtler hat folgendes geschrieben Zum zitierten Posting springen:
Das hat aber so rein gar nichts mit dem Problem zu tun. Ich denke eher, dass Xion den richtige Riecher hatte, aber das kann nur der Threadersteller beantworten.


Wenn also ONr das Filterkriterium darstellt, dann soll eine Überprüfung des Inhalts von ONr nichts mit der Problematik zu tun haben? Das kann ich nicht nachvollziehen.


vagtler - So 26.02.12 11:09

user profile iconPerlsau hat folgendes geschrieben Zum zitierten Posting springen:
[...] Wenn also ONr das Filterkriterium darstellt, dann soll eine Überprüfung des Inhalts von ONr nichts mit der Problematik zu tun haben? Das kann ich nicht nachvollziehen.

Dann lies nochmal die Problemstellung:

Er bekommt alle Datensätze ohne Filterung angezeigt, d.h. ohne jegliche Einschränkung. Da kann in ONr drin stehen was will, wenn er das im falschen (d.h. in keinster Weise mit dem Grid verbundenen) TDataset-Abkömmling macht...