แสดงกระทู้

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 ... 27 28 29 [30] 31 32 33 ... 46
523
อยากทราบแนวทางในการแก้ด้วยคนค่ะ  :prettiness:

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

https://www.thai-access.com/index.php?topic=1230.msg5454#msg5454

if me.TextAmt> me.Text_remain then
msgbox "คงเหลือไม่พอให้เบิก"
me.TextAmt = null   'เราทำให้มัน = null เพื่อจะได้ระบุใหม่ครับโดยความจริงถ้ายอดเบิกมันยังว่าง ยอดคงเหลือก็จะยังเท่าเดิม
else
'เงือนไขถ้าผ่านการตรวจสอบ
end if

524
ผม DIY เอานะครับ
ผมสมมุติตารางหลักชื่อ table1
          ตารางที่ออกรายงานชื่อ Table1Report โดยใช้การ Maketable โดยได้เพิ่ม Field Addrow มาด้วย
โดยใช้
totalRec = DCount("*", "table1") 'นับจำนวนแถวทั้งหมดของตาราง table1
totalRec = 15 - ([totalRec] Mod 15)  'เพื่อให้ได้ จำนวนแถวที่ขาดหายไป

แล้วใช้โค้ด Addnew เพื่อเพิ่มแถวที่ขาดหายไปยังตาราง Table1Report
เท่านั้นก็จะได้แถวครบ 15 แถวในหน้าสุดท้ายแล้วครับ โดยโค้ดสามารถดูได้จากปุ่ม เปิดรายงานบนฟอร์มนะครับ
โค๊ด: [Select]
Private Sub Command0_Click()
Dim totalRec As Integer
Dim RS As DAO.Recordset
Dim i As Integer
Dim sql As String
totalRec = DCount("*", "table1") 'นับจำนวนแถวทั้งหมดของตาราง table1
totalRec = 15 - ([totalRec] Mod 15)  'หาจำนวนแถวที่ขาดหายไปที่ไม่ครบ 15แถว
If Not totalRec = "15" Then
sql = "SELECT ' ' AS AddRow, Table1.* INTO Table1Report FROM Table1;" 'สั่งให้มีการสร้างตารางซัฟ ขึ้นมาเพื่อใช้แสดงรายงาน
        DoCmd.SetWarnings False
        DoCmd.RunSQL sql
        DoCmd.SetWarnings True

For i = 1 To totalRec
    Set RS = CurrentDb.OpenRecordset("table1Report", dbOpenDynaset) 'add แถวที่เหลือไปยังตาราง สำรอง
            RS.AddNew
            RS![Addrow] = " " & i
            RS.Update
  Next
    RS.Close
    Set RS = Nothing
   
    Else 'ถ้าเช็คแล้ว ไม่เกิน 15 คือครบทุกหน้าก็ให้ทำงานที่คำสั่ง ล่าง Else ครับ
    sql = "SELECT ' ' AS AddRow, Table1.* INTO Table1Report FROM Table1;" 'สั่งให้มีการสร้างตารางซัฟ ขึ้นมาเพื่อใช้แสดงรายงาน

        DoCmd.SetWarnings False
        DoCmd.RunSQL sql
        DoCmd.SetWarnings True

    End If
   
    DoCmd.OpenReport "rptdemo", acViewPreview
End Sub


และในส่วนของ รายงานแก้เป็นแบบนี้นะครับ
โค๊ด: [Select]
Private Sub รายละเอียด_Print(Cancel As Integer, PrintCount As Integer)
 If PrintCount = 1 Then curTotal = Nz(curTotal, 0) + Nz(Me.Amount, 0)
 End Sub

525
หน้าตารายงานหน้าสุดท้าย แสดงแบบไหนครับ
ขอดูรูปหน่อย

526
สร้าง textbox และใส่โค้ดแบบที่ผมโพสไปครับ

527
ข้อที่ 1 ผมมีข้อมูลอยู่ 70 เรคคอด เอามาทำ รายงาน โดยที่ในแต่ละหน้า ต้องการเพียงแค่ 15 เรคคอด
(จากตัวอย่าง 2 เรคคอร์ดนะครับแก้เป็น 15 แทน)
http://www.databasedev.co.uk/report_printing.html

ข้อที่ 2 ขึ้นหน้าใหม่ โดยแต่ละหน้า มีบรรทัด Sum ด้วย

    Option Explicit     
    Dim curTotal As Currency 'กำหนดตัวแปรไว้บนสุดของโค้ด
