แสดงกระทู้

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] 2
1
ห้อง MS Access / : Random ข้อมูล
« เมื่อ: 25 พ.ค. 64 , 12:35:35 »
ลองดูนะครับ
โพสต์นี้ได้รับคำขอบคุณจาก: naekkhung

2
ห้อง MS Access / : Random ข้อมูล
« เมื่อ: 24 พ.ค. 64 , 14:01:06 »
ปุ่มก็ได้ครับ ขอถามเพิ่มครับแล้วถ้าเกิดผมมีเงื่้อนไขเพิ่ม กรณีผมมีฟิวส์ชื่อ monthly เก็บข้อมูลเดือน Jan-Dec และฟิวส์ sex เก็บเพศ ชาย หญิง ความต้องการคือให้กรองข้อมูลเฉพาะเดือน May เพศเลือก ชาย ให้เอาข้อมูล TCC มา Random เขียนแบบไหนครับ

ไม่ยากครับ สร้าง control ไว้ระบุ Criteria ที่ต้องการ เช่นมี คอมโบบ๊อกเลือกเพศ และ เดือน ไว้ระบุเงื่อนไขที่เราต้องการ
แล้วกำหนด recordset ทีหลัง

สร้างข้อมูลตัวอย่างมาครับ
เดี่ยวผมปรับโค๊ดให้
โพสต์นี้ได้รับคำขอบคุณจาก: naekkhung

3
ห้อง MS Access / : Random ข้อมูล
« เมื่อ: 24 พ.ค. 64 , 09:54:46 »
ถ้าใช้การสร้างปุ่มแทนได้ไหมครับ
สมมุติมีตารางตารางชื่อ table1 เก็บข้อมูลตามในรูปของคุณ
ที่ปุ่มใส่โค๊ดนี้เข้าไปครับ


Private Sub Command1_Click()
Dim rstRandom As Recordset
Dim rstOut As Recordset
Set rstRandom = CurrentDb.OpenRecordset("SELECT Table1.TCC, Rnd(Val(Right([TCC],3))) AS ID FROM Table1 ORDER BY Rnd(Val(Right([TCC],3)));", dbOpenDynaset)
Set rstOut = CurrentDb.OpenRecordset("table1", dbOpenDynaset)

rstRandom.MoveFirst
rstOut.MoveFirst
Do Until rstRandom.EOF
rstOut.Edit
rstOut!TCCRANDOM = rstRandom!TCC
rstOut.Update
rstRandom.MoveNext
rstOut.MoveNext
Loop
End Sub

วิธีนี้ใช้ ฟังชั้น RND() เพื่อสุ่มข้อมูลที่ต้องการ แล้วนำไปวางสุ่มในฟิลล์ที่ต้องการครับ
โพสต์นี้ได้รับคำขอบคุณจาก: naekkhung

4
ก่อนอื่นเลยจะบอกว่าพยายามอย่าตั้งชื่อฟิวส์เป็นภาษาไทยครับ ตัวอย่างผมขอใช้ Text20 แทน "วันนัดชำระ" ของท่านนะครับ
โค๊ด: [Select]
Private Sub Text20_AfterUpdate()
Dim DatePK As String
DatePK = Me.Text20 - Date
    If DatePK > 30 Or DatePK < 0 Then
    MsgBox "กรุณาเลือกวันที่ " & Date & " - " & Date + 30, vbCritical, "แจ้งเตือน"
    Me.Text20 = Null
    End If
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: naekkhung

5
อ่อโค้ดที่ผมส่งไปผมกำหนด Pop Up Form = No
                                 Modal = No ครับ โค้ดถึงจะทำงาน

แต้ถ้า Pop Up = Yes ไม่รู้ทำยังไงเหมือนกัน
 :sweat:

แต่ก็พอมีวิธีอื่นๆที่พอจะทำได้เช่นการ ใช้ Event Click ในฟอร์ม ข้อมูลทั้งหมด
เช่นในส่วนของ
FormHeader_Click()
Detail_Click()
Form_Click()
หรืออื่นๆเพิ่มเติมจากนี้
ทั้งสามอีเว้นนี้ ใส่โค้ดไปทั้งสามจุดว่า
DoCmd.Close acForm, "collection"

เมื่อเราคลิ๊กโดยจุดต่างๆเหล่านี้ ฟอร์ม collection ก็จะปิดทันทีครับ
โพสต์นี้ได้รับคำขอบคุณจาก: naekkhung

6
มีฟอร์มทั้งหมด 2 ฟอร์มชื่อ "collection","ข้อมูลทั้งหมด" ทั้ง 2 ฟอร์มพนักงานจะเปิดใช้พร้อมกัน
คำถามคือ ปัจจุบันผมใช้งานอยู่หน้าฟอร์ม collection และจะเปลี่ยนไปใช้หน้าฟอร์ม ข้อมูลทั้งหมด อยากให้ ฟอร์ม collection ปิดอัตโนมัติต้องทำยังไงครับ

ที่ฟอร์ม ข้อมูลทั้งหมด ใส่ Event แบบนี้เข้าไปครับ
การทำงานคือเมื่อเราใช้งานอยู่ที่ collectionเมื่อเราไปกดที่  ฟอร์มข้อมูลทั้งหมด
จะทำให้ ฟอร์มข้อมูลทั้งหมด ถูก โฟกัสเราก็สั่งปิดฟอร์ม collection ได้เลย

Private Sub Form_GotFocus()
DoCmd.Close acForm, "collection"
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: naekkhung

7
ห้อง MS Access / : รวมฟิวส์ Text
« เมื่อ: 02 ก.ย. 63 , 12:15:17 »
ขอบคุณมากๆเลยครับ แต่ตอนนี้ถ้าเกิด text1 เราไม่ต้องการกรอกข้อมูล แต่ตอนรวม มันจะมีค่าเว้นวรรคมาด้วย ถ้าเราไม่ต้องการทำยังไงครับ
ใช้ Trim เข้ามาช่วยครับ


Option Compare Database
Public strText1, strText2, strText3 As Variant

Private Sub Text1_Change()
If Len(Me.Text1.Text) > 0 Then
strText1 = Me.Text1.Text
Else
strText1 = Null
End If
OutPutString
End Sub

Private Sub Text2_Change()
If Len(Me.Text2.Text) > 0 Then
strText2 = Me.Text2.Text
Else
strText2 = Null
End If
OutPutString
End Sub

Private Sub Text3_Change()
If Len(Me.Text3.Text) > 0 Then
strText3 = Me.Text3.Text
Else
strText3 = Null
End If
OutPutString
End Sub

Private Sub OutPutString()
Me.total = Trim(strText1 & IIf(IsNull(strText2), Null, " " & strText2) & IIf(IsNull(strText3), Null, " " & strText3))
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: naekkhung

8
ห้อง MS Access / : รวมฟิวส์ Text
« เมื่อ: 31 ส.ค. 63 , 16:03:16 »
เราสามารถที่จะพอทำได้ครับ โดยใช้การกำหนด ประกาศตัวแปรเป็น Public นะครับ
ผมสมมุติ text1 ถึง text3 และ textbox แสดงชื่อ total
เพราะโดยปกติ .Text จะใช้ได้กับ คอนโทรลที่ โฟกัสอยู่เท่านั้น
เราจึงควรสร้างตัวแปรขึ้นมาเก็บค่าไว้ก่อนเพื่อนำไปต่อกับ ตัวแปรต่อๆไป ครับ

ดังตัวอย่างโค้ดนี้

โค๊ด: [Select]
Option Compare Database
Public strText1, strText2, strText3 As Variant

Private Sub Form_Current()
Me.total = strText1 & " " & strText2 & " " & strText3
End Sub

Private Sub Text1_Change()
If Len(Me.Text1.Text) > 0 Then
strText1 = Me.Text1.Text
End If
Me.total = strText1 & " " & strText2 & " " & strText3
End Sub
Private Sub Text2_Change()
If Len(Me.Text2.Text) > 0 Then
strText2 = Me.Text2.Text
End If
Me.total = strText1 & " " & strText2 & " " & strText3
End Sub
Private Sub Text3_Change()
If Len(Me.Text3.Text) > 0 Then
strText3 = Me.Text3.Text
End If
Me.total = strText1 & " " & strText2 & " " & strText3
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: naekkhung

9
ห้อง MS Access / : รวมฟิวส์ Text
« เมื่อ: 31 ส.ค. 63 , 15:24:27 »
เท่าที่ทราบคือไม่ว่าจะใช้เงื่อนไขไหนก็ต้องพิมพ์เสร็จหรือ Enter ก่อนข้อมูลที่อื่นถึงจะอัพเดทครับ / จะให้เป็นแนวว่าระหว่างพิมพ์ช่องหนึ่งอยู่แล้วให้อีกช่องอัพเดทแบบ Realtime ทันทีเลยทั้งที่ยังไม่ตกลงคงจะไม่มีนะครับ
โพสต์นี้ได้รับคำขอบคุณจาก: naekkhung

10
Event Exit ของ combobox ครับ
จากตัวอย่าง combobox ชื่อ cbresult ครับของคุณชื่ออะไร ใส่ชื่อให้ตรงกัน
เช่น

Private Sub cbresult _Exit(Cancel As Integer)
Mycheck
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: naekkhung

11
สร้างคิวรี่ ขึ้นมาครับเพื่อรวบรวมว่า ในแต่ละวันได้ระบุ Result ว่าอะไร....   และระบุไปจำนวนกี่ครั้งแล้ว

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

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

แบบที่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

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

14
ผมแก้ไขให้แล้วครับ
ส่วนที่แก้ คือถ้ามี 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

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

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

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

16
ตาราง เชื่อมกับ 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

หน้า: [1] 2