![]() |
if Anweisung zur Laufzeit ändern?
Also meine Frage,
Delphi-Quellcode:
Die Einsatznummer ändern sich ja immer wieder zur Laufzeit! Was nun? Hat einer eine Idee?
var
Wert: string; begin if (CRDBGrid2.DataSource.DataSet.RecordCount = 0) then Exit; Wert := CRDBGrid2.DataSource.DataSet.FieldByName('Einsatznummer').Value; if Wert = '???' then begin // hier ist mein Problem! Die Einsatznummer änder sich ja! Also kann ich keinen festen Wert bestimmen! |
AW: if Anweisung zur Laufzeit ändern?
Ich versteh das Problem nicht. Irgendwo kommt die Nummer ja her bzw. ist irgendwo in deinem Programm bekannt. Speicher die in eine Variable und Vergleiche in deiner If-Anweisung Wert mit dieser Variable.
Was im Zweifel immer funktioniert ist if wert = wert then begin... Achja. Da wert ja ein String ist, dann nimm doch auch ...FieldByName("blub").AsString |
AW: if Anweisung zur Laufzeit ändern?
Selbst mit der besten Glaskugel läßt sich Deine Frage nicht beantworten...
Was willst Du den abtesten? Mavarik |
AW: if Anweisung zur Laufzeit ändern?
OK! :-)
Wenn ich zur Laufzeit einen neuen Einsatz eröffne, wird eine neue Einsatznummer erstellt! (Datenbank) Jetzt zur if Anweisung: (ist die Einsatznummer so und so), and ,(das Einsatzfahrzeug hat einen Wert von '3') then ergibt das den Wert = 'ausgerückt' in der Datenbank! __________________________________________________ __________________________________________________ ________ Ist der Wert im DBGrid ausgerückt, färbt sich die Zeile rot! Es darf sich aber nur die Zeile färben die die Einsatznummer hat! (und nicht alle Einsätze) Vielleicht jetzt verständlich? Oder noch nicht? |
AW: if Anweisung zur Laufzeit ändern?
Zitat:
|
AW: if Anweisung zur Laufzeit ändern?
Na wenn die Einsatznummer neu erstellt wurde, dann hast Du doch die Einsatznummern...
Mavarik |
AW: if Anweisung zur Laufzeit ändern?
Zitat:
|
AW: if Anweisung zur Laufzeit ändern?
Ist bestimmt ganz einfach!
Ich denke nur zu kompliziert! Ach hier die Einfärbung rot!
Delphi-Quellcode:
__________________________________________________ __________________________________________________ ___procedure TForm1.CRDBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); var i : Integer; Wert: string; begin if (CRDBGrid1.DataSource.DataSet.RecordCount = 0) then Exit; Wert := CRDBGrid1.DataSource.DataSet.FieldByName('Zuordnung').Value; if Wert = 'ausgerückt' then begin CRDBGrid1.Canvas.Brush.Color := clred; CRDBGrid1.Canvas.Font.Color := clblack; end else if Wert = '0 Eingang' then begin CRDBGrid1.Canvas.Brush.Color := clyellow; CRDBGrid1.Canvas.Font.Color := clblack; end else if Wert = 'Bearbeitung' then begin CRDBGrid1.Canvas.Brush.Color := clFuchsia; CRDBGrid1.Canvas.Font.Color := clblack; end else if Wert = 'Vor Ort beendet' then begin CRDBGrid1.Canvas.Brush.Color := cllime; CRDBGrid1.Canvas.Font.Color := clblack; end else begin end; CRDBGRid1.DefaultDrawColumnCell(Rect, DataCol, Column, State); begin CRDBGRid1.DefaultDrawColumnCell(Rect, DataCol, Column, State); if (gdSelected in State) then begin // Form1.CRDBGrid1.Canvas.Brush.Color := clSilver; // Form1.CRDBGrid1.Canvas.Font.Color:=clblack; end; form1.crDBGrid1.Canvas.FillRect(Rect); form1.crDBGrid1.Canvas.TextOut(Rect.Left + 2, Rect.Top + 1, Column.Field.AsString); begin with MyTable1 do for i := 5 to Pred(Fields.Count) do Fields[i].DisplayWidth := 255; end; end; end; Die Einsatznummer wird abgeholt, aus einem Memo!
Delphi-Quellcode:
procedure TForm1.AdvGlowButton28Click(Sender: TObject);
begin DBEdit9.Text := Copy(DBMemo3.Text, Length(DBMemo3.Text)-9, 10); end; |
AW: if Anweisung zur Laufzeit ändern?
Und was ist wenn mehrere Einsatzfahrzeuge zur gleichen Zeit ausgerückt sind?
Dann sollten doch alle rot markiert werden, oder nicht? Somit wäre schon der Ansatz die Einsatznummer abzufragen falsch. Du musst schlichtweg den Status des Fahrzeugs abfragen um den Datensatz im DBGrid die gewünschte Farbe zu geben. Ausserdem hast du zu wenig Statuswerte. Ein Einsatzfahrzeug kann auch "verunfallt" sein. |
AW: if Anweisung zur Laufzeit ändern?
Zitat:
Es reicht wenn ein Fahrzeug ausrückt! Wenn ein Fahrzeug disponiert ist, und nicht ausrückt(Status3) gibt ein (Timer) Alarm! Du musst schlichtweg den Status des Fahrzeugs abfragen??? // Was machst Du wenn Du drei unterschiedliche Einsätze hast? Nur eine Status abfrage geht nicht? Oder? |
AW: if Anweisung zur Laufzeit ändern?
Zitat:
|
AW: if Anweisung zur Laufzeit ändern?
Tu dir selbst einen Gefallen, und benenne deine Controls vernünftig. Das ist ja grausig so!
|
AW: if Anweisung zur Laufzeit ändern?
Duz sagst immer du willst etwas Lernen, berücksichtigst aber nicht die einfachsten Tipps. Zu wurdest schon öfterst ( eigentlich bei jeder deiner Fragen) auf die Bedeutung des Parameters Sender hingeweisen und das dieser der Verwendung einer festen Objektreferenz vorzuziehen ist. Trotzdem verendest du das jedesmal wieder ( CRDBGrid1)!
Kommen weitere Werte hinzu und soll dann auf diese Werte später besonderst reagiert werden, dann nomalisiere diese in der Datenbank und lege dort auch das Verhalten ab. Z.B. Tabelle Zuordnung (oder Phase) ID Bez Hintergrund Schrift 1 'ausgerückt' #FF0000 #000000 0 '0 Eingang' ... In der abgefragten Tabelle dann statt dem Text die ID auf die Zuordnungstabelle (FK) und bei der Abfrage die Farben hinzujoinen Zitat:
|
AW: if Anweisung zur Laufzeit ändern?
OK, bin ein wenig schlampig!
Auch wenn es nervig ist, noch eine Zwischenfrage! Was ist hier falsch?
Delphi-Quellcode:
Frage:
procedure TForm1.Timer6Timer(Sender: TObject);
begin if (MyTAble1.FieldByName('Einsatznummer').Value) = (MyTAble3.FieldByName('Einsatznummer').Value) then begin ShowMessage('Test'); end; end; Ist die Einsatznummer aus DB1 = wie Einsatznummer DB2 dann ShowMessage! Keine Fehlermeldung Quelltext sauber! geht aber nicht? |
AW: if Anweisung zur Laufzeit ändern?
...Fehlermeldung/Was passiert (nicht)? Sag mal, so neu bist du doch hier nicht, dass man dir noch das Fragen beibringen muss oder?
|
AW: if Anweisung zur Laufzeit ändern?
Vielleicht Leerzeichen in den Feldern?
Delphi-Quellcode:
if Trim(MyTAble1.FieldByName('Einsatznummer').Value) = Trim(MyTAble3.FieldByName('Einsatznummer').Value) then
begin ShowMessage('Test'); end; |
AW: if Anweisung zur Laufzeit ändern?
Geht jetzt! Ich Blödmann
Delphi-Quellcode:
[/DELPHI]
[DELPHI]
procedure TForm1.Timer6Timer(Sender: TObject); begin if (MyTAble1.FieldByName('Einsatznummer').Text) = (MyTAble3.FieldByName('Einsatznummer').Text) then begin ShowMessage('Test'); end; end; |
AW: if Anweisung zur Laufzeit ändern?
Delphi-Quellcode:
Es wäre etwas sicherer statt dieser String-Werte, etwas numerisches zu nutzen.
if Wert = 'ausgerückt' then begin
if Wert = '0 Eingang' then begin if Wert = 'Bearbeitung' then begin if Wert = 'Vor Ort beendet' then begin Falls es z.B. eine Ländercodedifferenz zwischen DB und Client geben sollte, könnte da nur noch datentechnischer Hackepeter übrig bleiben. ob Mkinzler's Vorschlag der optimale ist, darüber mag man diskutieren. Aber das Prinzip ist richtig, und das solltest Du tunlichst beherzigen, auch wenn Du "etwas schlampig" bist. Gruß K-H |
AW: if Anweisung zur Laufzeit ändern?
Man kann sich darüber Streiten ob die Farben zu den Phasen gehören, ja. Aber das Datenbankschema sieht für mich auch unabhängig von den Anzeigenfarben recht "unnormalisiert" aus.
|
AW: if Anweisung zur Laufzeit ändern?
Ich dachte eher an die Texte, aber was soll's, die Grundlagen sind doch sehr lückenhaft.
Gruß K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:24 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