แสดงกระทู้

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 ... 16 17 18 [19] 20 21 22 ... 32
325
ห้อง MS Access / : unrecognized database format
« เมื่อ: 06 ก.ค. 61 , 21:42:50 »
ตรง ERROR 3443
ตัวฐานข้อมูล และโปรแกรม ได้นำมาทำใหม่จาก Access เวอร์ชั่นเก่าหรือเปล่าครับ
ขอดูตรงการกำหนด reference  ของ  DAO library ตรงหน้าต่างใส่โค้ด Tools->References ว่ามีพวก "Microsoft Office 12.0 Access database engine Object Library"  หรือเปล่าถ้า   Office 10  ใช้  14.0


326
ทำไม ชื่อ Field ในตาราง หลัก กับรองเหมือนกันเลยละครับ
 subform ของคุณไว้ดูข้อมูลทั้งหมดที่เพิ่มเข้าไปใช่หรือเปล่าครับ คือกรอกข้อมูลจาก ฟอร์มหลักแล้วให้ มาแสดงในฟอร์มย่อยแบบนั้นเปล่าครับ

ใช่เลยค่ะ เหมือนบันทึกจากฟอร์มหลักลงฟอร์มย่อยอ่ะค่ะ พอกดบันทึก ช่องก็จะว่างให้เราบันทึก Record ต่อไปได้ อะไรประมาณนี้อ่ะค่ะ


งั้นก็เอา การตั้งค่าตรง หัวข้อที่ 3 ออกไปครับ

Form หลัก และ Form ย่อย ใช้ RecordSource จากตารางเดียวกัน
สมมุติชื่อ ฟอร์มย่อยว่า Subform
ที่ปุ่ม บันทึกใส่แบบนี้ครับ

โค๊ด: [Select]
Private Sub Save_Click()
DoCmd.GoToRecord , , acNewRec
subform.Requery
MsgBox "บันทึกข้อมูลแล้วค่ะ", vbInformation, "สถานะ"
End Sub

ลองดูตัวอย่างนี้ครับ

327
ทำไม ชื่อ Field ในตาราง หลัก กับรองเหมือนกันเลยละครับ
 subform ของคุณไว้ดูข้อมูลทั้งหมดที่เพิ่มเข้าไปใช่หรือเปล่าครับ คือกรอกข้อมูลจาก ฟอร์มหลักแล้วให้ มาแสดงในฟอร์มย่อยแบบนั้นเปล่าครับ

328



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

และต้องไปกำหนด ความสัมพันธ์ของตารางด้วยครับ


ตัวอย่างโปรแกรมครับลองนำไปประยุกต์ใช้ดูนะครับ

329
ตอบข้อ 1
ผมกำหนด combobox สถานะ ชื่อ status
             textbox    วันที่ลาออก ชื่อ DateOut
             combobox สาเหตุการลาออก ชื่อ OutDetail

ที่Event Afterupdate ของ combobox status ใส่โค้ดดังนี้

โค๊ด: [Select]
Private Sub Status_AfterUpdate()
If Me.Status = "ยังทำงานอยู่" Then
Me.OutDetail.Locked = True
Me.DateOut.Locked = True
Me.OutDetail.Enabled = False
Me.DateOut.Enabled = False
Me.OutDetail = Null
Me.DateOut = Null
Else
Me.OutDetail.Locked = False
Me.DateOut.Locked = False
Me.OutDetail.Enabled = True
Me.DateOut.Enabled = True
End If
End Sub

คำสั่งนี้ เราใช้ IF Function เพื่อสร้างเงื่อนไขการทำงานของ Combobox และ Textbox ที่เรากำหนด  ถ้า เราเลือก ยังทำงานอยู่ ซึ่งกำหนดให้ เป็นความจริง ก็จะทำงานตามที่เรากำหนดไว้ แต่ถ้าไม่เป็นจริงก็จะทำงาน ที่ Else ลงมา
Locked คือ ห้ามไม่ให้กรอกข้อมูลได้
Enabled คือ ปิดการใช้งาน
Null คือ ถ้ามีข้อมูลอยู่ก็ทำให้เป็นค่าว่าง

