Autor Beitrag
peppi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 65


delphi 7
BeitragVerfasst: Mi 27.11.02 15:44 
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:

ausblenden 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:

ausblenden 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 :lol: !!

Danke und LG

Jana!
peppi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 65


delphi 7
BeitragVerfasst: Mi 27.11.02 16:03 
Ahh ... hab grad woander gelesen das man die Anweisung REFRESH bei Querys vergessen kann. Stattdessen soll man Close und OPEN verwenden ... gesagt getan ... aber da passiert gar nix .. Aber wo liegt der Fehler???
LCS
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1305
Erhaltene Danke: 1

WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
BeitragVerfasst: Do 28.11.02 09:02 
Hi
Das mit dem Öffnen und Schließen anstelle von Refresh ist erst mal korrekt. Allerdings ändert sich da deshalb nix, weil du ja immer noch mit der alten SQL-Anweisung arbeitest.
Du müsstest also bei Enter die Query schliessen, die SQL Anweisung mit dem aktuellen Inhalt des Edits neu aufbauen und erst dann wieder öffnen.

Gruss Lothar

_________________
Der BH ist für die Brust, der Plan ist für'n Ar...
peppi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 65


delphi 7
BeitragVerfasst: Do 28.11.02 11:27 
hi Lothar,

also die OnEnter-Anweisung sieht jetzt so aus:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
rocedure TForm1.Edit1Enter(Sender: TObject);
begin
    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.open;
end;
end;


Aber wenn ich dann in das Edit-Feld eine Nummer eingebe und enter drücke passiert gar nichts. Die Nummer gibt es aber, das sehe ich ja im Grid. Kann es auch am Datentyp der Nummer liegen? in der Datenbank ist es 'char'. Außerdem habe ich noch eine Prozedur die nur Zahlen als Eingabe zulässt, hat das manchmal auch damit zu tun? Die Prozedur sieht folgendermaßen aus:

ausblenden Quelltext
1:
2:
3:
4:
5:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in ['0'..'9',#8,'.','-']) then
    Key := #0
  end;


LG Jana!
LCS
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1305
Erhaltene Danke: 1

WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
BeitragVerfasst: Do 28.11.02 11:47 
Hi Jana
Zitat:

Aber wenn ich dann in das Edit-Feld eine Nummer eingebe und enter drücke passiert gar nichts.

Heisst das die Darstellung ändert sich gar nicht? Oder ist das Grid anschliessend leer?

Die einzige Fehlerquelle die ich auf den ersten Blick sehen kann, steckt in deiner Where-Klausel. Stringkonstanten werden bei SQL genauso wie bei Delphi in einfache Anführungszeichen gesetzt:
ausblenden Quelltext
1:
ADD('where NUMMER LIKE ' + QuotedStr(Edit1.Text + '%'));					

Versuchs erst mal damit

Gruss Lothar

_________________
Der BH ist für die Brust, der Plan ist für'n Ar...
peppi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 65


delphi 7
BeitragVerfasst: Do 28.11.02 11:56 
Habs jetzt so geschrieben wie du gesagt hast, aber da passiert auch nichts ... also keine Veränderung der Anzeige. Das Grid zeigt weiterhin ALLE Datensätze an. Wenn ich aber in der ComboBox die Datenbank wechsle, dann zeigt er mir nur noch die Datensätze an die der Nummer im Edit1 entsprechen. Das war allerdings auch schon vorher so. Aber bei ENTER ... NIX :evil:
LCS
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1305
Erhaltene Danke: 1

WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
BeitragVerfasst: Do 28.11.02 16:08 
Mooooment mal :shock:
Reagierst du denn überhaupt auf das ENTER im Editfeld? Das hab ich eigentlich die ganze Zeit vorausgesetzt. Gibs zu, du tust es nicht user defined image :mrgreen:

Wenn du eine Routine für das Ereignis OnEnter schreibst, wird die ausgelöst, wenn das Steuerelement den Focus erhält, und nicht wenn ENTER gedrückt wird.

Wenn du Enter abfangen willst musst du das in deinem OnKeyPress-Event mit einbauen.

Gruss Lothar

_________________
Der BH ist für die Brust, der Plan ist für'n Ar...
peppi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 65


delphi 7
BeitragVerfasst: Do 28.11.02 18:00 
*lool* Meckersmilie :D

Tja ... also da hattest du wohl recht :lol: Jetzt funktioniert's einwandfrei ... dank dir recht herzlích :wink:

LG Jana!!