![]() |
Datenbank: MySQL • Version: 4.1 • Zugriff über: Zeos
Datenbankfelder werden in datasource.onchange nicht gefunden
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. :gruebel: Das Feld existiert aber definitiv. Hat jemand ne Erklärung oder besser noch ne Lösung?? |
Re: Datenbankfelder werden in datasource.onchange nicht gefu
Schonmal debuggt und genau nachgesehen, wann es passiert?
|
Re: Datenbankfelder werden in datasource.onchange nicht gefu
Der Fehler muss in der Prozedur liegen.
Delphi-Quellcode:
Da bringt er mir ne Debugger Exception, dass das Feld "Farbe" nicht gefunden wird.
procedure Tfrmdata.dsauftragDataChange(Sender: TObject; Field: TField);
begin frmmain.Panel1.Color:=frmdata.tbstatus.FieldValues['farbe']; end; |
Re: Datenbankfelder werden in datasource.onchange nicht gefu
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. |
Re: Datenbankfelder werden in datasource.onchange nicht gefu
Hast du auf Grosskleinschreibung geachtet
|
Re: Datenbankfelder werden in datasource.onchange nicht gefu
Delphi-Quellcode:
keine Veränderung, auch mit ".fieldbyname" geht's nicht.
procedure Tfrmdata.dsauftragDataChange(Sender: TObject; Field: TField);
begin showmessage(inttostr(frmdata.tbstatus.FieldValues['farbe'])); //frmmain.Panel1.Color:=frmdata.tbstatus.FieldValues['farbe']; end; |
Re: Datenbankfelder werden in datasource.onchange nicht gefu
Zitat:
Delphi-Quellcode:
procedure Tfrmdata.dsauftragDataChange(Sender: TObject; Field: TField);
begin frmmain.Panel1.Color:= Field.AsInteger; end; |
Re: Datenbankfelder werden in datasource.onchange nicht gefu
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* |
Re: Datenbankfelder werden in datasource.onchange nicht gefu
@shmia
ich komm jetzt mit deiner Aussage grad nicht ganz klar. :gruebel: 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. |
Re: Datenbankfelder werden in datasource.onchange nicht gefu
Zitat:
Delphi-Quellcode:
procedure Tfrmdata.dsauftragDataChange(Sender: TObject; Field: TField);
begin if Field.FieldName='AStatus' then 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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:17 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz