แสดงกระทู้

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 - naekkhung

หน้า: [1]
1
ห้อง MS Access / : ภายในวันไม่ให้กรอกข้อมูลซ้ำ
« เมื่อ: เมื่อวานนี้ เวลา 16:03:16 »
สร้างคิวรี่ ขึ้นมาครับเพื่อรวบรวมว่า ในแต่ละวันได้ระบุ Result ว่าอะไร....   และระบุไปจำนวนกี่ครั้งแล้ว

แล้วสร้าง Dlookup มาเช็คจำนวนครั้งการระบุ Result ได้เลยครับ ถ้าเจอว่า ในวันนั้นเจอการระบุ Result แล้ว หรือ >1 ก็ให้ทำตามเงื่อนไขเช่นแจ้งเตือนเป็นต้น
ส่วนตัวอย่างไว้พรุ่งนี้เน้อ
โพสต์นี้ได้รับคำขอบคุณจาก: naekkhung

2
แนวคือเมื่อใส่เลขงวดไปแล้ว แล้วให้แสดงเฉพาะปุ่มนั้นมีแนวทางตามนี้ครับ

แบบที่1 ทุกปุ่มสั่งล็อคใว้ Enabled = No จะปลดล็อคเมื่อเลขงวดตรง
โค๊ด: [Select]
Private Sub Text5_AfterUpdate()
GetNum = Me.Text5
    Select Case GetNum
        Case "1": Me.Command1.Enabled = True
        Case "2": Me.Command2.Enabled = True
        Case "3": Me.Command3.Enabled = True
        Case "4": Me.Command4.Enabled = True
    End Select
End Sub

แบบที่2 ทุกปุ่มสั่งซ่อนใว้(ยังไม่แสดง) Visible = No จะแสดงปุ่มเมื่อเลขงวดตรง
โค๊ด: [Select]
Private Sub Text5_AfterUpdate()
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

ทั้งสองแบบต่างกันที่การตั้งค่าปุ่มบนหน้าฟอร์มกับชุดคำสั่งเพียงเล็กน้อย

แต่ชุดคำสั่งด้านบนยังติดขัดคือ สมมุติใส่เลขงวด1 = ปุ่ม1ทำงาน | แก้ใส่เลขงวด2 = ปุ่ม2ทำงาน แต่ปุ่ม1ก็จะยังคงทำงานอยู่ไม่ล็อคหรือกลับไปซ่อนตามเดิมนะ รอคำแนะนำจากท่านอื่นอีกทีครับ
โพสต์นี้ได้รับคำขอบคุณจาก: naekkhung

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

4
ผมแก้ไขให้แล้วครับ
ส่วนที่แก้ คือถ้ามี Customercode ก็ต้องเอาอันนี้แหละมาอ้างอิงแทน ID ครับ
โดยโค้ดกรองฟอร์มก็จะเป็น
DoCmd.OpenForm "FrmMain_Con", , , "[customer_code]='" & Me![txtcustomer_code] & "'"

มีเครื่องหมาย single quote เพราะ ข้อมูลเป็น text ไม่ใช่ตัวเลขครับ

ส่วนโค้ดของ ระบบแจ้งเตือนก็เปลี่ยนเป็นแบบนี้

โค๊ด: [Select]
Private Sub Form_Current()
Dim CheckMaxDate As Date
CheckMaxDate = Nz(DMax("Date_time_co", "[ตาราง call]", "[ResultCode_Remark]=""ติดต่อได้"" AND customer_code ='" & Forms!frmmain_Con!txtcustomer_code & "'"))

If Not IsNull(CheckMaxDate) And CheckMaxDate >= Date Then
MsgBox "วันนี้คุณได้โทรหาลูกค้าแล้ว", vbInformation, "สถานะ!!"
End If
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: naekkhung

5
มันต้องหา Event การทำงานให้มันครับ

ผมไม่แน่ใจว่าในโปรแกรมของคุณจะตรวจสอบตอนไหน ว่ามีการติดต่อแล้ว

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

6
ตาราง เชื่อมกับ subform ชื่อ ตาราง call ไหมครับ

โค้ดง่ายๆ โดยเช็คกับวันที่ปัจจุบัน และ เช็คเงื่อนไข การระบุ ติดต่อได้

น่าจะต้อง เช็คเงื่อนไขกับ ID ลูกค้าไว้ด้วยครับ ประมาณนี้
ส่วนที่จะเช็คเงื่อนไขคือ
ID ลูกค้า
Date_time_co เก็บวันที่
ResultCode_Remark เก็บสถานะ

Dim CheckMaxDate As Date
CheckMaxDate = Nz(DMax("Date_time_co", "[ตาราง call]", "[ResultCode_Remark]=""ติดต่อได้"" AND ID =" & Forms!ชื่อฟอร์มหลัก!txtID))

If Not IsNull(CheckMaxDate) And CheckMaxDate = Date Then
MsgBox "วันนี้คุณได้โทรหาลูกค้าแล้ว", vbInformation, "สถานะ!!"
End If


Event เลือกเอานะครับ ว่าจะเช็คจาก Event ไหน
โดยจากตัวอย่างผมให้ เช็ค ID จาก textbox ชื่อ txtID
เช็ควันที่ปัจจุบัน กับ วันที่ๆ ลงในระบบไว้แล้ว และตรวจสอบว่า มีการระบุ ติดต่อได้ ไว้หรือไม่


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

7
พอดีมีเวลาและเห็นว่ามีหลายครั้งที่มีการถามถึงการสร้างฟอร์มล็อคอินและเมนู ผมเลยเขียนตัวอย่างขึ้นมาเอาไว้ให้เป็นแนวทางในการศึกษาครับ

ระบบมี 2 เทเบิลคือ tbUser ไว้เก็บ ID,รหัสผ่าน,และเมนูที่จะใช้ ในขณะที่อีกเทเบิล tbMenu จะเก็บว่าแต่ละเมนูมีโครงสร้างอย่างไร

ฟอร์มหลักๆคือ FmLogon เพื่อรับ ID และรหัสผ่านผู้ใช้ เมื่อป้อนถูกต้องแล้ว ระบบก็จะเปิดฟอร์ม FmMenu เพื่อแสดงเมนูของแต่ละคน เมื่อคลิกหรือเลื่อนมาที่แต่ละรายการในเมนู คำอธิบายของรายการนั้นจะแสดงที่กรอบด้านล่าง แต่ถ้าดับเบิลคลิก จะเป็นการเปิดหน้าฟอร์ม/รายงานของรายการนั้น พร้อมกับตัวเมนูจะถูกหดย่อลงไป และจะกลับมาแสดงโดยอัตโนมัติเมื่อปิดฟอร์ม/รายงานที่ได้เปิดไป หลังจากปิดเมนู ก็จะกลับมาเปิดฟอร์มล็อคอินอีกครั้ง  ส่วนฟอร์มและรายงานที่เหลือเป็นแค่ตัวอย่างเพื่อแสดงให้เห็นว่าฟอร์ม/รายงานนั้นได้เปิดจริงๆแล้วเท่านั้น

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

ปล. อย่าถามนะว่า login ID และรหัสผ่านมีอะไรบ้าง  :sweat:
โพสต์นี้ได้รับคำขอบคุณจาก: naekkhung

8
ห้อง MS Access / : cannot open any more tables
« เมื่อ: 25 มี.ค. 62 , 21:58:43 »
เป็นข้อจำกัดของ Access ครับ มันสามารถมีและเปิดตารางได้ไม่เกิน 2000 ตารางครับ ถ้าโปรแกรมมีตารางเยอะ มี query หรือฟอร์มที่อิงตารางเยอะ หรือมีคอมโบบอกซ์หรือ list box ที่อิงกับตารางเยอะๆ แล้วเปิดใช้งานพร้อมๆกัน พอถึงจุดเกิน 2000 ตารางเมื่อไหร่ก็จะมี error นี้ครับ
โพสต์นี้ได้รับคำขอบคุณจาก: naekkhung

9
ห้อง MS Access / : cannot open any more tables
« เมื่อ: 24 มี.ค. 62 , 09:09:01 »
ไม่เยอะนะครับ

เท่าที่นึกได้ ถ้าไม่ใช่ไฟล์ที่คุณสร้างเอง อาจมีการฝัง Module ให้ทำไม่ได้ก็เป็นได้

หรือไม่ Access อาจหมดอายุ ถ้าเป็นแถบสีแดงด้านบนก็ใช่เลยครับ หมดอายุ
โพสต์นี้ได้รับคำขอบคุณจาก: naekkhung

10
ห้อง MS Access / : cannot open any more tables
« เมื่อ: 23 มี.ค. 62 , 14:01:54 »
ได้เช็คขนาดไฟล์ดูหรือไม่ครับ บางทีไฟล์อาจใหญ่มากก็ได้
โพสต์นี้ได้รับคำขอบคุณจาก: naekkhung

11
ถ้าสามารถแก้ฟิลด์ในเทเบิลให้มีความยาว 500 ตัวอักษรได้ เวลาป้อนก็จะถูกจำกัดไปโดยปริยาย  แต่ถ้าไม่ได้ ก็ใส่โค้ดข้างล่างไว้ใน KeyPress event procedure ของ collection
โค๊ด: [Select]
Private Sub collection_KeyPress(KeyAscii As Integer)
    If KeyAscii <> vbKeyBack Then
        If Len(Me.collection.Text) = 500 Then
            KeyAscii = 0
            Msgbox "ข้อความแจ้งเตือน"
        End If
    End If
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: naekkhung

12
ห้อง MS Access / : Popup ข้อความ
« เมื่อ: 20 มี.ค. 62 , 19:07:20 »
เท่าที่ลองหาตามเวป ถ้ามีจำนวนบรรทัดไม่เกิน 1 หน้าฟอร์ม อาจพอทำได้ ... แต่ถ้าเกิน คิดว่าไม่น่าจะทำได้ ยกเว้นว่าใครจะหาวิธีทำให้รู้ได้ว่าเรคอร์ดแรกที่อยู่บรรทัดติดขอบบนของฟอร์มตอนนี้ คือเรคอร์ดที่เท่าไหร่ ซึ่งอาจไม่ใช่เรคอร์ดที่ 1 ก็ได้ และอาจไม่ได้เป็น Current Record ด้วย
โพสต์นี้ได้รับคำขอบคุณจาก: naekkhung

13
ห้อง MS Access / : Popup ข้อความ
« เมื่อ: 19 มี.ค. 62 , 09:35:00 »
ใช้ .ControlTipText แสดงข้อความเมื่อเม้าส์ไปโดนก็ได้นะคับ
มีตาราง Table1
มี Field ID , Comment

มี textbox ID กับ Comment

โค๊ด: [Select]
Private Sub Comment_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Not IsNull(Me.Comment) And Not IsNull(Me.ID) Then
Me.Comment.ControlTipText = DLookup("Comment", "Table1", "ID =" & Me.ID & "")
Else
Me.Comment.ControlTipText = Null
End If
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: naekkhung

14
ห้อง MS Access / : Popup ข้อความ
« เมื่อ: 18 มี.ค. 62 , 17:37:53 »
กำหนด Properties ของ Text Box เป็น Can Growth = Yes ก็จะแสดงทั้งหมดได้
โพสต์นี้ได้รับคำขอบคุณจาก: naekkhung

หน้า: [1]