ตรงส่วนของ PageHeader เลือกEvent  Format ใส่
    curTotal = 0             'กำหนดให้เท่ากับ 0 เมื่อขึ้นหน้าใหม่
ตรง  DetailSection เลือก Event  Print  ใส่
    If PrintCount = 1 Then
    curTotal = curTotal + Me.Amount  'Me.Amount คือชื่อ textbox
    End if
สร้าง  unbound control ตั้งชื่อ  PageTotal ใส่ Page Footer
ตรง PageFooter's Format ใส่
     Me.PageTotal = curTotal

  เครดิต Allen Browne.
http://allenbrowne.com/ser-11.html

528
มันมีแบบ Tab ด้วยครับ


และถ้าอยากไปหน้าต่อไปก็ใช้ ชื่อTab.Setfocus ได้เลย

529
1.ฟอร์มแบบ Navigation Form ครับ
2.คล้ายๆกัน

530
ผมสร้าง code ดังนี้  เพื่อไม่ให้ Form BB_detail  รับข้อมูล
 [BB_detail].Form.AllowAdditions = False
 [BB_detail].Form.AllowEdits = False
 [BB_detail].Form.AllowDeletions = False
แต่มันยังกด command btt  ได้  จริงๆ  ผมอยากให้ Disable ทั้งหมด คือสั่งอะไรไม่ได้เลย
เมื่อเกิดเหตุการณ์    มีวิธีอะไรบ้างครับ

ใช้การกำหนด ControlType ครับเช่นต้องการให้ combobox , textbox , commandbotton ไม่ให้สามารถกดแก้ไขได้ ใช้ ctl.Enabled = false

โค๊ด: [Select]
Private Sub Form_Current()
Dim ctl As Control
  For Each ctl In Me
   If ctl.ControlType = acComboBox Then
       ctl.Enabled = False
       ctl.Locked = True
   End If
    If ctl.ControlType = acTextBox Then
       ctl.Enabled = False
       ctl.Locked = True
   End If
    If ctl.ControlType = acCommandButton Then
       ctl.Enabled = False
          End If
         Next ctl
    Forms![BB_detail].Form.AllowAdditions = False
    Forms![BB_detail].Form.AllowEdits = False
    Forms![BB_detail].Form.AllowDeletions = False
End Sub

ControlType แบบต่างๆ
   acBoundObjectFrame      Bound object frame   
   acCheckBox      Check box   
   acComboBox      Combo box   
   acCommandButton      Command button   
   acCustomControl      ActiveX (custom) control   
   acImage      Image   
   acLabel      Label   
   acLine      Line   
   acListBox      List box   
   acObjectFrame      Unbound object frame or chart   
   acOptionButton      Option button   
   acOptionGroup      Option group   
   acPage      Page   
   acPageBreak      Page break   
   acRectangle      Rectangle   
   acSubform      Subform/subreport   
   acTabCtl      Tab   
   acTextBox      Text box   
   acToggleButton      Toggle button   



531
ห้อง MS Access / : สอบถามเกี่ยวกับ report
« เมื่อ: 05 พ.ค. 63 , 08:18:09 »
สวัสดี ขอถามท่านอาจารย์ เกี่ยวกับการทำรายงานแบบมีเงื่อนไข คือผมอยากเลือกสาขา และ ระหว่างวันที่ หา วันที ครับ ช่วยหน่อยครับมือไหม่
ขอบคุณ ล่วงหน้าครับ

กำหนด เงื่อนไข ให้กับตัวรายงานครับ
สมมุติ Field สาขาชื่อ branch
        Field วันที่ชื่อ DateIn

การกำหนดสาขา ก็สามารถกำหนด Criteria ได้เลยเช่น "สาขา ก" รายงานก็จะแสดงข้อมูลเฉพาะสาขาก ขึ้นมา
ถ้าต้องการ กำหนด วันที่ แบบระหว่างวันที่ เริ่มต้นและวันที่สิ้นสุด กำหนด Criteria Between [StartDate] and [EndDate]

ถ้าต้องการเปิดรายงานโดยอ้างอิงการกำหนดเงื่อนไขบน textbox หรือ คอมโบบ๊อก ก็ใช้การอ้างอิงแบบนี้เช่น
การอ้างอิง สาขาสมมุติชื่อ Combobox1
กำหนดเงื่อนไข Field สาขาให้รายงานดังนี้
Forms![ชื่อฟอร์ม]![Combobox1]

