Autor Beitrag
M. Raab
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 334
Erhaltene Danke: 1

WIN 7
Delphi XE
BeitragVerfasst: Mi 31.12.08 16:29 
Hallo NG,

ich habe ein altes Programm, welches ich unter Delphi 2009 zum Laufen bringen möchte. Nun bin ich auf ein Problem gestoßen, welches ich nicht lösen kann.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
    form1.Query2.SQL.Clear;
    form1.Query2.SQL.ADD('Select SUM(menge) as ladungsmenge,bez FROM "LADUNG.DBF" group by bez');
    form1.Query2.ExecSQL;
    form1.Query2.active:=true;

    setlength(LadungMenge,form1.Query2.RecordCount+1);
    setlength(LadungBez,form1.Query2.RecordCount+1);

    Ladung:=0;
    for lauf1:=1 to form1.Query2.RecordCount do
      begin
        LadungMenge[lauf1]:=form1.Query2.FieldByName('ladungsmenge').asfloat;
        LadungBez[lauf1]:=form1.Query2.FieldByName('bez').asstring;
        form1.Query2.Next;
        Ladung:=Ladung+LadungMenge[lauf1];
      end;


Ich bekomme ständig die Exception, das Feld ladungsmenge in Query2 wird nicht gefunden. Das Programm wird zwar compiliert, sobald aber die Abfrage gestartet wird, kommt die Exception.

Bis Delphi 2007 hatte ich keine Probleme.

Vielleicht kann mir jemand nen Tipp geben.


Gruss

Markus

_________________
Das Leben besteht aus Bits und Bytes - nur: wo laufen sie denn ????
Super ... Du kannst das zwar lesen, toll..... aber: völlig zwecklos !!!
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 31.12.08 16:48 
DBF = DBase? Dann ist vermutlich auch noch die BDE im Spiel? Ob das unter D2009 noch klappt, wage ich fast zu bezweifeln. Ansonsten frage ich mich, wozu das ExecSQL gut sein soll, schließlich handelt es sich ja um eine Abfrage. Hast Du schon einmal versucht, per ShowMessage o.ä. das Abfrageergebnis einzusehen (z.B. RecordCount)?
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Mi 31.12.08 18:24 
Zitat:
DBF = DBase? Dann ist vermutlich auch noch die BDE im Spiel? Ob das unter D2009 noch klappt, wage ich fast zu bezweifeln.
Doch CodeGear hat sich wider besseres Wissens dazu entschieden, anstatt wie angekündigt diese abzulösen.
Wie Detlef schon schrieb ist es wenig wahrscheinlich, das der Code unter D2007 lief; der Fehler kamm vielleicht nicht, aber das was du willst hat er bestimmt nicht. den .ExecSQL dient zum Ausführen von DML-Statements, welche keine Datenmenge zurückgeben.
Für Select-Abfragen immer .Open verwenden.
Statt .Clear/.Add besser die Eigenschaft .Text verwenden

_________________
Markus Kinzler.
haentschman
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 285
Erhaltene Danke: 33


DX10 Berlin Professional
BeitragVerfasst: Mi 31.12.08 20:15 
Hallo...

das
ausblenden Delphi-Quelltext
1:
form1.Query2.active:=true;					

kannst du dir auch schenken. Durch Query2.Open wird automatisch die Query Active:= True gesetzt.

:wave:
M. Raab Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 334
Erhaltene Danke: 1

WIN 7
Delphi XE
BeitragVerfasst: Do 01.01.09 13:05 
Hallo NG,

also ein SHOWMESSAGE liefert den gleichen Fehler: ladungsmenge nicht gefunden. Ich hatte das so gemacht:

ausblenden Delphi-Quelltext
1:
showmessage(Query2['ladungsmenge'])					



Nun gut, offenbar ist unter 2007 der Fehler im Ergebnis nie aufgefallen, aber das Programm lief formal korrekt. Ich muss also Teile umschreiben. Der Sinn dieses Codes ist, Summen der Ladungsmenge (Feld menge) je nach Ladungsart (Feld: bez) zu berechnen. Habt ihr da nen einfachen TIPP auf Lager ? Von Datenbankprogrammierung unter DELPHI habe ich sehr (!) wenig Ahnung - ich benutze das auch kaum.


Gruss


Markus

_________________
Das Leben besteht aus Bits und Bytes - nur: wo laufen sie denn ????
Super ... Du kannst das zwar lesen, toll..... aber: völlig zwecklos !!!
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Fr 02.01.09 10:33 
Versuch esd mal so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
    Query2.SQL.Text := 'Select SUM(menge) as ladungsmenge,bez FROM "LADUNG.DBF" group by bez';
    Query2.Open;
    Query2.Last;
    Query2.First;
    setlength(LadungMenge,Query2.RecordCount);
    setlength(LadungBez,Query2.RecordCount);

    Ladung:=0;
    lauf1 := 0;
    while not Query2.Eof() do
    begin
        LadungMenge[lauf1]:=Query2.FieldByName('ladungsmenge').asfloat;
        LadungBez[lauf1]:=Query2.FieldByName('bez').asstring;
        Ladung:=Ladung+LadungMenge[lauf1];
        inc( lauf1);
        Query2.Next;
    end;

_________________
Markus Kinzler.
M. Raab Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 334
Erhaltene Danke: 1

WIN 7
Delphi XE
BeitragVerfasst: Do 08.01.09 14:48 
Hallo Markus


-->> NAMENSKOLLEGE :D :D :D :D :D :D :D


Meine Antwort hat leider etwas gedauert - aber ich bin zur Zeit krank und heute wieder zum Teil aufn Damm.

Ich hab das mal ausprobiert - der Fehler bleibt identisch. In Deinem Code ist aber ein Fehler: die beiden Klammern vom EOF() müssen weg: EOf ist korrekt.

Der Fehler kommt in Zeile 12 - obiger Programmcode.
Jetzt bräuchte ich noch ne gute Idee !!!!!


Vielen Dank und Gruss



Gruss


Markus

_________________
Das Leben besteht aus Bits und Bytes - nur: wo laufen sie denn ????
Super ... Du kannst das zwar lesen, toll..... aber: völlig zwecklos !!!
M. Raab Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 334
Erhaltene Danke: 1

WIN 7
Delphi XE
BeitragVerfasst: Do 08.01.09 15:29 
Hallo NG,


ich habe die Lösung gefunden - ist IRRE !!! :P :P :P :P


Das Problem ist die Länge des Namens:


LADUNGSMENGE ist zu lange !!

Man nehme einfach

LADUNGSMEN --- dann klappt es.


Ich habe das raus gefunden, als ich mir mal die _QSQL000.DBF (also die QUERY2) Datei angesehen habe. Ich habe das Programm abgebrochen und dann die Datei geöffnet. Offenbar hat sich da was von 2007 auf die Version 2009 verändert oder 2007 hat es einfach ignoriert.

Gruss


Markus

_________________
Das Leben besteht aus Bits und Bytes - nur: wo laufen sie denn ????
Super ... Du kannst das zwar lesen, toll..... aber: völlig zwecklos !!!