แสดงกระทู้

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] 5 6 7 ... 12
49

สามารถทำได้ง่ายๆ ครับ โดยใช้ Function Replace สร้างในคิวรี่ก็ได้เช่น
1.สมมุติ ตารางชื่อ table1
มีฟิลล์ ID  เป็น Autonumber
  ฟิลล์ textletter เป็น text

2.สร้างคิวรี่ขึ้นมา ใส่โค้ดไปแบบนี้



letter: Replace(Replace([textletter],"กา","อีกา"),"เทวดา","เทพเทวดา")
จะทำให้ Field ที่ชื่อ textletter เพิ่มข้อความส่วนที่เหลือให้อัตโนมัติครับ

3.ตั้งชื่อคิวรี่ ในตัวอย่างผมตั้งชื่อว่า QryReport


4.สร้างรายงานขึ้นมา และกำหนด RowSource หรือ แหล่งข้อมูลแถว เป็นชื่อคิวรี่ที่เราสร้างขึ้น จากข้อ 3



แล้วลองเปิดรายงานดูครับ
ไฟล์ตัวอย่างด้านล่าง

50
ห้อง MS Access / : characters found after end of SQL statement
« เมื่อ: 03 ธ.ค. 62 , 13:39:52 »
สามารถทำได้อยู่แล้วครับ แต่ Place จะมีการซ้ำกันตามจำนวนของสินค้าที่แสดง ของแต่ละ รหัสนะครับ

เช่น place A   รหัสสินค้า A = 10 .............ฯลฯ....................
      place A   รหัสสินค้า B = 5  ..............ฯลฯ...................

เป็นต้น
วิธีการ หา max วันที่ให้ได้แล้ว เอา สินค้าทุกตัวของวันที่นั้นมาแสดงทั้งหมด (แต่ place จะซ้ำกันตามจำนวนสินค้านะครับ)

51
ห้อง MS Access / : characters found after end of SQL statement
« เมื่อ: 03 ธ.ค. 62 , 09:19:49 »
ผมแก้ตรงนี้ให้แล้วครับ 1H060001622 จะแสดง ใน Place Am328 ถูกไหมคับ
1H060001620 จะไม่นำมาแสดง

52
ห้อง MS Access / : characters found after end of SQL statement
« เมื่อ: 03 ธ.ค. 62 , 08:42:22 »
มีอีกแบบ แก้ปัญหา place ซ้ำกันคับ

ถ้าถูก Query3 ต้องมี record = 2446 นะครับ
เพราะ BoxIn ของคุณ คือ 2446

อ้างถึง
แล้วถ้าจะเพิ่มพวก Product เองสามารถกดเพิ่มตรงนี้เข้าไปได้เลยมั้ยคะ

เพิ่มเองได้ แต่ต้องไปกำหนด Max วันที่ ของสินค้านั้นๆ ด้วยนะครับถึงจะได้ยอดที่ถูกต้อง
(ใช้ Max นะครับ ไม่ใช่ใช้ Last นะครับ)

53
ห้อง MS Access / : characters found after end of SQL statement
« เมื่อ: 03 ธ.ค. 62 , 08:01:54 »
ลองสร้างคิวรี่ ใส่ sql นี้เข้าไปแล้วดูผลลัพธ์นะครับ
ผมหา ตาราง Customer , Product , Gcas ไม่เจอเลยไม่ได้เพิ่มส่วนนี้ให้นะครับ
ไม่รู้ผมเข้าใจถูกไหมนะครับ

คือ
1. หา Place โดยการ GroupBy ให้เหลือ Place 1 ตัว ถ้าซ้ำกันก็รวมกันให้ไม่ซ้ำ
2. ส่วนการหา Inhouse (จากวันที่ล่าสุด) นำคิวรี่ warehouse - รหัสสินค้า มาเชื่อม ความสัมพันธ์ กับ warehouse - จำนวนสินค้า ตรง Place
แล้วดึง Inhouse มาแสดง

แต่ กรณีที่ Place เดียวกัน แต่มี INHOUSE ไม่เหมือนกันทำยังไงครับ

