แสดงกระทู้

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
1
สวัสดีครับ
สำหรับเพื่อนสมาชิกท่านใดติดปัญหา mdb ไฟล์ชำรุด ฟ้อง Unrecognized database format
สามารถติดต่อมาที่ผมได้ครับผม

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

2
ในความเห็นของผม
ถ้าจะให้ถูกตามหลักการ เกี่ยวกับเลขที่ Inv ถ้าถูกใช้แล้ว หากต้องการยกเลิก ควรจะมีฟิลด์สักอันหนึ่งเป็นตัวมาร์คว่า  Cancel
เป็นต้นว่า InvCancel = (Y/N)
เพราะจะได้ทราบว่า Inv เลขที่ดังกล่าวโดน Cancel ในระบบไปแล้ว แต่ตัวเอกสารจริงอาจจะไปถึงมือ หรือ อยู่ในมือลูกค้า
หากมีประเด็นก็จะได้ทราบว่า เอกสาร เลขที่ดังกล่าวโดนยกเลิกไปแล้ว
ถ้าลบ ก็จะเป็นการลบร่องรอยของเอกสารที่ออกไป
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

3
ก็ลองทำเป็นตัวอย่างออกมาให้แกะตัวอย่างโค๊ต และนำไปประยุกต์ต่อนะครับ
ส่วนหนึ่ง ต้องลองฝึกแกะโค๊ตด้วยครับ จะได้เข้าใจหลักการ ไม่กล้าก็ไม่เกิดครับ

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

4
มีน้องอีกคน ไม่ทราบวิธี Save As ไฟล์จาก accdb --> mdb
ผมรบกวนเข้าไปแนะนำหน่อยครับ
https://www.thai-access.com/index.php?topic=2436.msg16060#new
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

5
ถ้า Save เป็น mdb ไฟล์ไมไ่ด้ผมก็คงช่วยไม่ได้
คงต้องรบกวน กูรูท่านอื่นครับผม
โพสต์นี้ได้รับคำขอบคุณจาก: mtaccess

6
รบกวน Save as ไฟล์ตัวอย่างเป็น Accdb --> MDB ไฟล์ แล้ว Upload เข้ามาให้ด้วยครับ
พอดีผมใช้ access 2002

ข้างใน Zip ไฟล์ที่ส่งมายังเป็น Accdb อยู่ครับ ขอเป็น mdb ไฟล์ครับ

แต่เท่าที่อ่านดู ใจความสำคัญคือ นับวันอบรม ไม่นับวันอาทิตย์ Weekday()
โดยฟังค์ชั่นนี้ จะนับวันอาทิตย์ = 1 เรื่อยไป เสาร์ = 7

เราก็สามารถใช้ประโยช์จากตรงนี้มาประยุกต์ใช้งานได้ครับผม
โพสต์นี้ได้รับคำขอบคุณจาก: mtaccess

7
ใช้ DAO ร่วมกับคำสั่ง Do While

Do while not rst1.EOF
   เงื่อนไขที่ 1

   เงื่อนไขที่ 2

   เงื่อนไขที่ 3

  rst1.movenext
Loop
โพสต์นี้ได้รับคำขอบคุณจาก: mtaccess

8
Function GenInvNo()
    Dim rst1, rst2, rst3 As DAO.Recordset
    Dim vStkID, vInvID, vInv1, vInv2, IntMax, vValRef As Long
    Dim vStkNo, vInvNo, vInv As String
   
    Dim dbs As Database
    Set dbs = CurrentDb()
   
    If IsNull(Me.INvNo) Or (Me.INvNo = "") Then
        'สร้างเลขที่ Inv ใบใหม่
        vInv = "IV" & Format(Date, "yy") & Format(Date, "MM")
        If DCount("Val(Right([InvNo],4))", "[tbl_main]", "Mid([InvNo],1,6) = '" & vInv & "'") = 0 Then
            vInvNo = vInv & "0001"
           
        Else
            IntMax = DMax("Val(Right([InvNo],4))", "[tbl_main]", "Mid([InvNo],1,6) = '" & vInv & "'")
            vInvNo = vInv & Format(IntMax + 1, "0000")
           
        End If
       
        'ใส่ค่าลงไป
        Me.INvNo = vInvNo
   
    End If
   
