AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi (dbase) direkt auf einen bestimmten Satz zugreifen
Thema durchsuchen
Ansicht
Themen-Optionen

(dbase) direkt auf einen bestimmten Satz zugreifen

Ein Thema von hans-peter · begonnen am 13. Apr 2003 · letzter Beitrag vom 16. Apr 2003
Antwort Antwort
hans-peter

Registriert seit: 12. Apr 2003
23 Beiträge
 
#1

(dbase) direkt auf einen bestimmten Satz zugreifen

  Alt 13. Apr 2003, 17:31
Hallo!

Ich bin ein Einsteiger.

In Delphi_3 habe ich dieses Programm erstellt.
Auf dem Formular habe ich eine Table- und
eine Datasource-Komponente liegen, außerdem
DBEdits und Label.

procedure TForm1.FormCreate(Sender: TObject);
begin
Table1.DatabaseName := 'c:\geschaeft';
Table1.TableName := 'Kunden';
Table1.TableType := ttDBase;
Table1.Open;
DataSource1.DataSet := Table1;

Label1.caption := DBEdit1.Text;
Label2.caption := DBEdit2.Text;
Label3.caption := DBEdit3.Text;
end;

// zum Beenden
procedure TForm1.Button2Click(Sender: TObject);
begin
Table1.Close;
Form1.close;
end;


Hier meine Fragen:

1) Die Ausgabe auf dem Bildschirm soll wie eine Visiten-
karte aussehen, also ohne die Optik der Editfelder. Darum
habe ich die die Formulierung Label1.caption := DBEdit1.Text
gewählt. Gibt es eine andere/bessere Lösung?

2) Leider wird bei mir immer nur der 1. Satz der Kunden-Datei
angezeigt. Meine Datenbank hat über 3100 Sätze (die auch genau
den Kundennummern entsprechen). Wie kann ich gezielt und
direkt auf einen bestimmten Datensatz zugreifen, zum Beispiel
den Datensatz Nr. 1245???? Und diesen ausgeben.
Über eine Suchschleife dauert das bei über 3000 Sätzen zu
lange.

Kann mir jemand helfen? Da ich Einsteiger bin, wäre ich sehr
dankbar, wenn die Lösung etwas näher erläutert wird, wie z.B.
was evtl. im Objektinspekter eingetragen werden muß, oder
wo besonders drauf geachtet werden muß.

Danke.

Hans-Peter
  Mit Zitat antworten Zitat
Benutzerbild von APP
APP

Registriert seit: 24. Feb 2003
Ort: Graz (A)
705 Beiträge
 
Delphi 7 Enterprise
 
#2
  Alt 13. Apr 2003, 20:13
Hallo,
und Willkommen im Forum!

zu 1+2)
Zitat:
1) Die Ausgabe auf dem Bildschirm soll wie eine Visiten-
karte aussehen, also ohne die Optik der Editfelder. Darum
habe ich die die Formulierung Label1.caption := DBEdit1.Text
gewählt. Gibt es eine andere/bessere Lösung?

2) Leider wird bei mir immer nur der 1. Satz der Kunden-Datei
angezeigt.
Du solltest besser DBText1 statt eines Labels verwenden, da du sonst bei einer Datensatzänderung (durch Navigation/Filterung) Deinen Label manuell nachführen mußt, datensensitive Controlls wie z.b. ein DBText1 machen das automatisch.
Daher siehst Du auch immer nur den 1. Datensatz!

Übrigens kannst Du Deine Tabellen auch im Objektinspektor eintragen
--> DBText1
1. DataSource - DataSource1
2. DataField - <herunterklappen und Auswählen> // Feld das Angezeigt werden soll


zu 2)
Zitat:
Wie kann ich gezielt und
direkt auf einen bestimmten Datensatz zugreifen
z.B indem Du einen Filter benutzt:
Delphi-Quellcode:
PROCEDURE TForm1.Button3Click(Sender: TObject);
BEGIN
   Table1.Filtered := False;
   Table1.FilterOptions := [foCaseInsensitive];
   Table1.Filter := ('DATENSATZNUMMER=2'); // ALLGEMEIN, Name des Feldes + Nummer
   Table1.Filter := ('DATENSATZNUMMER='+Edit1.Text) // Benutzer kann eine Nummer auszuwählen
   Table1.Filtered := True;
END;
p.s.
Mit der Filterfunktion kannst Du alle Felder in der Tabelle filtern, wenn du das Ergebnis aber nur mittels DBText1 darstellst, und es mehrerer Datensätze gibt die den Filterkriterien entsprechen, wird nur der 1. gefilterte Datensatz angezeigt.

p.p.s
Wegen der Einstellungen im Objektinspektor empfehle ich Dir, mal die Programme im ..\Delphi5\Demos\Db\ Verzeichnis anzuschauen.
Armin P. Pressler

BEGIN
...real programmers are using C/C++ - smart developers Delphi;
END;
  Mit Zitat antworten Zitat
hans-peter

Registriert seit: 12. Apr 2003
23 Beiträge
 
#3
  Alt 14. Apr 2003, 18:53
Ich melde mich nochmal und trau mich einfach, als Einsteiger nochmal nachzuhaken:
Manche Tips klappen bei mir nicht, vielleicht weil ich noch mit Delphi3 stricke oder weil ich halt noch zu unerfahren bin.

Was funktioniert ist folgende Programmzeile:

procedure TForm1.Button1Click(Sender: TObject);
begin
Table1.first;
Table1.MoveBy(StrToInt(Edit1.Text)-1);
end;

Hiermit kann ich endlich meine Kundennummer (ist gleich die Satznummer)ansprechen.

Aber: Ich habe den Eindruck, als bewege sich der Zeiger Schritt für Schritt von 1 (first) bis 3120 (Edit1.Text), zwar schnell, aber doch immerhin zeitverzögert wie in einer langen Schleife.
In meinem alten DOS-Programm, welches ich jetzt mit Delphi3 versuche nachzustricken, war keinerlei Zeitdifferenz zwischen Enter und Anzeigen zu merken. Zack war die Anzeige da.
Gibt es vielleicht einen noch direkteren Zugriff ??
Für einen evtl. Tip Dankeschön.

Hans-Peter
  Mit Zitat antworten Zitat
Benutzerbild von APP
APP

Registriert seit: 24. Feb 2003
Ort: Graz (A)
705 Beiträge
 
Delphi 7 Enterprise
 
#4
  Alt 16. Apr 2003, 07:18
Hallo Hans-Peter2
was meinst Du mit
Zitat:
Manche Tips klappen bei mir nicht, vielleicht weil ich noch mit Delphi3 stricke oder weil ich halt noch zu unerfahren bin


Falls das was ich gepostet habe bei Dir nicht funktioniert, sollten wir eine Lösung suchen,
wenn es funktioniert, Du aber eine Lösung zu einem anderen Problem suchst, solltest Du einen neuen Thread starten.

Eine Deiner Fragen ist:
Zitat:
Wie kann ich gezielt und
direkt auf einen bestimmten Datensatz zugreifen, zum Beispiel
den Datensatz Nr. 1245???? Und diesen ausgeben.
Lösung: Filter, (fortgeschrittener: TQuery)

Deine Antwort
Zitat:
Was funktioniert ist folgende Programmzeile:
procedure TForm1.Button1Click(Sender: TObject);
begin
Table1.first;
Table1.MoveBy(StrToInt(Edit1.Text)-1);
end;
hat eigentlich nichts mit Deiner ersten Frage zu tun, MoveBy positioniert den Cursor relativ zum aktiven Datensatz in einer Datenmenge (=Blättern in Datenmengen). Es funktioniert (sehr langsam, wie es scheint), aber Du "mißbrauchst" diese Funktion.
Armin P. Pressler

BEGIN
...real programmers are using C/C++ - smart developers Delphi;
END;
  Mit Zitat antworten Zitat
hans-peter

Registriert seit: 12. Apr 2003
23 Beiträge
 
#5
  Alt 16. Apr 2003, 20:16
Jetzt - nach erneutem und weniger hektischen Probieren - hat´s geklappt.
Toll. Mit Table.Filter erreiche ich genau das, was ich wollte.

Herzlichen Dank.

Hans-Peter
  Mit Zitat antworten Zitat
Antwort Antwort


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 09:30 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