Iterate through Array
-
I am having difficulty iterating through an array. I have found the following sample code and tried modifying it with my variables. ' Sample Array Read Code 'For i = 0 To arrList2.Count - 1 ' Console.WriteLine(CStr(arrList2.Item(i))) 'Next After modifying line 3 with x = CStr(arrList2.Item(i)) , I receive the following error: "Value of type 'String' cannot be converted to '1-dimensional array of String'." X is defined as: Dim x() As String I need to get each element (which is a name read from a textbox) into a variable strName. This is to allow my SQL statement to create a record for each name in the array. Any help would be greatly appreciated! Thank you in advance.:)
LWhite
Larry White wrote:
After modifying line 3 with x = CStr(arrList2.Item(i)) , I receive the following error: "Value of type 'String' cannot be converted to '1-dimensional array of String'." X is defined as: Dim x() As String
It's always best to copy and paste the actual code you're using. Don't post a sample and then tell use what you did to it. It makes it very difficult to see what you actually did.
x
doesn't have anItem
property, so the code should look more like this:For i = 0 To x.GetUpperBound(0) Console.WriteLine(x(i)) Next i
Notice, you don't need CSTR. This is because your x array is an array of Strings. Why try to convert a String to a String?? Also, to get your code to show up in the nice beige box and retain some formatting, paste it between <pre> and </pre> tags.
Dave Kreskowiak Microsoft MVP - Visual Basic
-
I am having difficulty iterating through an array. I have found the following sample code and tried modifying it with my variables. ' Sample Array Read Code 'For i = 0 To arrList2.Count - 1 ' Console.WriteLine(CStr(arrList2.Item(i))) 'Next After modifying line 3 with x = CStr(arrList2.Item(i)) , I receive the following error: "Value of type 'String' cannot be converted to '1-dimensional array of String'." X is defined as: Dim x() As String I need to get each element (which is a name read from a textbox) into a variable strName. This is to allow my SQL statement to create a record for each name in the array. Any help would be greatly appreciated! Thank you in advance.:)
LWhite
-
Larry White wrote:
After modifying line 3 with x = CStr(arrList2.Item(i)) , I receive the following error: "Value of type 'String' cannot be converted to '1-dimensional array of String'." X is defined as: Dim x() As String
It's always best to copy and paste the actual code you're using. Don't post a sample and then tell use what you did to it. It makes it very difficult to see what you actually did.
x
doesn't have anItem
property, so the code should look more like this:For i = 0 To x.GetUpperBound(0) Console.WriteLine(x(i)) Next i
Notice, you don't need CSTR. This is because your x array is an array of Strings. Why try to convert a String to a String?? Also, to get your code to show up in the nice beige box and retain some formatting, paste it between <pre> and </pre> tags.
Dave Kreskowiak Microsoft MVP - Visual Basic
Thank you. The tags do make it alot easier to read.
LWhite
-
Why do you declare the x variable as an array? As you are going to use it to reference a string, declare it as a string:
Dim x As String
--- single minded; short sighted; long gone;
I adjusted my code as follows:
Dim x As String
For i = 0 To arrList2.Count - 1
x = arrList2.Item(i)
strName = arrList2.Item(i)I now get the qty of data entries in my database equal to the number of names I select in the textbox, but the last entry is blank. If I select 3 names, I get the first 2 database entries with the names, but the last one is blank (name field). It appears the first iteration leaves strName blank. Thanks again for the assistance.
LWhite
-
I adjusted my code as follows:
Dim x As String
For i = 0 To arrList2.Count - 1
x = arrList2.Item(i)
strName = arrList2.Item(i)I now get the qty of data entries in my database equal to the number of names I select in the textbox, but the last entry is blank. If I select 3 names, I get the first 2 database entries with the names, but the last one is blank (name field). It appears the first iteration leaves strName blank. Thanks again for the assistance.
LWhite
The code that you have shown is correct, although reading the same value from the array twice into separate variables doesn't look like what you want to do. The problem that you talk about is in the part of the code that you haven't shown. Unless you show it, I can't tell you much more than that it's wrong...
--- single minded; short sighted; long gone;
-
The code that you have shown is correct, although reading the same value from the array twice into separate variables doesn't look like what you want to do. The problem that you talk about is in the part of the code that you haven't shown. Unless you show it, I can't tell you much more than that it's wrong...
--- single minded; short sighted; long gone;
Here are the other relevant parts of my code. I build the textbox entries with the following, which also drops the selected names into the array:
Private Sub lbName_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lbName.SelectedIndexChanged
editName.Text = Nothing
For i = 0 To lbName.SelectedItems.Count - 1
arrList2.Add(strName)
With arrList2
.ToArray()
End With
editName.Text = editName.Text & lbName.SelectedItems(i) & vbCrLf
strName = lbName.SelectedItems(i) & vbCrLf
Next
End SubHere is my complete code that is supposed to create a new database record with each iteration of the name array:
For i = 0 To arrList2.Count - 1
strName = arrList2.Item(i)
x = arrList2.Item(i)Dim strCommandText As String = "INSERT INTO Orders(OrderDate, DeliverDate, DeliverLocation, Name, Special, Comments, Rate, EMPLID, LoggedIP)" _
& "VALUES('" & strOrderDate & "','" & strDeliverDate & "','" & strDeliverLocation & "','" & strName & "','" & strSpecial & "','" & strComments & "','" & strRate & "','" & strEMPLID & "','" & strLoggedHost & "')"Dim cmd As New SqlClient.SqlCommand(strCommandText, SqlConnection1)
cmd.ExecuteNonQuery()
NextThank you for your assistance.:)
LWhite
-
Here are the other relevant parts of my code. I build the textbox entries with the following, which also drops the selected names into the array:
Private Sub lbName_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lbName.SelectedIndexChanged
editName.Text = Nothing
For i = 0 To lbName.SelectedItems.Count - 1
arrList2.Add(strName)
With arrList2
.ToArray()
End With
editName.Text = editName.Text & lbName.SelectedItems(i) & vbCrLf
strName = lbName.SelectedItems(i) & vbCrLf
Next
End SubHere is my complete code that is supposed to create a new database record with each iteration of the name array:
For i = 0 To arrList2.Count - 1
strName = arrList2.Item(i)
x = arrList2.Item(i)Dim strCommandText As String = "INSERT INTO Orders(OrderDate, DeliverDate, DeliverLocation, Name, Special, Comments, Rate, EMPLID, LoggedIP)" _
& "VALUES('" & strOrderDate & "','" & strDeliverDate & "','" & strDeliverLocation & "','" & strName & "','" & strSpecial & "','" & strComments & "','" & strRate & "','" & strEMPLID & "','" & strLoggedHost & "')"Dim cmd As New SqlClient.SqlCommand(strCommandText, SqlConnection1)
cmd.ExecuteNonQuery()
NextThank you for your assistance.:)
LWhite
The code look pretty strange... Where do you declare the strName variable? You use the strName variable, but you haven't given it any value before using it. You give it a value later in the loop, so it will have a value for the next iteration of the loop, but not for the first iteration. Also, the value that you assign to it in the last iteration will never be used. You create an array from the items in the list arrList2, but you just throw the array away without doing anything with it. Why?
--- single minded; short sighted; long gone;
-
The code look pretty strange... Where do you declare the strName variable? You use the strName variable, but you haven't given it any value before using it. You give it a value later in the loop, so it will have a value for the next iteration of the loop, but not for the first iteration. Also, the value that you assign to it in the last iteration will never be used. You create an array from the items in the list arrList2, but you just throw the array away without doing anything with it. Why?
--- single minded; short sighted; long gone;
When the form opens, I have a "Dim strName As String" along with other variables. Thank you, you got me thinking and I rearranged my code. It works now. Here is what it looks like now:
Private Sub lbName_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lbName.SelectedIndexChanged
editName.Text = Nothing
tbEmplid.Text = Nothing
For i = 0 To lbName.SelectedItems.Count - 1
strName = lbName.SelectedItems(i) & vbCrLf '.ToString & vbCrLf
arrList2.Add(strName)
With arrList2
.ToArray()
End With
editName.Text = editName.Text & lbName.SelectedItems(i) & vbCrLf
Next
End SubNote: I moved the "strName = lbName.SelectedItems(i) & vbCrLf" line above the "arrList2.Add(strName)" line, instead of being the last line. It sequences through nicely now. I trash the array, is it is only for the record creation and not needed after that. Thank you again! I hope posting this code will help someone else!:cool:
LWhite
-
When the form opens, I have a "Dim strName As String" along with other variables. Thank you, you got me thinking and I rearranged my code. It works now. Here is what it looks like now:
Private Sub lbName_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lbName.SelectedIndexChanged
editName.Text = Nothing
tbEmplid.Text = Nothing
For i = 0 To lbName.SelectedItems.Count - 1
strName = lbName.SelectedItems(i) & vbCrLf '.ToString & vbCrLf
arrList2.Add(strName)
With arrList2
.ToArray()
End With
editName.Text = editName.Text & lbName.SelectedItems(i) & vbCrLf
Next
End SubNote: I moved the "strName = lbName.SelectedItems(i) & vbCrLf" line above the "arrList2.Add(strName)" line, instead of being the last line. It sequences through nicely now. I trash the array, is it is only for the record creation and not needed after that. Thank you again! I hope posting this code will help someone else!:cool:
LWhite
That looks better. :) Any variables you can, you should declare locally inside the method, instead of declaring them in the class. Local variables are allocated on the stack, are very inexpensive, and only exist when they are needed. Class variables increases the size of your form object, and they take up memory even when they are not used. You still have some strange code...
With arrList2 .ToArray() End With
This does the same as:
Dim s() as String
With attList2
s = .ToArray()
End With
s = NothingIn other words, the only thing that it does is wasting time and memory resources. You create one array each iteration of the loop, and not any of the arrays are ever used for anything.
--- single minded; short sighted; long gone;
-
That looks better. :) Any variables you can, you should declare locally inside the method, instead of declaring them in the class. Local variables are allocated on the stack, are very inexpensive, and only exist when they are needed. Class variables increases the size of your form object, and they take up memory even when they are not used. You still have some strange code...
With arrList2 .ToArray() End With
This does the same as:
Dim s() as String
With attList2
s = .ToArray()
End With
s = NothingIn other words, the only thing that it does is wasting time and memory resources. You create one array each iteration of the loop, and not any of the arrays are ever used for anything.
--- single minded; short sighted; long gone;
Thank you for your suggestions. I rearranged most of my variables to be local. I have another issue you may be able to help me on. I'm using the following code to perform a SQL SELECT to combine the first & last name, and the employee ID number to be used in a listbox. The user selects multiple names that are transfered to a textbox. When they are selected, the array is created, which is used to create a record in a SQL table (one entry per name). The problem I have is, I need to update the Employee ID field but haven't found the right code to extract the "emplid" data. The name field works fine.
Dim sql1 As String = "Select (LastName + ', ' + FirstName) As Name, emplid FROM Users ORDER BY LastName"
Dim strCommandText As String = "INSERT INTO Orders(OrderDate, DeliverDate, DeliverLocation, Name, Special, Comments, Rate, EMPLID, LoggedIP)" & "VALUES('" & strOrderDate & "','" & strDeliverDate & "','" & strDeliverLocation & "','" & strName & "','" & strSpecial & "'" & ",'" & strComments & "','" & strRate & "','" & strEMPLID & "','" & strLoggedHost & "')"
Private Sub lbName_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lbName.SelectedIndexChanged
Dim i As Integer
editName.Text = Nothing
For i = 0 To lbName.SelectedItems.Count - 1
arrList2.Add(lbName.SelectedItems(i))
With arrList2
.ToArray()
End With
editName.Text = editName.Text & lbName.SelectedItems(i) & vbCrLf
Next
i = Nothing
End SubPrivate Sub btnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdd.Click
Dim i As Integer Dim r As String Dim x As String editComments.Clear() strComments = editComments.Text Try SqlConnection1.Close() cnn1.Close() SqlConnection1.Open() ' Create a name array from editName textbox; Used to create a new record for each name For i = 0 To arrList2.Count - 1 strName = arrList2.Item(i) x = arrList2.Item(i) Dim strCommandText As String = "INSERT INTO Orders(OrderDate, DeliverDate, DeliverLocation, Name, Special, Comments, Rate, EMPLID, LoggedIP)" & "VALUES('" & strOrderDate & "','" & strDeliverDate & "','" & strDeliverLocation & "','" & strName & "','" & strSpecial & "'" & ",'" & strComments & "','" & strRate & "','" & strEMPLID & "','" & strLogge