Page 1 of 1

ขอคำปรึกษาเกี่ยวกับการเขียน Visual Basic 2010 หน่อยครับ

Posted: Fri Sep 28, 2012 6:05 pm
by khosit_19
:D ไม่ได้แวะเข้ามานานเลย อาจารย์สบายดีน่ะครับ วันนี้ผมมีเรื่องจะขอคำปรึกษาหน่อยครับ

ตอนนี้ผมทำโปรเจคเกี่ยวกับการคัดแยก Product ที่ไม่ได้มี Plan ผลิตในวันนั้นด้วยวิธีการสแกนบาร์โค้ดข้างกล่องที่วิ่งอยู่บน conveyer ครับถ้าหาก Product ตัวไหนที่ไม่ได้เป็น Plan ผลิตของวันนั้นให้ส่งค่าไปให้ Microcontrollor เพื่อจะผลัก Product ตัวนั้นออกและทำการแสดง Model พร้อมกับจำนวนที่นับได้แบบ Real time ใน Tab Monitor ครับ

ขั้นตอนการทำงานของโปรแกรมคือ ป้อน Plan ผลิตของวันลงไปโดยการเลือกรุ่น Model แล้วใส่จำนวนลงไป จากนั้นกด Submit ทำซ้ำจนครบตาม Plan ของวันหลังจากเลือกครบทุกรุ่นแล้ว กด System Start เพื่อให้ระบบเริ่มทำงาน

ปัญหาของผมคือ ผมไม่รู้จะเขียนยังไงให้นำค่าที่ผมป้อนเข้าไป ใน Tab Insert นำไปแสดงใน Tab Monitor โดยค่าที่แสดงคือ ชื่อ Model กับจำนวนที่ผลิต โดยเมื่อมีการอ่านค่าจาก สแกนเนอร์แล้วให้ทำการนับจำนวนของ Model ที่อ่านได้ไปเรื่อยๆครับ

Code: Select all

Imports System
Imports System.ComponentModel
Imports System.Threading
Imports System.IO.Ports


