แสดงกระทู้

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - pirin

หน้า: 1 2 3 [4] 5
55
ห้อง MS Access / : Alt+ลูกศรลง
« เมื่อ: 08 มิ.ย. 61 , 18:33:04 »
จะใช้คำสั่ง Alt+ลูกศรลง เพื่อให้  combo ลงอัตโนมัติ แต่ไม่รู้ ว่าจะโค๊ตยังงัยครับ รบกวนอาจารย์ด้วยครับ

ผมสมมุติ Combobox ชื่อ Cb1 นะครับ ใช้ Event Gotfocus
โค๊ด: [Select]
Private Sub Cb1_GotFocus()
Me.Cb1.Requery
Me.Cb1.Dropdown
End Sub
เมื่อ curser ตกที่ combobox นั่นก็จะแสดงรายการทันที

โพสต์นี้ได้รับคำขอบคุณจาก: pirin

56


จากตัวอย่างคุณ ชิ้น/แพ็ก น่าจะไม่ได้นำไปคำนวน น่าจะคำนวน ที่ จำนวน x ราคา และแสดงผลรวม
แต่ผมคิดว่า ตรงชิ้น/แพ็ก และราคานั้น น่าจะต้องไปกำหนดที่ตาราง Product ไว้เลยนะครับ เพราะมันเป็น Detail ของตัวสิ้นค้านั้นๆอยู่แล้ว
เราแค่ใส่รหัสสินค้า และ กำหนดจำนวน แค่นั้นครับ ส่วน textbox อื่นเราก็ปิดไม่ให้มีการกรอกหรือห้ามแก้ไขไปเลยจะดีกว่า

ซึ่งผมได้ทำตัวอย่างโดยแก้ไขให้ใหม่โดยมีส่วนที่เพิ่มเข้ามาดังนี้
1.ที่ตาราง Product นั้นเพิ่ม Field Price และ Quality ไว้เลย ในกรณีที่เป็นสินค้าใหม่ จะมีแจ้งเตือนให้ใส่ข้อมูลจำนวนต่อ/แพ็ก 
และราคาในครั้งแรก เมื่อใส่รหัสสินค้าครั้งต่อไปจะแสดงให้อัตโนมัติ
2.กรณีที่เป็นรหัสสินค้าเก่าที่ลงทะเบียนไว้แล้วจะแสดง (ชื่อสินค้า)  (จำนวน/แพ็ก)  (ราคา) มาให้และจะไม่ได้สามารถกดเข้าไปแก้ไขได้
(ป้องกันข้อผิดพลาด) และสะดวกกับเราด้วยเพราะเราแค่ใส่จำนวนเข้าไปเท่านั้น
3.ให้แสดงผลรวมทั้งหมดไว้ด้านล่างสุด (ไม่ได้เก็บลงในตาราง) แต่ ส่วนท้ายของรายการสินค้าจะเก็บไว้ในตาราง BillDetail ชื่อ Total
คำสั่งมีการเพิ่มเติ่มบางส่วนถ้าไม่เข้าใจตรงไหนสอบถามได้นะครับ

ส่วนจากที่ถามมาผมได้ใช้ฟังชั่น Nz เข้ามาด้วยเพื่อให้ textbox ที่ว่าง อยู่ให้ค่าเท่ากับ 0
ในตัวอย่างเพิ่มคำสั่ง โดยผมรวมกลุ่มไว้เป็น Sub ไว้เพื่อสะดวกในการใช้งาน

คำสั่งที่ textbox ชื่อ Price
โค๊ด: [Select]
Private Sub Price_AfterUpdate()
Call CalTotal
End Sub

คำสั่งที่ textbox ชื่อ Amount
โค๊ด: [Select]
Private Sub Amount_AfterUpdate()
Call CalTotal
End Sub

อันนี้คือ คำสั่งที่รวมไว้อันเดี่ยวแล้ว คือให้ จำนวน(Amount) x ด้วย ราคา(Price)
แล้ว ใช้ Call...ชื่อ Sub 

โค๊ด: [Select]
Sub CalTotal()
Me.Total = Nz(Me.Amount, 0) * Nz(Me.Price, 0)
End Sub

ตัวอย่างด้านล่าง
โพสต์นี้ได้รับคำขอบคุณจาก: pirin

57
ห้อง MS Access / : การ Import ไฟล์รูปภาพ
« เมื่อ: 30 พ.ค. 61 , 19:26:19 »

ปรับปรุงใหม่ให้แล้วนะครับ มีจุดที่จะกำหนด Default Path ได้นะครับตรง
กำหนด Default Path ที่
Private Sub Default_AfterUpdate()
If Default = True Then
Me.SetPath = "C:\Pic"
Else
Me.SetPath = Null
End If
End Sub

หมายเหตุ
1.ก่อนจะกด Import ให้กำหนด Path ที่จะจัดเก็บก่อน ถ้ายังไม่ระบุจะมีแจ้งเตือน
2.ปรับปรุงให้แสดงชื่อหลัง Path จัดเก็บแล้ว
3.ถ้ายังใส่รายละเอียดเกี่ยวกับการ import รูปไม่เสร็จแล้วไปกดปิดฟอร์ม รูปในหน้านั้นจะไม่บันทึกในตารางให้ (ป้องกันข้อผิดพลาด)
4.ตำแหน่งของ Path ถ้าติ๊กเลือก Default Path หลังกดปุ่ม จัดเก็บ แล้ว Path จะแสดง Default หรือ ถ้ากำหนด Path เองก็จะกับไปยัง Path ที่กำหนดไว้ เพื่อให้พร้อมในการ จัดเก็บไฟล์ใหม่

ตัวอย่างด้านล่างนะครับ
โพสต์นี้ได้รับคำขอบคุณจาก: pirin

58
ผม Export Query to excel ไฟล์ที่ออกมาบางทีขนาดไฟล์มัน 9KBไม่มีข้อมูลบางทีก็ได้ไม่มีปัญหา
ผมเลยลองกับคอมหลายๆเครื่อง บางเครื่อง Export ได้ปกติบางเครื่องได้ขนาดไฟล์ 9KB
เป็นสลับกันอยู่อย่างนี้อะครับ
เกี่ยวกับ RAM ไม่พอรึเปล่าผมก็ไม่แน่ใจ

ถ้าexport ได้ไม่มีปัญหาขนาดไฟล์จะ 70KB ประมาณ 5 แสน Row
รูปแบบฐานข้อมูลเวลาดึงคือดึงผ่าน LAN ไป SQL Server มาแสดงที่ Access ครับ
โพสต์นี้ได้รับคำขอบคุณจาก: pirin

59
อ.สันติสุข ช่วยขยายความได้ไหมครับ ที่ว่า "เมื่อมีการ Compact ฐานข้อมูลแล้ว ค่าของฟิลด์ Autonumber จะถูกจัดเรียงใหม่ให้ต่อเนื่องกันไปโดยไม่สนใจค่าเดิม" มันจะเกิดขึ้นกรณีไหนบ้างครับ นี่คือความรู้ใหม่ของผมเลยอะครับ เพราะเท่าที่ทราบ การ Compact จะทำให้ฟิลด์ AutoNumber รันลำดับใหม่แค่เรคคอร์ดสุดท้าย ให้ต่อเนื่องกันเท่านั้นเอง ไม่ได้ไปเรียงเรคคอร์ดใหม่ที่มีค่าอยู่แล้วหนิครับ แล้วในฐานข้อมูล Northwind ของทางไมโครซอฟเองก็ใช้ฟิลด์ AutoNumber ในการเชื่อมความสัมพันธ์กันแทบทุกตารางเลยครับ เลยอยากขอความเห็นของอาจารย์หน่อยครับ ว่ากรณีไหนบ้าง?
ปล. ขออภัยหากอ่านความหมายของ อาจารย์ผิดไปครับ

ใช่ครับ หมายถึงถ้ามีการลบกี่เรคอร์ดก็ตามที่มีค่า autonumber เรียงต่อเนื่องกันไปจนถึงเรคอร์ดที่มีค่า autonumber มากสุด หลัง compact ฐานข้อมูลหลักแล้ว (ฐานข้อมูลที่มีเทเบิลนั้นอยู่จริง ไม่ใช่ฐานข้อมูลที่เราสร้าง linked table) มันจะรันค่าของ autonumber ต่อจากค่าที่มากที่สุดใหม่อีกครั้ง ไม่ได้หมายถึงค่าเดิมที่บันทึกอยู่แล้วจะถูกสร้างใหม่ ทีนี้เนื่องจากการที่มันเป็นค่าที่ระบบสร้างขึ้นมาเอง เรคอร์ดที่สัมพันธ์กันจะเชื่อมั่นได้อย่างไรว่าจะอ้างกลับมายังเรคอร์ดเก่า (ที่ถูกลบไปแล้ว) หรือเรคอร์ดใหม่ที่มีเลข autonumber เดียวกับเรคอร์ดเก่า แต่ถ้าเราสร้างเลขเอง อันนี้เราเชื่อได้แน่ว่าเลขใหม่จะไม่ซ้ำกับเลขที่มีอยู่เดิม แต่ปัญหานี้ก็อาจหมดไป ถ้าเราระบุ Cascade delete record ให้กับความสัมพันธ์นั้นด้วยครับ

แต่อาจารย์ครับ ขอความรู้อีกนิดนะครับ ถ้าหากเราสร้างความสัมพันธ์ของตารางไว้แล้ว เมื่อมีการลบเรคคอร์ดที่มีความสัมพันธ์ ถึงจะไม่ได้ระบุ Cascade delete record ไว้ ระบบฐานขัอมูล มันจะไม่ยอมให้ลบได้อยู่แล้วหนิครับ โดยระบบจะฟ้องว่า The record cannot be deleted or changed because table ... includes related records. ยังไงมันก็จะบังคับเราให้ไปลบเรคคอร์ดที่อ้างมายังเรคคอร์ดนี้ให้หมดก่อนถึงจะสามารถลบเรคคอร์ดหลักได้ อย่างที่อาจารย์บอก ผมอยากรู้ว่ามันมีกรณีไหนหรือเทคนิกอะไรครับ ที่เมื่อสร้างความสัมพันธ์แบบที่เจ้าของกระทู้บอกแล้ว แต่สามารถลบเรคคอร์ดหลักที่อ้างได้โดยไม่ต้องลบเรคคอร์ดย่อยก่อน เพราะอย่างในกรณีนี้ ผมคิดว่าทำยังไงก็ไม่สามารถลบเรคคอร์ด AutoNumber ได้ หากมีข้อมูลที่เชื่อมกันอยู่ นอกจากจะลบข้อมูลที่เชื่อมกันให้หมดเสียก่อน ระบบถึงจะยอมให้ลบ ซึ่งมันก็จะไม่มีปัญหาเรื่องเลขที่ไม่ตรงกันอยู่แล้วไม่ใข่หรือครับ
โพสต์นี้ได้รับคำขอบคุณจาก: pirin

60
ห้อง MS Access / : การใซ้ Checkbox ใน subform ของaccess
« เมื่อ: 16 พ.ค. 61 , 11:29:45 »
พี่คือฮีโร่ผมเลียครับ :smile: ขอบคุณมากๆครับพี่ :miao:
โพสต์นี้ได้รับคำขอบคุณจาก: pirin

61
ห้อง MS Access / : การใซ้ Checkbox ใน subform ของaccess
« เมื่อ: 16 พ.ค. 61 , 08:38:47 »
ทำให้แล้วครับ
เมื่อเปิดโปรแกรมมาให้ซ่อนรายการ
โค๊ด: [Select]
Private Sub Form_Current()
Call ShowList
End Sub
Sub ShowList()
If IsNull(Me.cb_GSP) Then
Me.Check20.Visible = False
Me.factory.Visible = False
Me.SteelID.Visible = False
Me.Adress.Visible = False
Me.PhoneNumber.Visible = False
Me.Size_Type.Visible = False
Me.Thickness.Visible = False
Me.Length.Visible = False
Me.weight.Visible = False
Me.Price.Visible = False
Else
Me.Check20.Visible = True
Me.factory.Visible = True
Me.SteelID.Visible = True
Me.Adress.Visible = True
Me.PhoneNumber.Visible = True
Me.Size_Type.Visible = True
Me.Thickness.Visible = True
Me.Length.Visible = True
Me.weight.Visible = True
Me.Price.Visible = True
End If
End Sub
Private Sub Image57_Click()
Call ShowList
End Sub

