| Autor |
Beitrag |
Hans-Peter
Hält's aus hier
Beiträge: 3
|
Verfasst: Mo 07.04.03 16:07
[Delphi_3]
Mit diesen Zeilen:
Table1.DatabaseName := 'c:\';
Table1.TableName := 'Adressen.dbf';
Table1.TableType := ttdbase;
Table1.open;
und dem Datenbanknavigator klappt das
Navigieren zum ersten, letzten, vorherigen
und nächsten Datensatz ausgezeichnet.
Ich möchte aber in einem Editfeld eine
Satznummer eingeben können - zum Beispiel
den 457. Satz der Adressen-Datenbank und
dann in den entsprechenden Label (wie
Nr, Name, Vorname .... usw.) die entspre-
chenden Feldinhalte anzeigen.
Ist jemand so freundlich und schreibt
mit kompletter Syntax die notwendigen
Befehle, von der Eingabe ins Editfeld bis
zum Anzeigen der Felder in den ent-
sprechenden Label.
Da die meisten Programmierbücher immer
nur den Navigator erklären, finde ich
nirgendwo ein handgestricktes Program-
mierbeispiel für meine Fragestellung,
also einen gezielten Datensatz - siehe oben -
eingeben zu können und anzuzeigen.
Ich bin in einem derartig frühen Anfänger-
Stadium, daß mir ein aus dem Zusammenhang
gerissener Befehl ohne vollständige Syntax
als Antwort garnix nützt.
Ich würde mir wünschen, daß dieses Forum auch
derartige laienhafte Anfragen, wie meine hier,
mit einem kleinen Beispiel - also vollständig
beantwortet. [Also von dem Punkt an, nachdem
die Kundennummer 457 ins Editfeld eingegeben
worden ist bis zur Anzeige in den entsprechenden
Label]
Jetzt schon Danke dem, der sich die Mühe
macht.
Lieben Gruß
Hans-Peter
|
|
neojones
      
Beiträge: 1206
Erhaltene Danke: 1
|
Verfasst: Mo 07.04.03 16:19
Quelltext
Viele Grüße,
Matthias
_________________ Ha! Es compiliert! Wir können ausliefern!
|
|
Hans-Peter 
Hält's aus hier
Beiträge: 3
|
Verfasst: Mo 07.04.03 17:45
Was mache ich falsch?
Table1.RecNo := 457;
Wie krieg ich jetzt zumBeispiel den Namen (Feld: 'Name')
in ein Label (Label1.caption := ???)
Bei mir wird immer nur der Name des 1.Datensatzes angezeigt, nicht
von Satznummer 457.
Ein Anfänger braucht halt länger.
Liest das jetzt jemand???
|
|
kiwicht
      
Beiträge: 1021
Win 7, MacOS
Delphi x, VBA, PHP, ...
|
Verfasst: Mo 07.04.03 21:43
du kannst mit MoveBy(xx) auch direkt angeben, um wieviele Datensätze du dich bewegen willst, dabei werden auch negative Zahlen für rückwärtige Bewegungen akzeptiert.
Wenn du also sicher bist, das die Satznummer garantiert ohne Lücken immer um eins steigt, kannst du z.B. so zu deinem gewünschten, angegebenen Datensatz springen:
Quelltext 1: 2: 3: 4: 5: 6: 7:
| var meinezahl : Integer; begin
meinezahl := edit1.Text query1.First; query1.MoveBy(meinezahl); end; | (edit²: ich hoffe bei delphi 3 gibts derartige befehle schon?  )
hoffe ich hab dein Problem richtig interpretiert und das hilft..
mfg
//edit:
sorry, fast übersehen:
erstens:
Um den Inhalt von Datensätzen anzuzeigen, benutzt man für gewöhnlich keine Labels, sondern (meistens) die Komponente DBEdit.
Das plazierst du irgendwo auf deinem Formular, und weist ihnen im Eigenschaften-Inspektor unter Datasource die Source-Kompo deiner Datenbank und unter Field(Name) den Namen des anzuzeigenden Feldes zu.
Dann wird dieses DBEdit-Feld für gewöhnlich auch dynamisch aktualisiert.
Wenn du, wie in deinem Fall, erst deinem Label den Inhalt des DB-Feldes zuweisst, und dann dich in der DB bewegst, bleibt die Caption des Labels gleich, da es sich eben um ein statisches Objekt handelt!
Nimms mir bitte nicht übel, aber mir scheints beinahe so, als würden bei dir noch eine wichtige Grundlagen fehlen. Das is nicht böse gemeint, aber mit dem Kauf eines guten Delphi-Buches wärst du vielleicht besser beraten.
Heisst natürlich nicht das man dir hier nich auch gerne helfen wird
mfg so long
|
|
Hans-Peter 
Hält's aus hier
Beiträge: 3
|
Verfasst: Mo 07.04.03 23:05
Noch einen Versuch gönne ich mir:
Ich werde falsch verstanden: Ich will nicht von irgendeiner Position, auf welcher der (Datenbank-Record(?))-Zeiger oder wie das Teil richtig heißt zufällig gerade jetzt steht, errechnen müssen, um wieviel ich vor- oder zurückgehen muß!
Ich will ganz einfach die Befehlszeilen wissen, die mich in die Lage versetzen zu sagen:
Hol mir die Satz-Nummer 12,
und jetzt die Satz-Nummer 522.
Denn in der Adresskartei meiner Kunden stimmt die Recordnummer mit der Kundennummer überein. Und diese will ich sofort ansprechen, ohne den Umweg (jetzt steh ich auf 7, muß nach 35, also beweg dich 28 vor).
Danke für den Hinweis, ich soll mir ein gutes Buch zulegen. Verrate mir bitte, in welchem Buch zum Beispiel diese, meine Frage beantwortet wird.
In allen Beschreibungen gibt man sich nämlich mit dem Datenbanknavigator zufrieden, der vor, zurück, zum Anfang und ans Ende springen kann.
Aber die Möglichkeit, den Satz 4711 sofort anzusprechen zu können, suche ich vergebens.
Und noch eins: Warum muß man für jedes Detail erneut nachfragen,
warum kommt niemand auf die Idee, die 5 oder 8 Zeilen Programmcode, die meine erste Fragestellung möglicherweise sofort komplett beantwortet hätten, in einem Beispielcode vollständig und lauffähig zu beantworten??!!
In meinem Falle hieße das, von der Eingabe der gewünschten Kundennummer in ein Editfeld den gesamten Werdegang darzustellen, bis die Adresse des Kunden in den entsprechenden Label - verzeihung! - dbedit-Feldern dargestellt wird. Und wenn es 15 Zeilen wären!
Das wäre ein Spitzenforum, wo Anfänger diese Unterstützung finden würden, nämlich aus kompletten (Mini-)Programmbeispielen zu lernen.
Nichts für ungut!
Ich werd´s schon rauskriegen!
Freundliche Grüße
Hans-Peter
|
|
kiwicht
      
