Einzelnen Beitrag anzeigen

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