![]() |
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:
In diesem Codeblock kommt fehler:
{**********************************************************************
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;
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; |
Re: EAccessViolation ?? Warum
Hi,
Du rufst zuerst SQL.Free und danach SQL.Add auf:
Delphi-Quellcode:
Das kann nicht funktionieren. Ich weiss jetzt nicht warum du SQL freigibts, aber danach musst du es wieder erzeugen, um damit weiterzuarbeiten.
sql.Free;
sql.Add(test); //HIER ENTSTEHT DIE FEHLERMELDUNG!!!!!!!!!!!!!!!!!!!!!!!!!!!!1 Wenn du die Liste einfach leeren willst, dann nimm SQL.Clear. grüße, daniel |
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. |
Re: EAccessViolation ?? Warum
Man welch ein dämlicher Fehler :wall: :wall: :wall:
Thx Markus |
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; |
Re: EAccessViolation ?? Warum
@Sprint
ja währe auch eine Möglichkeit :zwinker: |
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:
Richtiger wird's mit QuotedStr:
SqlString:= 'Update kundendaten.schaden Set '+
'Schadennr =''' +Edt_SchadenNr.Text+ ''','+ // bad
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