AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi subroutine laeuft nur auf dem entwickler-pc
Thema durchsuchen
Ansicht
Themen-Optionen

subroutine laeuft nur auf dem entwickler-pc

Ein Thema von y5kc · begonnen am 26. Jan 2014 · letzter Beitrag vom 27. Jan 2014
Antwort Antwort
Seite 1 von 2  1 2      
y5kc

Registriert seit: 4. Mai 2012
2 Beiträge
 
#1

subroutine laeuft nur auf dem entwickler-pc

  Alt 26. Jan 2014, 16:30
ein herzliches hallo an das forum!
ich bin neu hier - dies ist mein erster beitrag.
bin aber kein programmer-newbie ...

zuerst -natuerlich- vielen dank fuer die hilfe und die anregungen die ich seit jahren als anonymer besucher dieser/eurer seite bekommen habe!

aber dieses mal stehe ich richtig auf dem schlauch und hoffe auf eure einfaelle --> alles googlen hat bis jetzt nichts erbracht:
inmitten einer etwas umfangreicheren routine tue ich das:
...
Delphi-Quellcode:
  if (CompareDate(dp1.Date, date) < 0) then
  begin
    if led1.Text = 'then
    begin
      led1.ReadOnly := false;
      led1.Color := clWindow;
    end
    else
    begin
      led1.ReadOnly := true;
      led1.Color := clInfoBk;
    end;

   ... usw ....

    if led*n.Text = 'then ....
 
 end;
...
ich pruefe also, ob:
1. das ausgewaehlte datum (vcl-datetimepicker) aelter ist als heute, und
2. bestimmte felder (vcl-labeledit) leer sind (daten wurden vorher aus einer db geholt)
wenn beides zutrifft, sollen dieses leeren felder zum daten-eingeben wieder enabled werden.
wenn nicht, bleiben sie disabled und gelb.

und das waere jetzt das grosse wochenend-raetsel an das forum:
nur dieses kleine stueck code innerhalb der ganzen routine funktioniert lediglich(!) auf meinem entwickler-pc --> xp-sp3, delphi-xe2sp4, kein besonderes setup.
auf allen anderen test-pc mit xp-sp3, w7(32 & 64), s2003(32) und s2008r2(64) bleiben die entsprechenden felder immer(!) "disabled" und "clinfobk".
die gesamte software ansich laeuft fehler- & problemlos auf den genannten systemen --> nur halt diese kleine sub-sub-routine streikt.
hab's explizit fuer 32 compiliert, und auf den 64er-pc auch noch einmal per hand in den xp-modus gezwungen.

fuer jede noch so kleine idee, wo ich ansetzen muss/koennte, waere ich euch sehr dankbar!

ich wuensche noch einen schoenen sonntag an alle delphi-coder mit jagdinstinct ...
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#2

AW: subroutine laeuft nur auf dem entwickler-pc

  Alt 26. Jan 2014, 16:48
Um mal das Dümmste auszuschließen: Ist auf beiden Rechner das gleiche Datum eingestellt?
Vielleicht solltest du dir zur Überprüfung mal date ausgeben lassen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#3

AW: subroutine laeuft nur auf dem entwickler-pc

  Alt 26. Jan 2014, 17:43
Willkommen,

war dieses TDateTimePicker.Date nicht in einigen VCL-Versionen "defekt" und enthält auch die Uhrzeit?
Prüf mal, ob bei dir im .Date wirklich nur das Datum drin steckt, ansonsten ist der Vegleich von der Tageszeit abhängig.

Notfall einfach nochmal ein DateOf oder Trunc drumrum machen.


Zitat:
Delphi-Quellcode:
    if led1.Text = 'then
    begin
      led1.ReadOnly := false;
      led1.Color := clWindow;
    end
    else
    begin
      led1.ReadOnly := true;
      led1.Color := clInfoBk;
    end;
Schade, daß du kein Anfänger mehr bist, sonst hätte ich noch ein paar weitere Frage zum Code gestellt.

Wieso steckt dieser Code dann nicht in einer Procedur, wenn er doch "identich" mehrfach vorkommt?

Oder, warum kommt man nicht wenigstens auf die Idee, ihn zusammenzufassen, wenn man ihn dennoch mehrfach schreiben will?
Delphi-Quellcode:
    // 20%
    led1.ReadOnly := led1.Text <> '';
    led1.Color := IfThen(led1.Text = '', clWindow, clInfoBk);

    // oder zumindestens 50%
    led1.ReadOnly := led1.Text <> '';
    if led1.ReadOnly then
      led1.Color := clInfoBk
    else
      led1.Color := clWindow;