End Function

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

9
อันนี้ต้องทำหน้าแยกเพิ่มขี้นมาอีกอันในการยกเลิกรายการ โดยอาศัยหลักการเดียวกัน เพียงแต่จากบวกเพิ่มเป็นลบ

      rst2.Edit
      rst2!Qty = rst2!Qty - 1
      rst2.Update

หรือจะไปกำหนดให้ User ไปแก้จำนวนเอาก็ได้ที่ SubForm โดยไปดูที่ Property ของ SubForm : Editting แต่มีความเสี่ยงตรงแก้ผิด
วิธีที่ปลอดภัยสุดคือ ยิงด้วยเลขที InvNo --> ยิงบาร์โค๊ต เพื่อให้ระบบวิ่งไปตรวจสอบความถูกต้องแล้ว ค่อยลดจำนวน

ลองฝึกทำครับ แค่ประสบการณ์จะบังเกิด
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

10
ผมมีปรับตัวอย่างเพิ่ม เป็น Sample3.Zip
หากต้องการลบ รายการไหนให้คลิ๊เลือกแบบนี้แล้วกด Del

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

11
ให้ Download ตัวอย่างไฟล์อีกครั้งครับ
ผมมีการปรับให้ใหม่แล้ว
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

12
ได้ทำตัวอย่างมาให้ศึกษาเป็นแนวทางแล้วนะครับ
โดยมีการแก้ไขซื่อฟิลด์ที่ซื่อ ID ในบาง Table เพื่อให้มือใหม่ได้ตามถูก
เนื่องจากตัวอย่างต้นฉบับที่ได้มาใช้ฟิลด์ ชื่อ ID เหมือนกันหลาย Table อาจจะทำให้เกิดความสับสนได้

โดยตัวอย่างที่ทำให้มีทำตัวอย่างฟังค์ชั่นอื่นเพิ่มให้นิดหน่อย เพื่อ่ให้มองเห็นภาพได้เร็วขี้น
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

13
สามารถทำได้ครับ โดยใช้ DAO ช่วยจะทำให้ง่ายขี้น
แต่เนื่องจากไฟล์ตัวอย่างที่ให้มานั้นเป็นเวอร์ชั่นใหม่ รบกวน Convert ลงเป็น Access2002
ที่มีนามสกุล mdb แล้ว Upload เข้ามาใหม่ครับ เพราะผมใช้เวอร์ชั่นเก่า เลยไม่สามารถทำเป็นตัวอย่างให้ได้ครับ
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

14
หาจนเจอครับ มันเป็นรูปแบบของ UnixTime ซึ่งเป็นรูปแบบวันที่ บน MySQL
จึงเอามาฝากใว้ให้เพื่อนสมาชิก เผื่อว่า ติดปัญหาเดียวกัน
vDate =  ([StartTime]/86400)+#01/01/1970#

แหล่งที่มา
https://codebeautify.org/unix-time-stamp-converter
โพสต์นี้ได้รับคำขอบคุณจาก: Un, Max

15
ลองศีกษาฟังชั่น DateDiff() ดูครับ สิ่งที่จะได้คือเวลาที่สาย
จากนั้นใช้คำสั่ง If เพื่อใช้คัดกรองผู้ที่มาสาย = 1

ลองเพิ่มรูปแบบคำสั่งนี้เข้าไปใน Query ดูครับ LateChk: IIf(DateDiff("n",[StrtWrk],"08:00")<0,"1","")





ขอขอบคุณความรู้เกี่ยวกับ MS-Access จาก อ. สุภาพ ไชยา
ก็ฝากไว้เผื่อจะสามารถช่วยให้มิตรรักแฟนเพลงท่านหนึ่งท่านใด ก้าวพ้นปัญหาที่กำลังแก้อยู่ได้เร็วขึ้น
โพสต์นี้ได้รับคำขอบคุณจาก: UnKnown, MiKu, apirak

