Hej igen. Nu är jag jävl...... snabb i tanken ,men ! Något sånthär kanske?: Hej. Hej. Hej uffe! Jippi. Variant skall fungera. Kanske skall konvertera Text till datum: Hej igen.User Control med databas koppling Del 2
Detta är en ny fråga för tråden 'User Control med databas koppling'
Jag har gjort en user control med en textbox för datum som
kopplas till ett recordset (date i databasen).
Dock Inte riktigt på det sätt som svaret i huvudtråden oven.
Detta funger utmärkt, förutom att det inte går att sudda ut ett datum.
Recordsetet verkar kräva null och inte blank och sen har vi mina
properties funktioner som kräver blankt och inte null.
Har provat att properties funktionerna får/lämnar date istället
för string, men det funkar inte ändå.
Recordsetet gnäller inte när det kommer en blank utan låter
bara gamla värdet vara kvar ???
Detta har jag försökt att komma runt genom att själv kontrollera
om textbox fältet är blankt och då uppdaterat recordetet med null.
Men se, detta går inte. Då får jag felmeddelandet :
"Runtime error '-2147217887 (80040e21)'"
"Multiple-step operation generated errors. Check each status value."
Om jag fattat det rätt så verkar det som om jag uppdaterar recordsetet,
recordsetet uppdaterar user controlen som i sin tur uppdaterar recordsetet.
Är det någon som har en idé hur man kan komma runt detta ?
/UffeSv: User Control med databas koppling Del 2
Om TextBox = "" Then KeyAscii = Chr$(0)
mmmmmmmmmm SvenSv: User Control med databas koppling Del 2
<code>
Public Property Get Value() As Variant
If Len(Text1.Text) > 0 Then
Value = Text1.Text
Else
Value = Null
End if
End Property
Public Property Let Value(Value As Variant)
If Len(Value) > 0 Then
Text1.Text = Value
Else
Text1.Text = ""
End if
End Property
</code>Sv: User Control med databas koppling Del 2
Det verkar inte som om det spelar någon roll att jag sätter mitt textfält
till chr$(0), den behåller värdet "".
Detta resulterar i sin tur att recordsetet med datumfält struntar,
utan att klaga, i mitt blanka fält. Den behåller sitt gamla värde.
Och som sagt tidigare, att uppdatera recordsetet direkt verkar inte
gå det heller :-(
/UffeSv: User Control med databas koppling Del 2
Nej, variant spåret fungerar inte det heller.
Nu kommer man visserligen längre och till nya funderingar.
Det går att få properties funktionerna att lämna null
och user control textfältet i mitt formulär har värdet null,
men recordset värdet är oförändrat.
Något mysko händer när det är null för det fungerar som det ska
när man anger ett värde.
/UffeSv: User Control med databas koppling Del 2
Eftersom du inte får skriva ner "" till recordsetet, testa då IIF -satsen
iif(text1.text = "", vbNull, text1.text)
/PelleSv: User Control med databas koppling Del 2
Jag har det.
Man ska sätta DataFormat = Date på textfältet i user controlen
och köra variant spåret.
Tänk att något så knöliga saker har så enka lösningar.
Tackar allihopa.
/UffeSv: User Control med databas koppling Del 2
<code>
Public Property Get Value() As Variant
If IsDate(Text1.Text) Then
Value = CDate(Text1.Text)
Else
Value = Null
End if
End Property
Public Property Let Value(Value As Variant)
If Len(Value) > 0 Then
Text1.Text = Value
Else
Text1.Text = ""
End if
End Property
</code>
Det är nog så att du inte flagar egenskapen som updaterad. Vet inte om du såg förändringen jag gjorde. I ditt föra inlägg.
Lägg till följande kod.
<code>
Private sub Text1_Cahange()
PropertyChanged "Text"
End Sub
</code>
Där Text är namnet på egenskapen. Recordsetet som då är bunden till kontrollen kommer då att hämta värdet från egenskapen på nytt och tilldela det till recordsetet.Sv: User Control med databas koppling Del 2
För den som vill veta.
Jag utnyttjade inte BindingCollection.
Det gick bra att visa data, men hur jag än försökte så uppdaterades
aldrig database.
Jag utnyttjade inte Tools | Procedure Attributes.
Jag fick det inte att fungera.
Istället gjorde jag egna property funktioner så som jag var inne på från
början och för DataSource ska det se ut så här :
Public Property Set DataSource(Value As adodb.Recordset)
och inte Let DataSource, så som jag försökte först.
Sen har jag även dessa :
Public Property Let DataField(Value As String)
Public Property Let Text(Value As Variant)
Public Property Get Text() As Variant
Text property funger så som Andreas föreslog.
Tack igen.
/Uffe