AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Zugriff auf Datenbank funktioniert nicht richtig
Thema durchsuchen
Ansicht
Themen-Optionen

Zugriff auf Datenbank funktioniert nicht richtig

Ein Thema von Chuqa · begonnen am 24. Jan 2005 · letzter Beitrag vom 1. Feb 2005
Antwort Antwort
Seite 1 von 2  1 2      
Chuqa

Registriert seit: 10. Jan 2005
51 Beiträge
 
#1

Zugriff auf Datenbank funktioniert nicht richtig

  Alt 24. Jan 2005, 10:59
Aloha allerseits,

ich will mir ein kleines Lexikon basteln. Dazu habe ich ein Datenmodul eingefügt auf dem eine Table- und eine Source-Komponente platziert sind. Der TableType vom Table ist ttParadox. Dann hab ich ein Eingabeformular und ein Ansichtsformular. Auf dem Eingabeformular gibt es ein DBEdit (für den Begriff) und ein DBMemo (für die Erklärung). Auf dem Ansichtsformular gibt es eine DBListbox (in der sollen sämtliche Begriffe aufgelistet werden) und ein DBText (für die Erklärung). Nun möchte ich, dass beim Markieren eines Eintrages in der Listbox die dazugehörige Erklärung in dem DBText erscheint. Und da happerts. und zwar wird mir nur die Erklärung vom letzten zugefügeten Eintrag angezeigt, die anderen Begriffe haben als Erklärung dann immer MEMO bzw. wenn der letzte Eintrag markiert wird und danach die davor erstellten, haben diese dann die Erklärung vom letzten Eintrag.
Das Hinzufügen eines Datensatzes realisier ich durch:
Code:
  LexikonModul.LexikonTableBegriff.AsString:=Form3.DBEdit1.Text;
  LexikonModul.LexikonTableErklaerung.AsString:=Form3.DBMemo1.Text;
  LexikonModul.LexikonTable.Post;
  Form1.DBListBox1.Items.Add(LexikonModul.LexikonTableBegriff.AsString);
und der Zugriff dann auf die Erklärung durch
Code:
procedure TForm1.DBListBox1Click(Sender: TObject);
var    x,i:integer;
        begriff:string;
begin
  try
    for x:=0 to DBListBox1.Items.Count-1 do
    begin
      if DBListBox1.Selected[x] then
      begin
        begriff:=DBListBox1.Items.Strings[x];
        for i:=0 to LexikonModul.LexikonTableBegriff.Index-1 do
        begin
          if begriff=LexikonModul.LexikonTableBegriff.AsString then
          Form1.DBText1.Caption:=LexikonModul.LexikonTableErklaerung.AsString;
        end;
      end;
    end;
    except showmessage('Fehler');
  end;
end;
Ich weiß es sind ein paar begin's und end's zuviel. Wär echt gut, wenn mir jemand sagen könnte, wie ich diesen Zugriff richtig hinkriege.

Kann es sein, dass ich immer nur den erstens Datensatz überschreibe? wenn ja, wie kann ich da ein Zähler oder was ähnliches einbauen, damit mir immer den nächsten Eintrag am einfügen und nicht den anderen überschreibe.
Gruß Chuqa
  Mit Zitat antworten Zitat
urs.liska

Registriert seit: 6. Aug 2003
Ort: Freiburg
195 Beiträge
 
Delphi 6 Professional
 
#2

Re: Zugriff auf Datenbank funktioniert nicht richtig

  Alt 24. Jan 2005, 13:37
Ich gebe zu, ich habe mir nicht die Mühe gemacht, Dein ganzes Beispiel durchzuackern,
aber:
Du verwendest die DBListbox falsch.
Diese Komponente ist dafür da, eine Auswahlliste für Werte anzuzeigen, die in ein Datenfeld eingetragen werden sollten. Wenn Du z.B. ein Feld "Kategorie" in der Tabelle hättest, könntest Du es mit einer DBListBox verknüpfen, deren Items dann z.B. "Wissenschaft", "Gesellschaft", "Wirtschaft" (oder was für Lexikonkategorien Du eben hast) sind. Der Benutzer kann dann beim Eintragen eines neuen Datensatzes aus dieser Liste wählen.

Was Du dagegen bräuchtest (wenn Du das Ganze überhaupt so realisieren willst), ist eine "normale" ListBox.

Dann schreibst Du nach dem (oder noch besser vor dem) Post
Delphi-Quellcode:
Form1.ListBox1.AddItem(LexikonModul.LexikonTableBegriff.AsString, nil);
LexikonModul.LexikonTable.Post;
Die Eigenschaft Sorted der Listbox sollte auf True gesetzt sein, dann wird die Liste sortiert.

Der Zugriff kann auch viel eleganter gelöst werden. Das Problem sind nicht die begin/ends, die zuviel sind, sondern die Tatsache, dass Du sowohl die Listbox als auch die Tabelle selbst von Hand durchsuchst. Das können die Komponenten selber (und wahrscheinlich besser).
Delphi-Quellcode:
procedure TForm1.ListBox1Click(Sender: TObject);
var x,i:integer;
        begriff:string;
begin
// statt
    for x:=0 to DBListBox1.Items.Count-1 do
    begin
      if DBListBox1.Selected[x] then
// schreibst Du}
  i := ListBox1.ItemIndex // Index der selektierten Zeile
// bzw. gleich
  begriff := ListBox1.Items[ItemIndex] // Inhalt der selektierten Zeile

// statt
        begriff:=DBListBox1.Items.Strings[x];
        for i:=0 to LexikonModul.LexikonTableBegriff.Index-1 do
             // Das ist übrigens ganz falsch. "Index" gibt hier die
             // Nummer der Spalte an. Wenn also das Feld Begriff das dritte Feld der Tabelle ist,
             // ist Index = 2 (fängt ja bei 0 an)
        begin
          if begriff=LexikonModul.LexikonTableBegriff.AsString then
          Form1.DBText1.Caption:=LexikonModul.LexikonTableErklaerung.AsString;
             // Auch das ist falsch. Du sollst einem DBText keine Caption zuweisen.
             // Die soll ja aus der DB ausgelesen werden.
        end;
