2013-10-21 124 views
0

我正在使用Visual Basic在Visual Studio 2013中的应用程序上工作,有些事情我稍微举起来希望你可以帮助我... ..好吧,我有我的用户用一个组合框绑定到访问表中,它会很好地提取数据,对于'客户名',但我想要做的是编写代码,以便在下面的组合框选择中选择'客户名'时文本框自动填写'客户地址''客户电话号码''客户帐户名称'我有一个工作代码,但不幸的是它只适用于Int32我希望它能识别使用文本。谁能帮忙?我将与我以前的代码跟进作为援助当组合框选择时填充文本框

感谢詹姆斯

Private Sub cmdGetByIdentifier_Click(sender As Object, e As EventArgs) Handles cmdGetByIdentifier.Click 
If Not String.IsNullOrWhiteSpace(txtIdentifier1.Text) Then 
    Dim Identifier As Int32 = 0 
    If Int32.TryParse(txtIdentifier1.Text, Identifier) Then 
     txtCompanyName1.Text = GetCustomerNameByIdentifier(Identifier) 
    Else 
     MessageBox.Show("'" & txtIdentifier1.Text & "' is not a valid integer.") 
    End If 
Else 
    MessageBox.Show("Must enter an identifier to get a company name.") 
End If 
End Sub 

Private Sub cmdGetCustomer_Click(sender As Object, e As EventArgs) Handles cmdGetCustomer.Click 
If Not String.IsNullOrWhiteSpace(txtIdentifier2.Text) Then 
    Dim Identifier As Int32 = 0 
    If Int32.TryParse(txtIdentifier2.Text, Identifier) Then 
     Dim Cust As Customer = GetCustomer(Identifier) 
     txtCompanyName2.Text = Cust.Name 
     txtContactName2.Text = Cust.ContactName 
    Else 
     MessageBox.Show("'" & txtIdentifier1.Text & "' is not a valid integer.") 
    End If 
Else 
    MessageBox.Show("Must enter an identifier to get a company name.") 
End If 

End Sub 
End Class 


Module DatabaseOperations 
    Public Function GetCustomerNameByIdentifier(ByVal Identifier As Int32) As String 
Dim CompanyName As String = "" 
Dim Builder As New OleDb.OleDbConnectionStringBuilder With {.Provider = "Microsoft.ACE.OLEDB.12.0", .DataSource = IO.Path.Combine(Application.StartupPath, "Database1.accdb")} 
Using cn As New OleDb.OleDbConnection With {.ConnectionString = Builder.ConnectionString} 
    Using cmd As New OleDb.OleDbCommand With {.Connection = cn} 
     cmd.CommandText = "SELECT CompanyName FROM Customer WHERE Identifier [email protected]" 
     Dim NameParameter As New OleDb.OleDbParameter With {.DbType = DbType.Int32, .ParameterName = "P1", .Value = Identifier} 
     cmd.Parameters.Add(NameParameter) 
     cn.Open() 
     CompanyName = CStr(cmd.ExecuteScalar) 
    End Using 
End Using 
Return CompanyName 
End Function 
Public Function GetCustomer(ByVal Identifier As Int32) As Customer 
Dim Customer As New Customer 

Dim CompanyName As String = "" 
Dim Builder As New OleDb.OleDbConnectionStringBuilder With {.Provider = "Microsoft.ACE.OLEDB.12.0", .DataSource = IO.Path.Combine(Application.StartupPath, "Database1.accdb")} 
Using cn As New OleDb.OleDbConnection With {.ConnectionString = Builder.ConnectionString} 
    Using cmd As New OleDb.OleDbCommand With {.Connection = cn} 
     cmd.CommandText = "SELECT Identifier, CompanyName,ContactName FROM Customer WHERE Identifier [email protected]" 
     Dim NameParameter As New OleDb.OleDbParameter With {.DbType = DbType.Int32, .ParameterName = "P1", .Value = Identifier} 
     cmd.Parameters.Add(NameParameter) 
     cn.Open() 
     Dim Reader As OleDb.OleDbDataReader = cmd.ExecuteReader 
     If Reader.HasRows Then 
      Reader.Read() 
      Customer.Identifier = Identifier 
      Customer.Name = Reader.GetString(1) 
      Customer.ContactName = Reader.GetString(2) 
     End If 
    End Using 
End Using 

Return Customer 

End Function 
End Module 


Public Class Customer 
Public Property Identifier As Int32 
Public Property Name As String 
Public Property ContactName As String 
Public Sub New() 
End Sub 
End Class 
+0

任何有关此问题的任何建议? – James

+0

创建另一个'GetCustomerNameByIdentifier',它接受一个字符串并传递字符串。然后将您的SQL更改为您要查询的任何字段。 – Steve

+0

林不知道我明白你的意思@Steve,你介意多解释一下 – James

回答

0

像这样:

Public Function GetCustomerNameByName(ByVal Name As String) As String 
Dim CompanyName As String = "" 
Dim Builder As New OleDb.OleDbConnectionStringBuilder With {.Provider = "Microsoft.ACE.OLEDB.12.0", .DataSource = IO.Path.Combine(Application.StartupPath, "Database1.accdb")} 
Using cn As New OleDb.OleDbConnection With {.ConnectionString = Builder.ConnectionString} 
    Using cmd As New OleDb.OleDbCommand With {.Connection = cn} 
     cmd.CommandText = "SELECT CompanyName FROM Customer WHERE CustName [email protected]" 
     Dim NameParameter As New OleDb.OleDbParameter With {.DbType = DbType.String, .ParameterName = "P1", .Value = Name} 
     cmd.Parameters.Add(NameParameter) 
     cn.Open() 
     CompanyName = CStr(cmd.ExecuteScalar) 
    End Using 
End Using 
Return CompanyName 
End Function 
+0

它仍然有验证代码,虽然cmd.CommandText =“SELECT CompanyName FROM Customer WHERE CustName = @ P1”in the data operationcs code @ p1 is如果Int32?林不知道如果我认为自己 – James

+0

对不起,我错过了将参数类型更改为字符串。 – Steve

+0

嗨@Steve,我刚刚运行该代码,它似乎加载然后得到一个OleDbException未处理,并给出以下内容:在System.Data.dll 发生类型'System.Data.OleDb.OleDbException'未处理的异常附加信息:对于一个或多个所需参数没有给出值。 - 建议它不能看到表或DB – James