Format Frage !!!

  • VB6

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von philipp-HiOrg.

    Format Frage !!!

    Hallo,
    Ich bin am verzweifeln =(

    Ich habe ein Programm geschrieben, welches auf eine MYSQL Datenbank auf einem Externen Programm zugreift.

    Es gibt dort die Spalten Address, TimeStamp1, Status1, Alias

    Ich lese die Datenbank ganz einfach aus.. dieses Funktioniert auch klasse.
    Nur das das Externe Programm den Timestamp setzt bei Änderungen in der DB, zeigt VB mit den TimeStamp an und nicht die richtige Datumsausgabe!

    Ich habe diverse Möglichkeiten Probiert aber nichts hat funktioniert =/

    Ich ich hoffe Ihr könnt mit Helfen....
    Muss ich die Datenbank Formatierung in PHPMyAdmin ändern?
    oder ähnlich wie
    my.datagriedview1.columns("TimeStamp1"). ??? Format oder so ?

    Hoffe ihr könnt mit Helfen ...

    philipp-HiOrg schrieb:

    Nur das das Externe Programm den Timestamp setzt bei Änderungen in der DB
    Fehldesign, der Timestamp sollte von der DB selbst und automatisch gesetzt werden.

    In welchem Format ist denn der Timestamp gespeichert. Als String oder als Timestamp?
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Da bin ich überfragt muss ich zugebenen !
    Wenn ich das externe Programm öffne und dort die Daten ändere zeigt er mir Datum und Zeit an...

    Wenn ich die Datenbank in PHPMyAdmin öffne ist die Zeile TimeStamp1 als INT benannt,
    Ich habe es auch mal auf TimeStamp gesetzt aber dann funktioniert meine Abfrage nicht mehr .. VB sagt dann Format Fehler!

    Ich vermute dass der Timestamp vom Programm kommt und nicht aus Mysql

    philipp-HiOrg schrieb:

    TimeStamp1 als INT
    Da würde ich auf Unix-Timestamp tippen.
    Das sind die Sekunden seit 1.1.1970

    Gib die Zahl mal in einen Converter ein, z.B. onlineconversion.com/unix_time.htm
    Kommt dann ein plausibler Wert raus?
    Wenn dem so ist, musst du es halt passend konvertieren.

    Andererseits könnte das der richtige DB-Treiber evtl. auch können.
    Welchen verwendest du?
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Habe hier ein paar Code Beispiele von meinem Programm

    Die Abfrage (XAMPP Localhost)
    Spoiler anzeigen

    Quellcode

    1. Private Sub fill()
    2. Try
    3. Dim conn As New MySqlConnection
    4. Dim da As MySqlDataAdapter
    5. Dim dt As New DataTable
    6. conn.ConnectionString = "server=" & My.Settings.Server & "; user ID=" & My.Settings.Benutzer & "; password=" & My.Settings.Passwort & "; database=" & My.Settings.Datenbank & ""
    7. da = New MySqlDataAdapter("SELECT Address AS Codierung, Name AS Rufname, Status1 AS Status, Timestamp1 AS Zeit, EO AS Ort, Info AS Info, Typ AS Typ, stelle AS DS, Zvei AS Zvei, RIC AS Ric_Api, Enr AS E_Nr, Gruppe AS Gruppe, Ziffer FROM fmsstorage WHERE Gruppe= '" & ComboBox1.Text & "'", conn)
    8. da.Fill(dt)
    9. DataGridView1.DataSource = dt
    10. Me.DataGridView1.Sort(Me.DataGridView1.Columns(11), System.ComponentModel.ListSortDirection.Ascending)
    11. Catch ex As Exception
    12. MsgBox(ex.Message)
    13. End Try
    14. End Sub



    Dazu habe ich einen "Verbergen Sub"
    Spoiler anzeigen

    Quellcode

    1. Private Sub verbergen()
    2. Me.DataGridView1.Columns("DS").Visible = False
    3. Me.DataGridView1.Columns("E_Nr").Visible = False
    4. Me.DataGridView1.Columns("Zvei").Visible = False
    5. Me.DataGridView1.Columns("Ric_Api").Visible = False
    6. Me.DataGridView1.Columns("Gruppe").Visible = False
    7. Me.DataGridView1.Columns("Ziffer").Visible = False
    8. Me.DataGridView1.Columns("Codierung").Visible = False
    9. End Sub



    Habe es auch schon hiermit probiert :
    Spoiler anzeigen

    Quellcode

    1. Public Function VB_CTime(ByVal dblSec As Double) As Object
    2. Dim vStart As Object
    3. On Error Resume Next
    4. vStart = DateSerial(1970, 1, 1)
    5. VB_CTime = DateAdd("s", dblSec, vStart)


    leider auch ohne erfolg

    dann noch ein Screenshoot von der MYSQL Einstellung

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „philipp-HiOrg“ ()

    Also Unix-Timestamp. Passt genau auf 26.2.2015 9:03:15

    Konvertiere mittels .Net und verwende nicht den veralteten VB6 Code.
    Dim Timestamp = New DateTime(1970,1,1).AddSeconds(UnixTimestamp)

    Alternativ kannst du's auch gleich in SQL berechnen:

    SQL-Abfrage

    1. ​Select DATEADD(SECOND,Timestamp1,'1970-01-01') AS Zeit FROM TableName WHERE ...
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Anstatt beim Auslesen aus der Datenbank die Sekunden hinzuzufügen würde ich direkt, beim erstellen eines neuen Datensatz, den richtigen TimeStamp in deinem Programm generieren und in die Datenbank schreiben.

    C#-Quellcode

    1. // <summary>
    2. /// Aktuelles Datum und Uhrzeit abfragen und im SQL Format zurückgeben
    3. /// </summary>
    4. /// <returns>Bsp.: 2007-06-01 20:30:08</returns>
    5. private string GetTimestampSqlFormat()
    6. {
    7. return DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
    8. }


    Bei MSSQL muss derFeldTyp auf "datetime2" stehen und bei MySQL müsste das "DATETIME" sein.
    NETworkManager - A powerful tool for managing networks and troubleshoot network problems!
    Das dachte ich auch zuerst, das das die Lösung sein kann, ABER da mein Programm auf eine Datenbank von einem Externen Programm zugreift (BOSMON) setzt Bosmon den TimeStamp.... ich kann das leider nicht beeinflussen =(

    Die Datenbank wird mit meinem Programm ausgelesen und extern werden die Datengeschrieben
    Was ist denn da so schwierig.
    Ich habe dir bereits das Umrechnungsstatement in SQL genannt.
    Kannst du das jetzt nicht selbst einsetzen?

    VB.NET-Quellcode

    1. ​da = New MySqlDataAdapter("SELECT Address AS Codierung, Name AS Rufname, Status1 AS Status, DATEADD(SECOND,Timestamp1,'1970-01-01') AS Zeit, EO AS Ort, Info AS Info, Typ AS Typ, stelle AS DS, Zvei AS Zvei, RIC AS Ric_Api, Enr AS E_Nr, Gruppe AS Gruppe, Ziffer FROM fmsstorage WHERE Gruppe= '" & ComboBox1.Text & "'", conn)
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --