【问题标题】:Use input from form1.textbox to mysql connection in form2使用 form1.textbox 中的输入到 form2 中的 mysql 连接
【发布时间】:2014-04-03 17:48:46
【问题描述】:

如何使用从 Form1 中的文本框接收到的输入与 form2 中的 mySQL 建立连接。 现在我的程序是这样的:

Form1 打开并询问服务器、用户名、密码。 有 3 个按钮可以使用 form2 模块打开不同的表单,其中 form2 是 SQL 连接字符串。

我现在在 form2 的连接字符串中有这个:

Public Const cnString As String = "datasource=" & DBSelector.txtServer.Text & ";" _
                                  & "username=" & DBSelector.txtUsername.Text & ";" _
                                  & "password=" & DBSelector.txtPassword.Text & ";" _
                                  & "database=" & DBSelector.txtDatabase.Text & ";"

现在我遇到了这个错误:“对非共享成员的引用需要对象引用。” 我是 Visual Basic 的新手,我无法解决这个问题。 我认为这是因为 Form2 是一个模块,而不是一个公共类。

我希望有人可以帮助我。提前致谢!

【问题讨论】:

    标签: vb.net winforms


    【解决方案1】:
    1. 要“实时”引用另一个表单,您必须有一个变量,它包含第二个表单的实例。

      要从主窗体代码中引用新窗体,您可以使用与它创建的第二窗体相同的变量。

      在您的情况下 - 从被调用表单引用到调用者表单,您可以 1. 将 Forms 实例存储在 Form 本身的静态变量中,2. 将其作为参数传递给 Second Form构造函数(New() Sub)。

      或者您可以通过将您的信息直接发送给构造函数来跳过所有主题,因此:

      Main-From 代码 - 在您的情况下为 DBSelector:

      Public Class DBSelector
      
          ...
      
          Public Sub LanchSecondForm()
              Dim form2 As Form2 = New Form2(txtServer.Text, _
                                             txtUsername.Text, _
                                             txtPassword.Text, _
                                             txtDatabase.Text)
      
              form2.Show()
          End Sub
      
          ...
      
      End Class
      

      第二种形式的代码:

      Public Class Form2
      
          ...
      
          Public cnString As String
          Public Sub New(datasourcePrm As String, _
                         usernamePrm As String, _
                         passwordPrm As String, _
                         databasePrm As String)
              cnString = "datasource=" & datasourcePrm & ";" _
                       & "username=" & usernamePrm & ";" _
                       & "password=" & passwordPrm & ";" _
                       & "database=" & databasePrm & ";"
      
              InitializeComponent()
          End Sub
      
          ...
      
      End Class
      
    2. Const 表示一个绝对值,在编译时已知。它不可能分配一个“动态”值,所以:

      Public a As String
      Public Const b As String = a       'error: a its a variable
      Public Const b As String = "abc"   'correct
      

    希望我能理解并提供帮助。

    【讨论】:

    • 我想我现在有点明白了,但是我在form1(DBSelector)中没有什么要编辑的吗?因为当我这样尝试时,我无法连接到数据库。很抱歉我需要很多信息,但我对 Visual Basic 很陌生。
    • @SCALETTA 我编辑了我的答案。之前我错了,我认为 DBSeletor 是次要的,现在我明白了它是主要的。
    • 感谢您的帮助,但我忘了说 Form2(gModule) 是一个模块,我不能输入“Dim gmodule As gModule = New gModule”。再次抱歉,我忘了说它是一个模块...我对 Visual Basic 很陌生,我不知道 VB 中的每个函数和类..
    • 1.删除我的代码 2. 在模块中创建一个公共变量,以便 Public cnString As String 3 。从 DBSelector 使用此代码:gModule.cnString = = "datasource=" & DBSelector.txtServer.Text & ";" _ & "username=" & DBSelector.txtUsername.Text & ";" _ & "password=" & DBSelector.txtPassword.Text & ";" _ & "database=" & DBSelector.txtDatabase.Text & ";"
    • 好了,现在可以了!!!很多很多,非常感谢。没有你,我永远不可能做到这一点:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-04
    相关资源
    最近更新 更多