PPS:
Ich würde auch eher die versändlicheren Konstanten empfehlen, also = LessThanValue oder < EqualsValue , anstatt des < 0 .
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (26. Jan 2014 um 17:54 Uhr)
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#4

AW: subroutine laeuft nur auf dem entwickler-pc

  Alt 26. Jan 2014, 20:46
Die Rechtschreibregeln gelten für alle Nutzer!
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#5

AW: subroutine laeuft nur auf dem entwickler-pc

  Alt 26. Jan 2014, 22:18
Die Rechtschreibregeln gelten für alle Nutzer!
Und ich dachte immer, wer auf Rechtschreibfehler aufmerksam macht bzw. diese moniert, hat sonst nichts zu sagen.

Zum Code:
Theoretisch kann die Datenbank auch ' ' anstatt '' enthalten, sodaß der Vergleich auf '' eben fehlschlägt.

Du hast fürchterlich viel Redundanz in deinem Code, also Codestellen, die das gleiche machen, nur mit anderen Parametern. Das ist grausam und fehleranfällig (wie man sieht). Kürze das zusammen.

Delphi-Quellcode:
Procedure AdjustLedText (ledLabel : TLabel)
Begin
  if ledLabel.Text = 'then begin
    ledLabel.ReadOnly := false;
    ledLabel.Color := clWindow;
  end
  else begin
    ledLabel.ReadOnly := true;
    ledLabel.Color := clInfoBk;
  end
end;
Aufruf dann:
Delphi-Quellcode:
AdjustLedText(led1);
AdjustLedText(led2);
...
AdjustLedText(ledn);
Und wenn Du ganz pfiffig bist, packst Du alle 'ledx'-Labgel in ein Array und ...
Delphi-Quellcode:
if DateIsInThePast() then
  for led in ledLabel do
    AdjustLedText(led);
Ach und bei diesem 'DateIsInThePast()' weiß man ja, was es machen soll (geht aus dem Namen hervor).

Durch Refactoring eliminierst Du Fehler im Code, der sich eigentlich identisch verhalten soll. In deinem Fall wäre das ja so: Der Fehler kann also *nur* in den Daten liegen (Datum, ' ' statt '' etc.)

Übrigens: Irgendwie ist jeder Newbie. Irgendwie.
  Mit Zitat antworten Zitat
y5kc

Registriert seit: 4. Mai 2012
2 Beiträge
 
#6

AW: subroutine laeuft nur auf dem entwickler-pc

  Alt 27. Jan 2014, 06:49
hallo an alle, und vielen dank fuer eure ideen & antworten!

@ hathor
es tut mir leid. die deutsche rechtschreibung war noch nie meine staerke, weil nicht meine muttersprache.
werde mir aber heute gleich ein keyboard mit deutschem layout (= ein zeicheneingabegeraet mit deutscher tastaturbelegung) und integrierter auto-korrektur kaufen ...

@ bug
der ist richtig klasse
aber: geprueft --> negative ...

@ himitsu & furtbichler
vielen dank fuer die code-tips!
code-optimierung ist aber immer erst mein letzter schritt vor den finalen release-tests --> hat mich das leben schmerzvoll gelehrt ...
alles andere habe ich auch schon geprueft/getestet, bevor ich mich an euch/das forum gewandt hatte.
"Theoretisch kann die Datenbank auch ' ' anstatt '' enthalten, sodaß der Vergleich auf '' eben fehlschlägt."
das auch --> geprueft --> negative. wuerde aber auch keinen sinn machen, weil: see next:

ich fasse das eigentliche problem noch mal kurz zusammen.
alle (test-)maschinen (xp-sp3, w7(32 & 64), s2003(32) und s2008r2(64) ) greifen auf die gleiche db(=daten) zu und laufen auf dem gleichen datetimestamp wie mein delphi-pc.
und alles laeuft ueberall ohne problem genauso wie geplant und gecoded.
nur eben diese kleine unterroutine, die lediglich ein paar edit-felder enablen soll, funktioniert nur(!!!) auf meinem delphi-pc.
und das ist doch wirklich komisch, oder?
  Mit Zitat antworten Zitat
