![]() |
Datenbank: unbekannt • Zugriff über: unbekannt
Allgemeine Verständnisfrage (Feld durchsuchen)
Hallo DB-Profis,
ich habe eine allgemeine Verständnisfrage, vielleicht kann sie ja beantwortet werden. Für eine Kalender-Componente benötige ich eine 'wie auch immer' Datenbankanbindung. Also eine DataSource und ein DataField. Das dazu gehörige Event DateChange sieht bisher so aus:
Delphi-Quellcode:
FDates ist ein Array of TDateTime und wird bei jedem Monatswechsel auf 31 gesetzt.
procedure TDBCalendarControl.DataChange(Sender: TObject);
var DT : TDateTime; Y1, Y2, M1, M2, D1, D2 : Word; begin if FDataLink.Field <> nil then begin if IsDateTimeField then DT := Trunc(FDataLink.Field.AsDateTime) else DT := Trunc(FDataLink.Field.AsDateTime); DecodeDate(DT, Y1, M1, D1); DecodeDate(FDate, Y2, M2, D2); if (Y1 = Y2) and (M1 = M2) then FDates[D1] := DT; Invalidate; end; end; In der procedure Paint erfolgt dann die Auswertung. Ein 'Fehler' hat diese Vorgehensweise jedoch; Ich kann nur den aktuellen Datensatz auslesen. Wie müsste ich also vorgehen um alle in Frage kommenden Werte auszulesen, ohne auf die DB speziell einzugehen?. Gruss Alter Mann |
Re: Allgemeine Verständnisfrage (Feld durchsuchen)
Hallo Alter Mann,
die datensensitiven Controls beziehen sich immer auf eine bestimmte Spalte im aktuellen Datensatz. Auf was soll sich denn deine Komponente TDBCalendarControl beziehen? Mir scheint du hast da ein Design-Problem. Nachdenkliche Grüße |
Re: Allgemeine Verständnisfrage (Feld durchsuchen)
Du möchtest also mehrere Datensätze gleichzeitig visualisieren?
So wie das DBGrid mehrere Datensätze (scheinbar gleichzeitig) anzeigt, soll das TDBCalendarControl alle Termine anzeigen? Das wird nicht einfach! Schau dir mal die Unit Dbgrids an; du benötigt ungefähr den gleichen Aufwand. Im Prinzip geht das so: TDataSet.State wird auf dsBlockRead geschaltet und das Control fährt alle Datensätze ab. Alle anderen datensensitiven Controls bekommen davon nichts mit, da die Events in diesen State abgeschaltet sind. |
Re: Allgemeine Verständnisfrage (Feld durchsuchen)
Hi,
danke für die Antworten. @marabu Ist das DataField nicht eine Spalte? @shmia Die Idee mit dem DBGrid hört sich gut an, vielleicht läst sich ja daraus was machen. Gruss |
Re: Allgemeine Verständnisfrage (Feld durchsuchen)
Hallo,
es ist vollbracht und der Aufwand war 'nicht' so hoch:
Delphi-Quellcode:
Nochmals Danke.
TDBCalendarControl = class(TCalendarControl)
private FDataLink : TFieldDataLink; FMaxRecords : Integer; procedure DataChange(Sender: TObject); ... protected procedure LoadDatesForMonth; ... procedure TDBCalendarControl.DataChange(Sender: TObject); begin if (FDataLink.Field <> nil) and not FDataLink.DataSourceFixed then begin if FMaxRecords <> FDataLink.DataSet.RecordCount - 1 then begin FMaxRecords := FDataLink.DataSet.RecordCount - 1; FDataLink.DataSourceFixed := True; LoadDatesForMonth; end; end; end; procedure TDBCalendarControl.LoadDatesForMonth; var I : Integer; DT : TDateTime; Y1, Y2, M1, M2, D1, D2 : Word; begin FDataLink.DataSet.First; for I := 0 to FDataLink.DataSet.RecordCount - 1 do begin if IsDateTimeField then DT := Trunc(FDataLink.Field.AsDateTime) else DT := Trunc(FDataLink.Field.AsDateTime); DecodeDate(DT, Y1, M1, D1); DecodeDate(FDate, Y2, M2, D2); if (Y1 = Y2) and (M1 = M2) then FDates[D1] := DT; FDataLink.DataSet.Next; end; Invalidate; FDataLink.DataSourceFixed := False; end; Gruss Alter Mann |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02: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