ข้อสองน่าจะกำหนด RelationShip ไม่ถูกต้อง และตั้งค่า เชื่อมต่อ ตรง Link master กับ Link Child Field ไม่ถูกต้องครับ

ตัวอย่างด้านล่าง

330
ถ้าอยากจะสอบถามอะไรเพิ่มเติมนี่ มีช่องทางติดต่อบ้างมั้ยคะ พอดีได้ทำโปรเจค อยากมีที่ปรึกษาเกี่ยวกับ Access อ่ะค่ะ ไม่มีพื้นฐานอะไรเลย

สามารถศึกษาจากที่นี้ได้เลยครับ ติดปัญหาตรงไหน จะมีอาจารย์หลายๆ และเพื่อนสมาชิกหลายท่านๆ ช่วยแนะนำวิธีการให้ครับ คุณสามารถโพสกระทู้สอบถามได้เลยไม่ต้องเกรงใจครับ ถ้าสนใจศึกษา Access แต่ยังไม่ค่อยเข้าใจวิธีการ ให้ลองศึกษาที่ช่องของอาจารย์ TTT http://www.youtube.com/c/AccessCreator
มีการสอนสร้างโปรแกรมโดยใช้ Access อยู่มากมายให้ศึกษาครับ ตั้งแต่การหัดสร้างฐานข้อมูล ซึ่งเป็นส่วนที่สำคัญตั้งแต่เริ่มต้นสร้างโปรแกรม
มีการทำตัวอย่างให้ดูด้วยครับ

ถ้าสงสัยแบบเจาะจง เป็นส่วนๆก็สอบถามที่ เว็บนี้ได้เลยครับ

331

สอบถามนิดนึงค่ะว่า ตรง หน้าต่างใส่โค้ด VBA อ่ะค่ะ มันไม่อ่านภาษาไทย ต้องแก้ตรงไหนหรอคะ

ที่หน้าต่างใส่โค้ด ไปที  Tool > Option > Editor Format
ที่ Font กำหนดเป็น Tahoma Bold (Thai)  หรือ ฟ้อนอื่นๆ ที่มีคำว่า(thai) ต่อท้ายอยู่ครับ

332
คือสร้างฟอร์มบันทึกประวัติพนง.ขึ้นมา แล้วทีนี้อยากจะให้แบบว่า เวลากดบันทึกฟอร์มแล้ว มี Messagebox ขึ้นว่า บันทึกเรียบร้อย อะไรประมาณนี้อ่ะค่ะ

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

ปล.ภาพประกอบไม่มี ไฟล์งานอยู่ที่บ้าน ต้องขออภัยด้วยนะคะ

1.คำสั่ง ที่เมื่อกดบันทึกข้อมูลแล้ว แสดงข้อความแจ้ง Code ให้ใส่ Code ในส่วนท้ายของ คำสั่งบันทึกประมาณนี้ครับ
โค๊ด: [Select]
MSGBOX "บันทึกข้อมูลเรียบร้อยแล้ว", vbInformation, "สถานะ"
2.SubForm นั้นต้องมีการเชื่อมโยงเขตข้อมูลหลัก กับ เขตข้อมูลลูก คุณต้องกำหนด การเชื่อมโยงกันด้วยครับ
ปกติจะกำหนด ID ของ ฟอร์มหลัก เชื่อมกับ ID ของฟอร์มย่อย(SubForm)
วิธีการกำหนด สามารถไปกำหนดได้ที่ ส่วนคุณสมบัติของ Subform ตรงส่วนของข้อมูล

333
มันขึ้น



ผมทักข้อความไปนะครับ แอด line มาเดี่ยวผมแก้ให้  :grin: :grin:

334
ชื่อ report ใส่ตรงไหนครับ
อันนี้ เอาไปใส่ไว้ใน Module นะครับ
ไม่ต้องใส่ชื่อ Report มันจะตรวจหาตัวรายงานที่เปิดอยู่  พอเรากดปุ้ม export ก็จะ Export ออกมาให้เลย
ลองดูตัวอย่างที่ผมอัพโหลดไว้ให้นะครับ


335
เห็นลูกค้าบอกมีตัว  AddOn นี้แล้วครับ
และลูกค้าบอกอีกว่า เขาลง win ตัวเดียวกัน ms ตัวเดียวกัน ทั้งสองเครื่อง เครื่องนึงเปิดได้อีกเครื่องเปิดไม่ได

งั้นลองลบ Code เก่าออก แล้วสร้าง Module ขึ้นมาเอา Code นี้ใส่ลงไป
โค๊ด: [Select]
Public Function ExportToExcel()
On Error GoTo ErrorExport
    DoCmd.OutputTo acOutputReport, Screen.ActiveReport.Name, _
        acFormatXLS, Screen.ActiveReport.Name & ".xls", True
    Exit Function
 
ErrorExport:
    Dim errorDesc, errNo
    erroDesc = Err.Description
    errNo = Err.Number
    MsgBox "พบข้อผิดพลาดระหว่าง Export" & vbCrLf & vbCrLf & _
        "Error No: " & errNo & vbCrLf & vbCrLf & _
        "  Error Desc: " & errDesc, , พบข้อผิดพลาด!"
End Function


ที่ปุ่ม Event Onclick ใส่  Call ExportToExcel
ลองดูครับได้ไหม

ตัวอย่างด้านล่าง

336
เมื่อวานผมทำให้สามารถ export excel โดยตรงได้แล้ว แต่พอเปิดอีกเครื่องดันฟ้อง

the format in which you are attempting to output the current object is not avaliable

ไม่แน่ใจว่าผิดที่โปรแกรรมหรือป่าวนะครับ

Windows ของท่านเป็น Version อะไร Service Pack อะไรคับ
วิธีการดูว่า Windows เวอร์ชันใด ที่หน้าจอหลัก(Desktop) ให้กด แป้นโลโก้ Windows + R แล้วพิมพ์ winver แล้วเลือก ตกลง

ลองติดตั้ง AddIn ตัวนี้แล้วปิดโปรแกรมเปิดใหม่ แล้วลองกด Export ดูนะครับ
https://download.microsoft.com/download/0/f/2/0f2d9941-22df-4778-80f2-57f629de3c46/SaveAsPDFandXPS.exe

337
ถามเพิ่ม เติม นิดนึงนะครับ   ถ้า เรา จะ ให้มี ตัวอักขระ นำหน้า  เช่น  NC-61070201    หรือ  ตามหลัง เช่น  61070201NC
ต้องตั้งค่าอย่างไรครับ

ถ้าต่อหลังแบบ 61070201NC กำหนดดังนี้

Private Sub ID_DblClick(Cancel As Integer)
Dim strDate As String
Dim intNum As Integer, intMax As Variant
Dim strSuffix As String
Dim strID As String
strID = "NC"

strDate = Format(Date, "yymmdd")
intMax = DMax("Val(Mid([ID],7))", "table1", "Left([ID],6) = '" & strDate & " '")

If Me.ID = "" Or IsNull(Me.ID) Then
        If IsNull(intMax) Then
            intMax = 0
            'Debug.Print "1"
        Else
            intMax = intMax + 1
            If intMax > 99 Then intMax = 0
            'Debug.Print "1"
        End If
        Me.ID = strDate & Format(intMax, "00") & strID
End If
End Sub


ถ้าทำแบบต่อด้านหน้า แบบ NC-61070201 กำหนดดังนี้

Private Sub ID_DblClick(Cancel As Integer)
Dim strDate As String
Dim intNum As Integer, intMax As Variant
Dim strSuffix As String
Dim strID As String
strID = "NC-"
strDate = strID & Format(Date, "yymmdd")

intMax = DMax("Val(Mid([ID],10))", "table1", "Left([ID],9) = '" & strDate & " '")

If Me.ID = "" Or IsNull(Me.ID) Then
        If IsNull(intMax) Then
            intMax = 0
            'Debug.Print "1"
        Else
            intMax = intMax + 1
            If intMax > 99 Then intMax = 0
            'Debug.Print "1"
        End If
        Me.ID = strDate & Format(intMax, "00")
End If
End Sub



338
สวัสดีครับ จากของเดินที่คุณทำมาแล้ว
ผมนำมาทำให้นับจำนวนวันแบบ RunningNumber ของ EM แต่ละคน ประมาณนี้

เมื่อเราได้ลำดับของแต่ละวันแล้ว ก็จะสามารถกำหนดเงื่อนไขในการ กำหนดอัตราหักได้

เงื่อนไขในการหักก็ประมาณนี้ครับ
โค๊ด: [Select]
Rate: IIf([EM]=[EM] And IsNull([OPTION]) And [TARN]="ลากิจ" And [Runday]>=0 And [Runday]<=5,"2") & IIf([EM]=[EM] And [OPTION]="ติดวันหยุด" And [TARN]="ลากิจ","5") & IIf([EM]=[EM] And [Runday]>5 And [TARN]="ลากิจ","3") & IIf([EM]=[EM] And [Runday]>=0 And [Runday]<=45 And [TARN]="ลาคลอด","0.50")& IIf([EM]=[EM] And [Runday]>45 And [TARN]="ลาคลอด","1")
รายงาน ที่ได้ประมาณนี้ครับ


ตัวอย่างที่เพิ่มเติมด้านล่าง


339
ขอเรียนสอบถามนะคะ

ในตารางเดิม หนูเก็บข้อมูลวันที่เอาไว้ เป็นแบบ วัน/เดือน/ปี
ที่นี้ หนูอยากให้แสดงผลใน Query โดยให้แสดงปีก่อน เป็นดังนี้ค่ะ ปี/เดือน/วัน

ไม่ทราบว่าสามารถทำใน Query ได้หรือไม่
ในฟอร์ม หนูสามารถทำได้โดยอ้างอิง Text1 ดังนี้ =Format(CDate(Forms![Frm_Date]!Text1)," yyyymmdd")
ได้ผลตาที่ต้องการ
แต่พอจะทำใน Query ไม่ทราบว่าจะอ้างอิงจากอะไร อย่างไรคะ พยายามทำยังไม่สำเร็จค่ะ

สมมุติ Field ในตารางชื่อ DateIn เก็บข้อมูลวันที่
เดิมเป็น 25/01/2018
ใส่ Date:Format([DateIn],"YYYY/MM/DD")  ผลลัพท์ 2018/01/25
หรือ Date:Format([DateIn],"YYYYMMDD")  ผลลัพท์ 20180125


ตัวอย่างด้านล่าง

340
วิธีการคือ 1.คำนวนหาจำนวนวันก่อนครับ แล้ว ค่อย ใช้ IIF เชคเงื่อนไขระหว่าง Option กับ จำนวนวันหยุด และ อัตราการหัก

ส่งตัวอย่างนั้นมาครับ ขอไฟล์ที่ระบุ Option ไว้แล้วเดี่ยวผมลงทำดูให้

341
เอางี้ดีกว่าครับง่ายดี
เปิดรายงานขึ่นมาแล้วกดปุ้ม Export เพื่อให้ Export รายงานให้เราเลย

ที่ Code ให้สังเกตุว่ามีการอ้างถึงชื่อของรายงาน ถ้า รายงานท่านชื่ออื่นก็เอาซื้อมาใส่ให้ตรงกับที่ผม วงไว้




ตัวอย่างด้านล่าง

342
มันขึ้นดังภาพครับ


ใส่ชื่อ report ของคุณแทน ReportName คับ ตรงสีแดงที่ตัวอย่างคำสั่ง

หน้า: 1 ... 16 17 18 [19] 20 21 22 ... 32