v2afrank

Registriert seit: 9. Mai 2005
Ort: Bocholt
573 Beiträge
 
Delphi XE2 Professional
 
#7

AW: subroutine laeuft nur auf dem entwickler-pc

  Alt 27. Jan 2014, 07:25
Ich würde mir in Deinem Fall auf jeden Fall zu debugzwecken die werte von
dp1.Date, date und led1.Text ausgeben lassen.
Am besten auch noch nach dem Datumsvergleich eine Messagebox
Delphi-Quellcode:
  if (CompareDate(dp1.Date, date) < 0) then
  begin
    MessageDlg('Datumsüberprüfung ist in Ordnung', mtWarning, [mbOK], 0);
    if led1.Text = 'then
    begin
Dadurch kannst Du ja womöglich das Datum schon mal ausschließen. Und lass Dir wie schon gesagt die beiden Datumswerte auch anzeigen.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: subroutine laeuft nur auf dem entwickler-pc

  Alt 27. Jan 2014, 07:29
Hallo,

wie wäre es mit ein paar MessageBox-Logs,
um zu sehen, warum er nicht das macht, was er soll.

Zur Anzeige FormatDateTime('dd.mm.yyyy nn:mm:ss, date) verwenden

if (CompareDate(dp1.Date, date) < 0) then ändere das mal in

if (CompareDate(DateOf(dp1.Date), date) < 0) then Bekommst du beim Compilieren Warnungen angezeigt ?
Benutzt du wirklich die gleiche Exe, oder ist das auf den anderen Rechnern die Release-Version ?

Unter Latex würde ich jetzt mal ein Minimalbeispiel-Projekt erzeugen,
was den Fehler eindeutig reproduzierbar macht,
also ohne DB und nur genau das fehlerhafte Stück Code.
Dann her damit ...



Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#9

AW: subroutine laeuft nur auf dem entwickler-pc

  Alt 27. Jan 2014, 10:59
Also das hattest du schonmal gemacht?
Delphi-Quellcode:
ShowMessage( // oder in Logdatei
  FormatDateTime('dd.mm.yyyy hh:mm:ss.zzz', dp1.Date) + sLineBreak +
  FormatDateTime('dd.mm.yyyy hh:mm:ss.zzz', Date) + sLineBreak +
  FloatToStr(dp1.Date - Date) + ' = ' + IntToStr(CompareDate(dp1.Date, Date)));
if CompareDate(dp1.Date, Date) < 0 then
begin
  ...



code-optimierung ist aber immer erst mein letzter schritt vor den finalen release-tests --> hat mich das leben schmerzvoll gelehrt ...
Och, wenn man schonmal dabei ist.

Schmerzvoll?
Nja, wenn man damit rechtzeitig anfängt, dann gestaltet sich auch das Entwickeln und das Testen einfacher und schneller.
Immerhin hat man da weniger Code

Optimierungen, welche massig "mehrfachen" Code zusammenfassen, aber vorallem "übersichtlicher" gestalten, bringen weniger/einfacheren/ünersichtlicheren Code,
womit man dann auch weniger Code testen muß.
Und man könnte für diese AdjustLedText oder DateIsInThePast sogar einen UnitTest schreiben, damit ist es dann doch perfekt und es gibt niewieder Fehler.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (27. Jan 2014 um 11:03 Uhr)
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#10

AW: subroutine laeuft nur auf dem entwickler-pc

  Alt 27. Jan 2014, 11:11
Wenn Du schon mit Umlauten Schwierigkeiten hast und ohne deutsche Tastatur arbeitest:
Ist Dein System und Dein Datenbankclient sauber auf deutsche Umgebung eingestellt? Bzw. wie ist es bei den anderen Systemen, auf denen es nicht geht?
Schau mal, ob du mit einem externen "3." Programm auf den Systemen reproduzierbare Datumswerte eingeben und auslesen kannst.
Sind es alles deutsche Windows Systeme? Bzw. unterscheidet sich das bei Deinem System?
Egal, ob es geht oder nicht. Wie werden die DB client Setups und ihre lokalisierung konfiguriert. Macht das jeder wie er mag oder gibt es ein definiertes Vorgehen?
Wie sind die Ländereinstellungen OS seitig festgelegt? Gibt es Unterschiede auf den Systemen?
Gruß, Jo
  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 17:19 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