MYSQL TIME wird falsch gelesen

Spezielle Fragen zu PostgreSQL, MySQL, SQLite, SQL ...
Antworten
sailor
Foriker
Beiträge: 25
Registriert: So 3. Mär 2013, 19:50
Kontaktdaten:

MYSQL TIME wird falsch gelesen

Beitrag von sailor » Fr 19. Apr 2013, 20:07

Hallo zusammen, folgendes Problem

MYSQL Tabelle mit ID und Zeit(Time)
Inhalt = 1 und 24:00 (wird mit EMMA richtig ausgelesen)

unter Gambas
Form erstellt mit Button und Textbox
Connection zur DB
Zugriff
Public $qr As String
Public $rs As Result
Public Sub Form_Open()
FMain.Center
End

Public Sub Button1_Click()
mysqlcon.Connect()
$qr = "SELECT * FROM time"
$rs = mysqlcon.$con.Exec($qr)
TextBox1.text = $rs!Zeit
End

Public Sub Form_Close()
DB.Close
End

Ausgabe in der Textbox
00/00/0000 23:00:00

wie kann ich dieses Problem lösen?
Gruß Detlef

tux_
Moderator
Beiträge: 943
Registriert: Di 11. Nov 2008, 20:05
Kontaktdaten:

Re: MYSQL TIME wird falsch gelesen

Beitrag von tux_ » Sa 20. Apr 2013, 15:30

Hi,

koennte das an deiner Zeitzone liegen? Ich habe weder viel Erfahrung mit MySQL (keine mit Zeitstempeln dort) noch gerade einen Server zur Hand, um zu testen, aber eine um eine Stunde verschobene Zeitangabe schreit in Deutschland geradezu nach einem Zeitzonen-Problem.
Achtung: Es passiert, dass ich einen frisch geschrieben Beitrag innerhalb von 10 Minuten noch 3-4 Mal aendere!

sailor
Foriker
Beiträge: 25
Registriert: So 3. Mär 2013, 19:50
Kontaktdaten:

Re: MYSQL TIME wird falsch gelesen

Beitrag von sailor » Sa 20. Apr 2013, 16:08

gibt es denn explizit in Gambas eine Zeitzonen Einstellung, da die Anzeige mit EMMA ja korrekt ist.

Als Info : Ich möchte an dieser Stelle keine Tageszeit, sondern Stunden.

Später sollen Stunden addiert und als Stunden und Minuten ausgegeben werden.
Gruß Detlef

tux_
Moderator
Beiträge: 943
Registriert: Di 11. Nov 2008, 20:05
Kontaktdaten:

Re: MYSQL TIME wird falsch gelesen

Beitrag von tux_ » So 21. Apr 2013, 15:24

Hi,

ich kann das Problem aus genannten Gruenden nicht fuer dich loesen. Gambas selbst bietet keine Zeitzonenunterstuetzung fuer Datenbanken. Das ist Sache des MySQL-Servers in diesem Fall.

*Wenn* es wirklich an der Zeitzone liegen sollte und dein Nicht-Gambas-Programm ausfuehrliche Logs ueber die gesandten Abfragen an den Server fuehrt, dann solltest du dort etwas finden. "SET time_zone = ..." scheint ein relevanter MySQL-Satz zu sein. Vermutlich tut dein Programm etwas, was Gambas intern nicht tut.
Achtung: Es passiert, dass ich einen frisch geschrieben Beitrag innerhalb von 10 Minuten noch 3-4 Mal aendere!

sailor
Foriker
Beiträge: 25
Registriert: So 3. Mär 2013, 19:50
Kontaktdaten:

Re: MYSQL TIME wird falsch gelesen

Beitrag von sailor » So 21. Apr 2013, 17:18

Hi tux,

ich denke es hat eher etwas mit der Zeitberechnung :?: zu tun

ich habe nun in meiner Datenbank zwei Werte

1 24:00
2 23:59

die Anzeige in meiner Textbox

1 00/00/0000 23:00:00
2 23:59:00
Gruß Detlef

sailor
Foriker
Beiträge: 25
Registriert: So 3. Mär 2013, 19:50
Kontaktdaten:

Re: MYSQL TIME wird falsch gelesen

Beitrag von sailor » So 21. Apr 2013, 20:56

Habe mal folgendes gemacht

Public Sub Button1_Click()
Dim i As Integer
Dim z As Float
mysqlcon.Connect()
$qr = "SELECT * FROM time"
$rs = mysqlcon.$con.Exec($qr)
'For i = 0 To $rs.Count - 1
'$rs.MoveLast
z = $rs!Zeit
' $rs.MoveNext
'Next
TextBox1.text = z

End

bei dem ersten Datensatz "24:00"
wird 1 ausgegeben

bei dem zweiten "23:59"
wird 0.99930555555556 ausgegeben
Gruß Detlef

sailor
Foriker
Beiträge: 25
Registriert: So 3. Mär 2013, 19:50
Kontaktdaten:

Re: MYSQL TIME wird falsch gelesen

Beitrag von sailor » Mo 22. Apr 2013, 22:07

mein Ergebnis für heute

mysql-Datenbank ist wie Eingangs beschrieben
mysql speichert Time >23:59:59 (z.B. 124:23)

