Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   if Anweisung zur Laufzeit ändern? (https://www.delphipraxis.net/170361-if-anweisung-zur-laufzeit-aendern.html)

Alterauge 13. Sep 2012 10:13

if Anweisung zur Laufzeit ändern?
 
Also meine Frage,

Delphi-Quellcode:
   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!
Die Einsatznummer ändern sich ja immer wieder zur Laufzeit! Was nun? Hat einer eine Idee?

Jumpy 13. Sep 2012 10:19

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

Mavarik 13. Sep 2012 10:19

AW: if Anweisung zur Laufzeit ändern?
 
Selbst mit der besten Glaskugel läßt sich Deine Frage nicht beantworten...

Was willst Du den abtesten?

Mavarik

Alterauge 13. Sep 2012 10:41

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?

Medium 13. Sep 2012 10:45

AW: if Anweisung zur Laufzeit ändern?
 
Zitat:

Zitat von Alterauge (Beitrag 1182727)
(ist die Einsatznummer so und so), and ,(das Einsatzfahrzeug hat einen Wert von '3') then

Das rote wäre der interessante Teil. Wo kommt der her, und was sagt er aus? Wann wird der gemacht, wer macht den?

Mavarik 13. Sep 2012 10:46

AW: if Anweisung zur Laufzeit ändern?
 
Na wenn die Einsatznummer neu erstellt wurde, dann hast Du doch die Einsatznummern...

Mavarik

mkinzler 13. Sep 2012 10:51

AW: if Anweisung zur Laufzeit ändern?
 
Zitat:

Achja. Da wert ja ein String ist, dann nimm doch auch ...FieldByName("blub").AsString
Warum sollte man den String zuerst in einen String konvertieren? .as<Typ> ist ein Cast und deshalb überflüssig!

Alterauge 13. Sep 2012 10:52

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;

shmia 13. Sep 2012 10:55

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.

Alterauge 13. Sep 2012 11:01

AW: if Anweisung zur Laufzeit ändern?
 
Zitat:

Zitat von shmia (Beitrag 1182739)
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.


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?

Jumpy 13. Sep 2012 11:02

AW: if Anweisung zur Laufzeit ändern?
 
Zitat:

Zitat von mkinzler (Beitrag 1182735)
Zitat:

Achja. Da wert ja ein String ist, dann nimm doch auch ...FieldByName("blub").AsString
Warum sollte man den String zuerst in einen String konvertieren? .as<Typ> ist ein Cast und deshalb überflüssig!

Die Variable Wert ist ja ein String. Das Feld in der BB hieß aber irgendwas mit Nummer. Hätte ja sein können, dass das in der DB ein numerisches Feld ist. Macht dann .Value einen automatischen Cast oder knallt das dann?

Medium 13. Sep 2012 11:02

AW: if Anweisung zur Laufzeit ändern?
 
Tu dir selbst einen Gefallen, und benenne deine Controls vernünftig. Das ist ja grausig so!

mkinzler 13. Sep 2012 11:02

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:

Tu dir selbst einen Gefallen, und benenne deine Controls vernünftig. Das ist ja grausig so!
Das ist auch eine Sache, die man ihm in jedem seiner Fragen sagt.

Alterauge 13. Sep 2012 11:29

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:
procedure TForm1.Timer6Timer(Sender: TObject);
begin
if (MyTAble1.FieldByName('Einsatznummer').Value) = (MyTAble3.FieldByName('Einsatznummer').Value)  then begin
  ShowMessage('Test');
end;
end;
Frage:
Ist die Einsatznummer aus DB1 = wie Einsatznummer DB2 dann ShowMessage!
Keine Fehlermeldung Quelltext sauber! geht aber nicht?

Medium 13. Sep 2012 11:31

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?

mkinzler 13. Sep 2012 11:39

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;

Alterauge 13. Sep 2012 11:40

AW: if Anweisung zur Laufzeit ändern?
 
Geht jetzt! Ich Blödmann

Delphi-Quellcode:
[DELPHI]
procedure TForm1.Timer6Timer(Sender: TObject);
begin
if (MyTAble1.FieldByName('Einsatznummer').Text) = (MyTAble3.FieldByName('Einsatznummer').Text)  then begin
  ShowMessage('Test');
end;
end;
[/DELPHI]

p80286 13. Sep 2012 11:53

AW: if Anweisung zur Laufzeit ändern?
 
Delphi-Quellcode:
if Wert = 'ausgerückt' then begin
if Wert = '0 Eingang' then begin
if Wert = 'Bearbeitung' then begin
if Wert = 'Vor Ort beendet' then begin
Es wäre etwas sicherer statt dieser String-Werte, etwas numerisches zu nutzen.
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

mkinzler 13. Sep 2012 11:56

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.

p80286 13. Sep 2012 12:44

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