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
:D ได้เขียน 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
:D ไม่ทราบว่าข้อมูลที่กรอกในฟอร์มเสร็จแล้ว นำไปบันทึกในชีทไหนครับ
ส่วนการดึงข้อมูลมาแสดงนั้น จำเป็นต้องมีเงื่อนไขที่จะต้องระบุเพื่อใช้ในการดึง แต่ในไฟล์แนบชีททะเบียนนั้น ไม่มีเงื่อนไขอะไร นอกจากตารางเท่านั้น

ลองศึกษาตามลิงค์นี้ดูครับ ในโพสต์ท้ายๆครับ 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

หลักการคือ
  1. จะต้องตรวจสอบว่า C2 ในชีททะเบียนตรงกับค่าใดบ้างในคอลัมน์ F ของชีท Postdata
  2. นำค่าที่ตรงกันมาวางในชีททะเบียน
  3. ให้ค่าลำดับ
ซึ่งสามารถใช้การ 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
:D ลองปรับเป็น 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
:D 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
ขอบคุณมากครับ