แสดงกระทู้

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 ... 37
1
ลอง DIY ดูไม่รู้ใช้การได้ไหมนะครับ

เปลี่ยนฟิลล์ Name เป็น Names

1.สร้างคิวรี่ที่ 1 ตั้งชื่อ Qry1 ใส่โค้ด
โค๊ด: [Select]
SELECT Table1.ID, Table1.Names, DLast("ID","Table2","Names = '" & [SN1] & "'") AS A, DLast("ID","Table2","Names = '" & [SN2] & "'") AS B, DLast("ID","Table2","Names = '" & [SN3] & "'") AS C, IIf(Not IsNull([A] And [B] And [C]),0,1) AS [CHECK]
FROM Table1;
2.สร้างคิวรี่ที่ 2 ใส่โค้ด
โค๊ด: [Select]
SELECT Qry1.ID, Qry1.Names, Qry1.A AS SN1, Qry1.B AS SN2, Qry1.C AS SN3
FROM Qry1
WHERE (((Qry1.CHECK)=0));

ใช้ Dlast เพื่อดึงรหัสสุดท้ายมาแสดงครับ
ที่จริงแล้ว ข้อมูลใน Table 2 นั้นควรเป็นรายการที่จะไว้เลือกข้อมูลของ Sn1 ถึง Sn3 ด้วยซ้ำ อาจใช้ Combobox ก็ได้คับ

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

2
ในรีพอร์ต มีบางช่องรายการที่แสดงเลขประจำตัวประชาชน 13หลัก ทีนี้หนูอยากให้แสดง x แทนตัวเลขบางตัวสามารถทำได้ไหมคะ เช่น
1-xxxx-23456-xx-9
ขอบคุณค่ะ
ผมสมมุติเชื่อฟิลล์ที่มีเลขบัตรประชาชนชื่อ
PersonalID

ถ้ารูปแบบของข้อมูล เลขบัตรประชาชนเป็นแบบนี้
1-2345-67899-85-3
ใช้โค้ดแบบนี้ได้เลย
โค๊ด: [Select]
PID: Left([PersonalID],1) & "-xxxx-" & Mid([PersonalID],8,5) & "-xx-" & Mid([PersonalID],17,1)

ถ้าเลขบัตรประชาชนมีเฉพาะตัวเลขเช่น
1234567899853
ใช้โค้ดแบบนี้ได้เลย
โค๊ด: [Select]
PID: Left([PersonalID1],1) & "-xxxx-" & Mid([PersonalID1],6,5) & "-xx-" & Mid([PersonalID1],13,1)
โพสต์นี้ได้รับคำขอบคุณจาก: มาลี, SakDa

3
ในรีพอร์ต มีบางช่องรายการที่แสดงเลขประจำตัวประชาชน 13หลัก ทีนี้หนูอยากให้แสดง x แทนตัวเลขบางตัวสามารถทำได้ไหมคะ เช่น
1-xxxx-23456-xx-9
ขอบคุณค่ะ
ใช้ ฟังชั่น right() Mid() left() เพื่อดึงหลักของตัวเลขที่ต้องการแสดงมาแสดงส่วนที่ต้องการให้ใส่ X ก็ใส่เครื่องหมาย & "xxxxx" ได้เลย
โพสต์นี้ได้รับคำขอบคุณจาก: มาลี

4
ห้อง MS Access / : สอบคำสั่ง Visible
« เมื่อ: 10 มี.ค. 65 , 08:33:27 »
จากโค้ดนี้
Private Sub TWRD_AfterUpdate()

Me.TWRDC = DLookup("[WARDCODE]", "QY_ward_FW")

   ''Call Cmd84_Click
Me.TCtlrRCB = DCount("[LABNO]", "QAshow_Recivest2")
    Me.Requery
msgbox DCount("[LABNO]", "QAshow_Recivest2") 
If Me.TCtlrRCB > 0 Then
    Me.Command81.Visible = True
   Else
   Me.Command81.Visible = False
End If
Me.TWHN.SetFocus
        Me.Refresh
End Sub

ลองเพิ่ม msgbox DCount("[LABNO]", "QAshow_Recivest2") 
ดูหน่อยว่ามันแสดงค่า 0 จริงหรือเปล่า หรือแสดงค่าว่างอยู่
เพราะถ้าแสดงค่าว่าง มันจะไม่เข้าเงื่อนไขด้านล่าง
โพสต์นี้ได้รับคำขอบคุณจาก: sjs, mivien20

5
ลองใช้ DAO ดูนะครับผมไม่แน่ใจว่าได้ไหมแต่รุ่นเก่าๆ ใช้ตัวนี้
เช่น
 Dim rs As DAO.Recordset
 Dim rsOut As DAO.Recordset

ลองดูนะครับ
และเช็คตรง
หน้าเขียนโค้ด > Tool > Reference

