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 :wink:

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 :mrgreen: