2016-09-02 6 views
0

ok私のキーボードで頭をもう一度叩いています。これまでのヘルプフォームでは、私が望む1つのフィールドを読むためのmysqlクエリを取得しました。私の問題はこれです:21ボタンキャプションのデータベースをループする方法

概念。テーブルには、キャプションのようなボタンデータや、後者のための他のものがあります。 TABのように、ボタンはクリックでアクティブになります。 < - 今度は重要なことではありません。私がこの部分を理解したら、私はそれを簡単に理解できると尋ねています。そう。私は21のボタンを持っています。各ボタンには、データベースにあるキャプションが必要です。私が理解しようとしているのは、データベースをループしてボトルトン1のキャプションを取得し、次にボタン2をキャプチャするなどです。現在、21個のボタンすべてに同じキャプションがロードされています。ここに私のコードです:

Private Sub frm_MainConsole_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    'TODO: This line of code loads data into the 'PosdbDataSet.button_cat' table. You can move, or remove it, as needed. 
    Me.Button_catTableAdapter.Fill(Me.PosdbDataSet.button_cat) 

    'Procedures 
    Me.Show() 
    ' Variables 

    Dim query As String 
    Dim command As MySqlCommand 
    Dim reader As MySqlDataReader 
    Dim TargetButton As Button 

    Try 
     'For button 1 through 21 
     dbconn() 
     For i As Integer = 1 To 21 Step 1 
      query = "select btn_caption from button_cat" 
      command = New MySqlCommand(query, conn) 
      reader = command.ExecuteReader() 
      reader.Read() 
      'btn_Cat1.Text = reader("btn_caption") 
      'Get the button from the controls container 
      TargetButton = Controls("btn_Cat" & i) 
      TargetButton.Text = reader("btn_caption") 
      reader.Close() 
     Next 
     conn.Close() 
    Catch ex As MySqlException 
     MessageBox.Show(ex.Message) 
    Finally 
     conn.Dispose() 
    End Try 


End Sub 

私はあなたに私を与えることができますありがとうございます。私はコードを見て、それを操作して、私がそれが必要なことをすることによって学びます。

Visual Studioで2015コミュニティとMySQLを使用しています。私のデータベースにはVisual Basicで書いています。

答えて

1

ループサイクルごとにクエリを再実行しています。

''For button 1 through 21 
    dbconn() 

    query = "select btn_caption from button_cat" 
    command = New MySqlCommand(query, conn) 
    reader = command.ExecuteReader() 

    For i As Integer = 1 To 21 Step 1 

     reader.Read() 
     ''btn_Cat1.Text = reader("btn_caption") 
     ''Get the button from the controls container 
     TargetButton = Controls("btn_Cat" & i) 
     TargetButton.Text = reader("btn_caption") 

    Next 
    reader.Close() 
    conn.Close() 

それは常に、データベースから返された21件の結果があることを前提として、このコードが潜在的に問題があることに留意してください:

はこのような何かを行います。

問題がないようにしたい場合はより少ない21件のレコードがある場合に返さ、あなたはこのような何か行うことができます。

''For button 1 through 21 
    dbconn() 

    query = "select btn_caption from button_cat" 
    command = New MySqlCommand(query, conn) 
    reader = command.ExecuteReader() 

    For i As Integer = 1 To 21 Step 1 

     If Not reader.Read() Then 
      ''We are out of records. Exit the loop. 
      Exit For 
     End If 

     ''btn_Cat1.Text = reader("btn_caption") 
     ''Get the button from the controls container 
     TargetButton = Controls("btn_Cat" & i) 
     TargetButton.Text = reader("btn_caption") 

    Next 
    reader.Close() 
    conn.Close() 

をあなたはまた、whileループとしてこれを書き換えることができますが、再する必要がありますあなたのiカウンターを実装してください。

+0

ロバートは、常に21個のボタンがありますが、場合に応じてコードを実行できる別の方法を提案していますか?将来の歓迎のために?パスカルでは、私はデータベース(DBase)からレコード数を取得し、すべてのステップを実行するために私の整数のために使用することができます。しかし、私はVB 2015には新しく、古いタイマーの問題を抱えています。 hahaha –

+0

自分の答えを編集して、ループの最小限の変更でどのようにできるか説明しました。通常、これはwhileループを使用して記述されますが、forループはこの場合に機能します。 –

+1

あなたは人です。どうもありがとうございます。今すぐこのコードを見て、それが助けになります。私はちょっとした人に手を携えているし、物事を見ていることが私の学びに役立っています。 NEWBIEをVBに対処してくれてありがとうございました。質問されていない質問は答えが見つかりません。もう大丈夫です。 –

関連する問題