โพสต์นี้ได้รับคำขอบคุณจาก: Eik Q Sang, Pongsak

6
ที่ botton ใส่โค้ดแบบนี้ดูนะครับว่าได้ไหม


โค๊ด: [Select]
Dim strString As String
Dim strArray() As String
Dim intCounter As Integer

strString = Me.Text4
strArray = Split(strString, ",")

For intCounter = 0 To UBound(strArray)
 Me.ข้อมูล = strArray(intCounter)
 DoCmd.GoToRecord , , acNext
Next intCounter

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

7

เขียนเป็นโค้ดทั้งหมดวันนี้นึกไม่ออกเลยครับ  :cry: แต่!!!
จากเงื่อนไขข้างบน เราจะสังเกตุได้ว่า ในแต่ละวัน และแต่ละ UserR นั้น จะมี SEQ เดียวกัน
ไม่ว่าการเรียงลำดับนั้นจะมาก่อนหรือมาหลัง

ผมลอง  DIY  ดูก็ได้ผลลัพท์แบบที่ต้องการ แต่ต้องสร้างคิวรี่เพื่อให้ได้ผลลัพท์ แบบในภาพด้านบน
ลองเช็คดูเรียงลำดับจาก Q1  >>> Q2  >>> Q_Result 
และท้ายสุดคือที่ปุ่มอัพเดท ข้อมูลจากคิวรี่ไปยังตารางหลัก

Q1 ดึงกลุ่ม DateR และ UserR ที่มีมาแสดง และกำหนดเลือก Autonumber(First)
     เพื่อนำไปใช้ในการสร้าง การรันลำดับในคิวรี่ต่อไป
Q2 นำกลุ่มที่ได้มา เรียงลำดับ ( กำหนด SEQ ให้แต่ละ DateR และ UserR)
     โดยเงื่อนไขการกำหนด SEQ ต้องมี PK ที่เรียงลำดับจากน้อยไปมากของ Autonumber(First)  ที่ถูกต้อง
     เพื่อการเรียงลำดับที่ถูกต้อง (ถ้าติดปัญหาตรงนี้แจ้งได้เผื่อหาวิธีแก้ไข)
Q_Result แสดงผลในแบบคิวรี่

และที่ปุ่มใส่โค้ดแบบนี้
โค๊ด: [Select]
Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim strDate As String
Dim strUser As String

Set db = CurrentDb()
Set rst = db.OpenRecordset("SELECT * FROM MyTable WHERE ((Not (MyTable.DateR) Is Null));", dbOpenDynaset)

If Not rst.BOF And Not rst.EOF Then
  rst.MoveFirst
End If
  Do Until rst.EOF
        strDate = rst!DateR
        strUser = rst!UserR
    rst.Edit
    rst!SEQrec = DLookup("RunSEQ", "Q2", "cstr(DateR) = '" & strDate & "' and cstr(UserR) = '" & strUser & "'")
    rst.Update
   
     rst.MoveNext
    Loop
    rst.Close: Set rst = Nothing
    db.Close: Set db = Nothing

 



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

8
กำหนด Events ของฟอร์ม เมื่อโหลด
โพสต์นี้ได้รับคำขอบคุณจาก: I love movies

9
เปลี่ยนจากเครื่องหมาย + เป็น & ก็ได้เลยครับ
Addressall: [Table1].[Address1] & ' ' & [Table1].[Address2] & ' ' & [Table1].[Address3] & ' ' & [Table1].[Address4] & ' ' & [Table1].[Address5] & ' ' & [Table1].[Zipcode]


แต่แนะนำให้ใช้แบบนี้ครับ

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

โค๊ด: [Select]
Addressall: Trim(IIf(IsNull([address1]),"",[address1]) & IIf(IsNull([address2]),""," " & [address2]) & IIf(IsNull([address3]),""," " & [address3]) & IIf(IsNull([address4]),""," " & [address4]) & IIf(IsNull([address5]),""," " & [address5]) & IIf(IsNull([zipcode]),""," " & [zipcode]))
โพสต์นี้ได้รับคำขอบคุณจาก: mtaccess

10
เดิมใช้ค่าหน้ากระดาษเป็น A4  พอเปลี่ยนมาเป็น Envelope C5 229 x 162 mm  ข้อความด้านล่างหาย ปรับหลายทีแล้วก็ยังไม่ปรากฎ ควรปรับที่เท่าไหร่คะ

พอเอาไปใส่ส่วนท้ายของหน้า ข้อความปรากฎขึ้นนะคะ แต่ตรงรวมเงิน และ ตัวหนังสือที่แปลงจากจำนวนเงิน ขึ้น Error ค่ะ
เนื้อหาหายอยู่แล้วครับ

A4  =  210 x 297 mm
C5  =  229 x 162 mm

อ้างถึง
พอเอาไปใส่ส่วนท้ายของหน้า ข้อความปรากฎขึ้นนะคะ แต่ตรงรวมเงิน และ ตัวหนังสือที่แปลงจากจำนวนเงิน ขึ้น Error ค่ะ
งั้นหาวิธีแก้ตรงส่วนนี้ดูครับ
โพสต์นี้ได้รับคำขอบคุณจาก: I love movies

11
สร้างไว้พิมพ์บิลค่ะ

เมื่อเปิดฟอร์มขึ้นมาจะเป็นบิลแรกที่พิมพ์ไว้

ถ้าอยากได้ว่า เปิดฟอร์มขึ้นมาเป็นบิลล่าสุด ต้องทำไงคะ
ที่ Events FormLoad ใส่ Docmd.gotorecord,,aclast
เพื่อไปยังบิลสุดท้าย
โพสต์นี้ได้รับคำขอบคุณจาก: I love movies

12
ลงยอดเงิน เช่น 2365.25 จะถูกปัดทิ้ง หรือ ปัดขึ้น เป็น 2365 หรือ 2366 ต้องแก้ยังไงคะ
ถ้าคุณกำหนดdatattype ในตาราง เป็นตัวเลข และกำหนดเป็น Integer หรือจำนวนเติมมันจะปัดเศษหมด
กำหนดดาต้าtype เป็น Double
หรือแปลงค่า ให้เป็น Cdbl()
โพสต์นี้ได้รับคำขอบคุณจาก: I love movies

13
ห้อง MS Access / : การใช้ Do While Loop
« เมื่อ: 27 ธ.ค. 64 , 18:14:51 »
ขาดโค๊ดไปบรรทัดหนึ่ง
ตรงที่ ให้ ไปยัง record แรกก่อน

Dim rst As Recordset
Dim strFirstSalary As String
Set rst = Me.RecordsetClone
If rst.RecordCount = "0" Then
MsgBox "No record"
Else
rst.MoveFirst
strFirstSalary = rst!Salary
DoCmd.GoToRecord , , acFirst
Do Until rst.EOF
Me.ID = strFirstSalary
DoCmd.GoToRecord , , acNext
rst.MoveNext
Loop
End If
โพสต์นี้ได้รับคำขอบคุณจาก: kn208598

14
ห้อง MS Access / : การใช้ Do While Loop
« เมื่อ: 27 ธ.ค. 64 , 15:53:23 »
อ๋อครับ..คือผมยกตัวอย่างเพื่อให้ทราบว่าโค้ดตัวนี้มันผิดอย่างไร และต้องแก้อย่างไรน่ะครับ..ขอบคุณครับ..

ตัวอย่างด้านบนได้เลยครับ

ปกติถ้าจะให้ record ในตาราง นั้นอัพเดทแล้วไปยังเรคคอร์ดต่อไปใช้
rst.movenext อย่างเดียวก็ได้แล้วครับ

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

15
ห้อง MS Access / : การใช้ Do While Loop
« เมื่อ: 27 ธ.ค. 64 , 15:33:55 »
ฟิลด์ Salary มาแสดงที่ฟิลด์ ID ทุกๆเรคคอร์ด

ผมไม่แน่ใจเกี่ยวกับการนำไปใช้งานในอนาคต
กรณีที่มี salary เหมือนกัน ข้อมูล ID ที่เก็บเข้าไปก็จะซ้ำกันนะครับ

วิธีทำง่ายๆใช้ gotoRecord มาช่วยได้ครับ

โค๊ด: [Select]
Dim rst As Recordset
Dim strFirstSalary As String
Set rst = Me.RecordsetClone
If rst.RecordCount = "0" Then
MsgBox "No record"
Else
rst.MoveFirst
strFirstSalary = rst!Salary
DoCmd.GoToRecord , , acFirst
Do Until rst.EOF
Me.ID = strFirstSalary
DoCmd.GoToRecord , , acNext
rst.MoveNext
Loop
End If
โพสต์นี้ได้รับคำขอบคุณจาก: kn208598

16
อ้างถึง
ขอบคุณมากเลยครับ แต่ผมอาจจะอธิบายไปชัดเจน ผมอยากให้ lock record วันที่ 3 ในเดือนถัดไปครับ จะใช้วิธีนี้ได้ไหมครับ?? แล้วมันจะใช้ได้ทุกเดือนไหมครับ??
เช็คเฉพาะวันที่ 3 ของทุกเดือนใช้แบบนี้
SELECT IIf(Day(Mydate)=3,1,0) AS CheckMonth, *  FROM Mytable;

ถ้าอยากให้ วันที่ 3 ของเดือนนี้สามารถเพิ่มหรือแก้ไขข้อมูลได้แต่ของเดือนอื่นๆ ที่ไม่ใช่เดือนนี้ห้ามแก้ไขใส่แบบนี้
SELECT IIf(Day(Mydate)=3 And Not Month(Mydate) = Month(Date()),1,0) AS CheckMonth, *  FROM Mytable;


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

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