AGB  ·  Datenschutz  ·  Impressum  







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

EAccessViolation ?? Warum

Ein Thema von Schuster · begonnen am 29. Nov 2004 · letzter Beitrag vom 29. Nov 2004
Antwort Antwort
Benutzerbild von Schuster
Schuster

Registriert seit: 21. Okt 2004
Ort: Wien
176 Beiträge
 
Delphi XE7 Architect
 
#1

EAccessViolation ?? Warum

  Alt 29. Nov 2004, 10:13
Bins schon wieder

Hi Leute

Bekomme o.a. Fehlermeldung weiß aber nicht warum.

Hier mal ein bischen Code:

Dieser Codeblock ist zwar denk ich mal nicht wichtig geb ihn aber dazu:

Delphi-Quellcode:
{**********************************************************************
                    Datei zu Datensatz speichern
***********************************************************************}

procedure TForm_Schaden.Btn_Datei_hinzufClick(Sender: TObject);
var x,x1: integer;
wahr : boolean;

begin
    x1:=0;
    wahr:= false;
    with OpenDialog_Datei do
    begin
       Title:='Datei auswählen..';
       //Execute;
       if Execute=false then //Wenn auf Abbrechen geklickt wird
       exit;

       Pfad:= OpenDialog_Datei.FileName; //Pfad enthält Pfad + Dateiname
       MessageDlg(Pfad,mtWarning,[mbok],0);
    end;
    x:= length(Pfad);


    while wahr <> true do
    begin
       Dateiname:= copy(Pfad,x,1);

       x:= x-1; //immer einen Schritt retour
       x1:=x+1; //Anzahl der Schritte merken
       if Dateiname='\'then
       begin
           wahr := true;
           Dateiname:= copy(Pfad,x+2,x1); //+2 da sont x\name kopiert wird
           MessageDlg(Dateiname,mtInformation,[mbok],0);
           Anlage:=true;
       end;
    end;
end;
In diesem Codeblock kommt fehler:

Delphi-Quellcode:
{**************************************************************************
                          Schaden speichern
***************************************************************************}

procedure TForm_Schaden.Btn_SpeichernClick(Sender: TObject);
var temp,Kdnnr, SqlString,SchdnrIntern,test: string;
M:Tmemorystream;
begin
    if Schaden_Button_ged=true then
    begin
      SchdnrIntern:= DataModule1.ZQuery_Vertraege_suchen.FieldValues['SchadennrIntern'];
    end
    else
    begin
        if komme_v_schaden=false then
        begin
            temp:=Form1.DBGrid1Seite1_Vertraege.DataSource.DataSet.FieldByName('Polizzennummer').AsString;
            Kdnnr:= Form1.DBGrid1Seite1_Vertraege.DataSource.DataSet.FieldByName('Kundennr').AsString;
        end
        else
        begin //Wenn aus Tabsheet 3 (Schäden)
            temp:= Form1.DBGridSchaden.DataSource.DataSet.FieldValues['PolNr'];
            Kdnnr:= Form1.DBGridSchaden.DataSource.DataSet.FieldValues['Kundennr'];
            SchdnrIntern:= Form1.DBGridSchaden.DataSource.DataSet.FieldValues['SchadennrIntern'];
            Schaden_Button_ged:=true;
        end;
    end;

    if Edt_Datum.Text='then
        Edt_Datum.Text:='2000.01.01'
    else
    begin
        if Length(Edt_Datum.Text) < 10 then
        begin
          MessageDlg('Datums format falsch!',mtWarning,[mbok],0);
          Edt_Datum.SetFocus;
          exit;
        end;
        Edt_Datum.Text:=DatumFormatieren(Edt_Datum.Text);
    end;

    if Schaden_Button_ged=false then
    begin
    SqlString:= 'Insert into schaden (PolNr,Schadennr,Sparte,SchadenDatum,Status,Ursache,Verschulden,Schadenref,TelnrRef,' +
                'Schadensumme,Bemerkungen,Kundennr) Values ('''+temp+''','''+Edt_SchadenNr.Text+ ''','''+
                Cmb_Sparte.Text + ''','''+Edt_Datum.text+''','''+Cmb_Status.Text+''','''+Cmb_Ursache.Text+
                ''','''+Cmb_Verschulden.text+ ''','''+Edt_Referent.Text + ''','''+Edt_TelNrRef.Text+''','''+
                Edt_Schadensumme.Text+ ''','''+Memo_Bemerkungen.Text+''','''+Kdnnr+ ''')';
     end
     else
     begin
     SqlString:= 'Update kundendaten.schaden Set '+
                 'Schadennr =''' +Edt_SchadenNr.Text+ ''','+
                 'Sparte = '''+ Cmb_Sparte.Text + ''','+
                 'SchadenDatum = ''' + Edt_Datum.text+''','+
                 'Status = ''' + Cmb_Status.Text+''','+
                 'Ursache = ''' + Cmb_Ursache.Text+''','+
                 'Verschulden = ''' + Cmb_Verschulden.Text +''','+
                 'Schadenref = ''' + Edt_Referent.Text +''','+
                 'TelnrRef = ''' + Edt_TelNrRef.Text +''','+
                 'Schadensumme = ''' + Edt_Schadensumme.Text +''','+
                 'Bemerkungen = '''+ Memo_Bemerkungen.Text +''''+
                 'where SchadennrIntern = ''' + SchdnrIntern +''';';

                 Schaden_Button_ged:= true;
      end;

    MEINSQL.SQL_Manueler_String(SqlString);

    if Anlage=true then
    begin
        ////In DB speichern/////
       { with DataModule1.ZQuery_Sonstiges do
        begin
            sql.Free;
            sql.Add('Insert into schadendateianlagen (Kdnnr,DateiName,Pfad,Schadennrint)'+
                    'Values ('''+Kdnnr+ ''','''+Dateiname+''','''+'O:\DateiKunden\'+
                    ''',LAST_INSERT_ID() )');
            ExecSQL;
        end;}


        test:= 'Select Schadennrint from schaden where Schadennr like '''+Edt_SchadenNr.Text+'''';
        //MessageDlg(test,mtWarning,[mbok],0);
        with DataModule1.ZQuery_Sonstiges do
        begin
             sql.Free;
             sql.Add(test); //HIER ENTSTEHT DIE FEHLERMELDUNG!!!!!!!!!!!!!!!!!!!!!!!!!!!!1
             open;
        end;

        MessageDlg(DataModule1.ZQuery_Sonstiges.FieldByName('Schadennrint').AsString,mtWarning,[mbok],0);

        ///Datei kopieren
        M:=TMemorystream.Create;
        M.LoadFromFile(Pfad);
        M.SaveToFile('O:\DateiKunden\'+Dateiname);
        M.Free;
        anlage:=false;
    end;


    Form_Schaden.close;
    if Schaden_Button_ged=false then
      form1.StatusBarSeite1.Panels[2].Text:='Schaden zu Pol.Nr.: '+temp+' wurde angelegt'
    else
      Form1.StatusBarSeite1.Panels[2].Text:= 'Schaden wurde upgedatet';
      
    MEINSQL.SQL_Sel_Abfragen('kdaten','Kundennr',Kdnnr); //nochmals abfragen da sonst DbGrid nicht aktualisiert wird.
    

    form1.show;
end;
Markus Schuster
__________________
Markus
http://members.chello.at/delphi-developer
  Mit Zitat antworten Zitat
Benutzerbild von Sanchez
Sanchez

Registriert seit: 24. Apr 2003
Ort: Neumarkt Stmk
892 Beiträge
 
Delphi XE6 Enterprise
 
#2

Re: EAccessViolation ?? Warum

  Alt 29. Nov 2004, 10:18
Hi,
Du rufst zuerst SQL.Free und danach SQL.Add auf:

Delphi-Quellcode:
  sql.Free;
  sql.Add(test); //HIER ENTSTEHT DIE FEHLERMELDUNG!!!!!!!!!!!!!!!!!!!!!!!!!!!!1
Das kann nicht funktionieren. Ich weiss jetzt nicht warum du SQL freigibts, aber danach musst du es wieder erzeugen, um damit weiterzuarbeiten.

Wenn du die Liste einfach leeren willst, dann nimm SQL.Clear.

grüße, daniel
Daniel
Testen ist feige!
  Mit Zitat antworten Zitat
Jacques

Registriert seit: 8. Sep 2003
Ort: Celle
9 Beiträge
 
Delphi 7 Professional
 
#3

Re: EAccessViolation ?? Warum

  Alt 29. Nov 2004, 10:23
so ein Mist, jetzt wollte ich das grad auch schreiben, und im selben Moment sehe ich, dass jemand schneller war.

Hatte mich grad gefreut, auch mal helfen zu können.
cu Jacques
  Mit Zitat antworten Zitat
Benutzerbild von Schuster
Schuster

Registriert seit: 21. Okt 2004
Ort: Wien
176 Beiträge
 
Delphi XE7 Architect
 
#4

Re: EAccessViolation ?? Warum

  Alt 29. Nov 2004, 10:25
Man welch ein dämlicher Fehler

Thx
Markus
Markus Schuster
__________________
Markus
http://members.chello.at/delphi-developer
  Mit Zitat antworten Zitat
Benutzerbild von Sprint
Sprint

Registriert seit: 18. Aug 2004
Ort: Edewecht
712 Beiträge
 
Delphi 5 Professional
 
#5

Re: EAccessViolation ?? Warum

  Alt 29. Nov 2004, 10:28
@Schuster: Hast du schon mal was von der Funktion ExtractFileName gehört? Dann kannst dir den langen Part in deiner Btn_Datei_hinzufClick Methode sparen.

Delphi-Quellcode:
procedure TForm_Schaden.Btn_Datei_hinzufClick(Sender: TObject);
begin

  with OpenDialog_Datei do
  begin
    Title := 'Datei auswählen...';
    if Execute then
    begin
      Pfad := OpenDialog_Datei.FileName;
      Dateiname := ExtractFileName(Pfad);
      ShowMessage(Dateiname);
    end;
  end;

end;
Ciao, Sprint.

"I don't know what I am doing, but I am sure I am having fun!"
  Mit Zitat antworten Zitat
Benutzerbild von Schuster
Schuster

Registriert seit: 21. Okt 2004
Ort: Wien
176 Beiträge
 
Delphi XE7 Architect
 
#6

Re: EAccessViolation ?? Warum

  Alt 29. Nov 2004, 10:36
@Sprint

ja währe auch eine Möglichkeit
Markus Schuster
__________________
Markus
http://members.chello.at/delphi-developer
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#7

Re: EAccessViolation ?? Warum

  Alt 29. Nov 2004, 10:39
Schreib mal einige Hochkommas in dein Bemerkungsfeld und versuch zu speichern!!!
Dann wirst du schnell drauf kommen, dass hartkodierte Hochkommas Käse sind
Delphi-Quellcode:
SqlString:= 'Update kundendaten.schaden Set '+
                 'Schadennr =''' +Edt_SchadenNr.Text+ ''','+ // bad
Richtiger wird's mit QuotedStr:
Delphi-Quellcode:
SqlString:= 'Update kundendaten.schaden Set '+
                 'Schadennr =' +QuotedStr(Edt_SchadenNr.Text)+','+ // OK
Andreas
  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 11:56 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