แสดงกระทู้

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 ... 52
2

เขียนเป็นโค้ดทั้งหมดวันนี้นึกไม่ออกเลยครับ  :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

 




3
กำหนด Events ของฟอร์ม เมื่อโหลด

4
เปลี่ยนจากเครื่องหมาย + เป็น & ก็ได้เลยครับ
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]))

5
มีตัวอย่างข้อมูลที่ต้องการให้แสดงผลไหมครับว่าเป็นแบบไหน
สร้างตัวอย่างใน Excel  แล้วแคปเป็นภาพมาก็ได้ครับ

เงื่อนไขน่าจะสร้างได้ครับ

6
อ้างถึง
ดัดแปลงยังัย เลขมันเริ่มต้นที่ 0 ทุกที
กำหนดตัวแปร เก็บค่า 1 ก่อนใน record แรกครับเช่น
Dim db As DAO.Database
Dim rst As DAO.Recordset

Dim strDate As String
Dim strOnNum As Long

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
  strDate = rst!DateR
  strOnNum = "1"
End If
  Do Until rst.EOF
  If strDate = rst!DateR Then
  If IsNull(DMax("SEQrec", "MyTable")) Then
    rst.Edit
    rst!SEQrec = strOnNum
    rst.Update
    strOnNum = rst!SEQrec
  Else
    rst.Edit
    rst!SEQrec = strOnNum
    rst.Update
  End If
  Else
    rst.Edit
    rst!SEQrec = strOnNum + 1
    rst.Update
  End If
 
    strDate = rst!DateR
    strOnNum = rst!SEQrec
     rst.MoveNext
    Loop
   

เท่านี้ก็ไม่ต้องใส่โค้ดลบแล้วครับ  :miao:

7
ลองดูตัวอย่างนะครับ ไม่รู้ต้องการแบบนี้หรือเปล่า

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

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

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

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

9
ถ้าจะให้เลขที่บิลรัน โดย มีปุ่มเพิ่ม/ลด(ถอยไปบิลเก่า)เลขที่บิล

อธิบายไม่มีตัวอย่างลักษณะเงื่อนไขในการออกบิล เลยแนะนำไม่ได้
อ้างถึง
กำหนดว่า จะมี 0 กี่ตัวข้างหน้า ใส่ช่องไหนคะ
สมมุติอยากให้มีตัวเลข 0 ข้างหน้า 4 หลัก
Right("0000" & เลขที่บิล, 4)

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

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

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

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

12
ขอแก้ในส่วนของการเช็ควันที่ในเดือนปัจจุบันให้สามารถแก้ไขได้นะครับ ต้องเช็คปีด้วย
โค๊ด: [Select]
SELECT IIf(Day([Mydate])=3 And Month([Mydate])=Month(Date()) And Year([Mydate])=Year(Date()),1,0) AS CheckMonth, *
FROM Mytable;

ค่า 1 คือเข้าเงื่อนไขที่สามารถให้แก้ไขได้
ค่า 0 คือห้ามแก้ไข

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

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

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

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

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

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

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;



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