Autor Beitrag
Bronstein
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 578
Erhaltene Danke: 1

WIN XP
Delphi 6 / Delphi 2006 / Delphi XE
BeitragVerfasst: Do 30.11.06 16:35 
Bekomme immer eine Fehlermeldung bei zusammensetzen einer ADOQuery:

Im Projekt PMJ_Prog.exe ist eine Exception der Klasse EAccessViolation aufgetreten. Meldung: 'Zugriffsverletzung bei Adresse 1B041FC6 in Modul 'msjet40.dll'. Lesen von Adresse 0005242E'. Prozeß wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.

Hier mal mein Code:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
  AdoQuery1.Active := false;
    AdoQuery1.Close;
    AdoQuery1.SQL.Clear;
    AdoQuery1.SQL.Add('SELECT Sum(Status) AS [Summe von Status], Count(Status) AS [Anzahl von Status], Type,');
    AdoQuery1.SQL.Add('  Min(Uhrzeit) AS [Min von Uhrzeit], Max(Uhrzeit) AS [Max von Uhrzeit]');

    AdoQuery1.SQL.Add(' FROM tblPMJ_Baugruppen');
    AdoQuery1.SQL.Add(' WHERE (((Uhrzeit)>= ' + tmpVon + ' And (tblPMJ_Baugruppen.Uhrzeit)<=' + tmpBis + '))');
    AdoQuery1.SQL.Add(' GROUP BY Type, Maschine');
    AdoQuery1.SQL.Add(' HAVING (((Maschine)='+ SQL_Maschine +'))');
    AdoQuery1.Active := true;


Bei der zweiten ADD-Anweisung tritt der Fehler auf
Wenn ich die zweite ADD-Anweisung ausblende, tritt der Fehler bei der ersten ADD auf.

_________________
Es gibt keine dummen Fragen nur dumme Antworten!!!
NTM
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 120

Win XP
2005 Prof
BeitragVerfasst: Do 30.11.06 16:47 
Hallo,
setze bevor du auf ADQOuery.Active:= true; gehts denn Befehl ADQOuery.ExecSQL; und erst ADQOuery.Active:= true;
Bernhard Geyer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 721
Erhaltene Danke: 3



BeitragVerfasst: Fr 01.12.06 11:05 
Nimm lieber mal 'ne TADODataset-Kompo:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
  AdoDS.Active := false;  
  AdoDS.Close;  
  AdoDS.Command := 'SELECT Sum(Status) AS [Summe von Status], Count(Status) AS [Anzahl von Status], Type,' +
                   '  Min(Uhrzeit) AS [Min von Uhrzeit], Max(Uhrzeit) AS [Max von Uhrzeit]') +
                   ' FROM tblPMJ_Baugruppen' +
                   ' WHERE (((Uhrzeit)>= ' + tmpVon + ' And (tblPMJ_Baugruppen.Uhrzeit)<=' + tmpBis + '))' + 
                   ' GROUP BY Type, Maschine' +
                   ' HAVING (((Maschine)='+ SQL_Maschine +'))';
  AdoDS.Active := True;


Und dann überleg dir mal ob du nicht parametrisierte Abfragen verwenden willst.
Deine jetzige Lösung ist 1A zu verwenden um per SQL-Injection die Datenbank zu zerschießen. Da kann man nur froh sein das du eine Lokale DB verwendest und keinen "richtigen" SQL-Server.

Ach ja: Der zusätzliche Aufruf von ExecSQL ist unötig und nur bei INSERT/DELETE/...-"Abfragen" nötig die keine Ergebnisliste liefern. Bei einer SELECT-Anweisung würde sie dann nochmal ausgeführt ohne das du das Ergebnis zu Gesichte bekommst.
mikhal
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 109

Windows 10 Professional 64-Bit
VS 215 CE, Delphi 10.1 Berlin Professional
BeitragVerfasst: Fr 01.12.06 13:52 
Wenn es immer noch kracht: Der Feldname Type könnte daran schuld sein - TYPE ist ein Schlüsselwort (reserviertes Wort).

Grüße
Mikhal

_________________
Computer erleichtern die Arbeit...
...und die Erde ist eine Scheibe!