Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Die Anwendung verwendet für die akt. Vorgang einen Wert vom falschen Typ ? (https://www.delphipraxis.net/171506-die-anwendung-verwendet-fuer-die-akt-vorgang-einen-wert-vom-falschen-typ.html)

nachtstreuner 9. Nov 2012 10:33

Datenbank: SQL/ACCESS • Version: XE2 • Zugriff über: ADO

Die Anwendung verwendet für die akt. Vorgang einen Wert vom falschen Typ ?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Delphifreunde,

ich benötige mal wieder Eure Hilfe.

Ich bekomme beim Schließen eines Formulars folgende Fehlermeldung:

Die Anwendung verwendet für die akt. Vorgang einen Wert vom falschen Typ



Hier mal der Code-Schnipsel
Code:
//------------------------------------------------------------------------------
// Das Formular wird angezeigt
//------------------------------------------------------------------------------
procedure TfrmDLS_erstellen.FormShow(Sender: TObject);
begin
    ed_Versender.Text := Anmeldung.Vorname + ' ' + Anmeldung.Zuname;

    DataModul.ADOQueryFirma.SQL.Clear;
    DataModul.ADOQueryFirma.SQL.Text := 'SELECT * FROM DLS_Kunden order by Name asc' ;
    DataModul.ADOQueryFirma.Active := true;

    Ansprechzaehler := 0;
    DataModul.AdoQueryNRKreis.Active := true;
  end;
//----------------------------------------------------------------------------
// Das Formular soll über den Button (ENDE) geschlossen werden
//----------------------------------------------------------------------------
 procedure TfrmDLS_erstellen.AdvGlowButton5Click(Sender: TObject);
begin
  DataModul.AdoQueryNRKreis.active         := false;
  DataModul.AdoQuery_Ansprechpartner.active := false;
  DataModul.ADOQueryFirma.active           := false; // und genau an dieser Stelle kommt die Fehlermeldung
  frmDLS_erstellen.Close;
end;
//------------------------------------------------------------------------------
// Das Formular wird geschlossen
//------------------------------------------------------------------------------
procedure TfrmDLS_erstellen.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
 Action:=caFree;
 if self = frmDLS_erstellen then frmDLS_erstellen :=nil;
end;

Union 9. Nov 2012 10:38

AW: Die Anwendung verwendet für die akt. Vorgang einen Wert vom falschen Typ ?
 
Die Fehlermeldung wird bestimmt hier ausgelöst - also eine Zeile später!
Delphi-Quellcode:
frmDLS_erstellen.Close; // Ersetzen durch Close

nachtstreuner 9. Nov 2012 10:42

AW: Die Anwendung verwendet für die akt. Vorgang einen Wert vom falschen Typ ?
 
Hallo Union,

danke für die Antwort, leider nicht...

Habe die Änderung mal durchgeführt und getestet. Im Debugger wird die Fehlermeldung genau in der vomn mir beschriebenen Zeile ausgelöst
Code:
DataModul.ADOQueryFirma.active          := false; // und genau an dieser Stelle kommt die Fehlermeldung

Union 9. Nov 2012 10:51

AW: Die Anwendung verwendet für die akt. Vorgang einen Wert vom falschen Typ ?
 
Was passiert denn wenn Du im Datenmodul das SQL in die Query einträgst und zur Designzeit manuell Active änderst?

nachtstreuner 9. Nov 2012 11:06

GELÖST: Die Anwendung verwendet für die akt. Vorgang einen Wert vom falschen Typ ?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Union,

danke für den Hinweis. Ich habe soeben das Problem gelöst.

Die Ursache hierfür lag ganz woanderst, und möchte Euch auch die Lösung nicht vorenthalten
Hier der fehlerbehaftete Code:
Delphi-Quellcode:
//------------------------------------------------------------------------------
// Neue Anfrage, wenn Kunde gewechselt wird, Ansprechpartner aktualisieren
//------------------------------------------------------------------------------
procedure TfrmDLS_erstellen.DBEdit1Change(Sender: TObject);
begin
   With dataModul do begin
     if DBEdit14.Text <> '' then
        AdoQuery_Ansprechpartner.SQL.Clear;
        AdoQuery_Ansprechpartner.SQL.Text := 'SELECT * from DLS_KDAnsprech '+
        'WHERE DLS_KDAnsprech.KLFDNR = :sKLFDNR order by Name asc';

        AdoQuery_Ansprechpartner.Parameters.ParamByName('sKLFDNR').Value := DBEdit14.Text;
        AdoQuery_Ansprechpartner.Active := true;
     
   end;
end;
Nachdem der Befehl zum schliessen des Formulars kam, hatte das datensensitive Feld DBEdit14, keinen Wert mehr, wahr also leer.
Folglich musste die Abfrage darunter fehlschlagen. Die Selectabfrage konnte keinen Wert zurückliefern.

Den Code habe ich dann wie folgt geändert :

Delphi-Quellcode:
//------------------------------------------------------------------------------
// Neue Anfrage, wenn Kunde gewechselt wird, Ansprechpartner aktualisieren
//------------------------------------------------------------------------------
procedure TfrmDLS_erstellen.DBEdit1Change(Sender: TObject);
begin
   With dataModul do begin
     if DBEdit14.Text <> '' then begin                  // hier begin eingefügt
        AdoQuery_Ansprechpartner.SQL.Clear;
        AdoQuery_Ansprechpartner.SQL.Text := 'SELECT * from DLS_KDAnsprech '+
        'WHERE DLS_KDAnsprech.KLFDNR = :sKLFDNR order by Name asc';

        AdoQuery_Ansprechpartner.Parameters.ParamByName('sKLFDNR').Value := DBEdit14.Text;
        AdoQuery_Ansprechpartner.Active := true;
     end;                                               // hier end eingefügt

   end;
end;
Zur Veranschaulichung siehe Grafik unten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:51 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz