| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SolidEdge |
Autor
|
Thema: Abgerundetes Datum mit VB (370 mal gelesen)
|
Lemurian Mitglied
Beiträge: 95 Registriert: 20.11.2002 PROCIM Systemtechnik GmbH
|
erstellt am: 26. Jun. 2004 12:59 <-- editieren / zitieren --> Unities abgeben:
Hallo, Ich habe einige Problemchen in SE V15 mit den Benutzerdefinierten Datei-Eigenschaften. Wenn ich mir eine Eigenschaft anlege wie bspw. "Bearbeitungsdatum" dieser den typ date verpasse und den Wert dieser Eigenschaft über VB6 auslese oder ändere, wird das eingetragene Datum permanent einen Tag zurückgesetzt. ---------------------------------------------- Dim SEApp As SolidEdgeFramework.Application Dim SEADoc As SolidEdgeDraft.DraftDocument Dim SEPropS As PropertySets Dim SEProp As Properties ---------------------------------------------- Private Sub Form_Load() Dim i As Long Set SEApp = GetObject(, "SolidEdge.Application") If SEApp.ActiveDocument.Type <> igDraftDocument Then MsgBox "Dieses Makro arbeitet nur mit einem Draft-Dokument zusammen." Else Set SEADoc = SEApp.ActiveDocument Set SEPropS = SEADoc.Properties Set SEProp = SEPropS.Item("Custom") End If End Sub ---------------------------------------------- Private Sub cmdRD_Click() 'liest Datum Dim i As Long For i = 1 To SEProp.Count If SEProp.Item(i).Name = "Bearbeitungsdatum" Then Form1.txtDate.Text = SEProp.Item(i).Value i = SEProp.Count End If Next i End Sub --------------------------------------------- liest mir das richtige Datum aus (26.06.2004) in der überwachung steht auch das richtige Datum drin. Schaue ich aber in die Dateieigenschaften der draft, in die ich das aktuelle datum mit now() reingeschrieben habe, steht dort der 25.06.2004 Da passt doch was nicht zusammen? An welcher Stelle rundet denn hier wer und wiso ab ?? Danke Lemmi [Diese Nachricht wurde von Lemurian am 26. Jun. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Arne Peters Ehrenmitglied V.I.P. h.c. CAD Dokumentation / Training / Programmierung / Datenbanken
Beiträge: 7321 Registriert: 05.2002.24 Solid Edge Seminarunterlagen Training, Beratung, Programmierung
|
erstellt am: 26. Jun. 2004 13:38 <-- editieren / zitieren --> Unities abgeben: Nur für Lemurian
Hab ich auch festgestellt und den Grund leider nicht gefunden. Ich denke das muß ein Fehler in der API sein. Zu runden gibt es da ja nix, da das Datum der ganzzahlige Anteil ist. ------------------ APeters@BSS-Online.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
modeng Ehrenmitglied V.I.P. h.c.
Beiträge: 7061 Registriert: 10.12.2003
|
erstellt am: 26. Jun. 2004 16:12 <-- editieren / zitieren --> Unities abgeben: Nur für Lemurian
Moin, sehr wahrscheinlich wird intern auf absolutes datum konvertiert (fuer datumsberechnungen) und das waere fuer den 26 der Tag = 731760 bzw. der 178. Tag im Jahr. Moeglich das in V15 vergessen wird das 2004 ein Schaltjahr ist. Test: PC-datum auf ein datum vor dem 28.2.2004 oder auf das Jahr 2005 setzten und dann sehen was rauskommt. In V14 keine Probleme. Klaus
[Diese Nachricht wurde von modeng am 26. Jun. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lemurian Mitglied
Beiträge: 95 Registriert: 20.11.2002 PROCIM Systemtechnik GmbH
|
erstellt am: 26. Jun. 2004 17:14 <-- editieren / zitieren --> Unities abgeben:
|
modeng Ehrenmitglied V.I.P. h.c.
Beiträge: 7061 Registriert: 10.12.2003
|
erstellt am: 26. Jun. 2004 17:36 <-- editieren / zitieren --> Unities abgeben: Nur für Lemurian
hmm, wenn V15 zur Basis 0 statt 1 arbeitet waeren alle Tage falsch, was ja wohl nicht der Fall ist, und an der VB Funktion Date bzw. now() sollte es ja nicht liegen ... Ein workaround waere das Feld in Custom als Text zu definieren und das Setzen per VB dann so zu definieren: SEProp.Item(i).Value = CStr(Date) oder Cstr(now()) wenn Zeit auch gespeichert werden soll Klaus
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pablo Mitglied Techniker
Beiträge: 453 Registriert: 23.01.2002 Win10 Office 365 SE 2019
|
erstellt am: 27. Jun. 2004 09:13 <-- editieren / zitieren --> Unities abgeben: Nur für Lemurian
Hallo Lemurian, bei den systeminternen Datumsangaben in SE (SummaryInformation- Erstellt und Zuletzt Gespeichert liefert Erstellt eine Angabe, die mit dem Wert im Eigenschaftsfenster IMHO überhaupt nichts zu tun hat. Zuletzt Gespeichert liefert mit den FileProperties ausgelesen einen Wert, der mit dem Wert im Eigenschaftsfenster übereinstimmt, liest man dieselbe Eigenschaft mit Document-Properties aus, ist der Wert bei mir um ziemlich genau 2 Stunden kleiner. Leider gibt es bei UGS jemand, der seine Zeit damit verbringt, die deutschen Properties-Namen (Document.PropertySets(Trim("SummaryInformation").Properties(Trim("Zuletzt Gespeichert").Value) gelegentlich zu ändern und mit neuen Rechtschreibfehlern zu versehen. (das Trim ist erforderlich, da sonst SE nicht erkennt, das es sich um einen String handelt, damit kannst du dir die Schleife ersparen), das macht den Zugriff mit VB nicht unbedingt einfacher. Ich würde sagen, die API für die Dateieigenschaften könnte man noch optimieren und halte deinen Ansatz, es mit benutzerdefinierten Eigenschaften und modeng's Tip, das ganze mit String-Werten zu machen für das vernünftigste. pablo
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
modeng Ehrenmitglied V.I.P. h.c.
Beiträge: 7061 Registriert: 10.12.2003
|
erstellt am: 27. Jun. 2004 09:42 <-- editieren / zitieren --> Unities abgeben: Nur für Lemurian
... nochmal zum Datum allgemein: Ueblicherweise wird das Datum als Double gespeichert und beinhaltet die Sekunden seit einem definierten Datum. Es kann also sein, dass sich die, hier verwendete, Routine um 24h verrechnet falls der Divisionsrest (./. 86400) unberuecksichtigt bleibt. Dann wuerde sich beim Tag 1 + X Sekunden nur eine 1 ergeben obwohl es bereits Tag 2 ist Wenn dies so programmiert ist, ist das Ergebnis immer um 1 Tag zu klein obwohl der ermittelte Wert bei 0 um 1 erhoeht werden muss. Ein Fehler durch Konvertierung Double --> Single duerfte ausscheiden, da der Verlust an Genauigkeit erheblich groesser ist (64Bit zu 32Bit) Klaus
[Diese Nachricht wurde von modeng am 27. Jun. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
modeng Ehrenmitglied V.I.P. h.c.
Beiträge: 7061 Registriert: 10.12.2003
|
erstellt am: 27. Jun. 2004 09:48 <-- editieren / zitieren --> Unities abgeben: Nur für Lemurian
@Pablo, die 2 Stunden koennten richtig sein wenn: a) der PC auf GMT (UTC) eingestellt ist oder b) intern auf GMT Basis gearbeitet wird Und hiermit habe ich, auch ohne Trim() in V14 keine Probleme: Datum = objDraftDoc.Properties.Item("Custom")("Bearbeitungsdatum").Value Klaus [Diese Nachricht wurde von modeng am 27. Jun. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |