Seite 1 von 1
Numerischen Wert in Access-Datenbanken schreiben
Verfasst: 10.11.2007 18:04
von ThoPie
Hallo,
ich schreibe an einem Datenbankprogramm welches auf eine Access-Tabelle zugreift. In einer Tabelle ist ein numerischer Wert, diesen möchte ich mit dem DatabaseUpdate-Befehl ändern. Der Wert der eingetragen werden soll ist in einer Variable vom Typ long gespeichert.
Irgendwie klappt das aber nicht. Hier ein Codeausschnitt
Code: Alles auswählen
DatabaseQuery(#db,"SELECT * FROM tabelle")
NextDatabaseRow(#db)
DatabaseUpdate(#db,"UPDATE tabelle SET feld="+variable+")
Wie muss ich denn da die Anführungszeichen setzen?
Vielen Dank.
Verfasst: 10.11.2007 18:25
von Fluid Byte
Code: Alles auswählen
DatabaseUpdate(#db,"UPDATE tabelle SET feld=" + Str(PB_Variable))
Verfasst: 10.11.2007 18:36
von ThoPie
in echt?
mit Str() in ein numerisches Feld.
Hatte auch mal daran gedacht das zu versuchen, aber wieder verworfen.
Na gut - ich probier es mal...
Verfasst: 10.11.2007 18:39
von Bisonte
muss man das bei Access-DB's nicht in Hochkommata setzen, wie bei MySQL - DB's ?
also ich meine so:
Code: Alles auswählen
DatabaseUpdate(#db,"UPDATE tabelle SET feld='" + Str(PB_Variable) + "'")
Verfasst: 10.11.2007 19:08
von mk-soft
auf jeden fall besser.
Damit es bei übergabe eines Datums nicht zu Problemen mit der eingestellten Sprache gibt verwende ich folgende Funktionen.
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
; ***************************************************************************************
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)
result = SqlDateStrFromDate(Datum)
ProcedureReturn result
EndProcedure
; ***************************************************************************************
; Test
datum.d = 23974.625
Debug SqlDateStrFromDate(datum)
Debug SqlDateStrFromDateStr("8/20/65 3:00 PM")
Debug SqlDateStrFromDateStr("20.8.65 15:00")
Debug SqlDateStrFromDateStr("20-08-65 15:00")
Debug SqlDateStrFromDateStr("1965.08.20 15:00")
; Datumsformat komplett
accessdatum.s = "#" + SqlDateStrFromDateStr("8/20/65 3:00 PM") + "#"
Debug accessdatum
Datum ist von Type Date (Double) ->
http://www.purebasic.fr/german/viewtopi ... ght=exdate
Verfasst: 10.11.2007 20:08
von Kiffi
Bisonte hat geschrieben:muss man das bei Access-DB's nicht in Hochkommata setzen, wie bei MySQL - DB's ?
das muss man nur bei Feldern vom Typ Text machen.
Grüße ... Kiffi