AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Problem mit zugriff auf dbf Dateien und bearbeiten.
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit zugriff auf dbf Dateien und bearbeiten.

Ein Thema von Duffy Duck · begonnen am 26. Jan 2016 · letzter Beitrag vom 16. Feb 2016
Antwort Antwort
Seite 5 von 7   « Erste     345 67      
Duffy Duck

Registriert seit: 22. Feb 2005
56 Beiträge
 
Delphi 7 Enterprise
 
#41

AW: Problem mit zugriff auf dbf Dateien und bearbeiten.

  Alt 29. Jan 2016, 21:45
Hallo Ihr lieben,

sooo aktueller Stand
Delphi Deinstalliert und alles wieder neu Installiert 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

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

Vorest Danke an alle für eure mühe, tolle Gemeinschaft
  Mit Zitat antworten Zitat
Duffy Duck

Registriert seit: 22. Feb 2005
56 Beiträge
 
Delphi 7 Enterprise
 
#42

AW: Problem mit zugriff auf dbf Dateien und bearbeiten.

  Alt 4. Feb 2016, 10:26
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...
Miniaturansicht angehängter Grafiken
aufnahme6.jpg  
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#43

AW: Problem mit zugriff auf dbf Dateien und bearbeiten.

  Alt 4. Feb 2016, 10:44
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...
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:
select * from Kunden limit vonGast, bisGast also z. B.: select * from Kunden limit 10, 20
Hätte hier eher sowas erwartet:
select * from Kunden where kunr between vonGast and bisGast also z. B.: select * from Kunden where kunr between 10 and 20

Geändert von nahpets ( 4. Feb 2016 um 11:40 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#44

AW: Problem mit zugriff auf dbf Dateien und bearbeiten.

  Alt 4. Feb 2016, 10:49
Könnte es sein, daß vonGast.Text u.U. kein Integer ist?

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector

Geändert von p80286 ( 4. Feb 2016 um 10:50 Uhr) Grund: Tippfehler
  Mit Zitat antworten Zitat
Duffy Duck

Registriert seit: 22. Feb 2005
56 Beiträge
 
Delphi 7 Enterprise
 
#45

AW: Problem mit zugriff auf dbf Dateien und bearbeiten.

  Alt 4. Feb 2016, 11:24
@nahpets

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

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...
Miniaturansicht angehängter Grafiken
aufnahme7.jpg  
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#46

AW: Problem mit zugriff auf dbf Dateien und bearbeiten.

  Alt 4. Feb 2016, 11:44
Was benutzt Du jetzt eigentlich in Deinem Programm?

TDBF oder TQuery?

TQuery benötigt die BDE.

mit 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;
  Mit Zitat antworten Zitat
Duffy Duck

Registriert seit: 22. Feb 2005
56 Beiträge
 
Delphi 7 Enterprise
 
#47

AW: Problem mit zugriff auf dbf Dateien und bearbeiten.

  Alt 4. Feb 2016, 11:52
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...

Geändert von Duffy Duck ( 4. Feb 2016 um 12:09 Uhr)
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#48

AW: Problem mit zugriff auf dbf Dateien und bearbeiten.

  Alt 4. Feb 2016, 12:11
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 nicht aus, um die eventuell vorhandenen Probleme auf unbekannte Entfernung erkennen zu können
  Mit Zitat antworten Zitat
Duffy Duck

Registriert seit: 22. Feb 2005
56 Beiträge
 
Delphi 7 Enterprise
 
#49

AW: Problem mit zugriff auf dbf Dateien und bearbeiten.

  Alt 4. Feb 2016, 12:17
Natürlich, Du hast recht mache gleich ein Copy/Paste...

Sooo is drin, ein wenig lang...
Hoffe Du findest etwas

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.

Geändert von Duffy Duck ( 4. Feb 2016 um 12:21 Uhr)
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#50

AW: Problem mit zugriff auf dbf Dateien und bearbeiten.

  Alt 4. Feb 2016, 13:02
Delphi-Quellcode:
procedure TMainForm.FileExit(Sender: TObject);
begin
  dbf1.active := false;
  dbf1.Close;
  application.Terminate;
end;
Das ist nicht wirklich klever.
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;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 5 von 7   « Erste     345 67      

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:04 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