Entwickler-Ecke
Datenbanken - EAccessViolation bei ExecSQL
Rupert - Do 23.05.13 17:32
Titel: EAccessViolation bei ExecSQL
EAccessViolation bei ExecSQL
Verwende Absolute Database.
Ich finden den Fehler nicht, wahrscheinlich habe ich schon einen Tunnelblick ;)
Den SQL-Table habe ich schon umbenannt und dann neu erstellt.
Der Fehler tritt in Zeile 14 auf und ich habe keinen Schimmer, was ich hier falsch gemacht haben soll.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88:
| Data.ABSQuery1.open; with Data.ABSQuery1 do begin repeat Data.ABSQuery1.first;
FName:=Data.Teilnehmer.FieldByName('Name').asstring; VName:=Data.Teilnehmer.FieldByName('Vorname').asstring; Gruppe:=Data.Teilnehmer.FieldByName('Gruppe').asstring; inc(Reczaehler,1); if Fname<>'' then begin SQLString:='select * from Ergebnisse where extract (year from datum)='+inttostr(aktjahrwert)+' and Name='''+FName+''' AND Vorname='''+VName+''' AND Gruppe='''+Gruppe+'''order by PunkteNe desc'; Data.ABSQuery1.SQL.Text:=SQLString; Data.ABSQuery1.ExecSQL; Data.ABSQuery1.Active:=true;
Data.ABSQuery1.first; DBGrid7.Refresh; PktGes:=0; SumNetto:=0; PktSNe:=0; PktS5:=0; SumPunkte:=0; PunkteSchnitt:=0; PunkteGes:=0; PktGesNe:=0; PunkteS5Br:=0; PunkteS5N:=0;
Anzahl_Ergebnisse:=Data.ABSQuery1.RecordCount; if Anzahl_Ergebnisse <> 0 then begin
for i:=1 to Anzahl_Ergebnisse do begin PktGesNe:=PktGesNe+Data.ABSQuery1.FieldByName('PunkteNe').asinteger; PunkteGes:=PunkteGes+Data.ABSQuery1.FieldByName('PunkteBr').asinteger;
Data.ABSQuery1.next; end; PktSNe:=int(PktGesNe/Anzahl_Ergebnisse*1000)/1000; PunkteSchnitt:=int(PunkteGes/Anzahl_Ergebnisse*1000)/1000;
Data.ABSQuery1.first; if Anzahl_Ergebnisse >= 5 then zaehler:=5 else zaehler:=Anzahl_Ergebnisse; for i:=1 to zaehler do begin SumNetto:=SumNetto+Data.ABSQuery1.FieldByName('PunkteNe').asinteger; SumPunkte:=SumPunkte+Data.ABSQuery1.FieldByName('PunkteBr').asinteger; Data.ABSQuery1.next; end; PunkteS5Br:=int(SumPunkte*1000/zaehler)/1000; PunkteS5N:=int(SumNetto*1000/zaehler)/1000;
Data.ABSQuery1.first; for i:=1 to Anzahl_Ergebnisse do begin Data.ABSQuery1.edit; Data.ABSQuery1.FieldByName('SumTur').asinteger:=Anzahl_Ergebnisse; begin Data.ABSQuery1.FieldByName('SumBr').asinteger:=SumPunkte; Data.ABSQuery1.FieldByName('SumNe').asinteger:=SumNetto; Data.ABSQuery1.FieldByName('PktGes').asinteger:=PktGesNe; Data.ABSQuery1.FieldByName('PktS').asfloat:=PunkteSchnitt; Data.ABSQuery1.FieldByName('PktS5B').AsFloat:=PunkteS5Br; Data.ABSQuery1.FieldByName('PktS5').AsFloat:=PunkteS5N; end; if Anzahl_Ergebnisse >=5 then Data.ABSQuery1.FieldByName('Tur5').asinteger:=1 else Data.ABSQuery1.FieldByName('Tur5').asinteger:=0; Data.ABSQuery1.post; Data.ABSQuery1.next; end; end; end; Data.Teilnehmer.next; until Data.Teilnehmer.eof; end; Data.ABSQuery1.Active:=false; SQLString:='select * from Ergebnisse where extract (year from datum)='+inttostr(aktjahrwert)+' order by SumNe desc, PunkteNe desc'; Data.ABSQuery1.SQL.Text:=SQLString; Data.ABSQuery1.ExecSQL; Data.ABSQuery1.Active:=true; DBGrid7.Refresh; Screen.Cursor:=crDefault; |
Lemmy - Do 23.05.13 17:35
nur ne ganz wilde Vermutung: Hast Du schon mal .Open; anstelle von .Execute; verwendet? Execute verwendet man i.A. bei DDL oder AUfrufen die kein Ergebnis zurück liefern, open dagegen bei Select-Anweisungen.... Das Anschließende .ACtive; würde zumindest darauf hindeuten, das Du dir im übrigen auch sparen kannst...
Grüße
Rupert - Fr 24.05.13 11:13
Ich habe die Routine nun auf die Fehlererfassung "abgespeckt"
'select * from Ergebnisse where extract (year from datum)=2013 and Gruppe='A''
generell Fehlerfrei
1. Durchlauf:
'select * from Ergebnisse where extract (year from datum)=2013 and Gruppe='A' and Name='BUCHBERGER''
fehlerfrei
2. Durchlauf:
Exeption bei "Data.ABSQuery1.close"
Das ließ den Schluss zu, dass es sich nur mehr um das Feld Name handeln kann.
Die Lösung:
Änderen der Variable Name in FamName
Manchmal sind die Dinge plausibel - aber bis man es behirnt vergehen viele Stunden :idea:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| repeat Data.ABSQuery1.open; FName:=Data.Teilnehmer.FieldByName('Name').asstring; VName:=Data.Teilnehmer.FieldByName('Vorname').asstring; Group:=Data.Teilnehmer.FieldByName('Gruppe').asstring; inc(Reczaehler,1); Data.ABSQuery1.close; Data.ABSQuery1.RequestLive:=true; Data.ABSQuery1.SQL.Clear;
if Fname<>'' then begin SQLString:='select * from Ergebnisse where extract (year from datum)='+inttostr(aktjahrwert)+' and Gruppe='''+Group+''' and Name='''+FName+''''; Data.ABSQuery1.SQL.Add(SQLString); Data.ABSQuery1.open; end; Data.Teilnehmer.next; until Data.Teilnehmer.eof; |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!