2017-05-24 5 views
1

私は、Visual Basicフォームを使用して、単一の部品のシリアル番号を生成してSQLデータベースに書き戻す入力フィールドを持っています。 vbフォーム内の数量フィールドに基づいて複数のシリアルを生成するにはどうすればよいですか?SQLはVBフォームの値に基づいて複数のレコードを挿入します

SQL DB:

create table serialnumbers (
    serial int IDENTITY(10000,1), 
    workorder varchar(50), 
    partnumber varchar(50), 
    employeeid int, 
    [day] varchar(50) 
) 

VB:

Public Class Form1 
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    Form2.Show() 
End Sub 

Public Sub ClearTextBoxes(frm As Form) 

    For Each Control In frm.Controls 
     If TypeOf Control Is TextBox Then 
      Control.Text = ""  'Clear all text' 
     End If 
    Next Control 

End Sub 


Private Sub BTNSUBMIT_Click(sender As Object, e As EventArgs) Handles BTNSUBMIT.Click 
    datetime.Text = Date.Now.ToString 
    If workorder.Text = "" Or partnumber.Text = "" Or employeeid.Text = "" Or quantity.Text = "" Or datetime.Text = "" Then 
     MsgBox("Please Enter All Required Fields") 
    Else 

     Try 
      cmd.CommandType = System.Data.CommandType.Text 
      cmd.CommandText = "Insert Into famem1 Values ('" & workorder.Text & "', '" & partnumber.Text & "', '" & employeeid.Text & "', '" & datetime.Text & "') " 

      cmd.Connection = con 
      con.Open() 
      cmd.ExecuteNonQuery() 
      MsgBox("Successfully Added", MsgBoxStyle.Information, "add") 

     Catch ex As Exception 
      MessageBox.Show(ex.Message) 

     End Try 
     Call ClearTextBoxes(Me) 
    End If 
End Sub 
End Class 
+4

ボビーテーブルが訪問する前に、パラメータ化されたクエリを読み、理解し、使用する前に、何かを行う必要があります。 http://bobby-tables.com/また、接続とコマンドオブジェクトをUSING文で囲む必要があります。そうすれば、接続を接続プールに戻すことができます。 –

+0

手元の質問に関しては、私はあなたが何を望んでいるか完全にはわかりません。ユーザー入力に基づいて特定の数の同じ行を作成したいですか? –

+0

はい。ユーザーがフォームに数量を入力すると、その数の行がSQLに書き込まれることが期待されます。 – dustinw

答えて

2

は、ループ内であなたの挿入手順を置く:

For a = 1 to 20 'or whatever qty the user inputs 

    Using con As New OleDb.OleDbConnection 

      con.ConnectionString = "Provider = Microsoft.ACE.OLEDB.12.0;" & _ 
            "Data Source = " & auth_path 

      Dim sqlcommand As New OleDb.OleDbCommand 

      'set work order number 
      'set part number 
      'set employee id 

      'generate serial here 

      con.Open() 

      With sqlcommand 
       .CommandText = "Insert Into ..... " 
       .Connection = con 
       .ExecuteNonQuery() 

      End With 

    End Using 



Next 

それとも次のようなデータベースにいくつかのフィールドを追加することができますserial_1、serial_2など

そして、qtyに基づいて、これらのフィールドをIF Thenステートメントで更新することができます。

If Cint(txt_qty.text) >= 2 Then 

.... ' update the record with serial_2 

End If 

If Cint(txt_qty.text) >= 3 Then 

.... ' update the record with serial_3 

End If 
+0

ありがとうございますが、最初のシナリオでは1つのレコードしかSQLに書き込まれません。 2番目のシナリオは、シリアルを自動生成する必要があるため機能しません。 – dustinw

+0

若干異なるデータベースプロバイダを使用していますが、私が意味することをよりよく説明するために自分の答えを更新しましたが、私はあなたに何を見せようとしているのか理解しておいてください –

+0

すみません。コードは機能します。あなたの時間をありがとう。 – dustinw

関連する問題