16
ปัญหานี้น่าจะเหมือนกับที่ผมเคยใช้ Tab Delimit เป็นตัวแบ่งข้อมูลใน Text file ที่ส่งออกทำให้การนำเข้าข้อมูลข้อไฟล์นี้ผิดพลาดไป
ปัจจุบันนี้ผมเปลี่ยนมาใช้เครื่องหมายคอมม่า (,) แทนยังไม่เจอปัญหาดังกล่าวเลย

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

17
โดยมากแล้วผู้ถามจะออกมาในลักษณะเดียวๆ กันคือ อยากถาม แต่ตั้งคำถามไม่เคลียร์ หรือให้ข้อมูลไม่ครบถ้วน ทำให้ไม่มีคนตอบ หรือนานกว่าจะตอบ หรือบางทีก็ไม่อยากตอบซะงั้น
จึงอยากจะแจ้งให้เพื่อนมิตรรักแฟนเพลงทุกท่าน หากต้องการจะให้มีคนตอบคำถามของท่าน ควรให้ข้อมูลและรายละเอียดให้ครบถ้วน
คนที่จะให้คำแนะนำจะได้เข้ามาตอบคำถามที่ท่านสงสัยได้เร็วขี้น

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

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

เทคนิคที่ผมจะแนะนำวันนี้คือ เราจะมีการสร้าง Temp Table วางคู่แทรกเข้าไปในข้อมูลที่ต้องการสร้าง Label ในตัวอย่างนี้คือ LabelRun



จำนวน Label จะเกิดนั้นมีตามจำนวน record ที่เรา Add เข้าไปใน Table : LabelRun และใน Table ก็จะมีฟิลด์ที่ชื่อ LabelNo



ส่วนที่หน้าจอสำหรับ User นั้นเราก็สร้าง textbox เพื่อให้ผู้ใช้กรอกจำนวนที่ต้องการพิมพ์ได้ตามต้องการ



และใส่ Code เข้าใน CommandButton โดยอาศัยคำสั่ง For..Next
Private Sub Command0_Click()
    Dim rst1 As DAO.Recordset
   
    Dim vNo As Long
   
    Dim dbs As Database
    Set dbs = CurrentDb()
   
    DoCmd.SetWarnings False
    DoCmd.RunSQL "DELETE * FROM LabelRun"
    DoCmd.SetWarnings True
   
    Set rst1 = dbs.OpenRecordset("SELECT * FROM LabelRun")
   
    For vNo = 1 To Me.Text1 Step 1
        rst1.AddNew
        rst1!LabelNo = vNo
        rst1.Update
    Next
   
    rst1.Close
    Set rst1 = Nothing
   
    DoCmd.OpenReport "Report1", acViewPreview
   
End Sub

และสิ่งที่ต้องทำเพิ่มเติมคือเปิด DAO library ขื้นมาใช้ด้วย เนื่องจากมีการอ้างอิงเพื่อใช้ Recordset โดยเลือกจากเมนู Tools-->Reference



เมื่อลองคลิ๊กดูก็จะได้รายงานออกมาหน้าตามประมาณนี้ครับ
ไม่ต้องแปลกใจนะครับ ถ้าเปิดออกมาแล้วจะเห็นแค่ Label อันเดียว ซึ่งมันเป็น Defualt ของ Access ที่จะให้โชว์หน้าแรก ส่วนหน้าอื่นต้องเลื่อนเอา แต่ถ้าเราสั่งพิมพ์มันก็จะพิมพ์ออกมาทุกหน้า

ส่วนรูปที่ผมแสดงให้เห็นนี้คือผมเลือกให้มีการแสดงหน้า Report หลายหน้าพร้อมกันโดยเลือกจากเมนูข้างบนครับ



ขอขอบคุณความรู้เกี่ยวกับ MS-Access จาก อ. สุภาพ ไชยา
ก็ฝากไว้เผื่อจะสามารถช่วยให้มิตรรักแฟนเพลงท่านหนึ่งท่านใด ก้าวพ้นปัญหาที่กำลังแก้อยู่ได้เร็วขึ้น


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

หน้า: [1] 2