Seite 1 von 1
timestamp
Verfasst: 11.11.2010 20:39
von ath
Hallo,
wie schreibe und lese ich ein SQL-Datenbankfeld vom Typ timestamp. Eine Datentyp scheint es ja dafür in Purebasic nicht zu geben und der Schreibversuch mittels:
Code: Alles auswählen
statement.s = "UPDATE myTable set anldat = {ts '2010-11-11 00.00.00.000'} where key = " + chr(39) + myVar + chr(39)
DatabaseUpdate(1, statement)
funktioniert leider nicht. In der Managementkonsole (von SQL) funktioniert es.
Danke und Gruß
Andreas
Re: timestamp
Verfasst: 12.11.2010 03:32
von Bisonte
vielleicht DatabaseQuery() nehmen ?
Re: timestamp
Verfasst: 12.11.2010 07:39
von ath
Bisonte hat geschrieben:vielleicht DatabaseQuery() nehmen ?
Hi,
zum schreiben eines timestamp Feldes? Wohl kaum. Das lesen eines timestamp Feldes mittels DatabaseQuery macht aber auch Schwierigkeiten bzw. das Übertragen in eine Variable. Es ist kein Blob, Double, Float, Long oder Quad. GetDatabaseString liefert ein leeres Element.
Gruß
Andreas
Re: timestamp
Verfasst: 12.11.2010 08:14
von ts-soft
Es wird wohl ein Long sein! Zum lesen und schreiben dann die Date() Lib von PB nutzen.
Gruß
Thomas
Re: timestamp
Verfasst: 12.11.2010 08:35
von mk-soft
Muss glaube ich noch in Rauten '#datum#' gesetzt werden...
Code: Alles auswählen
;-TOP
; Kommentar : Formatumwandlung von Datum nach SQL Datum
; Author : mk-soft
; Second Author :
; Datei : DateHelper.pb
; Version : 1.01
; Erstellt : 2007.03.03
; Geändert :
;
; Compilermode :
;
; ***************************************************************************************
; Import "oleaut32.lib"
; VarBstrFromDate(dblln.d, lcid.l, dwFlags.l, *pbstrOut)
; VarDateFromStr(strIn.p-unicode, lcid.l, dwFlags, *pdateOut)
; EndImport
Structure udtDatum
StructureUnion
dblVal.d
lVal.l[2]
EndStructureUnion
EndStructure
Procedure.l VarBstrFromDate(dblln.d, lcid.l, dwFlags.l, *pbstrOut)
Protected datum.udtDatum, low.l, hight.l
datum\dblVal = dblln
ProcedureReturn VarBstrFromDate_(datum\lVal[0], datum\lVal[1], lcid.l, dwFlags.l, *pbstrOut)
EndProcedure
Procedure VarDateFromStr(strIn.s, lcid.l, dwFlags, *pdateOut)
ProcedureReturn VarDateFromStr_(strIn.s, lcid.l, dwFlags, *pdateOut)
EndProcedure
; ***************************************************************************************
Procedure.s SqlDateStrFromDate(date.d)
Protected result.s, datum.s, *pbstrOut
If VarBstrFromDate(date, $0407, #LOCALE_NOUSEROVERRIDE, @*pbstrOut) <> #S_OK
ProcedureReturn "0000-00-00 00:00:00"
EndIf
result = PeekS(*pbstrOut,#PB_Any, #PB_Unicode)
SysFreeString_(*result)
If Len(result) <= 8
ProcedureReturn "0000-00-00 00:00:00"
EndIf
datum = Mid(result, 7, 4) + "-"
datum + Mid(result, 4, 2) + "-"
datum + Mid(result, 0, 2) + "-"
datum + Mid(result, 12, 8)
If Len(datum) < 12
datum + "00:00:00"
EndIf
ProcedureReturn datum
EndProcedure
; ***************************************************************************************
Procedure.s SqlDateStrFromDateStr(date.s)
Protected datum.d, result.s
VarDateFromStr(date, 0, #LOCALE_NOUSEROVERRIDE, @datum)
Debug datum
result = SqlDateStrFromDate(Datum)
ProcedureReturn result
EndProcedure
; ***************************************************************************************
Procedure.d DateFromDateStr(date.s)
Protected datum.d, result.s
VarDateFromStr(date, 0, #LOCALE_NOUSEROVERRIDE, @datum)
ProcedureReturn datum
EndProcedure
; ***************************************************************************************
; Test
datum.d = 23974.625
Debug SqlDateStrFromDate(datum)
Debug SqlDateStrFromDateStr("8/20/65 3:00 PM")
Debug SqlDateStrFromDateStr("20.8.2009 15:00")
Debug SqlDateStrFromDateStr("20-08-65 15:00")
Debug DateFromDateStr("2009.08.20 15:00:00")
FF

Re: timestamp
Verfasst: 12.11.2010 10:30
von ts-soft
Lt. Doku MySQL wird dasselbe Format wie PB oder Unix verwendet, oder bin ich da im Irrtum?
Der obrige Code bezieht sich wohl auf propitäres MS zeuchx?
Re: timestamp
Verfasst: 12.11.2010 17:03
von ath
ts-soft hat geschrieben:Der obrige Code bezieht sich wohl auf propitäres MS zeuchx?
Was meinst Du? Die {ts '...} Anweisung? Das ist Standard-SQL und funzt im MS-SQL genauso wie im MySQL.
Gruß
Andreas
Re: timestamp
Verfasst: 12.11.2010 17:12
von ts-soft
ath hat geschrieben:ts-soft hat geschrieben:Der obrige Code bezieht sich wohl auf propitäres MS zeuchx?
Was meinst Du? Die {ts '...} Anweisung? Das ist Standard-SQL und funzt im MS-SQL genauso wie im MySQL.
Gruß
Andreas
Ich meine den Code von mk-soft. Der ist doch Windows-Only. SQL ist aber IMHO plattformübergreifend.
Gibts aber anscheinend verschiedene Timestamps, gottseidank programmiere ich keine Datenbanken
