AW: Problem mit zugriff auf dbf Dateien und bearbeiten.
Oooooh woooow :thumb::thumb::thumb:
Is ja der Hammer, da merkt man den unterschied... ich werde mich mal an die Arbeit machen und alles so anpassen wie Du mir empfohlen hast...:shock: Muss jetzt leider zur Arbeit, werde aber sobald als möglich mein vorhaben hier nochmals schildern...:hi: |
AW: Problem mit zugriff auf dbf Dateien und bearbeiten.
Hallo Leute
nach ein paar Tagen abwesenheit melde ich mich wieder:-D Bin im meinem Projekt ein wenig weiter gekommen. Habe es so wie mir "nahpets" empfohlen hat meinen Code bereinigt und den Buttons und Editfelder mit Namen versehen:thumb: Jetzt zum eigentlichem, nahpets Du hast doch auf Seite 2 doch ein Miniprogramm geschreiben vo die Tabelle gefiltert wird. Das ist doch genau das was ich brauche... Was ich jetzt nicht verstehe ist, im Editfeld (bei mir vonGast) hast Du im Objektinspektor bei Text folgendes reingeschrieben: KUNR > 1 and KUNR < 4 wie bekomme ich es nun hin, genau diesen befehl über die Editfelder (vonGast und bisGast) zu Steuern? Genaugenommen sollte nicht ein "fester Wert" drin stehen, sondern ich möchte eine Eingabe machen z.B. vonGast 3 bisGast 7...:shock: bin so Frei und poste den Code nochmals: Danke
Code:
unit Main;
interface uses SysUtils, Windows, Messages, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, ExtCtrls, Menus, ComCtrls, DB, Grids, DBGrids, dbf, DBTables, XPMan, jpeg, ToolWin, RpRender, RpRenderPDF, RpDefine, RpRave, RpCon, RpConDS, ImgList, FMTBcd, SqlExpr; type TMainForm = class(TForm) MainMenu: TMainMenu; FileExitItem: TMenuItem; DataSource1: TDataSource; DBGrid1: TDBGrid; EdLimitMax: TEdit; BtnOK: TButton; Dbf1: TDbf; XPManifest1: TXPManifest; EdLimitNull: TEdit; BtnLoeschen: TButton; GroupBox1: TGroupBox; LabvonGast: TLabel; LabbisGast: TLabel; vonGast: TEdit; bisGast: TEdit; BtnFilter: TButton; GroupBox2: TGroupBox; LabLoeschen: TLabel; LabEintragen: TLabel; Timer1: TTimer; StatusBar1: TStatusBar; OpenDialog1: TOpenDialog; Oeffnen1: TMenuItem; RvRenderPDF1: TRvRenderPDF; RvDataSetConnection1: TRvDataSetConnection; RvCustomConnection1: TRvCustomConnection; RvProject1: TRvProject; Drucken1: TMenuItem; PrintDialog1: TPrintDialog; Dbf1KUNR: TIntegerField; Dbf1KUNAM: TStringField; Dbf1KUANRED: TStringField; Dbf1KUFIRMA: TStringField; Dbf1KUSALDO: TFloatField; Dbf1KULIMIT: TLargeintField; ImageList1: TImageList; Query1: TQuery; procedure FormCreate(Sender: TObject); procedure FileExit(Sender: TObject); procedure BtnOKClick(Sender: TObject); procedure BtnLoeschenClick(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure Oeffnen1Click(Sender: TObject); procedure Drucken1Click(Sender: TObject); procedure EdLimitMaxKeyPress(Sender: TObject; var Key: Char); procedure vonGastChange(Sender: TObject); procedure EdLimitMaxChange(Sender: TObject); procedure BtnFilterClick(Sender: TObject); procedure bisGastChange(Sender: TObject); end; var MainForm: TMainForm; implementation {$r *.dfm} procedure TMainForm.FormCreate(Sender: TObject); // Datum und Uhrzeit in der Statusleiste begin Statusbar1.Panels[1].Text:=TimeToStr (now); Statusbar1.Panels[2].Text:=DateToStr (now); end; procedure TMainForm.FileExit(Sender: TObject); // Programm beenden begin dbf1.Close; application.Terminate; end; procedure TMainForm.BtnOKClick(Sender: TObject); // Guthaben für alle Gäste auf einmal setzen begin dbf1.First; while not dbf1.EoF do begin dbf1.Edit; dbf1.FieldByName('KULimit').AsString := edlimitMax.Text; dbf1.Post; dbf1.Next; end; end; procedure TMainForm.BtnLoeschenClick(Sender: TObject); //Guthaben für alle Gäste auf einmal löschen begin dbf1.First; while not dbf1.EoF do begin dbf1.Edit; dbf1.FieldByName('KULimit').AsString := edLimitNull.Text; dbf1.Post; dbf1.Next; end; end; procedure TMainForm.Timer1Timer(Sender: TObject); //Timer für Datum und Uhrzeit begin Statusbar1.Panels[1].Text:=DateToStr (now); Statusbar1.Panels[2].Text:=TimeToStr (now); end; procedure TMainForm.Oeffnen1Click(Sender: TObject); begin dbf1.Close; if OpenDialog1.Execute then begin dbf1.TableName := OpenDialog1.FileName; end; dbf1.Open; end; procedure TMainForm.Drucken1Click(Sender: TObject); //Tabelle Drucken über Rave Reports begin RvProject1.Open; RvProject1.Execute; end; procedure TMainForm.EdLimitMaxKeyPress(Sender: TObject; var Key: Char); //Guthabenfeld nur Zahlen möglich begin if NOT (Key in [#08, '0'..'9']) then Key := #0; end; procedure TMainForm.vonGastChange(Sender: TObject); //Filter Button wird eingeschaltet sobald Zahl in vonGast Feld eingegeben wird begin btnFilter.Enabled:=true; end; procedure TMainForm.EdLimitMaxChange(Sender: TObject); //OK Bestätigen Button wird eingeschaltet sobald im EdLimitMaxfeld eine Eingabe erfolgt begin btnOk.Enabled:=true; end; procedure TMainForm.BtnFilterClick(Sender: TObject); //Ausführen des Filter im dbgrid begin dbf1.Filter :=vonGast.Text; dbf1.Filter :=bisGast.Text; dbf1.Filtered := not dbf1.Filtered; end; procedure TMainForm.bisGastChange(Sender: TObject); begin end; end. |
AW: Problem mit zugriff auf dbf Dateien und bearbeiten.
Hmm..
In Filter musst Du einen zusammengebauten string packen...
Delphi-Quellcode:
Bitte vorher die Eingaben auf Gültigkeit prüfen, sprich dass es sich um Zahlen handelt und die Eingabefelder nicht leer sind.. ;)
dbf1.Filtered := false;
// Prüfen der Edits.. if PruefungOK then begin dbf1.Filter := 'KUNR > ' + vonGast.Text + ' and KUNR < ' + bisGast.Text; dbf1.Filtered := true; end; |
AW: Problem mit zugriff auf dbf Dateien und bearbeiten.
Liste der Anhänge anzeigen (Anzahl: 1)
Ok klappt fast...:-D
habs mal so eingefügt:
Code:
Wenn ich auf Filtern klicke, dann funktioniert es auch. Sobald ich aber die Zahl aus dem vonGast.Text oder aus dem bisGast.Text rausnehme und nochmals Filter klicke, erscheint auch die showmessage danach stürzt das Programm aber leider ab...
if vonGast.text='' then showmessage('Bitte Gast Nr. eingegeben!');
begin dbf1.Filter := 'KUNR > ' + vonGast.Text + ' and KUNR < ' + bisGast.Text; dbf1.Filtered := true; end; oh mann was habe ich nun wieder falsch gemacht? :roll: |
AW: Problem mit zugriff auf dbf Dateien und bearbeiten.
da fehlt eine "else" würde ich mal behaupten, versuchs mal so:
Delphi-Quellcode:
if FilterText='' then
begin showmessage('Bitte Gast von/bis Nr. eingegeben!'); end else begin dbf1.Filter := FilterText dbf1.Filtered := true; end;
Delphi-Quellcode:
Ist jetzt immer noch nicht wirklich sauber, aber vielleicht ein erster Schritt.
function FilterText:String;
begin Result:=''; if (Trim(vonGast.Text)<>'') and (Trim(bisGast.Text)<>'') then if IstEineZahl(vonGast.Text) and IstEineZahl(bisGast.Text) then Result:='KUNR > ' + vonGast.Text + ' and KUNR < ' + bisGast.Text; end; //IstEineZahl ist eine weiter Funktion, in der du evtl. TryStrToInt oder sowas verwenden könntest. |
AW: Problem mit zugriff auf dbf Dateien und bearbeiten.
und Filter zurücksetzen nicht vergessen
Delphi-Quellcode:
if FilterText='' then
begin dbf1.Filter := ''; dbf1.Filtered := false; //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< showmessage('Bitte Gast von/bis Nr. eingegeben!'); end else begin dbf1.Filter := FilterText; dbf1.Filtered := true; end; |
AW: Problem mit zugriff auf dbf Dateien und bearbeiten.
Ich habs jetzt mal so gemacht:
Code:
soweit funktioniert es auch:thumb:
procedure TMainForm.BtnFilterClick(Sender: TObject);
//Ausführen des Filter im dbgrid begin dbf1.Filtered := false; // Prüfen der Edits.. if vonGast.text='' then showmessage('Bitte von Gast Nr. eingegeben!') else begin dbf1.Filter := 'KUNR > ' + vonGast.Text + ' and KUNR < ' + bisGast.Text; dbf1.Filtered := true; end; Nur das mit dem Filter zurücksetzen habe ich nicht so ganz verstanden...:shock: |
AW: Problem mit zugriff auf dbf Dateien und bearbeiten.
Zitat:
Delphi-Quellcode:
dbf1.Filtered := false;
|
AW: Problem mit zugriff auf dbf Dateien und bearbeiten.
Zitat:
Du hast deine Datenmenge gefilter, z.B. Gast 3-8. Nun willst du nochmal alles sehen. Wie machst du das, wenn du den Filter nicht mehr rausnehmen kannst. Denn wenn beide Edits leer sind und man den Filter-Button drückt würde man erwarten, dass wieder alle Daten ungefiltert angezeigt werden. Stattdessen kommt bei dir nur die Showmessage und nichts passiert. |
AW: Problem mit zugriff auf dbf Dateien und bearbeiten.
Bitte Entschuldigt
jetzt sehe ich den Wald vor lauter Bäume nicht mehr...:shock: @Jumpy Du hast völlig recht, es geht noch weiter... Wenn das bisGast leer lasse und ich den Filter anwende, dann stürzt es ab... Was setze ich nun wo ein? Mit diesem Code bekomme ich es gar nicht gebacken...:
Code:
if FilterText='' then
begin showmessage('Bitte Gast von/bis Nr. eingegeben!'); end else begin dbf1.Filter := FilterText dbf1.Filtered := true; end; function FilterText:String; begin Result:=''; if (Trim(vonGast.Text)<>'') and (Trim(bisGast.Text)<>'') then if IstEineZahl(vonGast.Text) and IstEineZahl(bisGast.Text) then Result:='KUNR > ' + vonGast.Text + ' and KUNR < ' + bisGast.Text; end; //IstEineZahl ist eine weiter Funktion, in der du evtl. TryStrToInt oder sowas verwenden könntest. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz