AGB  ·  Datenschutz  ·  Impressum  







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

Zugriffsverletzung in Funktion

Offene Frage von "if-else"
Ein Thema von if-else · begonnen am 1. Mai 2008 · letzter Beitrag vom 1. Mai 2008
Antwort Antwort
Seite 1 von 2  1 2      
if-else

Registriert seit: 19. Dez 2007
8 Beiträge
 
#1

Zugriffsverletzung in Funktion

  Alt 1. Mai 2008, 16:05
Hallo!
In der folgenden Funktion tritt eine Zugriffsverletzung auf...
Ich versuchte schon den Fehler allein zu finden, habe das aber nicht geschaft. Ich hoffe jemand von euch kann mir helfen? Vielen Dank!

Delphi-Quellcode:
procedure TForm2.addhistory;
var
fh : file of PData;
datap : PData;
y, posi,seekk : integer;
gefunden : boolean;
fname, filep : string;

begin

filep := OpenDialog1.FileName;

//Name der ausgewählten Datei auslesen
pos('.txt',filep);
y := 0;
repeat
  inc(y);
posi := pos('.txt',filep)-y;

until filep[posi] = '\';

fname := copy(filep,length(filep)-y-2,y-1);

gefunden := false;
seekk := 0;
 AssignFile(fh,'C:\WINDOWS\Voka_history.dat');
{$I-}

reset(fh);

repeat

  seek(fh,seekk);

  read(fh,datap);

  if (POS(fname,Datap.name) <> 0) then begin
    gefunden := true;
  end;
inc(seekk);
until eof(fh) or gefunden;

if not gefunden then begin
seek(fh,FileSize(fh)-1);
with datap do begin
  pfad := filep;
  name := fname;
end;
write(fh,datap);
closefile(fh);
end;
end;
Einen schönen Tag noch,
mfg
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Zugriffsverletzung in Funktion

  Alt 1. Mai 2008, 16:07
In welcher Zeile? (Debugger)
Markus Kinzler
  Mit Zitat antworten Zitat
if-else

Registriert seit: 19. Dez 2007
8 Beiträge
 
#3

Re: Zugriffsverletzung in Funktion

  Alt 1. Mai 2008, 16:09
Es wird keine angegeben... Sonst hätte ich den Fehler sicherlich gefunden
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Zugriffsverletzung in Funktion

  Alt 1. Mai 2008, 16:11
Dann setzte einen Breakpoint und alsse das Programm Zeile für Zeile ausführen.
Markus Kinzler
  Mit Zitat antworten Zitat
if-else

Registriert seit: 19. Dez 2007
8 Beiträge
 
#5

Re: Zugriffsverletzung in Funktion

  Alt 1. Mai 2008, 16:16
Danke für den Tipp!
Der Fehler wird in der Zeile angezeigt, wo Begin steht...

Delphi-Quellcode:
var
fh : file of PData;
datap : PData;
y, posi,seekk : integer;
gefunden : boolean;
fname, filep : string;

begin //->Hier

filep := OpenDialog1.FileName;

//Name der ausgewählten Datei auslesen
pos('.txt',filep);
  Mit Zitat antworten Zitat
Thorben_Ko

Registriert seit: 8. Jun 2007
86 Beiträge
 
#6

Re: Zugriffsverletzung in Funktion

  Alt 1. Mai 2008, 16:17
Nur mal ne (wahrscheinlich) doofe randfrage:

File of PData

Steht das P bei dir für Pointer? Wenn ja geht das so überhaupt mit Pointern? Dachte man muss erst mal mit ^ casten... Wenn das überhaupt geht, weil woher soll das FIle wissen wie gross PData ist, der kennt doch nur die Grösse eines Pointer, odeR? Ich weiss es nicht, ich frag nur

Thorben
  Mit Zitat antworten Zitat
if-else

Registriert seit: 19. Dez 2007
8 Beiträge
 
#7

Re: Zugriffsverletzung in Funktion

  Alt 1. Mai 2008, 16:20
Ich benutze Records, die in eine Datei schreibe...
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Zugriffsverletzung in Funktion

  Alt 1. Mai 2008, 16:21
Dann muss der Fehler vorher sein. Poste mal die komplette Unit
Markus Kinzler
  Mit Zitat antworten Zitat
if-else

Registriert seit: 19. Dez 2007
8 Beiträge
 
#9

Re: Zugriffsverletzung in Funktion

  Alt 1. Mai 2008, 16:43
Kann es sein, das ich die Prozeduren (sorry, das ich vorhin Funktionen schrieb) falsch aufrufe bzw. definiere?

Delphi-Quellcode:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, StdCtrls, Buttons, ExtCtrls;

type
  TForm2 = class(TForm)
    Panel1: TPanel;
    GroupBox1: TGroupBox;
    Panel3: TPanel;
    Panel4: TPanel;
    Panel5: TPanel;
    Panel6: TPanel;
    Label1: TLabel;
    Edit1: TEdit;
    Label2: TLabel;
    Edit2: TEdit;
    Label3: TLabel;
    Edit3: TEdit;
    Edit4: TEdit;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Edit5: TEdit;
    BitBtn1: TBitBtn;
    StringGrid1: TStringGrid;
    BitBtn2: TBitBtn;
    SaveDialog1: TSaveDialog;
    OpenDialog1: TOpenDialog;
    Label7: TLabel;
    Label8: TLabel;
    BitBtn3: TBitBtn;
    procedure FormCreate(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
   // procedure Button1Click(Sender: TObject);
    procedure Panel4Click(Sender: TObject);
    procedure Panel5Click(Sender: TObject);
    procedure savedialog();
    procedure BitBtn2Click(Sender: TObject);
    procedure Panel6Click(Sender: TObject);
    procedure StringGrid1Click(Sender: TObject);
    procedure addhistory();
    procedure updatehistory();
// procedure BitBtn3Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;

implementation
 uses Unit1;
{$R *.dfm}
type TData = record

  Id : string[20];
  fremd : string[20];
  bed1 : string[20];
  bed2 : string[20];
  bed3 : string[20];
  bed4 : string[20];

end;

type PData = record
  pfad : string[100];
  name : string[20];
  end;

var
filep, title : string;

procedure TForm2.BitBtn1Click(Sender: TObject);
var
fremdwort, bed1, bed2, bed3, bed4 : string;
i : integer;
begin

fremdwort := edit1.text;
bed1 := edit2.text;
bed2 := edit3.text;
bed3 := edit4.text;
bed4 := edit5.text;

i := StringGrid1.RowCount-1;

if StringGrid1.RowCount = 2 then begin

  With StringGrid1 do begin

  Cells[0,1] := inttostr(i);
  Cells[1,1] := fremdwort;
  Cells[2,1] := bed1;
  Cells[3,1] := bed2;
  Cells[4,1] := bed3;
  Cells[5,1] := bed4;

end;
Stringgrid1.RowCount := StringGrid1.RowCount + 1;

end else

  With StringGrid1 do begin

  Cells[0,StringGrid1.RowCount-1] := inttostr(i);
  Cells[1,StringGrid1.RowCount-1] := fremdwort;
  Cells[2,StringGrid1.RowCount-1] := bed1;
  Cells[3,StringGrid1.RowCount-1] := bed2;
  Cells[4,StringGrid1.RowCount-1] := bed3;
  Cells[5,StringGrid1.RowCount-1] := bed4;

Stringgrid1.RowCount := StringGrid1.RowCount + 1;

end;

fremdwort := '';
bed1 := '';
bed2 := '';
bed3 := '';
bed4 := '';

edit1.text := '';
edit2.text := '';
edit3.text := '';
edit4.text := '';
edit5.text := '';

Edit1.SetFocus;

if filep <> 'then Form2.Caption := 'Vokabelliste verwalten '+filep+'*';

end;

procedure TForm2.BitBtn2Click(Sender: TObject);
var
sel, i : integer;
warning : PChar;
begin

sel := Stringgrid1.Selection.TopLeft.Y;

warning := 'Soll dieser Datensatz wirklich gelöscht werden?';

if Application.MessageBox(PChar(warning), 'Löschen bestätigen', 52) = 6 then begin

for i := sel To StringGrid1.RowCount - 1 do

begin
  StringGrid1.Rows[i] := StringGrid1.Rows[i+ 1];
end;

StringGrid1.RowCount := StringGrid1.RowCount - 1;

for i := 0 to StringGrid1.RowCount - 1 do
begin
  StringGrid1.Cells[0,I+1] := inttostr(I+1);
end;

end;

end;
{
procedure TForm2.BitBtn3Click(Sender: TObject);
begin

if StringGrid1.Selection.TopLeft.Y <> -1 then
begin


end else
ShowMessage('Es muss ein Datensatz ausgewählt werden!');
end;
}

procedure TForm2.FormCreate(Sender: TObject);
begin

Form2.Caption := 'Vokabelliste verwalten';

With StringGrid1 do begin

width := 530;
ColWidths[0] := 30;
ColWidths[1] := 100;
ColWidths[2] := 100;
ColWidths[3] := 100;
ColWidths[4] := 100;
ColWidths[5] := 100;
Cells[0,0] := 'Nr.';
Cells[1,0] := 'Fremdwort';
Cells[2,0] := 'Bedeutung 1';
Cells[3,0] := 'Bedeutung 2';
Cells[4,0] := 'Bedeutung 3';
Cells[5,0] := 'Bedeutung 4';

end;

end;


procedure TForm2.savedialog;
var
f : file of TData;
data : TData;
x: integer;
begin

if SaveDialog1.Execute then begin
  filep := SaveDialog1.FileName;
end;

AssignFile(f,filep);
    {$I-}
Rewrite(f);

x := 0;
while x <> StringGrid1.RowCount -1 do begin
inc(x);

seek(f,Filesize(f));

with data do begin

  Id := StringGrid1.Cells[0,x];
  fremd := StringGrid1.Cells[1,x];
  bed1 := StringGrid1.Cells[2,x];
  bed2 := StringGrid1.Cells[3,x];
  bed3 := StringGrid1.Cells[4,x];
  bed4 := StringGrid1.Cells[5,x];

end;

write(f,data);

end;
closefile(f);
{$I+}
end;

procedure TForm2.StringGrid1Click(Sender: TObject);
begin
label7.caption := inttostr(Stringgrid1.Selection.TopLeft.X);
label8.Caption := inttostr(Stringgrid1.Selection.TopLeft.Y);
end;

procedure TForm2.Panel4Click(Sender: TObject);
begin
savedialog();
updatehistory;
addhistory;
end;

procedure TForm2.Panel5Click(Sender: TObject);
var
f : file of TData;
fh : file of PData;
datap : PData;
data : TData;
x, y, posi,rows,seekk : integer;
gefunden : boolean;
fname : string;
begin

if filep = 'then begin

savedialog();
end else

AssignFile(f,filep);
{$I-}
Rewrite(f);
{$I-}
x := 0;
while x <> StringGrid1.RowCount -1 do begin
inc(x);
{$I-}
seek(f,Filesize(f));
{$I-}

with data do begin

  Id := StringGrid1.Cells[0,x];
  fremd := StringGrid1.Cells[1,x];
  bed1 := StringGrid1.Cells[2,x];
  bed2 := StringGrid1.Cells[3,x];
  bed3 := StringGrid1.Cells[4,x];
  bed4 := StringGrid1.Cells[5,x];

end;

write(f,data);
end;
closefile(f);

Form2.Caption := 'Vokabelliste verwalten '+filep+'';

updatehistory;
addhistory;
end;

procedure TForm2.Panel6Click(Sender: TObject);
var
f : file of TData;
data : TData;
x,rows: integer;
endid : string;
begin

if OpenDialog1.Execute then begin
  filep := OpenDialog1.FileName;


AssignFile(f,filep);
{$I-}
reset(f);

//Zeileanzahl auslesen
seek(f,FileSize(f)-2);
read(f,data);
rows := strtoint(data.ID);

x := 0;

while x <> rows do begin
  Stringgrid1.RowCount := StringGrid1.RowCount + 1;
  inc(x);
end;

x := 0;
repeat
  seek(f,x);
  read(f,data);
  StringGrid1.Cells[0,x+1] := data.Id;
  StringGrid1.Cells[1,x+1] := data.fremd;
  StringGrid1.Cells[2,x+1] := data.bed1;
  StringGrid1.Cells[3,x+1] := data.bed2;
  StringGrid1.Cells[4,x+1] := data.bed3;
  StringGrid1.Cells[5,x+1] := data.bed4;
  inc(x);
until x = 100;
{$I+}
end;

end;

procedure TForm2.updatehistory;
var
fh : file of PData;
datap : PData;
x : integer;
begin

AssignFile(fh,'C:\WINDOWS\voka_history.dat');
{$I-}

reset(fh);
x := 0;
repeat
 seek(fh,x);
 read(fh,datap);

inc(x);
until eof(fh);
label2.caption := inttostr(x);
{$I+}


end;

procedure TForm2.addhistory;
var
fh : file of PData;
datap : PData;
y, posi,seekk : integer;
gefunden : boolean;
fname, filep : string[100];
begin

filep := OpenDialog1.FileName;

//Name der ausgewählten Datei auslesen
pos('.txt',filep);
y := 0;
repeat
  inc(y);
posi := pos('.txt',filep)-y;

until filep[posi] = '\';

fname := copy(filep,length(filep)-y-2,y-1);

//copy(filep,)
gefunden := false;
seekk := 0;
 AssignFile(fh,'C:\WINDOWS\Voka_history.dat');
{$I-}


reset(fh);

repeat

  seek(fh,seekk);

  read(fh,datap);

  if (POS(fname,Datap.name) <> 0) then begin
    gefunden := true;
  end;
inc(seekk);
until eof(fh) or gefunden;

if not gefunden then begin
seek(fh,FileSize(fh)-1);
with datap do begin
  pfad := filep;
  name := fname;
end;
write(fh,datap);
closefile(fh);
end;
end;

end.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Zugriffsverletzung in Funktion

  Alt 1. Mai 2008, 17:11
Könntest du das Programme im Anhang bereitstellen. Dank deiner Codeformatierung ist es schwer durchzublicken.
Markus Kinzler
  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 00:51 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