ตัวอย่างให้แสดงข้อมูลทั้งหมดอีกครั้ง และให้ cb_GSP เป็นค่าว่าง
โค๊ด: [Select]
DoCmd.ApplyFilter , " Size_Type like '*'"
Me.cb_GSP = Null

ผมได้ทำไอค่อนให้กดเพื่อ ซ่อนรายการให้ด้วยนะครับ ที่เป็นรูปดวงตา


ตัวอย่างด้านล่าง
โพสต์นี้ได้รับคำขอบคุณจาก: pirin

62
รบกวนสอบถามครับว่าจะสร้างตู้เก็บเอกสาร ว่าเราจะสร้างอย่างไร โดยใช้แค่เทเบิ้ลและคิวรี่เท่านั้น โดยมีรายละเอียด ดังนี้
Zone - พื้นที่
Cabinet - ตู้
Shelf - ชั้น
Sequence - ลำดับ
Size - ขนาดแฟ้มหน่วยเป็นนิ้ว
โดยมีเงื่อนไขดังนี้

Zone
- A มี 11 Cabinet
- B มี 12 Cabinet
- C มี 7 Cabinet
- D มี 9 Cabinet
- E มี 8 Cabinet
- F มี 12 Cabinet
- G มี 9 Cabinet
- H มี 7 Cabinet
- K มี 13 Cabinet

Shelf
- ถ้าเป็น Zone - A ถึง E มี 7 Shelf
- ถ้าเป็น Zone - F ถึง K มี 9 Shelf
Sequence
- ถ้าเป็น Zone - A ถึง D มี 12 Sequence
- ถ้าเป็น Zone - E มี 26 Sequence
- ถ้าเป็น Zone - F ถึง K มี 18 Sequence
ยกเว้น Zone - E8 มี 26 Sequence
 
Size (ขนาดแฟ้ม หน่วยเป็นนิ้ว)
- ถ้าเป็น Zone - A ถึง E ใช้แฟ้ม 3 นิ้ว
- ถ้าเป็น Zone - F ถึง K ใช้แฟ้ม 2 นิ้ว
ยกเว้น Zone - E8 ใช้แฟ้ม 1 นิ้ว

ขอบพระคุณมากๆครับผม
โพสต์นี้ได้รับคำขอบคุณจาก: pirin

63
เป็นตัวอย่างของอ.สุภาพ เขียนไว้ โปรแกรม MS Access  เสียงเรียกคิว

https://drive.google.com/file/d/1HQuSBEj0aaePrM-jpw-f64rqXSctLwTf/view?usp=sharing

โพสต์นี้ได้รับคำขอบคุณจาก: pirin

64
อ้างถึง
1. Form Purchase order จะต้องเขียนคำสั่งใน combobox.afterupdate() อย่างไรคะ

ผมว่าถ้าต้องการจะหาค่าที่ไม่ได้อยู่ในรายการนั้นใช้ Event NotInList ดีกว่าครับดังในรายการนี้
เป็นคำสั่งที่กำหนดไว้ที่ตัว Combobox ครับ เมื่อไม่มีในรายการให้ แจ้งเตือน ถ้าตอบ Yes ก็จะเปิดฟอร์มที่ต้องการให้เรา
โค๊ด: [Select]
Private Sub ReviewParts_NotInList(NewData As String, Response As Integer)
   
    Dim i As Integer
    Dim Msg As String
 
    If NewData = "" Then Exit Sub
    Msg = "'" & NewData & "' ไม่มีในรายการ" & vbCr & vbCr
    Msg = Msg & "ต้องการเพิ่มรายการใหม่ ?"

    i = MsgBox(Msg, vbQuestion + vbYesNo, "ระบบตรวจสอบ")
    If i = vbYes Then
        DoCmd.OpenForm "frmAddtbl_product", acNormal
        Response = acDataErrAdd
        Else
        Me.ReviewParts.Undo
        Response = acDataErrContinue
               End If               
End Sub
ส่วน
อ้างถึง
2. Form frmaddtbl_product จะต้องกำหนด property อย่างไรบ้างเพื่อให้รับค่าจาก Purchase order แล้วส่งค่ากลับหลังจาก user ปิดฟอร์ม frmaddtbl_product
ผมใช้การทำให้แสดง รายการที่เพิ่มล่าสุดจากฟอร์ม frmAddtbl_product ลงไปในรายการใหม่โดยอัตโนมัติครับ
โค๊ด: [Select]
Private Sub Form_Close()
Dim i As String
Forms.form_main.ReviewParts = Me.ReviewParts
Forms.form_main.ReviewParts.Requery
Forms.form_main.ReviewParts.SetFocus
i = Forms.form_main.ReviewParts.ListCount - 1
Forms.form_main.ReviewParts = Forms.form_main.ReviewParts.ItemData(i)
End Sub

ตัวอย่างด้านล่างครับ
โพสต์นี้ได้รับคำขอบคุณจาก: pirin

65

รบกวนสอบถามค่ะ (เพิ่งเริ่มหัดเขียน MS Access เลยงง ว่าจะต้องเขียน ยังไงค่ะ)

สิ่งที่ต้องการ
 ถ้า user ใส่รายละเอียดอะไหล่ใน ฟอร์ม Purchase order แล้วไม่มีในรายการอะไหล่ ใน table (tbl_product) ให้ขึ้น msgbox สอบถามว่าต้องการ add ข้อมูลหรือไม่  ถ้า ต้องการเพิ่มให้
แสดง form frmaddtbl_product เพื่อเพิ่มข้อมูลใหม่ โดยหลังจากเพิ่มข้อมูล ใน frmaddtbl_product เสร็จ ให้ปิด form frmaddtbl_product แล้วส่งค่ากลับมาใน
form Purchase order

1. Form Purchase order จะต้องเขียนคำสั่งใน combobox.afterupdate() อย่างไรคะ
2. Form frmaddtbl_product จะต้องกำหนด property อย่างไรบ้างเพื่อให้รับค่าจาก Purchase order แล้วส่งค่ากลับหลังจาก user ปิดฟอร์ม frmaddtbl_product
 
โพสต์นี้ได้รับคำขอบคุณจาก: pirin

66
- ค่า NULL ต้องใช้คำว่า NULL  ไม่ใช่ปล่อยว่างๆ หรือเป็น "" หรือ " "
- ผมเขียน ... หมายถึงข้อความเดิมก่อนหน้าหรือตามหลัง ไม่ใช่ให้ใส่ ...
- ค่าวันที่ที่ใส่ใน SQL ต้องเป็นรูปแบบ #เดือน/วัน/ปีคศ.#
โพสต์นี้ได้รับคำขอบคุณจาก: pirin

67
ได้แล้วคร้าาา ขอบคุณที่สุด
โพสต์นี้ได้รับคำขอบคุณจาก: pirin

68
ขอบคุณมากค่ะ สำหรับวิธีที่แนะนำมา ลองทำอยู่นานมาก 555+

แต่ก็สามารถงมๆ ไปได้แล้วค่ะ

ปัญหาใหม่คือ พอสั่ง print เส้นที่ออกมา บางมาก ค่ะ อยากให้มีความหนาประมาณ 1พ. ต้องกำหนดได้ที่ไหนค่ะ

ขอบคุณอีกครั้งค่ะ

จากคำสั่งเดิมแบบนี้
โค๊ด: [Select]
Private Sub Report_Page()
Me.ScaleMode = 7         'กำหนดให้หน่วยเป็น cm.
Me.Line (0.1, 7.4)-(0.1, 19.6)     'ลากเส้นจากตำแหน่งพิกัด 0.1 cm, 7.4 cm ไปที่พิกัด 0.1 cm, 19.6 cm
Me.Line (1.2, 7.4)-(1.2, 19.6)
Me.Line (3.1, 7.4)-(3.1, 19.6)
Me.Line (10.5, 7.4)-(10.5, 19.6)
Me.Line (12.2, 7.4)-(12.2, 19.6)
Me.Line (14.2, 7.4)-(14.2, 19.6)
Me.Line (16.2, 7.4)-(16.2, 19.6)
Me.Line (18.67, 7.4)-(18.67, 19.6)
Me.Line (0.1, 7.4)-(18.67, 7.4)
Me.Line (0.1, 8.6)-(18.67, 8.6)
Me.Line (0.1, 19.6)-(18.67, 19.6)

End Sub
ใส่เพิ่มเป็นแบบนี้
โค๊ด: [Select]
Private Sub Report_Page()
Me.ScaleMode = 7         'กำหนดให้หน่วยเป็น cm.
Me.DrawStyle = vbSolid
Me.DrawWidth = 5
Me.Line (0.1, 7.4)-(0.1, 19.6)     'ลากเส้นจากตำแหน่งพิกัด 0.1 cm, 7.4 cm ไปที่พิกัด 0.1 cm, 19.6 cm
Me.Line (1.2, 7.4)-(1.2, 19.6)
Me.Line (3.1, 7.4)-(3.1, 19.6)
Me.Line (10.5, 7.4)-(10.5, 19.6)
Me.Line (12.2, 7.4)-(12.2, 19.6)
Me.Line (14.2, 7.4)-(14.2, 19.6)
Me.Line (16.2, 7.4)-(16.2, 19.6)
Me.Line (18.67, 7.4)-(18.67, 19.6)
Me.Line (0.1, 7.4)-(18.67, 7.4)
Me.Line (0.1, 8.6)-(18.67, 8.6)
Me.Line (0.1, 19.6)-(18.67, 19.6)
Me.DrawWidth = 1
End Sub

น่าจะประมาณนี้คับ
โพสต์นี้ได้รับคำขอบคุณจาก: pirin

69
ขอบคุณมากค่ะ สำหรับวิธีที่แนะนำมา ลองทำอยู่นานมาก 555+

แต่ก็สามารถงมๆ ไปได้แล้วค่ะ

ปัญหาใหม่คือ พอสั่ง print เส้นที่ออกมา บางมาก ค่ะ อยากให้มีความหนาประมาณ 1พ. ต้องกำหนดได้ที่ไหนค่ะ

ขอบคุณอีกครั้งค่ะ
โพสต์นี้ได้รับคำขอบคุณจาก: pirin

70
ห้อง MS Access / การใช้ Not in
« เมื่อ: 18 เม.ย. 61 , 16:27:51 »
ต้องการสร้างqueryโดยให้เลือกข้อมูลทั้งหมดที่ชนิดไม่ใช่ ง4ตัวนี้ค่ะ "TRACTOR-L", "TRACTOR-M", "TRACTOR-B","DC-95","DC-70"
เลยเขียนเงื่อนไขแบบนี้ค่ะ แต่รันออกมากลับไม่มีข้อมูลมูลแสดง
ผิดตรงไหนหรอคะ

Not In ("TRACTOR-L","TRACTOR-M","TRACTOR-B","DC-95","DC-70")
โพสต์นี้ได้รับคำขอบคุณจาก: pirin

71
วิธีนี้น่าจะช่วยได้

https://www.thai-access.com/index.php?topic=220.msg784
โพสต์นี้ได้รับคำขอบคุณจาก: pirin

72
> เพิ่มปุ่ม "เก็บกระทู้นี้" (add bookmarks) ให้สามารถติดตาม,เก็บกระทู้ใว้อ่าน,ตอบ ได้ง่ายขึ้น



เมื่อจะดูว่าเก็บอะไรใว้บ้างก็กดเข้าไปที่"กระทู้ที่เก็บใว้"ที่เมนูด้านบนได้เลยครับ :love:
โพสต์นี้ได้รับคำขอบคุณจาก: pirin

หน้า: 1 2 3 [4] 5