Public Class Form1
    Delegate Sub SetTextCallback(ByVal [text] As String)
    Dim code As String = ""
    Dim counter As Integer = 0
    Dim SetAIR As Integer = 0


    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        SerialPort1.Open()
        NumberAIR.Enabled = False
        Submit.Enabled = False
        AQ_Box.Enabled = False
        AQV_Box.Enabled = False
        AS_Box.Enabled = False
        ASV_Box.Enabled = False
        ARX_Box.Enabled = False
    End Sub

    Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As FormClosingEventArgs) Handles Me.FormClosing
        Dim msgresult As DialogResult
        msgresult = MessageBox.Show(" Would you like to close this program ?", "Confirm to close program..", MessageBoxButtons.OKCancel)

        If msgresult = DialogResult.Cancel Then
            e.Cancel = False
        End If
    End Sub

    Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
        code = SerialPort1.ReadExisting
        MessageBox.Show(code)
    End Sub

    Private Sub AQ_Check_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AQ_Check.CheckedChanged
        AQ_Box.Enabled = True
        AQV_Box.Enabled = False
        AS_Box.Enabled = False
        ASV_Box.Enabled = False
        ARX_Box.Enabled = False
        AQV_Box.SelectedIndex = -1
        AS_Box.SelectedIndex = -1
        ASV_Box.SelectedIndex = -1
        ARX_Box.SelectedIndex = -1
        NumberAIR.Enabled = True
        Submit.Enabled = True
    End Sub

    Private Sub AQV_Check_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AQV_Check.CheckedChanged
        AQ_Box.Enabled = False
        AQV_Box.Enabled = True
        AS_Box.Enabled = False
        ASV_Box.Enabled = False
        ARX_Box.Enabled = False
        AQ_Box.SelectedIndex = -1
        AS_Box.SelectedIndex = -1
        ASV_Box.SelectedIndex = -1
        ARX_Box.SelectedIndex = -1
        NumberAIR.Enabled = True
        Submit.Enabled = True
    End Sub

    Private Sub AS_Check_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AS_Check.CheckedChanged
        AQ_Box.Enabled = False
        AQV_Box.Enabled = False
        AS_Box.Enabled = True
        ASV_Box.Enabled = False
        ARX_Box.Enabled = False
        AQ_Box.SelectedIndex = -1
        AQV_Box.SelectedIndex = -1
        ASV_Box.SelectedIndex = -1
        ARX_Box.SelectedIndex = -1
        NumberAIR.Enabled = True
        Submit.Enabled = True
    End Sub

    Private Sub ASV_Check_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ASV_Check.CheckedChanged
        AQ_Box.Enabled = False
        AQV_Box.Enabled = False
        AS_Box.Enabled = False
        ASV_Box.Enabled = True
        ARX_Box.Enabled = False
        AQ_Box.SelectedIndex = -1
        AQV_Box.SelectedIndex = -1
        AS_Box.SelectedIndex = -1
        ARX_Box.SelectedIndex = -1
        NumberAIR.Enabled = True
        Submit.Enabled = True
    End Sub

    Private Sub ARX_Check_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ARX_Check.CheckedChanged
        AQ_Box.Enabled = False
        AQV_Box.Enabled = False
        AS_Box.Enabled = False
        ASV_Box.Enabled = False
        ARX_Box.Enabled = True
        AQ_Box.SelectedIndex = -1
        AQV_Box.SelectedIndex = -1
        AS_Box.SelectedIndex = -1
        ASV_Box.SelectedIndex = -1
        NumberAIR.Enabled = True
        Submit.Enabled = True
    End Sub

    Private Sub NumberAIR_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NumberAIR.TextChanged
        If NumberAIR.Text = "" Then
            SetAIR = 0
            Exit Sub
        End If
        If Not IsNumeric(NumberAIR.Text) Then
            MessageBox.Show("กรุณาใส่ค่าเฉพาะตัวเลขครับ...")
            NumberAIR.Text = ""
        End If
        If IsNumeric(NumberAIR.Text) Then
            SetAIR = NumberAIR.Text
        End If
    End Sub


    Private Sub Submit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Submit.Click
        Dim AQ_model As String = AQ_Box.SelectedItem
        Dim AQV_model As String = AQV_Box.SelectedItem
        Dim AS_model As String = AS_Box.SelectedItem
        Dim ASV_model As String = ASV_Box.SelectedItem
        Dim ARX_model As String = ARX_Box.SelectedItem

        If (SetAIR <> 0) And (AQ_Box.SelectedIndex <> -1) Then
            ListAIR.Items.Add(" Model : " + AQ_model + "     Amount : " + CStr(SetAIR))
        ElseIf (SetAIR <> 0) And (AQV_Box.SelectedIndex <> -1) Then
            ListAIR.Items.Add(" Model : " + AQV_model + "     Amount : " + CStr(SetAIR))
        ElseIf (SetAIR <> 0) And (AS_Box.SelectedIndex <> -1) Then
            ListAIR.Items.Add(" Model : " + AS_model + "     Amount : " + CStr(SetAIR))
        ElseIf (SetAIR <> 0) And (ASV_Box.SelectedIndex <> -1) Then
            ListAIR.Items.Add(" Model : " + ASV_model + "     Amount : " + CStr(SetAIR))
        ElseIf (SetAIR <> 0) And (ARX_Box.SelectedIndex <> -1) Then
            ListAIR.Items.Add(" Model : " + ARX_model + "     Amount : " + CStr(SetAIR))
        End If
    End Sub

    Private Sub ListAIR_MouseDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ListAIR.MouseDoubleClick
        ListAIR.Items.Remove(ListAIR.SelectedItem)
    End Sub

    Private Sub Reset_List_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Reset_List.Click
        ListAIR.Items.Clear()
    End Sub

End Class

Re: ขอคำปรึกษาเกี่ยวกับการเขียน Visual Basic 2010 หน่อยครับ

Posted: Fri Sep 28, 2012 6:21 pm
by snasui
:D ลองแนบ Project มาดูกันครับ

Re: ขอคำปรึกษาเกี่ยวกับการเขียน Visual Basic 2010 หน่อยครับ

Posted: Fri Sep 28, 2012 7:06 pm
by khosit_19
ไฟล์งานครับอาจารย์

Re: ขอคำปรึกษาเกี่ยวกับการเขียน Visual Basic 2010 หน่อยครับ

Posted: Fri Sep 28, 2012 9:35 pm
by snasui
:D ในแถบ Monitor ไม่พบว่ามี ListBox หรือ Object อื่น ๆ ที่พร้อมจะรับค่ามาจาก ListBox ในแถบ Insert Data เลยครับ ลองเพิ่ม Object แล้วเขียน Code มาก่อน ติดตรงไหนจะได้ช่วยกันดูต่อครับ

Re: ขอคำปรึกษาเกี่ยวกับการเขียน Visual Basic 2010 หน่อยครับ

Posted: Sat Sep 29, 2012 12:24 am
by khosit_19
:) ใช่ครับอาจารย์ ผมยังไม่ได้สร้าง object ไว้ในหน้า Tab Monitor ครับ เพราะว่า Plan แต่ละวันจะมีจำนวน Model ไม่เท่ากันครับ เลยไม่รู้ว่าจะสร้างรอไว้กี่ช่องครับ ถ้าผมสร้าง Listbox ไว้ มันจะสามารถนับค่าจำนวนที่ผลิตใน Model นั้นๆได้แบบ Real time รึเปล่าครับเมื่อมีการสแกนบาร์โค้ดเข้ามา

หน้าที่ของ Tab Monitor ก็คือ ใช้แสดงจำนวน Model ที่เป็น Plan ผลิตในวันนั้นทั้งหมดพร้อมทั้ง จำนวนที่ผลิต และจำนวนที่นับได้ครับ