54
ห้อง MS Access / : characters found after end of SQL statement
« เมื่อ: 02 ธ.ค. 62 , 14:09:29 »
Sql 2 ชุดไม่ได้สอดคล้องกันเลยที่จะทำ Union Query เพราะ Sql query warehouse - จำนวนสินค้า นั้นมี 7 คอลัมน์
แต่ Query warehouse - รหัสสินค้า มีแค่ 3 คอลัมน์เท่านั้น

1.ผมเลยสงสัยว่าคุณอยากทำการรวมไปเพื่ออะไร ลักษณะผลลัพธ์ที่ต้องการเป็นแบบไหน
2. จากโค้ด
โค๊ด: [Select]
SELECT T1.*, (select sum(T3.Inboxes) from [In] as T3 where T3.place = T1.place) AS [Sum]
FROM [In] AS T1

WHERE (((T1.date)=(select max(T2.[date]) from [In] as T2 where T2.place = T1.place)));

นี้ ถ้าตัด T1.* ออกก็จะได้ ฟิลล์ Sum มา 1 คอลัมน์ คุณอยากเอาฟิลล์นี้ไปวางไว้ตรงไหนเพราะอาจจะไม่ใช่การ Union แล้วแต่อาจจะเป็นอย่างอื่น

ลองสร้างตัวอย่างผลลัพธ์ ใน Excel ว่าต้องการผลลัพธ์แบบไหน เดี่ยวผมทำให้

55
ห้อง MS Access / : characters found after end of SQL statement
« เมื่อ: 02 ธ.ค. 62 , 12:33:31 »
ส่งตัวอย่างมาดูครับ

56
ห้อง MS Access / : characters found after end of SQL statement
« เมื่อ: 02 ธ.ค. 62 , 09:35:03 »
SELECT [Place - Boxes (In)].Place, Nz([SumOfBoxin])+0 AS [จำนวนรับเข้า (ลัง-ห่อ)], Nz([SumOfBoxout])+0 AS [จำนวนจ่ายออก (ลัง-ห่อ)], [จำนวนรับเข้า (ลัง-ห่อ)]-[จำนวนจ่ายออก (ลัง-ห่อ)] AS [จำนวนคงเหลือ (ลัง-ห่อ)], Nz([SumOfPCSin])+0 AS [จำนวนเศษรับเข้า (ชิ้น)], Nz([SumOfPCSout])+0 AS [จำนวนเศษจ่ายออก (ชิ้น)], [จำนวนเศษรับเข้า (ชิ้น)]-[จำนวนเศษจ่ายออก (ชิ้น)] AS [จำนวนเศษคงเหลือ (ชิ้น)]
FROM (([Place - Boxes (In)] LEFT JOIN [Place - Boxes (out)] ON [Place - Boxes (In)].Place = [Place - Boxes (out)].Place) LEFT JOIN [Place - Pcs (In)] ON [Place - Boxes (In)].Place = [Place - Pcs (In)].Place) LEFT JOIN [Place - Pcs (out)] ON [Place - Boxes (In)].Place = [Place - Pcs (out)].Place;U

UNION SELECT T1.*, (select sum(T3.Inboxes) from [In] as T3 where T3.place = T1.place) AS [Sum]
FROM [In] AS T1

WHERE (((T1.date)=(select max(T2.[date]) from [In] as T2 where T2.place = T1.place)));



ลบตรงสีแดงออกครับ

57
ห้อง MS Access / : กำหนดการเลือก Option bottom
« เมื่อ: 27 พ.ย. 62 , 21:06:55 »

ผมสมมุติ Option Botton ชื่อ Option1 ถึง 15 หรือชื่ออื่นๆ

โค้ดก็ประมาณนี้ครับ

โค๊ด: [Select]
  Dim ctl As Control
           Dim I As Integer
    For Each ctl In Me
        If ctl.ControlType = acOptionButton Then
        If ctl = True Then
                I = I + 1
        End If
        End If
               Next ctl
If I <> 9 Then
MsgBox "กรุณาเลือกผู้มีสมัครให้ครบ 9 คน", vbCritical, "ผลการตรวจสอบ!!"
End If

58
ห้อง MS Access / : โปรแกรม Access error Query " is corrupt
« เมื่อ: 21 พ.ย. 62 , 12:18:07 »
 :startle: :startle: จริงด้วยผมอ่านไม่จบ งั้นวิธีแก้ก็น่าจะต้องลง OFFICE ใหม่ แล้ว ห้ามอัพเดทจะดีกว่าครับ

59
ห้อง MS Access / : โปรแกรม Access error Query " is corrupt
« เมื่อ: 21 พ.ย. 62 , 10:33:20 »
ลองรีเซ็ตเครื่องดูหรือยังครับ ถ้ายังไม่ได้จริงๆ ก็ลบ OFFICE แล้วลงใหม่ครับ และปิดระบบ WINDOWS UPDATE ด้วยนะครับ


60
ห้อง MS Access / : โปรแกรม Access error Query " is corrupt
« เมื่อ: 21 พ.ย. 62 , 09:36:12 »
.

61
ใช้ IF Check สถานะ textbox ก่อนก็ได้ครับ เช่น

Private Sub Command107_Click()
If IsNull(Me.txt_Start) Or IsNull(Me.txt_End) Then
MsgBox "กรุณาระบุวันที่ให้เรียบร้อยก่อน", vbInformation, "แจ้งเตือน!!"
Else
ใส่โค้ดค้นหาอันเดิมตรงนี้ได้เลย
End If
End sub

หรือเปลี่ยนโค้ดมาใช้แบบนี้ก็ได้ครับเป็นการกำหนด RecordSource
ผมสมมุติตารางของข้อมูลชื่อ Table1


Private Sub Command107_Click()
If IsNull(Me.txt_start) Or IsNull(Me.txt_end) Then
MsgBox "กรุณาระบุวันที่ให้เรียบร้อยก่อน", vbInformation, "แจ้งเตือน!!"
Else
Me.RecordSource = "SELECT * FROM Table1 WHERE (((Table1.[Posting Date]) Between [forms]![frm_service invoice]![txt_start] And [forms]![frm_service invoice]![txt_end])) ORDER BY Table1.[Posting Date];"
End If
End Sub

62
อ้างถึง
ข้อมูลเบื้องต้นผมแบ่งตารางออกเป็น 2 ส่วน คือ id อยู่ตารางหนึ่ง คะแนนอยู่อีกตารางหนึ่ง โดยอีกตารางหนึ่งเชื่อมความสัมพันธ์ โดย id_person เท่าที่ผมทำมันแสดงข้อมูลออกมาเฉพาะที่มีไอดีตรงกันในตาราง 2 (score) หากคนที่ไม่มีคะแนนในตารางที่ 2 ก็จะไม่แสดงข้อมูลออกมา (อยากให้แสดงทุกคนเลยแม้นไม่มีไม่คะแนน )

สร้างคิวรี่ใส่ SQL คิวรี่แบบนี้

โค๊ด: [Select]
SELECT tblID_PERSON.ID_PERSON, tbl_SCORE.SCORE
FROM tbl_SCORE RIGHT JOIN tblID_PERSON ON tbl_SCORE.ID_PERSON = tblID_PERSON.ID_PERSON;

ผลลัพธ์ที่ได้


63
เหมือนกับการเช็ควันที่ปัจจุบัน กับ วันที่หมดอายุ ใช่ไหมครับ ว่าถ้าไม่ครบกำหนดแล้วเหลือกี่วัน ถ้าครบกำหนดแล้วก็แสดงว่าบัตรหมดอายุ

ผมสมมุติชื่อ Field ดังนี้

Field ชื่อ CustomerName  Datatype Text  เก็บชื่อลูกค้า
            OutCardDate     Datatype Date&Time  เก็บวันออกบัตร
            ExpireCardDate Datatype Date&Time  เก็บวันหมดอายุ

Table ชื่อ Table1

ที่คิวรี่ เอา sql นี้ไปวางได้เลย
โค๊ด: [Select]
SELECT table1.CustomerName, table1.OutCardDate, table1.ExpireCardDate, IIf(Date()<[ExpireCardDate],"เหลือ " & [ExpireCardDate]-Date() & " วัน","บัตรหมดอายุ") AS สถานะ
FROM table1;

64
ปกติเขาใส่เครื่องหมาย * นะครับ

SELECT TbContact.NameTH, TbContact.ID_Contact
FROM TbContact
WHERE (((TbContact.NameTH) Like "*เ*"));

หน้า: 1 2 3 [4] 5 6 7 ... 12