giannik wrote:
I have an Enum
Public Enum MyEnum
EnumVal1=0
EnumVal2=1
EnumVal2=2
end enum
I save in an access database this enum value as an integer (0=EnumVal1,
1=EnumVal2, 2=EnumVal)
Save the Enum /names/ not their numeric values.
OK, you only have three here, but what if you had a long list of these
and then, Lord forbid, you added another one "in the middle"? Much of
your existing data (in Access) would be wrong.
Use a String column in the database and use <value>.ToStrin g() to get
the enum "name" to save.
When retreving this enum from the database how do I ensure that the correct
value is passed to my object
When reading the property back, parse the string value (from Access)
back into the Enum Type, as in
MyObject.MyEnum = CType( dr.Item( "EV" ), MyEnum )
By way of a rather silly example:
Class MyClass
Enum Month
January = 1
February
March
. . .
dr.Item( "Month" ) = Month.December. ToString() ' actually "December"
Now, just for the sake of argument, let's create a new month, called
Filibuster, between February and March.
Class MyClass
Enum Month
January = 1
February
Filibuster
March
. . .
Oh No! I hear you cry. You'll have to bulk update all the records in
Access to increment their month numbers!
Nope. Holding the Enum /names/ means you don't have to. Assuming you
already have a row in there for December:
? dr.Item( "Month" ).GetType().ToS tring()
[System.]String
? dr.Item( "Month" ).ToString()
"December"
? CType( dr.Item( "Month" ), Month ).GetType().ToS tring()
[MyClass.]Month
? CType( dr.Item( "Month" ), Month )
December
So far, so good, but here's the clincher ...
? CInt( dr.Item( "Month" ), Month )
13
.... even if it was 12 when you saved that record into Access!
HTH,
Phill W.