แสดงกระทู้

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 ... 15
1
ลองแก้ sql ของรายงานเป็นแบบนี้นะครับ

โค๊ด: [Select]
SELECT PartRequestList.Request_No, PartRequestList.Request_Date, PartRequestList.Company_ID, tb_CompanyData.CompanyName, PartRequestList.ProcessID, tb_ProcessData.ProcessName, PartRequestList.RecordByID, EmplayeeRecord.EplName, PartRequestList.RequestByID, EmplayeeRequest.EplName, qry_RequestDetail.PartName, qry_RequestDetail.Material, qry_RequestDetail.Qty, qry_RequestDetail.Unit FROM tb_ProcessData INNER JOIN (EmplayeeRecord INNER JOIN (EmplayeeRequest INNER JOIN (tb_CompanyData INNER JOIN (PartRequestList INNER JOIN qry_RequestDetail ON PartRequestList.Request_No = qry_RequestDetail.Request_No) ON tb_CompanyData.Company_ID = PartRequestList.Company_ID) ON EmplayeeRequest.Epl_ID = PartRequestList.RequestByID) ON EmplayeeRecord.Epl_ID = PartRequestList.RecordByID) ON tb_ProcessData.ProcessID = PartRequestList.ProcessID;
โพสต์นี้ได้รับคำขอบคุณจาก: p.choowa

2

ลองไปทดสอบดูนะครับ ผมใช้การจับลำดับของ combobox โดยใช้ Active Control
สาย DIY อีกแล้วนะครับอิอิ โดยใช้ Call select_case ใน Event AfterUpdate() ทุกอันนะครับ
โดยผมจะกำหนด combobox เป็น Nboss_1 แทนของเดิมคือ 01 นะครับ
ข้อดีมีโค้ดชุดเดียวมีกี่ combobox ก็ได้ครับไม่จำกัด

เช่น
Private Sub Nboss_1_AfterUpdate()
Call select_case
End Sub
Private Sub Nboss_2_AfterUpdate()
Call select_case
End Sub
Private Sub Nboss_3_AfterUpdate()
Call select_case
End Sub
Private Sub Nboss_ลำดับ N_AfterUpdate()
Call select_case
End Sub

โค๊ด: [Select]
Sub select_case()
Dim strTextName,GetString,GetNum As String

strTextName = ActiveControl.Name
GetNum = Right(strTextName, Len(strTextName) - InStrRev(strTextName, "_"))
Me("ne_" & GetNum) = Me(strTextName).Column(4)
GetString = Me(strTextName).Column(4)

Select Case GetString
        Case "Undead": Me("WinNE_" & GetNum).Value = "Fire"
        Case "Earth": Me("WinNE_" & GetNum).Value = "Fire"
        Case "Fire": Me("WinNE_" & GetNum).Value = "Water"
        Case "Water": Me("WinNE_" & GetNum).Value = "Wind"
        Case "Wind": Me("WinNE_" & GetNum).Value = "Earth"
        Case "Poison": Me("WinNE_" & GetNum).Value = "Holy"
        Case "Shadow": Me("WinNE_" & GetNum).Value = "Holy"
        Case "Holy": Me("WinNE_" & GetNum).Value = "Shadow"
       Case Else: Me("WinNE_" & GetNum).Value = ""
    End Select
 
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: UnKnown

3
งั้นแก้จากแบบเดิมที่มีการอ้างอิง mainform มาใส่แบบนี้ครับ

=DSum("[Qty]","[IncomingMove]","[PartID]='" & [txt_PartID] & "'")

สาเหตุที่ค่าผิดพลาดเพราะเมื่อเราเปิดเฉพาะ Subform
การอ้างอิงผิดพลาดตรงที่เราจะอ้างอิง MainForm ด้วย
ให้แก้ใหม่ครับ
โพสต์นี้ได้รับคำขอบคุณจาก: p.choowa

4
ลองดูตัวอย่างนี้
โพสต์นี้ได้รับคำขอบคุณจาก: ฺBall

5
ลองอ้างอิง แบบนี้ดูครับถ้าตัว textbox อยู่ในซัพฟอร์มให้อ้าง Mainform ไปหา Subform และไปยังตัว Control ครับ
และในกรณีที่ PartID เป็นtext ให้ใส่ เครื่องหมาย '  (single quote) ด้วยครับ
โค๊ด: [Select]
=DSum("[Qty]","[IncomingMove]","[PartID]='" & [Forms]![frm_IncomingSheet]![frm_IncomingList].[Form]![txt_PartID] & "'")
โพสต์นี้ได้รับคำขอบคุณจาก: p.choowa

6
หนูมีคิวรี่อยู่1ตัวนะคะ สมมติมีอยู่2คอลั่มคือ Exp1 กับ Exp2 ค่ะ

Exp1 ผูกกับตารางข้อมูลเป็นtext เก็บขัอมูล yes กับ no
ส่วน Exp2 นั้นไม่ได้ผูกกับตารางใดๆ

ความต้องการของหนูในการแสดงคิวรี่ก็คือ
เมื่อข้อมูลในExp1 เป็น yes ให้แสดงข้อความใน Exp2 ว่า "สินค้าพร้อมส่ง"
แต่หากข้อมูลในExp1 เป็น no ก็ให้แสดงข้อความใน Exp2 ว่า "สินค้าหมดแล้ว"
ประมาณนี้ค่ะอาจารย์ ขอรบกวนด้วยนะคะ
หนูต้องการเอาคิวรี่นี้ไปสร้างเป็นรายงานต่อค่ะอาจารย์

ในคิวรี่ใส่ SQL แบบนี้ได้เลยกรณีที่เก็บข้อความ Yes กับ No โดยอยู่ในตารางชื่อ Table1
โค๊ด: [Select]
SELECT IIf([Exp1]="yes","สินค้าพร้อมส่ง") & IIf([Exp1]="NO","สินค้าหมดแล้ว") AS Exp2, *
FROM Table1;

กรณีที่เก็บข้อมูลโดยใช้ Checkbox เก็บ Yes No ในคิวรี่ใส่แบบนี้
โค๊ด: [Select]
SELECT IIf([Exp1]=True,"สินค้าพร้อมส่ง") & IIf([Exp1]=False,"สินค้าหมดแล้ว") AS Exp2, *
FROM Table1;
โพสต์นี้ได้รับคำขอบคุณจาก: มาลี

7
ห้อง MS Access / : หาค่า Min จาก Query Access
« เมื่อ: 19 พ.ค. 63 , 21:46:49 »
ได้ความรู้ใหม่ครับอาจารย์สันติสุข คือการกำหนดเงื่อนไข ในวงเล็บไว้ก่อน F0 แล้วค่อยแสดงผล
ขอบคุณครับ
 :love: :love: :miao:

ผมเพิ่ม NZ() Function เพื่อให้ ฟิลล์ ที่มีค่า 0 ทุกฟิลล์ แสดง 0 ครับจะได้สมบูรณ์ยิ่งขึ้น

select ID, F1, F2, F3 , nz(min(F0),0) as FMin
from
(              select ID, F1, F2, F3, iif(F1 = 0, NULL, F1) as F0 from T
  union all select ID, F1, F2, F3, iif(F2 = 0, NULL, F2) as F0 from T
  union all select ID, F1, F2, F3, iif(F3 = 0, NULL, F3) as F0 from T)
group by ID, F1, F2, F3
order by ID
โพสต์นี้ได้รับคำขอบคุณจาก: OddyWriter, napat2020

8
อ้างถึง
แต่ในชุดข้อมูลของผม ไม่มีอายุ 1 -5 ปีครับ 
แต่พอกรองข้อมูลแล้ว มันก็ยังขึ้นข้อมูลอื่นที่ อายุ มากกว่า 1 - 5 ปี

ลองอธิบายการกรองข้อมูลมานิดนึงนะครับ ว่าผิดตรงไหน

ที่ Criteria ของ Query ลองใส่ไปว่า  Between 1 and 5 
เพื่อให้ได้ อายุระหว่าง 1 ถึง 5 ปี

อีกอย่างหนึ่งที่เกิดขึ้นได้กับการกรอง
คือ Field อายุที่คุณกรองอยู่นั้น Datatype เป็น text ทำให้การกรองผิดพลาดได้ครับ
วิธีแก้คือใช้ Cint() แปลงเป็นตัวเลขก่อนแล้วใช้ Criteria ของ Query


สมมุติ Field Age คือ fieldอายุ datatype ไม่ใช่ตัวเลข
ตารางใช้กรองชื่อ table1

sql ก็ประมาณนี้

SELECT * FROM Table1 WHERE (((CInt([Age])) Between 1 And 5));

ข้อมูลในตาราง table1 จะแสดงทุกฟิลล์ และจะกรองฟิลล์อายุ ช่วง 1-5  หรือช่วงอายุที่เราต้องการให้เราครับ
โพสต์นี้ได้รับคำขอบคุณจาก: tanuki

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

Private Sub Command0_Click()
 call CheckTableToDelete
End Sub

Sub CheckTableToDelete
 Dim tbd As TableDef
  Dim msg As String
  For Each tbd In CurrentDb().TableDefs
    If tbd.Name = "table1" Then
     msg = MsgBox("ตรวจพบตาราง Table1" & vbCrLf & "คุณต้องการลบตาราง ? ", vbQuestion + vbYesNo, "ระบบสอบถาม")
     If msg = vbYes Then
        DoCmd.DeleteObject acTable, "table1"
     End If
End If
  Next tbd
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: assetthai

10
ขอบคุณครับอาจารย์ เดี๋ยวจะลองแบบนี้ดูครับ
จากโพสบนได้ปรับปรุงโค้ดนิดหน่อยนะครับ กรณีที่ครบ 15 ทุกหน้าก็ให้ทำงานตามปกติ ไม่ต้อง Addrow
โพสต์นี้ได้รับคำขอบคุณจาก: Un

11
ผม 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
โพสต์นี้ได้รับคำขอบคุณจาก: Un

12
สร้าง textbox และใส่โค้ดแบบที่ผมโพสไปครับ
โพสต์นี้ได้รับคำขอบคุณจาก: Un

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

ข้อที่ 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 link
โพสต์นี้ได้รับคำขอบคุณจาก: Un

14
ผมสร้าง 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   


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

15
ห้อง 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]

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

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

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