Autor Beitrag
Dhakiyah
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 327
Erhaltene Danke: 5

Windows 7
Delphi XE2
BeitragVerfasst: Mi 09.04.14 11:36 
Hallo!
Hab da ein kleines Problem:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
var qry_heute: TADOQuery;
begin
  qry_heute :=  TADOQuery.Create(nil);
  qry_heute.Connection := dm.ADOConnection1;
  with qry_heute do
    begin
      close;
      SQL.Clear;
      SQL.ADD ('select sysdate() jetzt from dual'); ;
    end;
  qry_heute.open;     
    Result := StrToDateTime(qry_heute.FieldByName('jetzt').AsString);
  qry_heute.Close;
  qry_heute.Free;
end;


Bei qry_heute.open knallt er mir raus.

Was mache ich falsch?
DB-Zugriff geht und DB Connected ist True.

Habe das Problem nur in der Unit, wenn ich es in einem Formular mit der Komponente mache gehts.

_________________
Es ist soooo flauschig !!!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 09.04.14 14:26 
Was passiert denn? Schutzverletzung?

Abgesehen davon, dass da ein with drin ist, was ohnehin schon nicht schön ist, hast du in der Zeile mit dem SQL.Add am Ende der Zeile ein doppeltes Semikolon. Da hatte ich schon einmal richtig seltsame Effekte in Kombination mit with in der Form, dass der Compiler zwar keinen Fehler gebracht hat, aber fürchterlich darüber gestolpert ist und falsche Ergebnisse geliefert hat.
WasWeißDennIch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 653
Erhaltene Danke: 160



BeitragVerfasst: Mi 09.04.14 15:06 
Ich würde es mal so versuchen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
var 
  qry_heute: TADOQuery;
begin
  qry_heute := TADOQuery.Create(nil);
  try
    qry_heute.Connection := dm.ADOConnection1;
    qry_heute.SQL.Text := 'select sysdate() as jetzt from dual';
    qry_heute.open;     
    Result := StrToDateTime(qry_heute.FieldByName('jetzt').AsString);
    qry_heute.Close;
  finally
    qry_heute.Free;
  end;
end;

Oder wenn es unbedingt mit with sein muss (ich persönlich kann darauf verzichten):
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
with TADOQuery.Create(nildo
  try
    Connection := dm.ADOConnection1;
    SQL.Text := 'select sysdate() as jetzt from dual';
    Open;
    Result := StrToDateTime(FieldByName('jetzt').AsString);
    Close;
  finally
    Free;
  end;
Dhakiyah Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 327
Erhaltene Danke: 5

Windows 7
Delphi XE2
BeitragVerfasst: Do 10.04.14 07:50 
Moin!
Habe alle Varianten ausprobiert. Beim open knallt er raus mit der Meldung:

Im Projekt ... ist eine Exception der Klasse .... mit der Meldung 'access violation at ...: write of address .... ' aufgetreten.

Ist das mit dem with irgendwie nicht gut?
Ich habe das so gelernt und mache das immer so... o.O

_________________
Es ist soooo flauschig !!!
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Do 10.04.14 07:57 
Sowohl dm als auch ADOConnection1 sind korrekt instanziert worden?

Das With ist meiner Meinung nach einfach nur unübersichtlich. Daher benutze ich persönlich es grundsätzlich nicht.

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
WasWeißDennIch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 653
Erhaltene Danke: 160



BeitragVerfasst: Do 10.04.14 08:00 
Was passiert denn, wenn Du in die "Open"-Zeile einen Haltepunkt setzt und mit F7 durchsteppst? Damit sollte sich zumindest ermitteln lassen, wo genau der Fehler auftritt.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 10.04.14 08:59 
Wenn der Unterschied zwischen Komponente und selbst erzeugt ist, gibt es eigentlich nur zwei Unterschiede:
Erstens der Owner - vielleicht solltest du es einmal mit etwas anderem als nil probieren, z.B. deinem Formular testweise.
Zweitens ggf. gesetzte Eigenschaften im Objektinspektor, aber wenn du da keine gesetzt hast, sollte das nicht anders sein als manuell erzeugt.

Wie sieht der Stacktrace an der Stelle aus (in Delphi, wenn du bei der Exception auf anhalten gehst)? Und welche Adressen stehen denn in der Fehlermeldung?

user profile iconNersgatt hat folgendes geschrieben Zum zitierten Posting springen:
Das With ist meiner Meinung nach einfach nur unübersichtlich.
Und potentiell gefährlich.
Das ist als ob du einem Soldaten sagst "Alles was ich dir sage mach in die Richtung A" und dann den Schießbefehl erteilst. Schade nur, wenn dieser für eine nicht drehbare Kanone gilt, die z.B. in deine Richtung zeigt. Der Soldat mag das noch merken, der Compiler nicht.
Dhakiyah Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 327
Erhaltene Danke: 5

Windows 7
Delphi XE2
BeitragVerfasst: Do 10.04.14 10:23 
Also, wir haben jetzt viel rumprobiert.
Er scheint ein Problem mit der Übergabe von () haben.
Wenn ich z.B.
select * from tabelleX
mache, kommt kein Fehler, sobald ich aber z.B.
select min(spaltex) from tabelleY
oder eben das select sysdate() oder now() from dual
mache knallt er raus mit einer Zugriffsverletzung.

Kennt jemand das Problem?

_________________
Es ist soooo flauschig !!!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 10.04.14 11:52 
Was ist denn das für eine Datenbank dahinter?
Und welcher Provider wird in der Connection benutzt?
Muck
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 98
Erhaltene Danke: 8

Win 8, Win 7, Vista, Win XP
Delphi XE3, Delphi 2009, Delphi 2007, Delphi 5
BeitragVerfasst: Do 10.04.14 14:43 
Guten Morgen,

ich hatte vor Jahren gleiches Problem mit einer ADOQuery auf einer aelteren Version. Zugriffsverletzungen traten nicht mehr auf nach

ausblenden Delphi-Quelltext
1:
2:
LockType:=ltReadOnly;
ParamCheck:=false;


Vielleicht hilft es ja.

bye

Markus

_________________
Computers are like air conditioners. They work fine until you start opening windows!
Dhakiyah Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 327
Erhaltene Danke: 5

Windows 7
Delphi XE2
BeitragVerfasst: Fr 11.04.14 06:28 
Provider=MSDASQL.1
Datenbank=MySQL

@Markus
ausblenden Delphi-Quelltext
1:
2:
LockType:=ltReadOnly;
ParamCheck:=false;


Wo genau setze ich das ein?

EDIT:
Es schein mit dem LockType und dem ParamCheck zu funktionieren. :)

_________________
Es ist soooo flauschig !!!