Beiträge: 1021
Win 7, MacOS
Delphi x, VBA, PHP, ...
|
Verfasst: Di 08.04.03 07:16
| Hans-Peter hat folgendes geschrieben: | Noch einen Versuch gönne ich mir:
Ich werde falsch verstanden: Ich will nicht von irgendeiner Position, auf welcher der (Datenbank-Record(?))-Zeiger oder wie das Teil richtig heißt zufällig gerade jetzt steht, errechnen müssen, um wieviel ich vor- oder zurückgehen muß!
Ich will ganz einfach die Befehlszeilen wissen, die mich in die Lage versetzen zu sagen:
Hol mir die Satz-Nummer 12,
und jetzt die Satz-Nummer 522.
Denn in der Adresskartei meiner Kunden stimmt die Recordnummer mit der Kundennummer überein. Und diese will ich sofort ansprechen, ohne den Umweg (jetzt steh ich auf 7, muß nach 35, also beweg dich 28 vor).
|
Naja, und das kannst du mittels
Quelltext 1: 2: 3: 4: 5:
| query.moveby(xx).
Beispiel: // ZEIGER BEFINDET SICH AUF DS 12, USER WILL AUF 20, DIFFERENZ 8 query.MoveBy(8); |
| Zitat: |
Danke für den Hinweis, ich soll mir ein gutes Buch zulegen. Verrate mir bitte, in welchem Buch zum Beispiel diese, meine Frage beantwortet wird.
In allen Beschreibungen gibt man sich nämlich mit dem Datenbanknavigator zufrieden, der vor, zurück, zum Anfang und ans Ende springen kann.
Aber die Möglichkeit, den Satz 4711 sofort anzusprechen zu können, suche ich vergebens.
|
Ich hab leider kein konkretes Buchbeispiel an der Hand.
Du wirst selten ein Buch finden, das dir alle Fragen, die sich in deiner Coder-Karriere aufwerfen, optimal beantworten kann.
Ein großer Teil des Lernprozesses besteht auch darin, selber zu recherchieren. Wenn du nun schon von der Existenz des DB-Navigators weist, hätte es dir sehr geholfen, hättest du versucht rauszufinden, wie der DB-Navigator arbeitet.
Du würdest dann feststellen, das auch der DB-Navigator mit den Befehlen arbeitet, die auch du ganz legitim benutzen darfst, und wärst dann auch ganz zufällig auf andere nützliche Befehle zur Navigation gestossen.
| Zitat: |
warum kommt niemand auf die Idee [...] meine erste Fragestellung [...] in einem Beispielcode vollständig und lauffähig zu beantworten??!!
[...] den gesamten Werdegang [...]Und wenn es 15 Zeilen wären!
|
Das hab ich versucht, und das hat auch neojones versucht.
Was glaubst du wieviel Programm-Code ein einfache NAvigations-Aktion benötigt?
Es ist nunmal nur eine Zeile, und die kommt an die Stelle in dein Programm., wo du sie benötigst.
Dein Code den du oben gepostet hast, befasst sich ja nur mit dem Öffnen und Initiieren der Datenbank, hat also nicht wirklich viel mit der späteren eigentlichen Navigation zu tun, da du deinen Code nur einmal (für gewöhnlich) im Programm, nämlich ganz am Anfang brauchst, zum Programmstart.
| Zitat: |
Das wäre ein Spitzenforum, wo Anfänger diese Unterstützung finden würden, nämlich aus kompletten (Mini-)Programmbeispielen zu lernen.
|
Das hier ist auch so ein Spitzenforum, wirst du hoffentlich auch noch feststellen  ... Und Anfänger finden hier durchaus Unterstützung und ihnen wird mit Sicherheit auch immer Toleranz, egal wie sinnlos ihre Fragen sind, entgegengebracht, aber keiner hier wird für dich dein Program schreiben.
Wie sagte Morpheus so schön:
"Ich kann dir nur die Tür zeigen, durch gehen musst du selber!"
| Zitat: |
Nichts für ungut!
Ich werd´s schon rauskriegen!
Freundliche Grüße
Hans-Peter |
bis die Tage,
fragen? fragen! =)
mfg[/quote]
|
|
LCS
      
Beiträge: 1305
Erhaltene Danke: 1
WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
|
Verfasst: Di 08.04.03 07:30
Hi
wenn die Kundennummer der Primärschlüssel deiner Tabelle ist, dann ist es einfacher wenn du ihn so verwendest:
Quelltext 1: 2: 3: 4:
| if Table1.FindKey([Kundenummer]) then //Tabelle steht jetzt auf dem gesuchten Satz else //Datensatz nicht gefunden |
Gruss Lothar
_________________ Der BH ist für die Brust, der Plan ist für'n Ar...
|
|
neojones
      
Beiträge: 1206
Erhaltene Danke: 1
|
Verfasst: Di 08.04.03 10:05
| Zitat: | Und noch eins: Warum muß man für jedes Detail erneut nachfragen,
warum kommt niemand auf die Idee, die 5 oder 8 Zeilen Programmcode, die meine erste Fragestellung möglicherweise sofort komplett beantwortet hätten, in einem Beispielcode vollständig und lauffähig zu beantworten??!!
|
Ich würde mal sagen: Wenn ich jedesmal vollständigen Code poste, dann bleibt doch das Selberdenken auf der Strecke *g*
Das Anspringen des Datensatzes ist doch bereits erklärt? Wenn ich das richtig sehe, sind hier 4 verschiedene Möglichkeiten aufgelistet.
Quelltext
über MoveBy:
Quelltext 1: 2:
| query1.First; query1.MoveBy(meinezahl); |
über
Quelltext 1:
| Table1.FindKey([Kundenummer]) |
Alternativ fällt mir noch ein:
Quelltext 1: 2: 3: 4:
| Table1.First; For X := 1 to 457 do begin Table1.Next; end; |
Die Frage "Wie lese ich die Werte aus" wurde doch auch schon beantwortet: Mit DBEdit.
Will mans unbedingt anders machen den Wert einem Label zuweisen, geht das so:
Quelltext 1:
| Label1.Caption := Table1.FieldByName('feldname').AsString; |
Viele Grüße,
Matthias
[/code]
_________________ Ha! Es compiliert! Wir können ausliefern!
|
|
|