AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

SchuBi

Ein Thema von Kuckuckskind · begonnen am 1. Jan 2003 · letzter Beitrag vom 2. Jan 2003
Antwort Antwort
Benutzerbild von Kuckuckskind
Kuckuckskind

Registriert seit: 29. Nov 2002
65 Beiträge
 
Delphi 6 Enterprise
 
#1

SchuBi

  Alt 1. Jan 2003, 04:25
Hallo,

nun geht es wieder an die Arbeit:

Und es stellt sich mir ein ganz grundsätzliches Problem:

Zunächst einmal eine Beschreibung des Projekts, an dem ich gerade arbeite:
Und zwar haben wir im Informatik-Unterricht die Aufgabe bekommen, eine Bibliotheks-Softwar ein Delphi (Paradox) zu schreiben.
Dazu habe ich die Tabellen buecher, schueler, autoren, autorenschaft und ausleihe.
Die Tabelle ausleihe spielt bei meiner Frage keine Rolle, deshalb gehe ich nicht weiter auf sie ein. In der Tabelle buecher werden alle Angaben zu dem jeweilgen Buch gespeichert außer dem Autor (Datenfelder sind u.a. Titel, Verlag, ISBN, InventarNr, der PK ist BuchNr). In der Tabelle autoren werden der Nach- und Vorname der jeweiligen Autoren gespeichert, sowie ein Kürzel festgelegt. In der Tabelle autorenschaft wird die BuchNr mit dem Autorenkürzel verknüpft, so dass eine n:m-Beziehung entsteht, weil ein Buch von mehreren Autoren geschrieben sein kann oder ein Autor mehrere Bücher geschrieben haben kann.
Im Rahmen der Autoreneingabe und auch der Ausgabe, hat sich mir die Frage gestellt, ob ich es nicht umgehen kann, dass ich den Vor- und Nachnamen getrennt abspeichere, also einfach nur ein Edit-Feld benötige, in das ich den Autorennamen eingeben lasse. Diese Variante würde ich auch sofort wählen, wenn da nicht die Sache mit der Suche wäre: Sucht man nun nur nach dem Nachnamen eines Autors, kann dieser nicht gefunden werden. Gibt es eine einfache Lösung für dieses Problem?

Dann habe ich mir noch weitere Gedanken über die Vereinfachung der Eingabe neuer Bücher gemacht: Immer, wenn ein neues Buch eingegeben wird, muss gleichzeitig überprüft werden, ob der Autor bzw. die Autoren des Buches schon ein Kürzel zugewiesen bekommen hat, dieses Kürzel gesucht werden und schließlich eine Verknüpfung zwischen Buchnr und Kürzel angelegt werden. Dieses Verfahren halte ich aber für keineswegs Benutzerfreundlich, schon gar nicht, wenn man ganze Biliotheksbestände aufnehmen will, was dieses Programm leisten soll.
Ich habe mir überlegt, dass man in die Maske, in der man die Buchdaten eingibt, auch ein Feld für den Autorennamen anlegen sollte. Wenn man nun auf "speichern" klickt, soll überprüft werden, ob dieser Autor schon in der Tabelle autoren vorhanden ist oder vielleicht ein Autor vorhanden ist, der ähnlich geschrieben wird. Ist dies nicht der Fall, soll auf Bestätigung dieser Autor hinzugefügt werden. (Ich halte die Wahl eines Autorenkürzels nicht für besonders sinnvoll, da dies unter Umständen nicht eindeutig ist und zur Eindeutigkeitsprüfung eine weitere Abfrage nötig wäre. Am besten wäre ist vielleicht, wenn ich im Rahmen der Automatisierung einen Zähler einsetze.) Und natürlich eine Verknüpfung zwischen Autor und Buch hergestellt werden. Aber wie realisiere ich dies programmiertechnisch?


Frohes neues Jahr!


P.S.: An dieser Stelle viele Grüße an meinen Informatik-Lehrer

[edit=Daniel B]Wähle bitte den Titel das nächste mal etwas passender aus. Vielen Dank. MfG Daniel B.[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#2
  Alt 1. Jan 2003, 14:07
Hallo Kuckuckskind,

die Suche bei einem zusammengesetzten Namen könntest du prinzipiell über über den LIKE Operator erledigen, der auch bei lokal SQL leider nicht unterstützt wird. Es bliebe also nur die manuelle Suche über eine Schleife, die aber auch recht einfach ist:

Delphi-Quellcode:
Autor.First;
gefunden := False;

while (Not Autor.EOF) and (Not gefunden) do
begin
  if Pos(edSuch.Text, AutorName.AsString) > 0 then
     gefunden := True;
end;
Du solltest eventuell noch Groß-/Kleinschreibung berücksichtigen.

Das mit dem Kürzel darfst du natürlich nicht dem Nutzer aufbürden. Du musst bei Eingabe eines Autors überprüfen, ob schon ein Kürzel besteht und entsprechend darauf reagieren.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Benutzerbild von Kuckuckskind
Kuckuckskind

Registriert seit: 29. Nov 2002
65 Beiträge
 
Delphi 6 Enterprise
 
#3
  Alt 2. Jan 2003, 02:22
Hallo,

Zitat von MrSpock:
die Suche bei einem zusammengesetzten Namen könntest du prinzipiell über über den LIKE Operator erledigen, der auch bei lokal SQL leider nicht unterstützt wird.
Doch, wird.

Zitat von MrSpock:
Das mit dem Kürzel darfst du natürlich nicht dem Nutzer aufbürden. Du musst bei Eingabe eines Autors überprüfen, ob schon ein Kürzel besteht und entsprechend darauf reagieren.
Ich will ja nicht undankbar erscheinen, aber genau das ist es, was ich nicht weiß, wie ich es umsetzen soll:

Also, meine Probleme bestehen darin, dass ich nicht weiß, wie ich den Text aus einem DBEdit auslesen kann (ist ja nötig, um zu überprüfen, ob es den eingegebenen Autor schon in der Tabelle gibt) und wie ich verhindern kann, dass der Autor nochmals gespeichert wird, wenn er schon existiert. Weiter geht es dann damit, dass ich auch keine konkrete Vorstellung davon habe, wie ich die Verknüpfung erstellen soll, die in der Tabelle autorenschaft vorgenommen werden muss... jaja...
  Mit Zitat antworten Zitat
DKamps

Registriert seit: 7. Nov 2002
Ort: Unna
30 Beiträge
 
Delphi 7 Enterprise
 
#4

Tipp

  Alt 2. Jan 2003, 11:30
Um zu verhindern, dass ein Schlüsselfeld in einer Tabelle doppelt vorhanden ist, sollte man zunächst einen Primär-Index verwenden. Dann muss man natürlich auf der Anwendungsseite entweder auf die mögliche Fehlermeldung bei DataSet.Post reagieren oder bereits vorher in der Tabelle nach dem Datensatz suchen.
Das DBEdit hat das Property Text oder auch Field.Value, welches Du verwenden kannst. (Außerdem gibt es in Delphi so eine lustige Taste namens F1: damit erfährst Du alles über Properties und Methoden einer bestimmten Klasse)
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#5
  Alt 2. Jan 2003, 15:38
Hallo Kuckuckskind,

wie DKamps schon erwähnt hat, sind Schlüssel eine Möglichkeit. Du solltest dir erst überlegen, was das Haupt Such- und Sortierkriterium in der Tabelle Autor sein soll. Dieses Feld (oder diese Felder) machst du zum Primärschlüssel. Das Kürzel, sofern es nicht der Primärschlüssel ist, kann dann z.B. Sekundärschlüssel sein. Nun kannst du z.B. eine zweite Instanz der Tabelle Autor unter dem Namen AuthorSuch öffnen, die nach dem Schlüssel "Kürzel" sortiert ist, dann kannst du mit:

Delphi-Quellcode:
{ Edit1. Text enthält im folgenden Beispiel das gewünschte Kürzel }
if AutorSuch.FindKey(Edit1.Text) then
begin
  { Kürzel existiert, ist denn auch der Autor gleich ?)
  { Edit2.Text zeigt den Namen des Autors }

  if AutorSuch.FieldByName('Autor').AsString <> Edit2.Text then
  begin
     MessageDlg('Das Kürzel '+Edit1.Text+ ' wird bereits für den Autor '+
                AutorSuch.FieldByName('Autor').AsString +' benutzt.',
                mtInformation, [mbOK], 0);
     ActiveControl := Edit1.Text;
  end;
end;
verhindern, dass dasselbe Kürzel noch einmal verwendet wird.
Albert
Live long and prosper


MrSpock
  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:31 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