 |
|
|
 |
 |
|
ลองออกแบบวิธีการด้วยมือก่อนครับ
แล้วค่อยเอาวิธีการที่ได้มาเขียนอีกที
|
 |
 |
 |
 |
Date :
2009-12-11 09:00:12 |
By :
tungman |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ผมเคยลองออกแบบวิธีการด้วยมือแล้วครับ ใช้ excel
แล้วเลยได้เป็นหลักการที่บอกไปครับ คือเข้าใจหลักการ
แต่ผมไม่สามารถแปลงเป็น code ได้ครับ
เนื่องจากยอมรับว่าเริ่มต้นแบบไม่เป็นเท่าไหร่
เพิ่งจะมาศึกษาจริงจังช่วงนี้นะครับ
เลยอยากรบกวนขอคำแนะนำเพิ่มเติมด้วยครับ
ขอบคุณมากครับ
|
 |
 |
 |
 |
Date :
2009-12-11 11:18:36 |
By :
จขกท |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
vb6 หรือ .Net ครับ
|
 |
 |
 |
 |
Date :
2009-12-11 11:22:24 |
By :
Sek-Artdrinker |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
.net ครับผม
|
 |
 |
 |
 |
Date :
2009-12-11 11:29:10 |
By :
จขกท |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
5คน และสนใจว่ารายได้จากแต่ละงาน
สุดท้ายแล้วรายได้จะกระจาย 5คนพอๆกัน
หมายความว่าไงครับ
แบบนี้หรือเปล่า มี งาน 100 งาน แต่ละงานจะมีรายได้ แตกต่ากันไป
มี คน อยู่ 5 คน แต่ละคนต้องการรายได้ ไม่เท่ากัน
เช่น คน ที่ 1 ต้องการรายได้ 2000 เราจะต้องจัดการจับคู่ให้ คนที่ 1 กับ งาน ว่างานไหน จะทำให้เขาได้รายได้ 2000 หรือ ว่า เขา ต้องทำกี่งานจึงจะได้ รายได้ 2000 แบบนี้อ่ะเปล่าครับ ที่จะทำ
อิอิ อ่านโจทย์ แล้ว งง ครับ ประสบการณ์น้อยเหมือนกัน ^^
|
 |
 |
 |
 |
Date :
2009-12-11 11:44:13 |
By :
ksillapapan |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
1. สร้าง Table ขึ้นมา 2 Table
Table_Work
- WorkID Int, PK, (Index)
- WorkName NVarChar (ชื่องาน)
- InCome Float (รายได้)
- WorkerCode NVarChar (รหัสคนงานที่รับงาน)
Table_Worker
- WorkerID Int, PK, (Index)
- WorkerCode NVarChar (รหัสคนงาน)
- WorkName NVarChar (ชื่อคนงาน)
|
 |
 |
 |
 |
Date :
2009-12-11 11:48:28 |
By :
tungman |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
2. ใส่ข้อมูลคนงานทั้งหมดใน Table_Worker
3. สร้าง Form เพื่อป้อนงานเข้ามา ซึ่งจะมี Input คือ
- ชื่องาน
- รายได้
4. เมื่อกดปุ่ม บันทึก โปรแกรมจะ Insert งานเก็บลงใน Table_Work ส่วนฟิล WorkerCode นั้น
โปรแกรมจะเลือกรหัสคนงานที่มีรายได้รวมน้อยที่สุดขึ้นมา โดยการ Query ข้อมูลจาก Table_Work
Select Sum(Income) As [Income], [WorkerCode] From [Table_Work] Group By [WorkerCode] Order By [Income] ASC
เราก็จะได้คนงานที่มีรายได้รวมน้อยที่สุดมา กรณียังไม่มีงานในฐานข้อมูลเลย ให้เลือกคนงานตาม Index
|
 |
 |
 |
 |
