แสดงกระทู้

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 - สันติสุข

หน้า: 1 [2] 3 4 5 ... 21
17
ควรสร้างเท็กซ์บ็อกซ์ชื่อเดียวกันแต่มีเลขลงท้ายไล่ไปตั้งแต่ 1 ถึง 12   สมมุติชื่อ Textbox1 - 12 
ใส่ sub procedure ไว้ในฟอร์ม

Private Sub CopyText(N As Integer)
   Dim I As Integer

   For I = N+1 to 12
      Me("Textbox" & CStr(I)) = Me("Textbox" & CStr(N))
   Next
End Sub

และในทุก AfterUpdate event procedure ของ Textbox1 - 11 ก็แค่ใส่โค้ด
   Call CopyText(เลขท้ายของ Textbox)
โพสต์นี้ได้รับคำขอบคุณจาก: UnKnown, napat2020

18
ดูที่ผมตอบในกระทู้ตามลิงค์นี้นะครับ พอเป็นแนวทางได้ครับ https://www.thai-access.com/index.php?topic=1322.0
โพสต์นี้ได้รับคำขอบคุณจาก: kn208598, I love movies

19
ถ้าฟิลด์ Customer_ID มีประเภทข้อมูลเป็น Text  ต้องเขียนเป็น ... Customer_ID = '" & FromCustomerID & "'" ,dbFailOnError

หมายเหตุ : ถ้าคำสั่งเดิมถูกต้องแล้ว ยังไงก็ให้เติมส่วนสีแดงด้วย
โพสต์นี้ได้รับคำขอบคุณจาก: Kxess

20
ห้อง MS Access / : Invalid procedure call or argument
« เมื่อ: 03 ส.ค. 63 , 17:32:14 »
เหมือนว่าต้องใช้ Access 2007 เปิดเท่านั้น ผมมีแต่ Access 2010 เปิดมา ก็มีปัญหาแต่ต่างออกไปเลย ทำอะไรไม่ได้ ผมแนะนำว่าให้คุณสร้างฐานข้อมูลเปล่าสักตัว แล้ว import ทุกอย่างจากโปรแกรมตัวนี้เข้ามาใหม่ อาจจะช่วยให้ทำการ compile ได้ครับ
โพสต์นี้ได้รับคำขอบคุณจาก: kitisak

21
ห้อง MS Access / : Invalid procedure call or argument
« เมื่อ: 03 ส.ค. 63 , 09:00:11 »
มีสั่งรันแมโคร Autoexec หรือสั่งให้ฟอร์มทำงานทันทีเมื่อเข้า Access หรือไม่ ถ้ามี ก่อนเข้า Access ให้กดคีย์ SHIFT ค้างไว้จนกว่าหน้าต่างของ Access จะแสดงเรียบร้อยแล้ว แล้วลอง compile อีกครั้งครับ หรือถ้าโปรแกรมและข้อมูลไม่เป็นความลับ ลองโหลดขึ้นเวปบอร์ดนี้เพื่อให้ตรวจสอบครับ
โพสต์นี้ได้รับคำขอบคุณจาก: kitisak

22
ขาดบางตัวไป และควรเว้นวรรคสักหน่อยในแต่ละคำใน SQL

sql = "SELECT * FROM SecName WHERE NameEmp = '" & Me.Combo1 & "'"

และพอกำหนด .RecordSource แล้ว ระบบจะอ่านเรคอร์ดเข้ามาแสดงบนฟอร์มอยู่แล้ว ไม่จำเป็นต้องสั่ง .Requery ให้ทำงานซ้ำครับ
โพสต์นี้ได้รับคำขอบคุณจาก: Piyawat Sasikul

23
ห้อง MS Access / : Invalid procedure call or argument
« เมื่อ: 01 ส.ค. 63 , 18:28:43 »
ลอง compile แล้วดูว่ามีแจ้งที่ผิดที่ไหนในโค้ดหรือไม่ ถ้าไม่มี อาจเป็นไปได้ว่ามีการแก้ procedure ที่จุดไหนแล้วมีจำนวน/ประเภทของ argument ที่ส่งไป procedure นั้น แตกต่างจากเดิม
โพสต์นี้ได้รับคำขอบคุณจาก: kitisak

24
คำตอบที่แล้วผมไม่ได้มีเวลาไล่ตามนิพจน์หรือสูตรจำนวนมากมาตรวจสอบนะครับ ถ้าที่คุณตั้งนั้นถูกอยู่แล้ว สุดท้ายแล้วก็หนีไม่พ้นค่าและประเภทข้อมูลเท่านั้นเอง คุณลองค่อยๆตรวจสอบไปทีละนิพจน์ดูครับ
โพสต์นี้ได้รับคำขอบคุณจาก: SakDa

25
ห้อง MS Access / : รวมตัวเลขไม่ได้
« เมื่อ: 29 ก.ค. 63 , 14:14:16 »
ไม่ได้ไปดูรายละเอียดนะครับ แต่จะแนะนำว่าให้เลี่ยงการใช้ Round(N, D) เพราะเมื่อหลักต่อไปที่จะปัดเศษมีค่าเป็น 5 เขาจะไม่ปัดขึ้นเสมอไป เขาจะใช้วิธี Banker Rounding ซึ่งตามกฏจะปัดขึ้นหรือลงไปยังเลขคู่ที่ใกล้ที่สุด  เช่น Round(0.245, 2) ถ้าปัดขึ้นจะเป็น 0.25 แต่ปัดลงจะได้ 0.24 ดังนั้นเขาก็ปัดลงแทน จะได้เป็น 0.24  และ Round(0.235, 2) ก็จะได้ 0.24 เช่นกัน   แต่ Access ยิ่งมั่วไปกว่านั้นในค่าตัวเลขบางตัว เช่น Round(1.245, 2) ก็ควรจะเป็น 1.24 แต่กลับเป็น 1.25 ไปซะอย่างงั้น ซึ่งขัดกับ Banker Rounding ไปเสียอีก

ถ้าจะปัดเป็น 2 หลัก ให้ใช้เป็น CDec(Format(N, "0.00")) ดีกว่าครับ แต่ถ้าแสดงเฉยๆไม่ได้เอาไปคำนวน ก็ใช้แค่ Format(N, "0.00") ก็พอ

อีกอย่างที่ขอแนะนำคือ อย่าใช้ประเภทข้อมูล Number-Single หรือ Double เพราะจะเก็บค่าที่ไม่ตรงกับข้อมูล โดยจะมีผิดเพี้ยนในทศนิยมตำแหน่งหลังๆได้ ควรใช้ Number-Decimal แล้วกำหนด Scale property เป็นจำนวนทศนิยมที่ต้องการเก็บ จะทำให้การคำนวนตัวเลขที่มีทศนิยมได้ตรงตามความจริง
โพสต์นี้ได้รับคำขอบคุณจาก: UnKnown

26
ตัวแปรที่เก็บชื่อและID ควรกำหนดไว้เป็นตัวแปร Public (Public strfullname As String) อยู่ใน Access Module ต่างหาก และเขียนโค้ดใน Form_Load event procedure ของแต่ละฟอร์ม เพื่อนำค่าในตัวแปรไปแสดงออกเท็กซ์บ็อกซ์บนฟอร์มนั้นๆ
โพสต์นี้ได้รับคำขอบคุณจาก: พิชญะ ชัยชนะ

27
พึ่งคิดได้ว่าก็ใช้คำสั่งให้ทุกปุ่มที่มีซ่อนก่อนแล้วค่อยมาสั่งแสดงตามตัวเลขที่หลังอีกที  :meaw:

โค๊ด: [Select]
Private Sub Text5_AfterUpdate()

Me.Command1.Visible = False
Me.Command2.Visible = False
Me.Command3.Visible = False
Me.Command4.Visible = False

GetNum = Me.Text5
    Select Case GetNum
        Case "1": Me.Command1.Visible = True
        Case "2": Me.Command2.Visible = True
        Case "3": Me.Command3.Visible = True
        Case "4": Me.Command4.Visible = True
    End Select
End Sub

โค้ดข้างบนสามารถลดรูปลงมาได้นะครับ พร้อมกับรองรับกรณี Text5 ไม่ได้เป็นตัวเลข

   Dim I   As Integer
   Dim J   As Integer

   If IsNumeric(Me.Text5) Then J = CInt(Me.Text5)
   For I = 1 to 12
      Me("command" & Cstr(I)).Enabled = (I = J)
   Next

แต่สงสัยว่าทำไมต้องทำ 12 ปุ่ม สร้างปุ่มเดียวแล้วพิจารณาการทำงานของโค้ดในปุ่มนั้นด้วยค่าจาก Text5 ไม่ง่ายกว่าหรือ ?
โพสต์นี้ได้รับคำขอบคุณจาก: UnKnown, diehard4, ิboonyarit