ปัญหาของผม คือ ไม่รู้จะเลือกใช้ object ตัวไหนให้เหมาะสมกับงานนี้ครับ :(

Re: ขอคำปรึกษาเกี่ยวกับการเขียน Visual Basic 2010 หน่อยครับ

Posted: Sat Sep 29, 2012 6:33 am
by snasui
:D การที่จะทำเช่นนั้นปกติแล้วจะต้องเขียนให้ติดต่อฐานข้อมูลไม่ใช่เก็บใน ListBox หรือ Object ใด ๆ ในหน้า User Interface หรือส่วนติดต่อผู้ใช้นี้ครับ เมื่อมีการเพิ่ม Plan เข้าไปก็ให้ไปเก็บในฐานข้อมูลก่อนแล้วค่อยนำมาแสดงใน Control การสแกนไปก็เช่นเดียวกันต้องไปเก็บในฐานข้อมูลแล้วค่อยนำมาแสดงใน Control จึงจะสามารถ Query เฉพาะค่าใด ๆ ที่ต้องการ และหาผลลัพธ์ในรูปแบบต่าง ๆ ได้ตามต้องการ หากยังไม่ได้ศึกษาเรื่อง SQL ก็คงต้องเริ่มศึกษา เพราะจำเป็นต้องใช้สำหรับงานลักษณะนี้ครับ

ส่วนแสดงผลโดยปกติแล้วหากแสดงจำนวนหลาย ๆ บรรทัด ปกติแล้วก็จะใช้พวก DataGridView เนื่องจากมีลักษะเป็นตาราง ง่ายต่อการ Sort การดูครับ

Re: ขอคำปรึกษาเกี่ยวกับการเขียน Visual Basic 2010 หน่อยครับ

Posted: Sat Sep 29, 2012 8:51 am
by khosit_19
ตอนนี้ผมยังไม่มีความรู้เรื่อง SQL เลยงั้นตอนนี้ผมขอศึกษาเรื่อง SQL ก่อนน่ะครับ แล้วจะเข้ามาปรึกษาใหม่ครับ :D

Re: ขอคำปรึกษาเกี่ยวกับการเขียน Visual Basic 2010 หน่อยครับ

Posted: Mon Oct 08, 2012 8:08 pm
by khosit_19
อาจารย์ครับตอนนี้ผมศึกษาเรื่องการใช้งาน Data base มาแล้วครับ แต่ผมติดตรงที่ผมจะเขียนโค้ดเพื่อจะนำค่าแต่ละค่ามาเก็บใน data base ได้ยังไงครับ โดยการสแกนจาก list box แต่ละบรรทัดครับ ผมลองศึกษาจากโค้ดเก่าที่อาจารย์เคยแนะนำมาให้เมื่อโปรเจคเก่าผม แต่เหมือนมันจะใช้ได้บางส่วนครับ

โดยค่าที่ต้องการคือ
- รุ่นของ Model
- ค่าที่อยู่ใน [...]
- จำนวนผลิตภัณฑ์

แล้วผมจะนำค่าเหล่านี้ไปใส่ใน data base ครับ

Re: ขอคำปรึกษาเกี่ยวกับการเขียน Visual Basic 2010 หน่อยครับ

Posted: Mon Oct 08, 2012 9:13 pm
by khosit_19
ส่วนไฟล์โปรเจค ผมส่งให้ทาง Email น่ะครับ

Re: ขอคำปรึกษาเกี่ยวกับการเขียน Visual Basic 2010 หน่อยครับ

Posted: Tue Oct 09, 2012 1:16 pm
by snasui
:D ผมเช็คเมลแล้วยังไม่ได้รับไฟล์ครับ

Re: ขอคำปรึกษาเกี่ยวกับการเขียน Visual Basic 2010 หน่อยครับ

Posted: Tue Oct 09, 2012 2:07 pm
by khosit_19
รบกวนอาจารย์เช็คดูอีกทีน่ะครับ ผมส่งใหม่ให้แล้วครับ

Re: ขอคำปรึกษาเกี่ยวกับการเขียน Visual Basic 2010 หน่อยครับ

Posted: Tue Oct 09, 2012 2:47 pm
by snasui
:D ผมได้รับไฟล์แล้วครับ ไม่ทราบว่าต้องการจะเขียน Code เพื่อส่งข้อมูล Model ที่เลือกไปเก็บไว้ที่ตารางใดของ Database NORTHWND.MDF ครับ

Re: ขอคำปรึกษาเกี่ยวกับการเขียน Visual Basic 2010 หน่อยครับ

Posted: Tue Oct 09, 2012 8:30 pm
by khosit_19
ผมจะนำไปเก็บไว้ใน Table AIRmodel ครับ ผมสร้างตารางไว้โดยนำ model ไปเก็บในช่อง model แล้ว code 4 ตัวใน [...] เก็บไว้ใน code ครับ ส่วนจำนวนก็ใน Amount ครับ

Re: ขอคำปรึกษาเกี่ยวกับการเขียน Visual Basic 2010 หน่อยครับ

Posted: Wed Oct 10, 2012 4:59 pm
by snasui
:D ผมเปิดดู Diagram แล้วไม่พบว่ามี Table ที่ว่านั้นครับ ลองจับภาพ Diagram ของ Table มาให้ดูหน่อยครับ

Re: ขอคำปรึกษาเกี่ยวกับการเขียน Visual Basic 2010 หน่อยครับ

Posted: Wed Oct 10, 2012 11:08 pm
by khosit_19
จาก Table นี้ครับอาจารย์ แต่ไฟล์ที่ผมส่งไปขาดช่อง Amount ครับ :D

Re: ขอคำปรึกษาเกี่ยวกับการเขียน Visual Basic 2010 หน่อยครับ

Posted: Thu Oct 11, 2012 11:54 am
by snasui
:D เพิ่ม 2 ตัวนี้ที่ด้านบน

Code: Select all

Imports System.Data
Imports System.Data.SqlClient 
จากนั้นลองปรับใช้ Code ตามด้านล่างดูซึ่งเป็นการเขียนข้อมูลลง Database เมื่อผ่านแล้วค่อยมาดูกันต่อ สำหรับ Table นั้นผมเปิด Project แล้วยังมองไม่เห็นครับ

Code: Select all

    Private Sub Send_Data_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Send_Data.Click
        Dim con As New SqlConnection
        Dim cmd As New SqlCommand
        Try
            con.ConnectionString = "Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\NORTHWND.MDF;Integrated Security=True;Connect Timeout=30;User Instance=True"
            con.Open()
            cmd.Connection = con
            cmd.CommandText = "INSERT INTO table([field1], [field2]) VALUES([Value1], [Value2])"
            cmd.ExecuteNonQuery()

        Catch ex As Exception
            MessageBox.Show("Error while inserting record on table..." & ex.Message, "Insert Records")
        Finally
            con.Close()
        End Try
    End Sub

Re: ขอคำปรึกษาเกี่ยวกับการเขียน Visual Basic 2010 หน่อยครับ

Posted: Sat Oct 13, 2012 5:45 pm
by khosit_19
ขอบคุณครับอาจารย์ ผมจะลองไปประยุกต์ใช้ดูครับ