Autor Beitrag
Stocki1990
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: Sa 13.06.09 12:39 
... konvertiert werden

Servus Leute!

Ich bins mal wieder und hab eine Frage an euch. Bevor ich euch diese Frage stelle wollte ich mich noch einmal bei euch für eure bisherigen Hilfen bedanken. Habe, seit dem ich im Forum bin, einiges dazu gelernt. Aber nun zu meinem Problem:

In meinem Programm muss in der Statusbar die Anzahl der ausgeliehenen Filme einer Person (Kunden-ID) ausgegeben werden. Bei Kunden, welche Filme ausgeborgt haben, ist dies kein Problem. Wähle ich jedoch einen Kunden ohne ausgeliehene Filme auf, taucht die Fehlermeldung "Variante des Typs (Null) konnte nicht in Typ (integer) konvertiert werden" auf.

Um mein Problem genauer zu verdeutlichen, habe ich 3 Screenshots gemacht. Moderiert von user profile iconNarses: Bilder als Anhang hochgeladen.

Ich habe schon einen Entwurf gemacht, um die Fehlermeldung zu vermeiden. Dazu hätte ich eine IF-Entscheidung verwendet, wie ihr hier sehen könnt:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
procedure Tform1.AnzahlFilme();
var
Anzahl: integer;

begin
AdoQuery1.close;
AdoQuery1.SQL.Clear;
AdoQuery1.sql.add('SELECT Verleih.KundenID, Count(Verleih.VerleihID) AS AnzahlDVD, Verleih.Rückgabezeit FROM Verleih GROUP BY Verleih.KundenID, Verleih.Rückgabezeit HAVING Verleih.KundenID = ' + inttostr(treeview1.Selected.stateindex) + ' AND Verleih.Rückgabezeit Is Null');
AdoQuery1.open;

Anzahl := Adoquery1.fieldvalues['AnzahlDVD'];

if Anzahl = null then begin
showmessage('Kein Film wurde ausgeborgt!');
end else begin
Statusbar1.Panels[0].Text := 'Ausgeliehene Filme: ' + inttostr(Anzahl);
end;

end;


Habe es schon mit mehreren Varianten probiert, doch keine scheint zu funktionieren. Ich hoffe, dass ihr mir hier weiterhelfen könnt.
Wie man in der Abfrage sehen kann, haben die ersten 3 Kunden Filme ausgeborgt. Bei dem 4ten jedoch tritt dann der Fehler auf.

Danke im Voraus
Christoph

PS: Bei diesem Projekt wären die SQL-Injections egal - Ist eine Hausübung in größerem Umfang
Einloggen, um Attachments anzusehen!
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Sa 13.06.09 14:40 
Kenn die Ado Komponenten nicht, aber im Prinzip müsste das genau so gehen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
if not AdoQuery1.IsEmpty then
begin
  // Daten verarbeiten.
end;


bzw.
ausblenden Delphi-Quelltext
1:
if not AdoQuery.FieldByName('AnzahlDVD').isNull then ...					

_________________
PROGRAMMER: A device for converting coffee into software.
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 13.06.09 14:58 
Eine Aggregatfuntion wie COUNT kann doch niemals NULL zurückgeben.
Stocki1990 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: Sa 13.06.09 15:20 
Servus Leute!

Danke für eure Hilfe - Nun funktioniert alles, wie es sein sollte.

Wünsche euch noch ein sonniges Wochenende
Christoph


Zuletzt bearbeitet von Stocki1990 am Sa 13.06.09 15:23, insgesamt 1-mal bearbeitet
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Sa 13.06.09 15:22 
Ja, weil du deiner Variablen AnzahlDVD in diesem Fall keinen Wert zuweist. In dem Fall steht dort ein zufälliger Wert drin.

_________________
PROGRAMMER: A device for converting coffee into software.
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 13.06.09 15:22 
Versuch es mal mit AdoQuery.EOF. Wenn kein Satz gefunden wird, ist die Datenmenge leer, dann steht auch kein NULL drin.
Stocki1990 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: Sa 13.06.09 15:23 
Danke für eure Hilfe - Haben uns da "geschnitten". Alles passt nun ;)