|
That's not going to work since there is no way to determine what the object type is from it's XML text representation. For example:
<xml version="1.0" encoding="utf-8" ?>
<ComplexNumber>
<R>3</R>
<I>5</I>
</ComplexNumber>
"3" can be anything. So you'll have to determine what that is SUPPOSED to be ahead of time before you attempt a conversion. Is that "3" really a string value containing a 3 character? Is it an Integer? Is it supposed to be a Double or a Decimal? How about a Byte? There's just no way to determine that.
You have to know ahead of time what that type is before you call CType, or any other conversion method, so you can supply the appropriate type name in the CType call. One method of doing this would be to attribute your XML elements with the Type name of the value, like this:
<xml version="1.0" encoding="utf-8" ?>
<ComplexNumber>
<R typename="System.Integer">3</R>
<I typename="System.Integer">5</I>
</ComplexNumber>
Retrieve the value of the typename attribute, then pass it into a conversion like this:
obj = Convert.ChangeType(xmldoc.SelectSingleNode(name).InnerText, Convert.GetTypeCode(typename))
But, you have another problem. What is defining obj ??? Anything you return from this line of code will get boxed, if possible, by the Type that is obj , like if obj was defined as Object . This is a nice little performance hit if you're doing this many times...
Dave Kreskowiak
Microsoft MVP - Visual Basic
-- modified at 16:05 Thursday 6th April, 2006
|
|
|
|
|
Hi Dave,
Thanks for the response. My question was probably not very clear. What I want to do is not cast using the xml innertext type but the obj(name) type.
I know this looks wired and I guess it is. What I’m doing (and I know when it comes to performance it is just wrong) is to map from the xml node to a property in the object using the name of the properties. Now it becomes even worse, I use reflection to get the properties names and I invoke them instead of setting the normal way. I know this is extremely inefficient in performance terms, but it is very dynamic and I like the simplicity of the code.
So what happens is:
1) An XML node is read
2) Loop over the child nodes
3) Set the object (Query) properties to the node value with the same name. (Dynamically casting to the property’s type)
Here is the function that does the trick.
<br />
'Builds a query from a xml node<br />
Private Function BuildQuery(ByRef node As XmlNode) As Query<br />
<br />
Try<br />
Dim obj As New Query<br />
<br />
'Map xmlnodes to properties where the names match<br />
For Each name As String In obj.Properties<br />
If Not node.SelectSingleNode(name) Is Nothing Then<br />
<br />
'Dynamically cast to the type of the property <br />
Dim code As Integer = CInt(Convert.GetTypeCode(obj(name)))<br />
obj(name) = Convert.ChangeType(node.SelectSingleNode(name).InnerText, code)<br />
<br />
End If<br />
Next<br />
<br />
Return obj<br />
Catch ex As Exception<br />
Throw New ApplicationException("Falied to build Databasequery object", ex)<br />
End Try<br />
End Function<br />
On a side note I only use this rarely in the code, for reading data into object and moving data from object into file or database. These are expensive operations anyway so the overhead is not that great compared to the actual workload. That is at least the theory, but I need to do some test to check if it is correct.
Thank you very much for your reply.
Johan Hertz
|
|
|
|
|
I guess I didn't understand what you were asking the first time around. I'm happy that you found a way to do it! I, personally, have never had the need to do something like this...
Dave Kreskowiak
Microsoft MVP - Visual Basic
|
|
|
|
|
Hi Dave,
To honest, I don’t really “need” to do it in this way either. But it is a nice little exercise, and I think it might even be usefully
Once again thanks for your help, it was very appreciated.
|
|
|
|
|
hi friends
i am working in vb6, i have a main form which contains a menu and deferent menu item liek add edit delte etc i want when i click menu itemm Add a form will open on it, i di dnot now how i can do this help me plz
regards
Farooq Azam
|
|
|
|
|
Handle the Click event of the menu item, then just create a new instance of your Add form and show it. Since this is in response to Adding something to a document, you'll probably want to show the form Modally.
Dim addForm As New MyAddForm
addForm.Show vbModal, Me
Dave Kreskowiak
Microsoft MVP - Visual Basic
|
|
|
|
|
thanks friend Dave i will need ur help in future too regards bye
Farooq Azam
|
|
|
|
|
can anybody send me the code how to insert data into database using my form textbox values.
Aavesh
Aavesh
|
|
|
|
|
What database are you using?
|
|
|
|
|
i'm using mysql please give me the code i'm getting frustrated
thanx
|
|
|
|
|
Do you have a connection already established to your database?
|
|
|
|
|
yes i'm sending u my code in which i have a problem
Dim ConnStr As String = "Driver={MySQL ODBC 3.51 Driver};Server=localhost;Database=AgentImg;uid=root;pwd=;option=3"
Dim con As OdbcConnection = New OdbcConnection(ConnStr)
Dim ad As OdbcDataAdapter = New OdbcDataAdapter()
' Dim str As String = "insert into Category(Category_Name) Values(" + TextBox1.Text + ")"
'Dim str As String = "insert into Category values(@id,@Category_Name,'@Category_Img',@Category_Desc)"
Dim InsCom As OdbcCommand = New OdbcCommand(str, con)
ad.InsertCommand = InsCom
ad.InsertCommand.Parameters.Add(New OdbcParameter("@Category_Name", OdbcType.VarChar, 20))
ad.InsertCommand.Parameters("@Category_Name").Value = TextBox1.Text
ad.InsertCommand.Parameters.Add(New OdbcParameter("@Category_Img", OdbcType.VarChar, 20))
ad.InsertCommand.Parameters("@Category_Img").Value = TextBox2.Text
ad.InsertCommand.Parameters.Add(New OdbcParameter("@Category_Desc", OdbcType.VarChar, 20))
ad.InsertCommand.Parameters("@Category_Desc").Value = TextBox3.Text
con.Open()
ad.InsCom.ExecuteNonQuery()
con.Close()
please i have checked twice field names are correct.
but when i try to store the values .it stores null.
please give me a quick reply.
|
|
|
|
|
I think your problem might be this line.
Dim str As String = "insert into Category(Category_Name) Values(" + TextBox1.Text + ")"
Try changing it to Dim str As String = "insert into Category(Category_Name) Values (" & TextBox1.Text & ")"
Because if its inserting null values then it must be the parameter passing that is wrong.
|
|
|
|
|
And if that doesn't work. Stop using Value = TextBox3.Text. Specify a veriable like Dim txt as String = Textbox3.text. And make sure that it is actually holding a value before you pass it.
|
|
|
|
|
You have two lines where you define an SQL query, but both are commented out. Do you create the variable str anywhere at all?
...and a tip: If you already have code, show that in your initial question, instead of just asking for code.
---
b { font-weight: normal; }
|
|
|
|
|
What is the code to dynamically change the background. So fir instance, if I press a button the background image will change?
Cheers.
|
|
|
|
|
Me.BackgroundImage = Image.FromFile("file name")
example:
Me.BackgroundImage = Image.FromFile("C:\myFile.jpg")
Regards,
Chatura Dilan
If at first you don't succeed, try; try again, so that you know
what not to do the next time. The answer is out there.
|
|
|
|
|
I'm getting an error with the Me.BackgroundImage part. 'BackgroundImage' is not a member of 'WebApplication5.WebForm2'. Do I need to declare anything anywhere?
Cheers.
|
|
|
|
|
Woop s…I mean Window form’s background. You mean Web form’s background. I think I cannot help for that question. Someone will help you or ask your question from ASP.Net forum
Regards,
Chatura Dilan
If at first you don't succeed, try; try again, so that you know
what not to do the next time. The answer is out there.
|
|
|
|
|
This may seems as small question since I am beginner, to Visual Basic
I am developing frontend for accsess data base, there I have several motors which are constant and then I have to add varible for those motors , so I need to have a combo box or list oneside inwhich I can select,then I can add
My question is why when I make combo box or list only one item is showing other dropdown list is not showing..this is the best i can explain it sorry
|
|
|
|
|
can you share your code plz???
|
|
|
|
|
Without seeing your code that sets up and populates the ComboBox, it's impossible to tell you what went wrong.
Dave Kreskowiak
Microsoft MVP - Visual Basic
|
|
|
|
|
Dear All,
I have developed a VB application and I have created an exe using Visual studio installer but when I try to install it throws an error.
error 1904, Module C:\...msado25.tlb failed to register. HRESULT -2147024769.
how to solve this problem.
plz help me as soon as possible.
Thanks & Regards,
Chandan Kumar
|
|
|
|
|
This is probably because other stuff that the ADO type library depends on is missing.
I take it this is a VB6 app?? Try installing the latest MDAC[^] before installing your app.
Dave Kreskowiak
Microsoft MVP - Visual Basic
|
|
|
|
|
Hi guys,
Anyone know how to display a message in a .vbs?
I want to run a script and display a message to the user depending on the outcome of the script.
Set objWshNetwork = CreateObject("WScript.Network")
strComputer = "k1hq1oa0004a"
Usuario="administrator"
Set objUser = GetObject("WinNT://" & strComputer & "/" & Usuario & ",user")
objUser.SetPassword "123456789"
objUser.SetInfo
''Code to display message here
1fm1fu
-- modified at 4:51 Thursday 6th April, 2006
|
|
|
|