แสดงกระทู้

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

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


อันนี้เป็นการหาอายุครับ ถ้าไม่กรอกวันมันจะขึ้น Error 4 ช่องเลยเพราะใส่โค้ดทั้ง 4 ช่อง ถ้าหากเราไม่ใส่วันแต่อยากให้มันไม่ขึ้น Error ได้ไหมครับ พอรู้ว่าใช้ iif เงื่อนไข else ให้เป็น "" แต่โค้ดค่อนข้าง งง ครับ(ดูมาจาก Youtube อีกที) เลยไม่แน่ใจว่าจะเติมตรงไหนดี สับสนวงเล็บ เลยอบากสอบถามว่ามีวิธีอื่นทีไม่ได้ไปเติม iif ไหมครับ
ถ้าไม่ใช้ IIF เช็ค ก็จะใช้การสร้าง Function ขึ้นมาแล้วกำหนดให้เป็น "" ใน Function เลยก็ได้
แต่ต้องดูว่า โค๊ดคำนวนอายุนั้น ทำไว้แบบไหน
คุณควรโพสโค้ดการคำนวนอายุลงมาด้วยเพื่อจะได้ หาวิธีให้ได้ครับ

18


เปิด form มาต้องมานั่ง Sort ใหม่ตลอดเลยครับ ใน Query ก็ Sort แล้ว ใน Subform ที่เป็นไฟล์แยกก็ Sort แล้ว

ที่ Recordsource ของฟอร์ม กดเข้าไปกำหนดที่เครื่องหมาย ... และตั้งค่าให้ฟอร์ม เหมือนต้องค่าคิวรี่นั้นแหละ
แล้วกำหนด sort ไว้ก่อนได้เลยครับ


19
ต้องการ Requery ใน ComboBox ทุกครั้งที่เปลี่ยน Records ต้องใส่ใน Event ตัวไหนใน Form ครับ

ท่านกดเปลี่ยน Record ตรงไหน ก็ใส่โค้ดตรงนั้นได้เลยครับ

ถ้าท่านสร้างปุ่มสำหรับเปลี่ยน Record ขึ้นมาก็ใช้แบบนี้ได้เลย
สมมุติปุ่มชื่อ BtnNext
โค๊ด: [Select]
Private Sub Btn_Next_Click()
DoCmd.GoToRecord , , acNext
Me.ComboboxName.Requery
End Sub

สามารถ ใช้ได้หลายแบบนะครับ ลองนำไปปรับใช้ดูครับ

DoCmd.GoToRecord , , acNewRec  ไปยัง Record ใหม่
DoCmd.GoToRecord , ,acFirst ไปยัง Record แรก
DoCmd.GoToRecord , , acLast ไปยัง Record สุดท้าย
DoCmd.GoToRecord , , acNext ไปยัง Record ถัดไป
DoCmd.GoToRecord , ,acPrevious ไปยัง Record ก่อนหน้า






20
ลองปรับโค๊ดเป็นแบบนี้แล้วทดสอบดูนะครับ

โค๊ด: [Select]
Dim strNum, strBarCode As String
Dim I, amount   As Long
Dim db As Database
Dim rs As Recordset
    Set db = CurrentDb()
    Set rs = db.OpenRecordset("table1", DB_OPEN_DYNASET)
    For I = Me.txtBeginNumber To Me.txtEndNumber
     strNum = Right("0000" & I, 4)
     strBarCode = Trim(Me.txtModel) & Trim(Me.Text15) & Trim(strNum) & "R2"
    If DCount("Barcode", "table1", "[Barcode] ='" & strBarCode & "'") > 0 Then
        MsgBox "มีการลงทะเบียน Barcode นี้แล้ว", vbInformation, "Status"
        Exit Sub
    End If
    If Nz(amount, 0) = 0 Then
    amount = DCount("Barcode", "table1", "[Barcode] ='" & strBarCode & "'")
    Else
    amount = amount + DCount("Barcode", "table1", "[Barcode] ='" & strBarCode & "'")
    End If
 Next I

  'เช็คเงื่อนไขการซ้ำให้เสร็จ แล้วตามด้วย ถ้าไม่มีข้อมูลซ้ำ amount = 0 ก็ทำการบันทึก
 If amount = 0 Then
    For I = Me.txtBeginNumber To Me.txtEndNumber
    strNum = Right("0000" & I, 4)

     rs.AddNew
        rs![Barcode] = Trim(Me.txtModel) & Trim(Me.Text15) & Trim(strNum) & "R2"
       
     rs.Update
     Next
     MsgBox "บันทึกสำเร็จ", vbInformation, "การบันทึก"
rs.Close
db.Close
Set rs = Nothing: Set db = Nothing
End If

21
รูปแบบการเช็คยังไงนะครับ

สมมุติมีการลงข้อมูลไป 20 ครั้งเช่น
1122880804K2608210001R2   ถึง 1122880804K2608210020R2

แบบที่ 1
กรณีเราไปกำหนดซ้ำให้แจ้งเตือนและไม่มีการเพิ่มข้อมูล ถ้าเจอว่ามีรหัสใดๆ ระหว่าง 0001 ถึง 0020 อยู่ แม้ว่าจะไม่มี 0019 อยู่ในตารางก็ห้ามเพิ่มข้อมูล

แบบที่ 2
  ถ้าเรากำหนดช่วง 1 - 20 เหมือนเดิม แต่เจอว่า ถ้าเจอว่ารหัสใดๆ ระหว่าง 0001 ถึง 0020 นั้นยังไม่มีการเพิ่มมาก่อน เช่น 0015  0019 ยังไม่มีการเพิ่มเข้ามา หรือเกิดจากการลบ record แล้วทำให้รหัสนี้ยังว่างอยู่ก็ให้ เพิ่ม 0015  0019 ลงไปด้วย เพื่อให้ครบ 0001 ถึง 0020

แบบที่ 3
  ถ้าเรากำหนดช่วง 1 - 20 เหมือนเดิม แต่เจอว่า ถ้าเจอว่ารหัสใดๆ ระหว่าง 0001 ถึง 0020 นั้นยังไม่มีการเพิ่มมาก่อน เช่น 0015  0019 ยังไม่มีการเพิ่มเข้ามา หรือเกิดจากการลบ record แล้วทำให้รหัสนี้ยังว่างอยู่ก็ให้ เพิ่ม 0015  0019 ลงไปด้วย ส่วนอันไหนซ้ำให้ เก็บบันทึกลงในตารางอีกตารางเพื่อแสดงรายการที่ซ้ำ  หรือ แสดง msgbox แสดง ลำดับทั้งหมดที่ซ้ำ ซึ่งอาจจะแจ้งว่า รหัส 1,5,7 ซ้ำ เป็นต้น เพื่อให้ครบ 0001 ถึง 0020

แบบที่ 1 , 2 หรือ 3 ครับ

22
ดูจากการออกแบบข้อมูลตอนแรกแล้ว เห็นสร้างไว้ 3 ชุด
Crosstab มันจะจำกัดจำนวน คอลัมน์อยู่นะครับ
การแสดงข้อมูลนั้นถ้า คอลัมน์ไม่เยอะจะแสดงได้หมด แต่ถ้าเยอะ คอลัมน์บางส่วนจะหายไปนะครับ

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


23
ผมสมมุติ Formหลักชื่อ FrmMain
           SubForm ทางซ้ายชื่อ SubForm1
           SubForm ทางขวาชื่อ Subform2
           Table ของข้อมูลทางซ้าย ชื่อ EM มีฟิลล์ [รหัสพนักงาน] , [F3]
           Table ของข้อมูลทางขวา ชื่อ NEWEM  มีฟิลล์ [CODEEM] , [EM]
วิธีทำ
1.สร้างคิวรี่ขึ้นมา ใช้ Append Query ใส่ SQL และตั้งชื่อคิวรี่ตามต้องการเช่น QueryAppendToNewEm

INSERT INTO NEWEM ( CODEEM, EM )
SELECT EM.[รหัสพนักงาน], EM.F3
FROM EM
WHERE EM.[รหัสพนักงาน]=[forms]![FrmMain]![SubForm1].[Form]![รหัสพนักงาน];

2.ที่ปุ่มใส่โค้ดไปว่า

DoCmd.SetWarnings False
DoCmd.OpenQuery "QueryAppendToNewEm"
DoCmd.SetWarnings True
[Forms]![FrmMain]![Subform2].[Form].Requery

24


ตรง Date ผมใช้ Date() และ Time ใช้ Time() ปรากฏว่าเวลาเพิ่ม Row ไปใหม่ มันจะให้ทุก Row เป็นเวลาตอนนี้เลย
ถ้าอยากให้มันเป็นวัน,เวลา บอกเฉพาะ Row ไปว่าเพิ่มมาวันไหนเวลาไหน ไม่ทราบว่าต้องทำอย่างไรครับ
วิธีทำต้องมีฟิลล์ในตาราง เช่น TimeStamp ชนิดข้อมูล date/time
และมีเมื่อการอัพเดทข้อมูล ในฟอร์มกำหนดให้อัพเดทฟิลล์ timestamp  = NOW()  มันจะได้ทั้งวันที่และเวลา มาเลยครับ
เราจะได้ไม่ต้องสร้าง 2 ฟิลล์

หมายเหตุถ้าเมื่อมีการเพิ่มฟิลล์ใหม่กำหนดให้บันทึกเวลาด้วย
ให้กำหนด default Value ของฟิลล์นี้ในตาราง = Now() ไว้ได้เลย

25
มัน Error ตรงนี้ครับ ผมพยายามแก้ชื่ออะไรแล้วแต่ยังไม่ได้ซักทีครับ




Private Sub Check_AfterUpdate()
Me.Dirty = False
Forms!form1![ฟอร์มย่อย QueryCheck].Form.Requery
End Sub
เกิดจาก system locate ไม่ได้รับรองภาษาไทย แต่แก้ไขให้แล้วครับ

26
Anydesk ไปดูให้คับ

27
ไม่ค่อยเข้าใจความต้องการเท่าไร แต่ดูจากรูปแบบที่คุณกำลังทำแล้ว ลองดูตัวอย่างนี้นะครับ

1.วิธีคือเมื่อเลือกชื่อของพนักงานที่ต้องการแล้ว มาระบุวันที่ด้านล่าง

2.เมื่อเรากดปุ่ม Go ให้ดูที่ ตาราง AddDateByName ครับ ที่ Field Sequence จะมีลำดับการเพิ่มของวันที่อยู่ครับ ลำดับจะรันไปเรื่อยๆ ตามจำนวนของการเพิ่มวันที่ในฟอร์ม ได้แบบไม่จำกัด


3.ให้ดูผลลัพท์ ในคิวรี่ชื่อ CrossTabSeq


ที่หัวคอลัมน์ ที่เป็นตัวเลขคือ วันที่ในแต่ละ ครั้งที่เพิ่มเข้าไป  ของพนักงานแต่ละคนครับ


28
ส่งฟอร์มตัวอย่างนี้มา เดี่ยวผมเพิ่มให้


29
ตรงแก้ไขชื่อฟิวล์ ทำก่อนเลยในคิวรี่แบบที่คุณ UnKnown บอกครับ เนื่องจากเครื่องคุณไม่ได้ตั้งค่าให้รองรับภาษาไทย


แถมวิธีที่แสดงในคิวรี่เฉยๆ ชื่อที่แสดง: [ชื่อฟิลด์] เช่น ไอดี:[ID] , เลขบัตร:[ID_Card] , รหัส:[Code ]

30
check นามสกุลที่คุณกำหนดจะ export ดีๆนะครับ

ถ้าจะ export เป็น XLSX 
ตรงกับสั่ง EXport ต้องเป็น AcFormatXLSX ครับ

sFilename = "E:\ExportedResults1.xls"
    DoCmd.OutputTo acOutputQuery, "ชื่อตาราง", acFormatXLS, sFilename

ถ้า XLSX

sFilename = "E:\ExportedResults1.xlsx"
    DoCmd.OutputTo acOutputQuery, "ชื่อตาราง", acFormatXLSX, sFilename

31
แถมวิธีที่แสดงในคิวรี่เฉยๆ ชื่อที่แสดง: [ชื่อฟิลด์] เช่น ไอดี:[ID] , เลขบัตร:[ID_Card] , รหัส:[Code ]

ปกติถ้า export จากคิวรี่สามารถสร้าง ชื่อฟิลล์ที่ต้องการได้ตามที่คุณ UnKnown แนะนำมาครับ

32
ไปที่ VBA Editor ไปที่ TOOL > References
ไปกดติ๊กเลือก Microsoft Excel xx.x Object Library  มาด้วยครับ


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