Date :
2009-12-11 11:57:34 |
By :
tungman |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
สรุปคือ รับงานใหม่มาหนึ่งงาน จะจ่ายงานให้คนงานที่มีรายได้รวมน้อยที่สุด
ส่วนโปรแกรม รอผู้ชำนาญ vb app มาตอบ
|
 |
 |
 |
 |
Date :
2009-12-11 12:01:04 |
By :
tungman |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
คือสมมติว่า
มีคน5คนนาย A, B, C, D, E
มีงาน 100งาน แต่ละงานจะให้เบี้ยเลี้ยงแตกต่างกันอยู่ 3เรท คือ 60, 80, 100
ทีนี้สิ่งที่ต้องการก็คือว่า
อยากจะแสดงtableออกมาว่ามี
งาน------------คน
001(60B)
002(80B)
003(60B)
'
'
'
100
แล้วเมื่อกดcommand button แล้วจะจับคนใส่งานให้โดยเงื่อนไขที่ต้องการคือ รายได้ที่พอๆกัน
งาน------------คน
001(60)-----------A
002(80)-----------B
003(60)-----------C
004(100)-----------D
005(80)-----------E
006(100)----------A
007(60)-----------C
'
'
'
100-----------------X
สิ่งที่ทำอยู่ก็คือสร้างdatabase แล้วมีฟิลงาน และก็คน(null) เพื่อรอกดปุ่มแล้วแสดงผล
คือต้องการให้แสดงผลออกมาด้วยอะครับ อาจจะเป็น datagrid
ยังไงก็รบกวนด้วยนะครับ
ขอบคุณมากครับ
|
 |
 |
 |
 |
Date :
2009-12-11 12:04:51 |
By :
จขกท |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
แสดงว่ามีงานอยู่แล้ว
งั้นวนวูปเลย ใช้ algoritm ของผมนั้นแหละ "จะจ่ายงานให้คนงานที่มีรายได้รวมน้อยที่สุด ถ้ายังไม่มีงานให้เลือกคนงานตาม Index"
|
 |
 |
 |
 |
Date :
2009-12-11 12:20:15 |
By :
tungman |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
แต่ก็ยังมีคำถามอยู่ครับว่า
ถ้าหากผมจะลอง coding ใน button ตามalgorithm แล้ว
จะสามารถสั่งให้มันแสดงผลออกมาใน datagrid ได้หรือไม่ครับ
สมมติ datagrid มีfieldของ งานอยู่ แล้วก็ คน แต่คนยังเป็นว่างๆรอการgenจากการกดbutton
ถ้าได้ต้องcodeอย่างไรครับ
แล้วถ้าไม่ได้ ต้องทำยังไงครับ
ขอบคุณทุกคนจริงๆครับ
|
 |
 |
 |
 |
Date :
2009-12-11 12:25:21 |
By :
จขกท |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
datagrid ไม่ได้เก็บข้อมูลครับ ใช้แสดงข้อมูลเฉยๆ
ถ้าข้อมูลใน database เปลี่ยน datagrid ก็เปลี่ยนด้วยครับ
|
 |
 |
 |
 |
Date :
2009-12-11 12:37:27 |
By :
tungman |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
งั้นแสดงว่าผมต้องทำการโปรแกรมก่อนเพื่อจัดงาน แล้วจึงค่อยดึงข้อมูลมาแสดงผลใน datagrid ใช่มั๊ยครับ
|
 |
 |
 |
 |
Date :
2009-12-11 12:45:57 |
By :
จขกท |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ขอเกาศีรษะ 3 แก๊ก
ทำแบบนั้นก็ได้ครับ เขาเรียกว่าเตรียมข้อมูล คือตอนนี้มี 100 มียังไม่มีคนงานใช่ไหมครับ
ซึ่งไม่น่าจะมีให้ทำบ่อยๆ เราก็มาเตรียมข้อมูลโดนจับ map ระหว่างงานกับคนงานให้หมดก่อน
จากนั้นก็ไม่ต้องทำขั้นตอนนี้อีกต่อไป ให้ใช้งานผ่านโปรแกรมเลย คือคราวนี้งานจะเข้ามาทีละ 1 รายการ
โปรแกรมก็จะเลือกคนงานให้เราเอง
ส่วน datagrid นั้นสามารถให้มัน insert ข้อมูลให้มันแสดงผลได้ทันทีครับ (แต่ต้อง bind data ให้มันใหม่ก่อน)
แนะนำให้ จขกท ลองเขียนโปรแกรมง่ายๆ ก่อนครับ ทีละฟังก์ชั่น ดูวิธีการใช้ และผล
จะได้เข้าใจได้ง่ายขึ้น
|
 |
 |
 |
 |
Date :
2009-12-11 13:03:17 |
By :
tungman |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ขอโทษจริงๆนะครับที่ถามเยอะ
แต่ก็ขอบคุณมากจริงๆครับ
ได้ไอเดียเยอะเลยจากที่นั่งหมกหมุ่นอยู่หลายนาน
แต่อาจจะมีปัญหาเกิดขึ้นต่อ - -
ยังไงก็รบกวนด้วยนะครับ
ขอบคุณครับผมคุณ tungman
|
 |
 |
 |
 |
Date :
2009-12-11 13:05:24 |
By :
จขกท |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ถึงคุณ tungman ครับ
คือผมยังมีปัญหาไม่เข้าใจในส่วนนี้นะครับ
โปรแกรมจะเลือกรหัสคนงานที่มีรายได้รวมน้อยที่สุดขึ้นมา โดยการ Query ข้อมูลจาก Table_Work
Select Sum(Income) As [Income], [WorkerCode] From [Table_Work] Group By [WorkerCode] Order By [Income] ASC
ว่าต้องใส่ไว้ตรงไหนในcodeครับ
ตอนนี้ที่ลองทำได้คือการ insert ครับผม
ยังไงรบกวนด้วยนะครับ
|
 |
 |
 |
 |
Date :
2009-12-12 18:14:12 |
By :
จขกท |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
เอา Select Sum(Income) As [Income], [WorkerCode] From [Table_Work] Group By [WorkerCode] Order By [Income] ASC
query ข้อมูลใน db จับยัดเข้า datatable แล้วเรียกใช้ด้วย row[0] ของ datatable นั้น
คนงานที่มีรายได้น้อยที่สุด = datatable.Rows[0]["WorkerCode"].ToString();
แล้วก็นำไปใช้ insert ข้อมูล
ส่วนตรงไหนนั้น ผมนึกไม่นึก
มันแล้วแต่ว่าคุณจะ insert ข้อมูลตรงไหน
|
 |
 |
 |
 |