// schreibst Du:
  if LexikonModul.LexikonTable.Locate('Begriff', VarArrayOf([begriff], []) is false
     then showmessage('Fehler');
// Locate sucht einen Datensatz in der Tabelle und macht diesen zum aktiven Datensatz.
// Indem der Datensatz aktiviert wird, werden auch alle datensensitiven Komponenten
// (in Deinem Fall DBText1) aktualisiert und sollten den entsprechenden Text anzeigen.
Kurz gesagt (ohne Erklärungen) sollte die Methode wie folgt aussehen:
Delphi-Quellcode:
procedure TForm1.ListBox1Click(Sender: TObject);
var begriff:string;
begin
  begriff := ListBox1.Items[ItemIndex] // Inhalt der selektierten Zeile
  if LexikonModul.LexikonTable.Locate('Begriff', VarArrayOf([begriff], []) is false
     then showmessage('Fehler');
end;
Kurz, nicht?
Ich hoffe, dass so das richtige Verhalten erzielt wird.

Im Übrigen wäre es eleganter, ganz auf diese ListBox zu verzichten und statt dessen ein DBGrid zu verwenden.
Das DBGrid zeigt auf die gleiche DataSource, es wird aber nur das Feld Begriff angezeigt.
So hättest Du mit einer Tabelle, einer DataSource, einem DBGrid und einem DBText (oder auch DBMemo) die ganze Funktionalität ohne überhaupt Quellcode zu brauchen.

Viel Erfolg
Urs
  Mit Zitat antworten Zitat
Chuqa

Registriert seit: 10. Jan 2005
51 Beiträge
 
#3

Re: Zugriff auf Datenbank funktioniert nicht richtig

  Alt 24. Jan 2005, 15:37
Hey danke erstmal vielmals. Ich werd mir das nachher gleich mal anschauen und dann mal sehen, ob ich es hinbekommen oder doch noch hilfe benötige . Also danke nochmal.
Gruß Chuqa
  Mit Zitat antworten Zitat
Chuqa

Registriert seit: 10. Jan 2005
51 Beiträge
 
#4

Re: Zugriff auf Datenbank funktioniert nicht richtig

  Alt 24. Jan 2005, 22:28
Also, ich hab das gerade mal ausprobiert mit den Tipps. Der Compiler bleibt aber bei der Zeile
Code:
if LexikonModul.LexikonTable.Locate('Begriff',VarArrayOf([begriff],[])) is false
    then showmessage('Fehler');
hängen, mit der Meldung: Zu viel Parameter. Und er setzt den Cursor zwischen [].
Gruß Chuqa
  Mit Zitat antworten Zitat
Benutzerbild von mikhal
mikhal

Registriert seit: 11. Sep 2003
Ort: Linz am Rhein
796 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Zugriff auf Datenbank funktioniert nicht richtig

  Alt 25. Jan 2005, 07:58
Zitat von Chuqa:
Code:
if LexikonModul.LexikonTable.Locate('Begriff',VarArrayOf([begriff],[])) is false
    then showmessage('Fehler');
Zwei Fehler finden sich in deiner Code-Zeile:

1. nie auf False vergleichen, kann daneben gehen!
2. du hast ein Klammerpaar [] falsch gesetzt.

Code:
if not LexikonModul.LexikonTable.Locate('Begriff',VarArrayOf([begriff]), [])
    then showmessage('Fehler');
Im Übrigen kannst du dir VarArrayOf sparen, wenn du nur einen Parameter benötigst.

Grüße
Mikhal
Michael Kraemer
Computer erleichtern die Arbeit...
...und die Erde ist eine Scheibe!
  Mit Zitat antworten Zitat
Albi

Registriert seit: 4. Mai 2003
Ort: Berlin
458 Beiträge
 
Delphi 7 Professional
 
#6

Re: Zugriff auf Datenbank funktioniert nicht richtig

  Alt 25. Jan 2005, 08:01
Hallo,

Versuch das mal

Code:
if LexikonModul.LexikonTable.Locate('Begriff',begriff,[])) is
dann sollte es eigentlich funktionieren.
  Mit Zitat antworten Zitat
Chuqa

Registriert seit: 10. Jan 2005
51 Beiträge
 
#7

Re: Zugriff auf Datenbank funktioniert nicht richtig

  Alt 25. Jan 2005, 22:26
Sorry, aber ich komm grad gar nicht mit Funktioniert so weit ohne Fehlermeldung, nur das mir die Erklärungen in dem DBText-Element noch nicht angezeigt werden.
Gruß Chuqa
  Mit Zitat antworten Zitat
urs.liska

Registriert seit: 6. Aug 2003
Ort: Freiburg
195 Beiträge
 
Delphi 6 Professional
 
#8

Re: Zugriff auf Datenbank funktioniert nicht richtig

  Alt 26. Jan 2005, 22:08
Sind die entsprechenden Eigenschaften des DBText (DataSource, DataField) richtig gesetzt?

MfG
Urs
  Mit Zitat antworten Zitat
Chuqa

Registriert seit: 10. Jan 2005
51 Beiträge
 
#9

Re: Zugriff auf Datenbank funktioniert nicht richtig

  Alt 30. Jan 2005, 16:55
jupp sind se, also bei datafield steht als feld erklaerung drin,welches ja da och rein soll.
Gruß Chuqa
  Mit Zitat antworten Zitat
Chuqa

Registriert seit: 10. Jan 2005
51 Beiträge
 
#10

Re: Zugriff auf Datenbank funktioniert nicht richtig

  Alt 1. Feb 2005, 09:22
kann mir wirklich keiner mehr helfen?
Gruß Chuqa
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 08:00 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