Lösung zur Anzeige:

eine Form, ein Button, ein Gridview
Die Datenbank-Connection setz ich vorraus !

Public $qr As String
Public $rs As Result

Public Sub _new()
GridView1.Rows.Count = 20
GridView1.Columns.Count = 2
End

Public Sub Form_Open()
FMain.Center
End

Public Sub Button1_Click()
Dim i As Integer
Dim z As Float
mysqlcon.Connect()
$qr = "SELECT * FROM time"
$rs = mysqlcon.$con.Exec($qr)
For i = 0 To $rs.Count - 1
z = $rs!Zeit
GridView1[i, 0].Text = i
GridView1[i, 1].Text = Format$(Int((z)) * 24 + Hour(z - Int(z)), "00") & ":" & Format$(Minute(z - Int(z)), "00")
$rs.MoveNext
Next
End

Public Sub Form_Close()
DB.Close


End

ich berichte weiter :)
Gruß Detlef

tux_
Moderator
Beiträge: 943
Registriert: Di 11. Nov 2008, 20:05
Kontaktdaten:

Re: MYSQL TIME wird falsch gelesen

Beitrag von tux_ » Di 23. Apr 2013, 07:54

Hi,

wenn ich an meiner Zeitzonen-Hypothese festhalte, dann ist es moeglich, dass deine Art und Weise der Anzeige in der TextBox inkorrekt war. Fuer Dates - und ich bin mir fast sicher, dass du in $rs!Zeit ein Date zurueckgeliefert bekommst - sollte man immer die Format$()-Funktion benutzen, weil diese die Zeitzone beruecksichtigt. Ich hatte erst nicht genau hingesehen; einfach ein Date in eine TextBox schreiben ist niemals gut.

Code: Alles auswählen

TextBox1.Text = Format$($rs!Zeit, "hh:nn")
Achtung: Es passiert, dass ich einen frisch geschrieben Beitrag innerhalb von 10 Minuten noch 3-4 Mal aendere!

sailor
Foriker
Beiträge: 25
Registriert: So 3. Mär 2013, 19:50
Kontaktdaten:

Re: MYSQL TIME wird falsch gelesen

Beitrag von sailor » Di 23. Apr 2013, 21:03

Hallo tux,
ob es mit der Zeitzone hier etwas zu tun hat, weiß ich nicht.

Die Problematik liegt an der Verarbeitung der Zeit.
Zeit >=24:00 wird in Tage, Stunden, Minuten, Sekunden gelesen

In mysql kann ich Stunden >=24:00 speichern

Ich habe das kleine Programm mal unter ms access getestet und hier wird dieses (Zeit>=24:00) gleich blockiert.
Genauso bei Gambas.

Fazit:

Zeit einlesen und wie schon geschrieben, siehe letzter Beitrag, formatieren

dies ist mein heutiges Ergenbis :?:

ps: Wenn ich für eine Tätigkeit 24h benötige, kann ich nicht sagen es dauert einen Tag, da dies falsch verstanden wird :wink:
Gruß Detlef

tux_
Moderator
Beiträge: 943
Registriert: Di 11. Nov 2008, 20:05
Kontaktdaten:

Re: MYSQL TIME wird falsch gelesen

Beitrag von tux_ » Mi 24. Apr 2013, 11:24

Hi,

dann willst du kein Datum speichern, sondern die Dauer eines Vorgangs, oder? In diesem Fall solltest du in der Datenbanktabelle kein Date-Feld, sondern ein Integer-Feld anlegen.
Achtung: Es passiert, dass ich einen frisch geschrieben Beitrag innerhalb von 10 Minuten noch 3-4 Mal aendere!

sailor
Foriker
Beiträge: 25
Registriert: So 3. Mär 2013, 19:50
Kontaktdaten:

Re: MYSQL TIME wird falsch gelesen

Beitrag von sailor » Mi 24. Apr 2013, 20:54

Hi tux,

in der Datenbank ist ein 'TIME'-Feld kein 'DATE'-Feld

mit einem Integer-Feld bekomme ich sicher eine Fehlermeldung beim Speichern von "24:00" - das habe ich aber noch nicht versucht.

OK - ich werde meine Formatierung in meinem Programm benutzen, diese funktioniert 100% - aber es tauchen schon wieder neue Fragen auf :roll:
Gruß Detlef

tux_
Moderator
Beiträge: 943
Registriert: Di 11. Nov 2008, 20:05
Kontaktdaten:

Re: MYSQL TIME wird falsch gelesen

Beitrag von tux_ » Do 25. Apr 2013, 14:31

Hi,

fuer das Thema ist es doch unerheblich, ob DATE- oder TIME-Feld. Jedenfalls sind Stunden vernuenftigerweise auf 24 begrenzt. Es hilft m.E. nur ein Integerfeld weiter und dann ist es das einfachste von der Welt, deine Zeitangabe "24:00" auf den Integer 24 * 60 + 0 abzubilden, um ihn zu speichern.
Achtung: Es passiert, dass ich einen frisch geschrieben Beitrag innerhalb von 10 Minuten noch 3-4 Mal aendere!

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast