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 