28
ผมไม่มีมอนิเตอร์ 2 จอ เลยทดสอบไม่ได้ว่าให้ผลจริงแค่ไหน แต่ถ้าจอเดียว ก็ให้กำหนด Popup property ของฟอร์มเป็น Yes ก่อน และใส่โค้ดนี้ไว้ใน OnLoad event procedure ของฟอร์ม

Private Sub Form_Load()
    DoCmd.MoveSize ซ้าย, บน
End Sub

โดยที่ซ้ายและบน คือความห่างจากขอบซ้ายและขอบบนของจอ มีหน่วยเป็น twips (เท่ากับ 567 * เซ็นติเมตร) ดังนั้นต้องหาเองว่าจอที่ 2 มีขอบซ้ายเป็นเท่าไหร่กันแน่
โพสต์นี้ได้รับคำขอบคุณจาก: ittiphol, PNR

29
If #9:00 AM# < TimeValue(Me.txttime) and TimeValue(Me.txttime) < #4:00 PM# then
โพสต์นี้ได้รับคำขอบคุณจาก: MAKI

30
ห้อง MS Access / : Combo box Date picker
« เมื่อ: 03 ก.ค. 63 , 22:37:11 »
ผมได้ทำฟอร์มตัวอย่างแสดงการเลือก Date Picker ตามลักษณะที่ต้องการ โดยมีการตรวจสอบความถูกต้องของวันที่ระหว่างการเลือก แต่ผมไม่การันตีว่าจะตรวจสอบได้ถูกต้อง 100% หรือมีที่ผิดพลาดที่ไหนหรือไม่นะครับ ลองดูรายละเอียดการทำงานใน comment ภายในโค้ดที่ผมได้เขียนอธิบายไว้แล้วครับ

แก้บัก : ใน Private Sub cbMonth_AfterUpdate() บรรทัดต่อจาก Case 2 ให้แก้เป็น If Me.cbDay >= 29 Then
โพสต์นี้ได้รับคำขอบคุณจาก: pirin, kitisak, MAKI

31
ไม่แน่ใจว่าใกล้เคียงที่ต้องการหรือไม่ มีตัวอย่างล็อคอินผู้ใช้แล้วแสดงเมนูเฉพาะของตนเองครับ https://www.thai-access.com/index.php?topic=932.0 แต่ทุกคนที่ใช้ฟอร์มนั้นๆได้ จะมีสิทธิ์เท่ากันทุกอย่าง ถ้าจะกำหนดว่าผู้ใช้คนนี้จะทำอะไรได้บ้างในหน้าฟอร์มนั้นๆ เช่น ดูได้อย่างเดียว หรือแก้ไขได้ด้วย แนะนำว่าเพิ่มเทเบิลของกลุ่มผู้ใช้ซึ่งจะเก็บว่ากลุ่มนี้มีใครบ้าง (คนนึงสามารถอยู่ได้หลายๆกลุ่ม) และเพิ่มเทเบิลสิทธิ์ของกลุ่มนี้ที่มีต่อฟอร์มนั้นๆว่า กลุ่มนี้เมื่อใช้ฟอร์มนั้นแล้ว จะมีสิทธิ์ชื่อว่าอะไรบ้าง เช่น ชื่อสิทธิ์ว่า "AE" (หมายถึง Add และ Edit ได้)   เมื่อเปิดฟอร์มที่ใช้งานขึ้นมา ก็เขียนโค้ดหาจากเทเบิลว่านาย ก. อยู่กลุ่มผู้ใช้ไหนบ้าง และรวมแต่ละกลุ่มที่พบแล้ว นาย ก. มีสิทธิ์รวมทั้งสิ้นอะไรที่ใช้กับฟอร์มนั้นได้บ้าง เมื่อฟอร์มจะทำการรับการป้อนเรคอร์ดใหม่ ก็ตรวจเลยว่าถ้าไม่มีสิทธิ์ A ก็ไม่ให้ทำ อย่างนี้เป็นต้นครับ
โพสต์นี้ได้รับคำขอบคุณจาก: naekkhung, MAKI, ิboonyarit

32
แสดงเลขคู่ ให้ใช้เงื่อนไขต่อท้ายในใน SQL เป็น WHERE (student.ordinal mod 2 = 0)    และเปลี่ยนเป็น mod 2 = 1 สำหรับเลขคี่ครับ
โพสต์นี้ได้รับคำขอบคุณจาก: pirin

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