Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi EAccessViolation ?? Warum (https://www.delphipraxis.net/34842-eaccessviolation-warum.html)

Schuster 29. Nov 2004 10:13


EAccessViolation ?? Warum
 
Bins schon wieder :-D

Hi Leute

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

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;

Sanchez 29. Nov 2004 10:18

Re: EAccessViolation ?? Warum
 
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

Jacques 29. Nov 2004 10:23

Re: EAccessViolation ?? Warum
 
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.

Schuster 29. Nov 2004 10:25

Re: EAccessViolation ?? Warum
 
Man welch ein dämlicher Fehler :wall: :wall: :wall:

Thx
Markus

Sprint 29. Nov 2004 10:28

Re: EAccessViolation ?? Warum
 
@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;

Schuster 29. Nov 2004 10:36

Re: EAccessViolation ?? Warum
 
@Sprint

ja währe auch eine Möglichkeit :zwinker:

shmia 29. Nov 2004 10:39

Re: EAccessViolation ?? Warum
 
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


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:44 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz