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
Th69: SQL-Tags hinzugefügt
Moderiert von
Th69: Code-Tags hinzugefügt
Moderiert von
Th69: Titel geändert.Moderiert von
Th69: 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
Th69: 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
hanshermann hat folgendes geschrieben : |
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
vagtler hat folgendes geschrieben : |
| 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
Perlsau hat folgendes geschrieben : |
| [...] 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...
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!