timestamp

Anfängerfragen zum Programmieren mit PureBasic.
ath
Beiträge: 12
Registriert: 19.10.2010 19:58

timestamp

Beitrag 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
Benutzeravatar
Bisonte
Beiträge: 2465
Registriert: 01.04.2007 20:18

Re: timestamp

Beitrag von Bisonte »

vielleicht DatabaseQuery() nehmen ?
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
ath
Beiträge: 12
Registriert: 19.10.2010 19:58

Re: timestamp

Beitrag 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
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: timestamp

Beitrag von ts-soft »

Es wird wohl ein Long sein! Zum lesen und schreiben dann die Date() Lib von PB nutzen.

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
mk-soft
Beiträge: 3845
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: timestamp

Beitrag 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:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: timestamp

Beitrag 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?
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
ath
Beiträge: 12
Registriert: 19.10.2010 19:58

Re: timestamp

Beitrag 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
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: timestamp

Beitrag 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:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten