Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Problem mit zugriff auf dbf Dateien und bearbeiten. (https://www.delphipraxis.net/188043-problem-mit-zugriff-auf-dbf-dateien-und-bearbeiten.html)

Duffy Duck 29. Jan 2016 20:45

AW: Problem mit zugriff auf dbf Dateien und bearbeiten.
 
Hallo Ihr lieben,

sooo aktueller Stand:-D
Delphi Deinstalliert und alles wieder neu Installiert:thumb: sowie Tdbf 6.9.1 und siehe da... es läuft, es lässt sich alles verändern und wird sogar in der Kunden.dbf gespeichert:thumb:

Jetzt muss ich mich nur noch mit dem Filter auseinander setzten...:shock:
Von Kunde bis Kunde auswählen, und Betrag einsetzen.

Vorest Danke an alle für eure mühe, tolle Gemeinschaft:thumb::thumb:

Duffy Duck 4. Feb 2016 09:26

AW: Problem mit zugriff auf dbf Dateien und bearbeiten.
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo allerseits

wollte nicht nochmals ein neues Thema eröffnen und fahre hier mit meiner frage fort...:
Das mit dem Filtern klappt leider nicht so ganz.

Was habe ich schon gemacht:

Habe auf der Form eine TQuery komponente gesetzt und im Inspektor Datasource Datasource1 ausgewählt.
Doppelklick auf den Button in der Form und folgender sql code eingegeben:
Code:
procedure TMainForm.Button2Click(Sender: TObject);
begin
    query1.sql.text:='select * from Kunden limit '+IntToStr(vonGast.Text)+', '+IntToStr(bisGast.Text);
end;
leider erscheint nach F9 folgende meldung:
was ist mit überladener Version gemeint? Kurz vor dem Ziel so etwas...:roll: :evil:

nahpets 4. Feb 2016 09:44

AW: Problem mit zugriff auf dbf Dateien und bearbeiten.
 
Zitat:

Zitat von Duffy Duck (Beitrag 1329366)
Hallo allerseits

wollte nicht nochmals ein neues Thema eröffnen und fahre hier mit meiner frage fort...:
Das mit dem Filtern klappt leider nicht so ganz.

Was habe ich schon gemacht:

Habe auf der Form eine TQuery komponente gesetzt und im Inspektor Datasource Datasource1 ausgewählt.
Doppelklick auf den Button in der Form und folgender sql code eingegeben:
Code:
procedure TMainForm.Button2Click(Sender: TObject);
begin
    query1.sql.text:='select * from Kunden limit '+IntToStr(vonGast.Text)+', '+IntToStr(bisGast.Text);
end;
leider erscheint nach F9 folgende meldung:
was ist mit überladener Version gemeint? Kurz vor dem Ziel so etwas...:roll: :evil:

vonGast.Text ist eine Zeichenfolge und mit IntToStr kann man keine Zeichenfolge in eine Zeichenfolge verwandeln, sondern nur Integerwerte in Zeichenfolgen.

Entweder:
Delphi-Quellcode:
procedure TMainForm.Button2Click(Sender: TObject);
begin
  query1.sql.text := 'select * from Kunden limit ' + vonGast.Text + ', ' + bisGast.Text;
end;
oder
Delphi-Quellcode:
procedure TMainForm.Button2Click(Sender: TObject);
begin
  query1.sql.text:= Format('select * from Kunden limit %s, %s',[vonGast.Text,bisGast.Text]);
end;
wobei mir das entstehende SQL-Statement seltsam vorkommt:
SQL-Code:
select * from Kunden limit vonGast, bisGast
also z. B.:
SQL-Code:
select * from Kunden limit 10, 20

Hätte hier eher sowas erwartet:
SQL-Code:
select * from Kunden where kunr between vonGast and bisGast
also z. B.:
SQL-Code:
select * from Kunden where kunr between 10 and 20

p80286 4. Feb 2016 09:49

AW: Problem mit zugriff auf dbf Dateien und bearbeiten.
 
Könnte es sein, daß
Delphi-Quellcode:
vonGast.Text
u.U. kein Integer ist?

Gruß
K-H

Duffy Duck 4. Feb 2016 10:24

AW: Problem mit zugriff auf dbf Dateien und bearbeiten.
 
Liste der Anhänge anzeigen (Anzahl: 1)
@nahpets

habe deinen code so übernommen und eingestzt, jetzt kommt zwar keine Fehlermeldung mehr aber es passiert auch nichts...:shock:

also vonGast.text und bisGast.text waren die Edit1.text und Edit2.text die umbenannt habe.

Zum verständniss:

Ich habe eine Dbgrid wo die kunden.dbf eingelesen wird, im Feld KUNR (Gast Nr.) habe ich z.B. 10 Kunden drin, beim einlesen der Tabelle werden alle 10 Kunden angezeigt. Jetzt möchte ich gerne einen Filter setzen, also zeige mir von Gast 1 bis Gast 5 an.
Dachte dass es mit einer sql abfrage möglich sein sollte...

nahpets 4. Feb 2016 10:44

AW: Problem mit zugriff auf dbf Dateien und bearbeiten.
 
Was benutzt Du jetzt eigentlich in Deinem Programm?

TDBF oder TQuery?

TQuery benötigt die BDE.

mit
Delphi-Quellcode:
query1.sql.text := Format('select * from Kunden where kunr between %s and %s',[vonGast.Text,bisGast.Text]);
wird der Query ein Statement zugewiesen, mehr aber auch nicht.

Wenn Du möchtstes, dass es auch ausgeführt wird, solltest Du die Abfrage öffnen.
Delphi-Quellcode:
query1.Close;
query1.sql.text:= Format('select * from Kunden where kunr between %s and %s',[vonGast.Text,bisGast.Text]);
query1.Open;

Duffy Duck 4. Feb 2016 10:52

AW: Problem mit zugriff auf dbf Dateien und bearbeiten.
 
Ich benutze die TDBF

brauche ich eigentlich die TQuery komponente? obwohl diese mit Datasource1 verbunden ist, kann ich Active nicht auf True setzten, da kommt: Query1: keine SQL Anweisung verfügbar
[Edit] jaaa lesen klar, TQuery benötigt die BDE.. also brauche ich die Tquery komponente gar nicht.[/Edit]

Sorry wenn ich evtl. nicht richtig ausdrucke, bin noch in der "lernphase" mit Delphi

Habe auch diesen code von Dir benutzt, mit der Anweisung zu öffnen... hmm leider "bewegt" also wird nichts gefiltert, es bleibt alles so wie es ist...

nahpets 4. Feb 2016 11:11

AW: Problem mit zugriff auf dbf Dateien und bearbeiten.
 
Entweder TDBF oder TQuery (BDE).
Gemischt geht nicht.
TDBF kann kein SQL.
Filter mit TDBF funktionieren.
Wie sieht Dein (weiter oben angedeuteter) Versuch, mit Filter zu arbeiten, aus?
(Quelltext? - Dann könnte man eventuell Hilfestellung geben, damit eine grundsätzlich gegebene Funktionalität auch von Dir umgesetzt werden kann.)

Wie Du die Abfrage öffnest, steht in meinem letzten Post!

Query.Active = True funktioniert nur, wenn Du vorher ein SQL-Statement zugewiesen hast.

Grundsätzlich:

Wenn Du eine Frage hast, die auf eine "Fehlfunktion" des Quelltextes hindeuten könnte, dann poste bitte jedesmal den dann aktuellen Quelltext.

Wie soll man ohne diesen denn jetzt feststellen, warum bei Dir der übernommenen Quelltext nicht funktioniert?

Hier ist gerade sehr diesiges, verregnetes Wetter, deshalb reicht meine :glaskugel: nicht aus, um die eventuell vorhandenen Probleme auf unbekannte Entfernung erkennen zu können ;-)

Duffy Duck 4. Feb 2016 11:17

AW: Problem mit zugriff auf dbf Dateien und bearbeiten.
 
Natürlich, Du hast recht:thumb: mache gleich ein Copy/Paste...:-D

Sooo is drin, ein wenig lang...:shock:
Hoffe Du findest etwas:-D

Delphi-Quellcode:
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;
    EditUndoItem: TMenuItem;
    EditCutItem: TMenuItem;
    EditCopyItem: TMenuItem;
    EditPasteItem: TMenuItem;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    Edit3: TEdit;
    Button1: TButton;
    Dbf1: TDbf;
    XPManifest1: TXPManifest;
    Edit4: TEdit;
    Button4: TButton;
    GroupBox1: TGroupBox;
    Label3: TLabel;
    Label4: TLabel;
    vonGast: TEdit;
    bisGast: TEdit;
    Button2: TButton;
    GroupBox2: TGroupBox;
    Label5: TLabel;
    Label6: 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 EditUndo(Sender: TObject);
    procedure EditCut(Sender: TObject);
    procedure EditCopy(Sender: TObject);
    procedure EditPaste(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Oeffnen1Click(Sender: TObject);
    procedure Drucken1Click(Sender: TObject);
    procedure Edit3KeyPress(Sender: TObject; var Key: Char);
    procedure vonGastChange(Sender: TObject);
    procedure Edit3Change(Sender: TObject);
    procedure Button2Click(Sender: TObject);

end;

var
  MainForm: TMainForm;

implementation

{$r *.dfm}

procedure TMainForm.FormCreate(Sender: TObject);
begin
  Statusbar1.Panels[1].Text:=TimeToStr (now);
  Statusbar1.Panels[2].Text:=DateToStr (now);
end;

procedure TMainForm.FileExit(Sender: TObject);
begin
  dbf1.active := false;
  dbf1.Close;
  application.Terminate;
end;

procedure TMainForm.EditUndo(Sender: TObject);
begin
  { Code zur Durchführung von Bearbeiten Rückgängig hinzufügen }
end;

procedure TMainForm.EditCut(Sender: TObject);
begin
  { Code zur Durchführung von Bearbeiten Ausschneiden hinzufügen }
end;

procedure TMainForm.EditCopy(Sender: TObject);
begin
  { Code zur Durchführung von Bearbeiten Kopieren hinzufügen }
end;

procedure TMainForm.EditPaste(Sender: TObject);
begin
  { Code zur Durchführung von Bearbeiten Einfügen hinzufügen }
end;

procedure TMainForm.Button1Click(Sender: TObject);
begin
      dbf1.First;
  while not dbf1.EoF do begin
    dbf1.Edit;
    dbf1.FieldByName('KULimit').AsString := edit3.Text;
    dbf1.Post;
    dbf1.Next;
  end;
end;
procedure TMainForm.Button4Click(Sender: TObject);
begin
    dbf1.First;
  while not dbf1.EoF do begin
    dbf1.Edit;
    dbf1.FieldByName('KULimit').AsString := edit4.Text;
    dbf1.Post;
    dbf1.Next;
  end;
end;

procedure TMainForm.Timer1Timer(Sender: TObject);
begin
  Statusbar1.Panels[1].Text:=DateToStr (now);
  Statusbar1.Panels[2].Text:=TimeToStr (now);
end;

procedure TMainForm.Oeffnen1Click(Sender: TObject);
begin
   dbf1.active := false;
   DataSource1.DataSet := dbf1;
   OpenDialog1.execute;
   dbf1.active := true;
end;

procedure TMainForm.Drucken1Click(Sender: TObject);
begin
   RvProject1.Open;
   RvProject1.Execute;
end;

procedure TMainForm.Edit3KeyPress(Sender: TObject; var Key: Char);
begin
     if NOT (Key in [#08, '0'..'9']) then
    Key := #0;
end;

procedure TMainForm.vonGastChange(Sender: TObject); //Filter Button wird eingeschaltet
begin
      button2.Enabled:=true;
end;

procedure TMainForm.Edit3Change(Sender: TObject); //OK Button wird eingeschaltet
begin
      button1.Enabled:=true;
  end;

procedure TMainForm.Button2Click(Sender: TObject);
begin
    query1.Close;
    query1.sql.text := 'select * from Kunden limit ' + vonGast.Text + ', ' + bisGast.Text;
    query1.Open;
  end;

end.

nahpets 4. Feb 2016 12:02

AW: Problem mit zugriff auf dbf Dateien und bearbeiten.
 
Zitat:

Zitat von Duffy Duck (Beitrag 1329389)
Delphi-Quellcode:
procedure TMainForm.FileExit(Sender: TObject);
begin
  dbf1.active := false;
  dbf1.Close;
  application.Terminate;
end;

Das ist nicht wirklich klever.
Delphi-Quellcode:
Active := false;
schließt die Tabelle, das folgende Close ist dann überflüssig.
Das Programm beenden geht auch eleganter durch das Schließen des Formulares.
Delphi-Quellcode:
procedure TMainForm.FileExit(Sender: TObject);
begin
  dbf1.Close;
  Close;
end;
Gibt den Buttons bitte Namen, an denen man erkennen kann, welche Funktion sie ausüben sollen (z. B. statt Button1 btnKuLimitSetzen).
Den Editfeldern gib bitte Namen, die auf ihren Inhalt schließen lassen (z. B. statt edit1 edKuLimit).

Und wenn Du dann noch jeder Prozedur einen Kommentar verpasst, was ihre Aufgabe sein soll, so könnte das durchaus hilfreich sein.
Man kann dann ggfls. aus Vergleich von Kommentar und Quelltext auf eventuelle Probleme schließen bzw. Widersprüche zwischen "Theorie und Praxis" erkennen.
Und wenn man ein Programm nach Jahren nochmal pflegen muss, dann reicht es den Kommentar zu lesen und nicht erst mehr oder weniger Quelltext, aus dem man dann auf die (vermutete) Aufgabe schließen muss.

Was soll denn hier jetzt passieren?
Für alle Datensätze KULimit auf einen einheitlichen Wert setzen?
Delphi-Quellcode:
procedure TMainForm.Button1Click(Sender: TObject);
begin
  dbf1.First;
  while not dbf1.EoF do begin
    dbf1.Edit;
    dbf1.FieldByName('KULimit').AsString := edit3.Text;
    dbf1.Post;
    dbf1.Next;
  end;
end;
oder war das der Versuch für die gefilterten Sätze KULimit zu setzen?
Dann könnte eventuell dashier hilfreich sein:
Delphi-Quellcode:
procedure TMainForm.btnKULimitClick(Sender: TObject);
// Für alle Datensätze mit KUNR im Bereich vonGast - bisGast
// KULimit auf den Wert aus edKULimit setzen.
begin
  dbf1.Filtered := false;
  dbf1.Filter  := Format('KUNR >= %s and KUNR <= %s', [vonGast.Text, bisGast.Text]);
  dbf1.Filtered := true;
  dbf1.First;
  while not dbf1.EoF do begin
    dbf1.Edit;
    dbf1.FieldByName('KULimit').AsString := edKULimit.Text;
    dbf1.Post;
    dbf1.Next;
  end;
  dbf1.Filtered := false;
  dbf1.Filter := '';
  dbf1.First;
end;
Dashier würd' ich auch anpassen (wenn ich denn den Sinn verstehen würde).
Unklar ist z. B., was hier denn geöffnet werden soll, das Ergebnis des OpenDialogs wird doch überhauptnicht ausgewertet.
Delphi-Quellcode:
procedure TMainForm.Oeffnen1Click(Sender: TObject);
begin
   dbf1.active := false;
   DataSource1.DataSet := dbf1;
   OpenDialog1.execute;
   dbf1.active := true;
end;
Die bisherige Funktion entspricht:
Delphi-Quellcode:
procedure TMainForm.Oeffnen1Click(Sender: TObject);
begin
  dbf1.Close;
  dbf1.Open;
end;
Soll hier eventuell eine Datei ausgewählt werden?
Dann könnte dashier eventuell eine Lösung sein:
Delphi-Quellcode:
procedure TMainForm.Oeffnen1Click(Sender: TObject);
begin
   dbf1.Close
   if OpenDialog1.Execute then begin
     dbf1.TableName := OpenDialog1.FileName;
   end;
   dbf1.Open;
end;

Duffy Duck 4. Feb 2016 12:22

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:

Duffy Duck 10. Feb 2016 21:06

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.

HolgerX 11. Feb 2016 03:37

AW: Problem mit zugriff auf dbf Dateien und bearbeiten.
 
Hmm..

In Filter musst Du einen zusammengebauten string packen...

Delphi-Quellcode:
  dbf1.Filtered := false;
  // Prüfen der Edits..

  if PruefungOK then begin
    dbf1.Filter := 'KUNR > ' + vonGast.Text + ' and KUNR < ' + bisGast.Text;
    dbf1.Filtered := true;
  end;
Bitte vorher die Eingaben auf Gültigkeit prüfen, sprich dass es sich um Zahlen handelt und die Eingabefelder nicht leer sind.. ;)

Duffy Duck 11. Feb 2016 10:27

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:
 if vonGast.text='' then showmessage('Bitte Gast Nr. eingegeben!');
   begin
    dbf1.Filter := 'KUNR > ' + vonGast.Text + ' and KUNR < ' + bisGast.Text;
    dbf1.Filtered := true;
  end;
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...

oh mann was habe ich nun wieder falsch gemacht? :roll:

Jumpy 11. Feb 2016 10:40

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:
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.
Ist jetzt immer noch nicht wirklich sauber, aber vielleicht ein erster Schritt.

joachimd 11. Feb 2016 10:48

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;

Duffy Duck 11. Feb 2016 13:47

AW: Problem mit zugriff auf dbf Dateien und bearbeiten.
 
Ich habs jetzt mal so gemacht:
Code:
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;
soweit funktioniert es auch:thumb:
Nur das mit dem Filter zurücksetzen habe ich nicht so ganz verstanden...:shock:

nahpets 11. Feb 2016 14:05

AW: Problem mit zugriff auf dbf Dateien und bearbeiten.
 
Zitat:

Zitat von Duffy Duck (Beitrag 1330048)
Nur das mit dem Filter zurücksetzen habe ich nicht so ganz verstanden...:shock:

Delphi-Quellcode:
dbf1.Filtered := false;

Jumpy 11. Feb 2016 15:09

AW: Problem mit zugriff auf dbf Dateien und bearbeiten.
 
Zitat:

Zitat von Duffy Duck (Beitrag 1330048)
Nur das mit dem Filter zurücksetzen habe ich nicht so ganz verstanden...:shock:

Die Idee dahinter ist folgende:
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.

Duffy Duck 11. Feb 2016 17:22

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.

nahpets 11. Feb 2016 17:54

AW: Problem mit zugriff auf dbf Dateien und bearbeiten.
 
Zitat:

Zitat von Duffy Duck (Beitrag 1330084)
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.

Der Filter wird mit
Delphi-Quellcode:
dbf1.Filtered := false;
aufgehoben.

Delphi-Quellcode:
  // Filter aufheben
  dbf1.Filtered := false;
  // Neuen Filter zuweisen.
  dbf1.Filter  := FilterText;
  // Wenn ein Filter vorhanden ist, diesen aktivieren.
  dbf1.Filtered := dbf1.Filter <> '';
  // Ist kein Filter vorhanden, dann 'ne Meldung ausgeben.
  if Not dbf1.Filtered then showmessage('Bitte Gast von/bis Nr. eingegeben!');

Duffy Duck 12. Feb 2016 15:39

AW: Problem mit zugriff auf dbf Dateien und bearbeiten.
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ok perfekt, das ist jetzt soweit klar :thumb:
Danke für die ausführliche erklärung:-D

Soll ich nun den inhalt von resp. die bezeichnung FilterText und IstEineZahl mit welchen Werte ersetzten?

hoika 12. Feb 2016 16:52

AW: Problem mit zugriff auf dbf Dateien und bearbeiten.
 
Hallo,
in dem angehängten Screenshot muss die Funktion FilterText auch im Interface-Teil des Formulars stehen,
sonst findet Delphi die doch gar nicht.


Heiko

Duffy Duck 12. Feb 2016 17:24

AW: Problem mit zugriff auf dbf Dateien und bearbeiten.
 
Hallo hoika

danke für den hinweis, ich habe im uses FilterText eingegeben beim compilieren heisst es "Datei nicht gefunden: FilterText.dcu"... hmmmm:shock:

hoika 13. Feb 2016 07:24

AW: Problem mit zugriff auf dbf Dateien und bearbeiten.
 
Hallo,
Uses ist für Units.

Du musst deine Funktion im Interface-Teil deklarieren,
wie deine ButtonClick-Methode.

Heiko

Duffy Duck 13. Feb 2016 22:12

AW: Problem mit zugriff auf dbf Dateien und bearbeiten.
 
Hey Heiko

ach so... bist Du so lieb und machst mir ein Beispiel wie das reingeschrieben wird?
Ich blicke echt nicht durch:shock:

Duffy Duck 16. Feb 2016 08:29

AW: Problem mit zugriff auf dbf Dateien und bearbeiten.
 
Hi Leute

niemand mehr hier der mir sagen/schreiben könnte wie ich die Funktion deklariere...?:shock:
Schon mal Danke:thumb:

p80286 16. Feb 2016 11:03

AW: Problem mit zugriff auf dbf Dateien und bearbeiten.
 
Da frag ich mich, wie Du bisher klar gekommen bist.

Delphi-Quellcode:
unit Superprogrammunit;

interface

uses
  SysUtils
  ,grids;

const
  FIELDSEPERATOR=';' ;
  QUOTECHAR='"';
  ENDOFRECORD=#255;

type
  TmyRecord = record
                feld1:integer;
                feld2:byte;
              end;


var
  meinwert: String;


function Superfunktion:integer;
procedure Ueberfluessigeprocedure(nix:TMyrecord);

implementation

const
  CRLF=#13#10;


function Superfunktion:integer;
begin
  result:=99;
end;

procedure Ueberfluessigeprocedure(nix:TMyrecord);
begin
end;

end.
So könnte z.B. eine Unit aussehen.


Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:29 Uhr.
Seite 2 von 2     12   

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