AGB  ·  Datenschutz  ·  Impressum  







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

Exeption - Woher?

Ein Thema von fortuneNext · begonnen am 16. Aug 2008 · letzter Beitrag vom 20. Aug 2008
Antwort Antwort
Seite 1 von 3  1 23      
fortuneNext

Registriert seit: 11. Aug 2007
Ort: Neuss
133 Beiträge
 
Delphi 7 Enterprise
 
#1

Exeption - Woher?

  Alt 16. Aug 2008, 16:40
Hi,
in der Schule programmieren wir aktuell ein kleines Übungsprojekt, das eine Buchliste (Datenstruktur siehe Anhang) auslesen und ein TBuch schreiben soll.
Wir benutzen übrigens Delphi 6.

Ein Buch ist als folgendes deklariert (in eigener Unit mBuch):
Delphi-Quellcode:
unit mBuch;

interface

type
   TBuch = class(TObject)
   private
   {}
   public
   ID: integer;
        Thema: string;
        Autor: string;
        Titel: string;
        Ort: string;
        Erscheinungsjahr: integer;
        Verlag: string;
   end;

implementation

end.
Der Quellcode des restlichen Projekts:

Delphi-Quellcode:
unit mBuchliste;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, mBuch, StdCtrls;

type
  TfMain = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
  {}
  protected
    procedure LineExtract;
  public
    Buchliste: Array[1..1602] of TBuch;
  end;

var
  fMain: TfMain;
  s: string;
  z: integer;

const
  MyDat ='Buecher.txt';


implementation

{$R *.dfm}

function PosEx(const Substr: string; const S: string; Offset: Integer): Integer;
begin
  if Offset <= 0 then Result := 0
  else
    Result := Pos(Substr, Copy(S, Offset, Length(S)));

  if Result <> 0 then
    Result := Result + Offset - 1;
end;

procedure TfMain.LineExtract;
var
  x,y: integer;
begin
  x := 0;
  y := 1;
  For x := 1 to 7 do
  begin
    If x <> 7 then
    begin
      Case x of
      1: Buchliste[z].ID := StrToInt(Copy(s, y, PosEx(';', s, y) - y));
      2: Buchliste[z].Thema := Copy(s, y, PosEx(';', s, y) - y);
      3: Buchliste[z].Autor := Copy(s, y, PosEx(';', s, y) - y);
      4: Buchliste[z].Titel := Copy(s, y, PosEx(';', s, y) - y);
      5: Buchliste[z].Ort := Copy(s, y, PosEx(';', s, y) - y);
      6: begin
           If Copy(s, y, PosEx(';', s, y) - y) <> 'then
             Buchliste[z].Erscheinungsjahr := StrToInt(Copy(s, y, PosEx(';', s, y) - y))
           Else if Copy(s, y, PosEx(';', s, y) - y) = 'then
             Buchliste[z].Erscheinungsjahr := 0;
         end;
      end;
      y := PosEx(';', s, y) + 1;
    end
    Else if x = 7 then
    begin
      Buchliste[z].Verlag := Copy(s, y, Length(s) - y + 1);
    end;
  end;
end;

procedure ReadIn;
var
  datei: Textfile;
begin
  z := 0;
  assignfile(datei,MyDat);
  reset(datei);
  while not EOF(datei) do
  begin
    readln(datei,s);
    z := z + 1;
    fMain.LineExtract;
  end;
  closefile(datei);
end;

procedure TfMain.FormCreate(Sender: TObject);
begin
  ReadIn;
end;

end.
Beim ausführen von LineExtract gibts dann leider immer eine Exception der Klasse EAccessViolation (Zugriffsverletzung).
Keiner - nichtmal der Lehrer - weiss woher die kommmt. Hat jemand eine Idee?
mfg
fortuneNext
Angehängte Dateien
Dateityp: txt buecher_110.txt (120,2 KB, 7x aufgerufen)
Tim
"Hilfe & Support konnte nicht geöffnet werden. Bitte öffnen sie Hilfe & Support, um das Problem zu beheben."
"No Keyboard found. Press F1 to continue."
  Mit Zitat antworten Zitat
Benutzerbild von leddl
leddl

Registriert seit: 13. Okt 2003
Ort: Künzelsau
1.613 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Exeption - Woher?

  Alt 16. Aug 2008, 16:53
Zitat von fortuneNext:
Hat jemand eine Idee?
Habs jetzt nur mal kurz überflogen, aber:
Du hast ein Array von Objekten, die Du nirgends erzeugst, greifst aber trotzdem darauf zu? Das kann ja gar nicht gehen
Setze ein Buchliste[z] := TBuch.Create() und es sollte doch eigentlich gehen.

Btw hast Du also eine Klasse, die nichts anderes ist als ein Datencontainer. Hätte es dafür ein Record nicht auch getan? Damit würde es nämlich auch so funktionieren
Axel Sefranek
A programmer started to cuss, cause getting to sleep was a fuss.
As he lay there in bed, looping round in his head
was: while(!asleep()) ++sheep;
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#3

Re: Exeption - Woher?

  Alt 16. Aug 2008, 16:56
Ja, ein Record hätte es auch getan!

[OT] Was'n dat für'n Lehrer? [/OT]
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Exeption - Woher?

  Alt 16. Aug 2008, 17:05
Diese Logik erschließt sich mir nicht so recht:
Zitat:
Delphi-Quellcode:
  For x := 1 to 7 do
  begin
    If x <> 7 then
    begin
      ...
    end
    Else if x = 7 then
    begin
      ...
    end;
Wieso lässt Du nicht die Schleife bis 6 laufen und machst anschließend etwas mit Nummer 7?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
grenzgaenger
(Gast)

n/a Beiträge
 
#5

Re: Exeption - Woher?

  Alt 16. Aug 2008, 18:01
mhhh... scheint mir 'n mix zwischen konsolapp und fensterapp zu sein... (z.b. readln im constructor). der aufbau scheint mir da auch so 'n mix aus objektorientierung und prozeduraler zu sein... class buch in verbindung mit record...


tja, als übungsprobjekt schon sehr gut, da hast du noch 'n bischen arbeit vor dir, bis es rund läuft ...

PS: mit den tipp von leddl, sollt es klappen...
  Mit Zitat antworten Zitat
fortuneNext

Registriert seit: 11. Aug 2007
Ort: Neuss
133 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Exeption - Woher?

  Alt 17. Aug 2008, 12:44
Ah, danke für die ganzen konstruktiven Kommentare
Werde bald mal alles ausprobieren... das mit dem Create ist natürlich klar, hatte ich ganz vergessen

Und naja... zur Unterrichtung junger Informatiker wird in der Regel kein kompetentes Personal genutzt...
Und generell gehts in der Schule ja nicht dadrum, sinnvolle, gut laufende, simpel geschriebene und funktionierende Programme zu schreiben, sondern irgendwelche überhaupt nicht passenden Komponenten dabei zu verwenden (Record - Typ)...
Tim
"Hilfe & Support konnte nicht geöffnet werden. Bitte öffnen sie Hilfe & Support, um das Problem zu beheben."
"No Keyboard found. Press F1 to continue."
  Mit Zitat antworten Zitat
fortuneNext

Registriert seit: 11. Aug 2007
Ort: Neuss
133 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Exeption - Woher?

  Alt 18. Aug 2008, 21:21
Okay... der Create war die Lösung.
Nun versuchen wir, die eingelesenen Daten in ein StringGrid einzutragen.
Dazu 2 Fragen:
1. Es wird wieder eine Exception ausgelöst... völlig sinnlos, beim lesen von Eintrag 1598 und den folgenden 4. Die kann zwar durch einen Try-Block umgangen werden, was aber eine sehr schlampige Lösung ist und nicht die Frage beantwortet, woher sie kommt. Das seltsame daran ist, dass das Programm trotzdem gut läuft, alle Sachen werden korrekt dargestellt etc.
2. Jetzt möchten wir die Sachen sortieren, nach den div. Datentypen (also z.B. nach ID, nach Autor etc). Das wollten wir auslösen, indem man auf die "Fixed-Cols" drückt (oben wo die Beschriftung ist). Ein OnCellSelect geht leider nicht, da sich die Dinger nicht anklicken lassen. Gibt es da irgendeine Lösung oder werden wir eigene Buttons einbauen müssen? Also die Frage ist, lassen sich die Fixed Einträge zu Buttons umfunktionieren?.

Danke!
mfg
Angehängte Dateien
Dateityp: rar buchliste_164.rar (218,2 KB, 3x aufgerufen)
Tim
"Hilfe & Support konnte nicht geöffnet werden. Bitte öffnen sie Hilfe & Support, um das Problem zu beheben."
"No Keyboard found. Press F1 to continue."
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Exeption - Woher?

  Alt 18. Aug 2008, 21:24
- Bereichprüfung einschalten.
- Breakpoints setzen.
- Debugger ausgiebig benutzen.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Exeption - Woher?

  Alt 18. Aug 2008, 21:24
Jag das Programm doch durch den Debugger, dann siehst du welcher Befehl diesen Fehler auslöst und dann vielleicht auch warum
Markus Kinzler
  Mit Zitat antworten Zitat
fortuneNext

Registriert seit: 11. Aug 2007
Ort: Neuss
133 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Exeption - Woher?

  Alt 18. Aug 2008, 22:05
Ich weiss ja woher der Fehler kommt.

StrGrid_Buchliste.Cells[0,x] := IntToStr(Buchliste[x].ID); Bloß wieso bringt das einen Fehler?
Und vor allem erst bei Eintrag 1598-1602? Und warum klappts dann auch noch trotzdem? oO Für mich ein mysterium... das kompetente Lehrpersonal weiss es auch nicht ^^
Tim
"Hilfe & Support konnte nicht geöffnet werden. Bitte öffnen sie Hilfe & Support, um das Problem zu beheben."
"No Keyboard found. Press F1 to continue."
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 21:11 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