AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Datenbankfelder werden in datasource.onchange nicht gefunden
Thema durchsuchen
Ansicht
Themen-Optionen

Datenbankfelder werden in datasource.onchange nicht gefunden

Ein Thema von buyden · begonnen am 24. Feb 2005 · letzter Beitrag vom 7. Mär 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von buyden
buyden

Registriert seit: 10. Apr 2003
Ort: Schneeberg
228 Beiträge
 
Delphi 7 Enterprise
 
#1

Datenbankfelder werden in datasource.onchange nicht gefunden

  Alt 24. Feb 2005, 14:32
Datenbank: MySQL • Version: 4.1 • Zugriff über: Zeos
Hi,

Ich habe einen für mich nicht erklärbaren Effekt bei einer Prozedur in einem Datamodule.
Ich habe versucht in dem OnDataChange-Ereignis einer Datasource einen Wert aus einer, von der Datasource unabhängigen Tabelle auszulesen. Beim Compilieren bekomme ich aber jedesmal ne Fehlermeldung, das das Feld nicht gefunden werden konnte. Das Feld existiert aber definitiv.
Hat jemand ne Erklärung oder besser noch ne Lösung??
Es gibt keine dummen Fragen, außer die von mir


MFG BUYDEN
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.337 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Datenbankfelder werden in datasource.onchange nicht gefu

  Alt 24. Feb 2005, 14:39
Schonmal debuggt und genau nachgesehen, wann es passiert?
Peter
  Mit Zitat antworten Zitat
Benutzerbild von buyden
buyden

Registriert seit: 10. Apr 2003
Ort: Schneeberg
228 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Datenbankfelder werden in datasource.onchange nicht gefu

  Alt 24. Feb 2005, 14:56
Der Fehler muss in der Prozedur liegen.

Delphi-Quellcode:
procedure Tfrmdata.dsauftragDataChange(Sender: TObject; Field: TField);
begin
  frmmain.Panel1.Color:=frmdata.tbstatus.FieldValues['farbe'];
end;
Da bringt er mir ne Debugger Exception, dass das Feld "Farbe" nicht gefunden wird.
Es gibt keine dummen Fragen, außer die von mir


MFG BUYDEN
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.337 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Datenbankfelder werden in datasource.onchange nicht gefu

  Alt 24. Feb 2005, 15:04
Wenn du ganz sicher bist, dass das Feld existiert, kann ich nur vermuten, dass die Variant-Übergabe an color nicht funktioniert.
2 Versuche:
Lass dir den Inhalt des Feldes mal mit einem ShowMessage an dieser Stelle ausgeben, wenn das geht.
Bekommst du was angezeigt, solltest du die Übergabe mal mit TColor(FieldByName('farbe').AsInteger) probieren.
Peter
  Mit Zitat antworten Zitat
franktron

Registriert seit: 11. Nov 2003
Ort: Oldenburg
1.446 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#5

Re: Datenbankfelder werden in datasource.onchange nicht gefu

  Alt 24. Feb 2005, 15:07
Hast du auf Grosskleinschreibung geachtet
Frank
Tux sein Lieblingsquellcode
While anzfische<TuxSatt do begin
Fisch:=TFisch.Create; Tux.EssenFisch(Fisch); Fisch.Free;inc(anzfische); end;
  Mit Zitat antworten Zitat
Benutzerbild von buyden
buyden

Registriert seit: 10. Apr 2003
Ort: Schneeberg
228 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Datenbankfelder werden in datasource.onchange nicht gefu

  Alt 24. Feb 2005, 15:11
Delphi-Quellcode:
procedure Tfrmdata.dsauftragDataChange(Sender: TObject; Field: TField);
begin
  showmessage(inttostr(frmdata.tbstatus.FieldValues['farbe']));
  //frmmain.Panel1.Color:=frmdata.tbstatus.FieldValues['farbe'];
end;
keine Veränderung, auch mit ".fieldbyname" geht's nicht.
Es gibt keine dummen Fragen, außer die von mir


MFG BUYDEN
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#7

Re: Datenbankfelder werden in datasource.onchange nicht gefu

  Alt 24. Feb 2005, 15:14
Zitat von buyden:
Der Fehler muss in der Prozedur liegen.
Delphi-Quellcode:
procedure Tfrmdata.dsauftragDataChange(Sender: TObject; Field: TField);
begin
  frmmain.Panel1.Color:=frmdata.tbstatus.FieldValues['farbe'];
end;
Genau so ist es. Rat mal, warum der Parameter Field übergeben wird:
Delphi-Quellcode:
procedure Tfrmdata.dsauftragDataChange(Sender: TObject; Field: TField);
begin
  frmmain.Panel1.Color:= Field.AsInteger;
end;
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.337 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Datenbankfelder werden in datasource.onchange nicht gefu

  Alt 24. Feb 2005, 15:19
Man müsste doch trotzdem auf die andere Art auf die Felder zugreifen können. Auch, wenn es das Feld ist, dass sich gerade ändert.
Aber du hast schon recht. Wenn das Feld übergeben wird, kann man es ja auch benutzen. da hatte ich wohl ein Brett vor dem Kopf. *ganzintensivbrilleputzen*
Peter
  Mit Zitat antworten Zitat
Benutzerbild von buyden
buyden

Registriert seit: 10. Apr 2003
Ort: Schneeberg
228 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Datenbankfelder werden in datasource.onchange nicht gefu

  Alt 24. Feb 2005, 15:23
@shmia

ich komm jetzt mit deiner Aussage grad nicht ganz klar.
Der Sinn meiner Prozedur ist es, wenn sich in einem bestimmten Feld der tabelle auftrag etwas ändert, soll die Farbe des Panels, die in der verknüpften Tabelle status steht, geändert werden.
Es gibt keine dummen Fragen, außer die von mir


MFG BUYDEN
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#10

Re: Datenbankfelder werden in datasource.onchange nicht gefu

  Alt 24. Feb 2005, 16:28
Zitat von buyden:
@shmia
ich komm jetzt mit deiner Aussage grad nicht ganz klar.
Der Sinn meiner Prozedur ist es, wenn sich in einem bestimmten Feld der tabelle auftrag etwas ändert, soll die Farbe des Panels, die in der verknüpften Tabelle status steht, geändert werden.
Also eher so:
Delphi-Quellcode:
procedure Tfrmdata.dsauftragDataChange(Sender: TObject; Field: TField);
begin
   if Field.FieldName='AStatusthen
   begin
      // in einem ganz bestimmten Feld (Name hier: 'AStatus') hat sich was geändert
      // jetzt müssen wir eine "Lookup" Aktion durchführen
      //

      Assert(tbstatus.Active); // Tabelle muss offen sein, sonst geht nix

      (*
      * Wichtig !!!
      * wenn man sich in der Klasse Tfrmdata befindet, darf man nicht auf frmdata
      * zugreifen.
      * dies kann ganz schwer zu findende Fehler verursachen
       *)


      // suche in Tabelle tbstatus nach dem passenden Datensatz
      if tbstatus.Locate('IdStatus', Field.Value) then
      begin
         // zusatztest:
         if tbstatus.FindField('farbe') = nil then
             ShowMessage('Feld farbe nicht vorhanden!'#13#10+
                 tbstatus.FieldList.Text); // alle vorhandenen Felder anzeigen


         // Suche war erfolgreich, also Farbe übernehmen
         frmmain.Panel1.Color:=tbstatus.FieldByName('farbe').AsString;

      end
      else
         frmmain.Panel1.Color:=clRed;
   end;
end;
Andreas
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:21 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