Page 1 of 1
การดึงข้อมูลจากฐานข้อมูล
Posted: Wed May 30, 2012 1:19 pm
by marupong
ขออนุญาต เรียนถามอาจารย์ดังต่อไปนี้นะครับ
1.ผมได้สร้างฟอร์มในการบันทึกพัสดุและไปรษณีย์ขึ้นมา อยู่ใน sheet ระบบบันทึกข้อมูลไปรษณีย์ โดยข้อมูลที่บันทึกจะไปอยู่ที่ sheet postdata
2.ผมต้องการดึงข้อมูล sheet postdata มาแสดงใน sheet ทะเบียน โดยต้องการเฉพาะข้อมูล ชื่อ นามสกุล บ้านเลขที่ และเลขทะเบียน โดยอ้างอิงจากวันที่ คือเมือพิมพ์วันที่ ในช่อง C2 ข้อมูลทั้งหมดจะแสดงขึ้นมา
ขอบคุณอาจารย์อย่างสูงครับ
Re: การดึงข้อมูลจากฐานข้อมูล
Posted: Wed May 30, 2012 2:08 pm
by snasui

ได้เขียน Code สำหรับทั้งสองข้อไว้แล้วหรือไม่ครับ อยู่ที่ Procedure ใด ติดขัดตรงส่วนใดครับ

Re: การดึงข้อมูลจากฐานข้อมูล
Posted: Wed May 30, 2012 2:13 pm
by marupong
สำหรับข้อ 1 ผมสร้างฟอร์มไว้ เรียบร้อยแล้วครับ สามารถบันทึกข้อมูลได้ปกติ แต่ผมไม่สามารถเขียน โค้ดเพื่อดึง ข้อมูล มาแสดงใน sheet ทะเบียนได้ครับ ศึกษา จากเว็บของอาจารย์หลายวันไม่สำเร็จผมเลย เลยอยากขอคำปรึกษาครับ
Re: การดึงข้อมูลจากฐานข้อมูล
Posted: Wed May 30, 2012 2:56 pm
by bank9597

ไม่ทราบว่าข้อมูลที่กรอกในฟอร์มเสร็จแล้ว นำไปบันทึกในชีทไหนครับ
ส่วนการดึงข้อมูลมาแสดงนั้น จำเป็นต้องมีเงื่อนไขที่จะต้องระบุเพื่อใช้ในการดึง แต่ในไฟล์แนบชีททะเบียนนั้น ไม่มีเงื่อนไขอะไร นอกจากตารางเท่านั้น
ลองศึกษาตามลิงค์นี้ดูครับ ในโพสต์ท้ายๆครับ
viewtopic.php?f=3&t=2571&start=40
Re: การดึงข้อมูลจากฐานข้อมูล
Posted: Wed May 30, 2012 3:20 pm
by snasui
bank9597 wrote:ส่วนการดึงข้อมูลมาแสดงนั้น จำเป็นต้องมีเงื่อนไขที่จะต้องระบุเพื่อใช้ในการดึง แต่ในไฟล์แนบชีททะเบียนนั้น ไม่มีเงื่อนไขอะไร นอกจากตารางเท่านั้น
เงื่อนไขในการดึงตามด้านล่างครับ
marupong wrote:2.ผมต้องการดึงข้อมูล sheet postdata มาแสดงใน sheet ทะเบียน โดยต้องการเฉพาะข้อมูล ชื่อ นามสกุล บ้านเลขที่ และเลขทะเบียน โดยอ้างอิงจากวันที่ คือเมือพิมพ์วันที่ ในช่อง C2 ข้อมูลทั้งหมดจะแสดงขึ้นมา
สำหรับการดึงข้อมูลลักษณะนี้ต้องใช้ Change Event เข้ามาช่วย นั่นหมายความว่าเมื่อคีย์วันที่ใน C2 ของชีททะเบียน ก็ให้ Code ทำการ Run
หลักการคือ
- จะต้องตรวจสอบว่า C2 ในชีททะเบียนตรงกับค่าใดบ้างในคอลัมน์ F ของชีท Postdata
- นำค่าที่ตรงกันมาวางในชีททะเบียน
- ให้ค่าลำดับ
ซึ่งสามารถใช้การ Loop เข้ามาช่วยได้ครับ ลองทำมาดูก่อน ติดตรงไหนก็ถามกันมาได้เรื่อย ๆ ครับ
Re: การดึงข้อมูลจากฐานข้อมูล
Posted: Wed May 30, 2012 4:15 pm
by marupong
ขอบคุณครับทำได้ในระดับหนึ่งแล้วครับ แต่ติดปัญหาเล็กน้อยคือ
1.พอผมใส่วันที่ในห้อง C2 แล้วข้อมูลมาจริง แต่ทำให้ข้อมูลในช่อง A3-A4 จนถึง E3-E4 วึ่งผมตั้งไว้เป็นหัวของคอลัภ์หายไป
2.เมือผม Drag mouse เพื่อลบข้อมูลทั้งหมดมีการเตือน เรื่อง Bug อะครับ
Re: การดึงข้อมูลจากฐานข้อมูล
Posted: Wed May 30, 2012 4:37 pm
by snasui

ลองปรับเป็น Code ตามด้านล่างครับ
Code: Select all
Sub ShowEmp()
Application.EnableEvents = False
Dim rSource As Range, rTarget As Range
Dim r As Range, i As Integer
With Sheets("Postdata")
If .Range("F2") <> "" Then
Set rSource = .Range("F2", .Range("F" & Rows.Count).End(xlUp))
Else
Set rSource = Range("F2")
End If
End With
i = 1
Sheets("ทะเบียน").Range("A6", Range("F" & Rows.Count)).ClearContents
For Each r In rSource
If r = Sheets("ทะเบียน").Range("C2") Then
Set rTarget = Sheets("ทะเบียน").Range("B" & Rows.Count).End(xlUp).Offset(1, 0)
rTarget.Resize(1, 5) = r.Offset(0, -5).Resize(1, 5).Value
rTarget.Offset(0, -1) = i
i = i + 1
End If
Next r
Application.EnableEvents = True
End Sub
Re: การดึงข้อมูลจากฐานข้อมูล
Posted: Wed May 30, 2012 5:09 pm
by marupong
ขอบพระคุณมากครับ
แต่ผมยังคงติดใจเรื่อง เวลาลบข้อมูลที่ดึงมา มันจะขึ้นว่า
Run-time error 13 Type mismatch
มีทางเอาออกไหมครับ
Re: การดึงข้อมูลจากฐานข้อมูล
Posted: Wed May 30, 2012 5:48 pm
by snasui

Code ที่ผมเขียนไปให้ มันลบข้อมูลก่อนที่จะวางใหม่อยู่แล้ว ไม่จำเป็นต้องลบเอง
กรณีต้องการลบเองลองปรับ Code Change Event เป็นตามด้านล่างครับ
Code: Select all
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Target.Count = 1 Then
If Target.Address = "$C$2" And Target <> "" Then
ShowEmp
ElseIf Target.Address = "$C$2" And Target = "" Then
MsgBox "Please select data."
End If
End If
Application.EnableEvents = True
End Sub
Re: การดึงข้อมูลจากฐานข้อมูล
Posted: Wed May 30, 2012 5:55 pm
by marupong
ขอบคุณมากครับ