Hallo Leute,
hab folgendes Problem:
auf meiner Form sind:
DataSource
Query
DataBase
DBGrid
ComboBox
TEdit
Komponenten.
Der Database-Kompo wird zur Laufzeit als Alias der Eintrag aus der ComboBox zugeteilt.
DataSet der DataSource ist Query1.
Das Grid ist mit DataSource1 verbunden und ziegt die Werte der Query an. Das Edit-Feld dient als Suchfunktion, der Query wird per Quellcode zur Laufzeit der Text zugewiesen, das sieht folgendermaßen aus:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| procedure TForm1.ComboBox1Change(Sender: TObject); begin Database1.Close; query1.Active := false; With ComboBox1 Do If DataBase1.AliasName = ComboBox1.Items[ItemIndex] then Exit else begin Database1.AliasName := ComboBox1.Items[ItemIndex] end; with Query1 do begin close; with SQL do begin clear; ADD('select * from TABELLE'); ADD('where NUMMER LIKE "' + Edit1.Text + '%"'); Add ('order by NUMMER'); end; Query1.Active := True;
end; end; |
Wenn ich mit der ComboBox die Datenbank auswähle füllt sich das Grid, was ja auch gewollt ist. Nun wollte ich aber, das bei Eingabe in das Edit-Feld und dann bei Enter das Grid aktualisiert wird. Dazu muss ich ja dann die Query aktualisieren oder? Mein Quellcode dazu:
Quelltext
1: 2: 3: 4:
| procedure TForm1.Edit1Enter(Sender: TObject); begin Query1.Refresh; end; |
Aber wenn ich jetzt zur Laufzeit in das Edit-Feld klicke bekomme ich den Fehler:
Operation wird nicht ausgeführt - Tabelle ist nicht eindeutig indiziert.
In der Tabelle gibt es aber einen Index auf NUMMER. Was könnte der Fehler sein? Könnt mir auch gern praktischere Lösungen geben

!!
Danke und LG
Jana!