Hallo alle..
Ich bräuchte mal jemanden, der mir die Brille putzt...
Der Ablauf:
1. Eingabe in Edit Feld... SMatch
2. Start Abfrage
Delphi-Quellcode:
procedure LSuche;
begin
if FLieferschein.SMatch.Text = '' then exit;
ListeComboBox;
FLieferschein.SMatch.Enabled:= False;
FLieferschein.ComboBox1.Enabled:= False;
FLieferschein.BitBtn2.Enabled:= False;
FLieferschein.BitBtn1.Enabled:= False;
FLieferschein.BitBtn3.Enabled:= False;
Abfrage;
GridOptionen;
end;
procedure Abfrage;
begin
FLieferschein.Query1.Filtered:= False;
FLieferschein.Query1.Close;
case FLieferschein.ComboBox1.ItemIndex of
0: begin // Artikelnummer
QArtikelnummer;
end;
1: begin // Style Name
QStyleName;
end;
2: begin // Style Nummer
QStyleNummer;
end;
3: begin // Lieferschein
QLieferschein;
end;
4: begin // Rechnung
QRechnung;
end;
end;
end;
3.SQL (Auszug...)
Delphi-Quellcode:
procedure QLieferschein;
begin
with FLieferschein do
begin
Query1.SQL.Text:= 'select Artikel.Artikelnummer,Artikel.StyleName,Artikel.StyleNummer,'+
'Artikel.Farbe,Artikel.Grosse,Bewegung.Bewegung,Artikel.EKnetto,Bewegung.Datum,Bewegung.RE '+
'from Artikel,Bewegung '+
'where Bewegung.LS = (:Match) and Bewegung.Vorgang = (:Vorgang) '+
'and Artikel.Artikelnummer = Bewegung.Artikelnummer '+
'order by Farbe,Grosse';
Query1.ParamByName('Match').Value:= FLieferschein.SMatch.Text;
Query1.ParamByName('Vorgang').Value:= 'manuell';
FLieferschein.Query1.Open;
DbGrid1.Columns[0].Width := 120;
DbGrid1.Columns[0].Title.Caption := 'Artikelnummer';
DbGrid1.Columns[1].Width := 120;
DbGrid1.Columns[1].Title.Caption := 'Style Name';
DbGrid1.Columns[2].Width := 100;
DbGrid1.Columns[2].Title.Caption := 'Style Nummer';
DbGrid1.Columns[4].Width := 40;
DbGrid1.Columns[4].Title.Caption := 'Größe';
DbGrid1.Columns[5].Width := 40;
DbGrid1.Columns[5].Title.Caption := 'Menge';
DbGrid1.Columns[6].Width := 40;
DbGrid1.Columns[6].Title.Caption := 'EK';
DbGrid1.Columns[8].Width := 100;
DbGrid1.Columns[8].Title.Caption := 'Rechnung';
if Query1.RecordCount > 0 then
begin
BitBtn3.Enabled:= False;
BitBtn1.Enabled:= True;
end;
end;
end;
4. Anzeige im DBGrid
....funktioniert ! aber:
5. nanchmal muß ich die Ergebnismenge noch filtern ( könnte man auch über
SQL erledigen, fand ich aber die schnellere Lösung bei max 20 Datensätzen in der Ergebnismenge)
Delphi-Quellcode:
// Filter
procedure TFLieferschein.ComboBox2Change(Sender: TObject);
begin
case ComboBox2.ItemIndex of
0: begin
Query1.Filtered:= False;
end;
1: begin
if ComboBox2.Text = 'kein Lieferschein' then
begin
Query1.Filter:= 'LS = '+ QuotedStr('');
Query1.Filtered:= True;
SMatch.SetFocus;
end
else
begin
Query1.Filter:= 'RE = '+ QuotedStr('');
Query1.Filtered:= True;
SMatch.SetFocus;
end;
end;
end;
end;
...funktioniert auch.
Das Problem:
- wenn ich die
Query einmal gefiltert habe und noch einmal 'procedure QLieferschein' aufrufe erhalte ich die Meldung 'Feld LS' nicht gefunden.
- dabei ist unwichtig ob die
Query bei Start der Abfrage gefiltert oder ungefiltert ist.
das Problem tritt nur bei QLieferschein auf.
... hat jemand eine Idee ?
Danke im Voraus...