Date :
2009-12-12 18:30:37 |
By :
tungman |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ถึงคุณ tungman ครับ
ผมลองcodingได้ประมาณนี้ครับ
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
With conn
Dim conn As New MySqlConnection("Database=table;Data Source=localhost;User Id=root;Password=admin")
If .State = ConnectionState.Open Then .Close()
.Open()
End With
Try
Dim strsql As String = TextBox1.Text
da = New MySqlDataAdapter(strsql, conn)
Dim dt As New DataTable
da.Fill(dt)
Dim row As DataRow = dt.Rows(0)("workercode")
dt.Rows(0)("workercode").ToString()
row("workercode") = "insert workercode from table_work where sum(income) as income asc"
DataGridView1.DataSource = dt
conn.Close()
Catch ex As Exception
MessageBox.Show(ex.ToString, "error", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
คือสามารถquery อย่างที่คุณtungmanแนะนำ แต่ไม่สามารถ insert ได้อะครับ มันขึ้นerror เกี่ยวกับ system.datarow ครับ
ทำยังไงดีครับ
|
 |
 |
 |
 |
Date :
2009-12-13 10:36:41 |
By :
จขกท |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
เพิ่มเติมครับ
คือตอนนี้กลายเป็นว่า สามารถ insert ได้แต่มันไม่ได้เป็นการ query ครับ
มันกลับขึ้นเป็น sql เป็น string ธรรมดาครับผม
ทำยังไงดีครับ - - อีกนิดเดียวเอง
|
 |
 |
 |
 |
Date :
2009-12-13 12:16:38 |
By :
จขกท |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
คือผมไม่ค่อยถนัด vb นักนะครับ ขออภัยถ้าโค้ดผิด เพราะโค้ดสด
เอาเป็นว่าเมื่อ คลิก button1 จะทำการ insert งานใหม่พร้อมเลือก WorkerCode มาใส่นะครับ
Code (VB.NET)
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim sqlConnection As SqlConnection
Dim sqlSelectCommand As SqlCommand
Dim sqlInsertCommand As SqlCommand
Dim WorkerCode As String
Dim sqlConnectionString As String
sqlConnectionString = "Database=table;Data Source=localhost;User Id=root;Password=admin"
sqlConnection = New SqlConnection(sqlConnectionString)
Dim sqlSelectCommandString As String
sqlSelectCommandString = "Select Sum(Income) As [Income], [WorkerCode] From [Table_Work] Group By [WorkerCode] Order By [Income] ASC"
sqlSelectCommand = New SqlCommand(sqlSelectCommandString, sqlConnection)
Try
Dim DtWorker As DataTable
DtWorker = New DataTable
Dim sqlDataAdapter As SqlDataAdapter
sqlDataAdapter = New SqlDataAdapter(sqlSelectCommand)
sqlDataAdapter.Fill(DtWorker)
WorkerCode = DtWorker.Rows(0)("WorkerCode")
Catch ex As Exception
MessageBox.Show(ex.Message, "error", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
Dim sqlInsertCommandString As String
sqlInsertCommandString = "Insert Into [Table_Work] ([WorkName], [InCome], [WorkerCode]) Values (@WorkName, @InCome, @WorkerCode)"
sqlInsertCommand = New SqlCommand(sqlInsertCommandString, sqlConnection)
sqlInsertCommand.Parameters.AddWithValue("@WorkName", TextBoxWorkName.Text)
sqlInsertCommand.Parameters.AddWithValue("@InCome", Double.Parse(TextBoxInCome.Text))
sqlInsertCommand.Parameters.AddWithValue("@WorkerCode", WorkerCode)
Try
sqlConnection.Open()
sqlInsertCommand.ExecuteNonQuery()
sqlConnection.Close()
Catch ex As Exception
MessageBox.Show(ex.Message, "error", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
|
 |
 |
 |
 |
Date :
2009-12-13 20:13:43 |
By :
tungman |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ขอบคุณมากครับ
พบว่ามีปัญหาตรง
sqlInsertCommand.Parameters.AddWithValue("@WorkerCode", WorkerCode)
มันทำให้เวลาinsert ลง db แล้วกลายเป็นค่า null ทั้งหมดเลยครับ
ต้องแก้ไขยังไงครับ
|
 |
 |
 |
 |
Date :
2009-12-13 21:55:35 |
By :
จขกท |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
แสดงว่าใน [Table_Work] ยังไม่มีข้อมูลแน่เลย
ต้องเขียนเงื่อนไขเพิ่มครับว่า ถ้ายังไม่มีข้อมูลหรือยังแจกงานให้คนงานไม่ครบทุกคน
ให้ไปเอาข้อมูลจาก [Table_Worker] ครับ
ลองเขียนเองแป๊บนะ เพราะตอนนี้ผมติดไวรัส มึนหัวมากๆ
ถ้าไม่ได้อย่างไรบอกด้วย
|
 |
 |
 |
 |
Date :
2009-12-15 13:30:27 |
By :
tungman |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|