ส่วนการกำหนดเงื่อนไขสำหรับวันที่นั้น ต้องมี Textbox 2 ตัวคือสำหรับกรอกวันที่เริ่มต้น(ชื่อ StartDate)  และวันที่สิ้นสุด(ชื่อ EndDate)
การกำหนดเงื่อนไข Field DateIn ก็จะใส่ Criteria ของรายงานแบบนี้
Between Forms![ชื่อฟอร์ม]![StartDate] and Forms![ชื่อฟอร์ม]![EndDate]


532
อันนี้ต้องขอความรู้จากอาจารย์สันติสุข
แต่ถ้าได้แล้วก็ดีเลยครับ
 :shout: :shout:

533
พอดีผมไม่มี SQL เทสที่เครื่อง แต่ถ้าเราใช้การแปลง เป็น Cstr ในกรณีเป็นข้อความ หรือพวก Cint  กรณีเป็นตัวเลข ก่อนนำไป Join กันว่าจะช่วยได้ไหม เช่น

โค๊ด: [Select]
SELECT Employee.ID, Employee.EmployeeCode, Employee.EmployeeName, CStr([EmployeeDivision]) AS EmployeeDivision1, CStr([EmployeeLocation]) AS EmployeeLocation1 FROM Employee WHERE (((CStr([EmployeeDivision]))=[forms]![Form1]![comboDivision]) AND ((CStr([EmployeeLocation]))=[forms]![Form1]![comboLocation]));
โดยในซัพฟอร์ม ตรงControlSource ใส่ EmployeeLocation1 กับ EmployeeDivision1 แทน

534
คงต้องรีโมทไปดูหน่อยแล้วครับ
Anydesk ไปเช็คได้ไหม
 :sweat: :sweat:

535
ลองดูครับแก้การ Join เป็น text แล้ว
ส่วนที่ต้องแก้คือ จำนวนคอลัมน์  ของ  comboDivision และ comboLocation จาก 2 แก้เป็น 1
ความกว้างคอลัมน์ จาก 0ซม.;5ซม. แก้เป็น 5ซม.




536
อ่อ เป็น varchar หรือครับที่มันไม่ยอมแสดงเพราะ Join Table Field number กับ text มันเลยไม่แสดง
เดี่ยวพรุ่งนี้ผมแก้ตัวอย่างให้นะ

537
ห้อง MS Access / : กำหนด Format ตัวเลข
« เมื่อ: 24 เม.ย. 63 , 15:47:22 »
ข้อมูล ยอดเงิน นั้นน่าจะเป็น Datatype text ครับ
ลองใส่
Format([B4], "#,##0.00" )

538
จบเคสนะครับ รีโมทไปแก้ให้แล้ว  :cool: :cool:

539
อาจารย์แนะนำทีครับผมควรทำใงครับ มันขึ้นฟ้องได้ แต่จะสามารถ เบิกได้ครับแลมีค่าติดลบอยู่

ผมสงสัยครับว่าคุณไปสร้างการลบตรงส่วนไหน
ถ้าเราใช้การเช็คแบบนี้
เราคงต้องแก้ไปเป็นแบบนี้
if me.TextAmt> me.Text_remain then
msgbox "คงเหลือไม่พอให้เบิก"
me.TextAmt = null
else
me.Text_remain = DSum("[จำนวน]","[รายการนำเข้าสินค้า]","[รหัสสินค้า]=" & [txt_รหัสสินค้า])-Nz(DSum("[จำนวนสินค้า]","[รายการสินค้า]","[รหัสสินค้า]=" & [txt_รหัสสินค้า]))
end if

ความน่าจะเป็นคือ
ถ้าไม่ผ่านเงื่อนไข

เมื่อรายการเบิกมากกว่าจำนวนที่มี ต้องแจ้งเตือนและให้แสดงรายการเบิกเดิมที่มีขึ้นมา และลบค่าที่กรอกใน TextAmt เพื่อให้กรอกค่าใหม่

ส่วนกรณีเงื่อนไขผ่าน
ก็ให้ทำการคำนวนค่าได้

ปล.ลบสูตรคำนวนที่ ControlSource ของ Text_remain ออกไปก่อนนะครับ

540
ผมลืมไปของท่าน ติด File dll ทำให้ไม่สามารถทำอะไรได้เลยครับ
คราวก่อนก็เป็น

หน้า: 1 ... 27 28 29 [30] 31 32 33 ... 46