กระทู้เก่าบอร์ด อ.Yeadram
2,882 20
URL.หัวข้อ /
URL
เชื่อมฟิวด์ใน Query
Shipment Customer Province Invoice umbering Expr4
193 โฮมโปรดักส์ พิษณุโลก BE 31404 โฮมโปรดักส์(พิษณุโลก) : BE-31404
193 โฮมโปรดักส์ พิษณุโลก BE 31405 โฮมโปรดักส์(พิษณุโลก) : BE-31405
193 โฮมโปรดักส์ พิษณุโลก BE 31406 โฮมโปรดักส์(พิษณุโลก) : BE-31406
193 ไทยดำรงค์ พิษณุโลก S2E 3035 ไทยดำรงค์(พิษณุโลก) : S2E-3035
จากข้อมูลด้านบน ผมทำใน Query ผมใช้ "&" เชื่อมฟิวด์ ได้ดังนี้ครับ
Expr4: [customer] & "(" & [Province] & ")" & " : " & [Invoice] & "-" & [Numbering]
ตอนนี้ผมติดตรงที่ว่า
ผมจะ Group By "Shipment" เพื่อให้ได้ข้อมูลเป็น
Shipment Expr1
193 โฮมโปรดักส์(พิษณุโลก) : ฺBE-31404,BE-31405,BE-31406 ; ไทยดำรงค์(พิษณุโลก) : S2E-3035
ผมยังทำไม่ได้เลยครับ
รบกวนทุกๆท่านด้วยครับ
ขอบคุณครับ
193 โฮมโปรดักส์ พิษณุโลก BE 31404 โฮมโปรดักส์(พิษณุโลก) : BE-31404
193 โฮมโปรดักส์ พิษณุโลก BE 31405 โฮมโปรดักส์(พิษณุโลก) : BE-31405
193 โฮมโปรดักส์ พิษณุโลก BE 31406 โฮมโปรดักส์(พิษณุโลก) : BE-31406
193 ไทยดำรงค์ พิษณุโลก S2E 3035 ไทยดำรงค์(พิษณุโลก) : S2E-3035
จากข้อมูลด้านบน ผมทำใน Query ผมใช้ "&" เชื่อมฟิวด์ ได้ดังนี้ครับ
Expr4: [customer] & "(" & [Province] & ")" & " : " & [Invoice] & "-" & [Numbering]
ตอนนี้ผมติดตรงที่ว่า
ผมจะ Group By "Shipment" เพื่อให้ได้ข้อมูลเป็น
Shipment Expr1
193 โฮมโปรดักส์(พิษณุโลก) : ฺBE-31404,BE-31405,BE-31406 ; ไทยดำรงค์(พิษณุโลก) : S2E-3035
ผมยังทำไม่ได้เลยครับ
รบกวนทุกๆท่านด้วยครับ
ขอบคุณครับ
20 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R18471
ขอบคุณอาจารย์พิชัยครับ
3 @R18484
4 @R18485
ลองอีกที
5 @R18486
เอาเป็นว่าผมทำรูปไม่ขึ้นแต่ได้ลองเขียน VBA ดูได้ผลออกมาแต่ยังไม่ได้ลองว่าถ้าเจอจำนวนข้อมูลเยอะขึ้นมันจะทำงานได้ไหมนะครับ
ถ้าสนใจก็ส่งเมล์มาที่ somjate.s@hotmail.com ผมจะส่งไฟล์ที่ทำไว้ไปให้ครับ
ถ้าสนใจก็ส่งเมล์มาที่ somjate.s@hotmail.com ผมจะส่งไฟล์ที่ทำไว้ไปให้ครับ
6 @R18487
ไฟล์ส่งไปไว้ที่เมล์กลางแล้วครับ
accboard@gmail.com
accboard@gmail.com
7 @R18490
แก้ไขตรงนี้เพิ่มครับ
'ให้ใส่ msg เพิ่มครับ
' Debug.Print ChkCusBef & ">>>>>>>>>>>>" & ChkCusAT
msg = msg & ";" & Expr & ":" & Expr1
'ให้ใส่ msg เพิ่มครับ
' Debug.Print ChkCusBef & ">>>>>>>>>>>>" & ChkCusAT
msg = msg & ";" & Expr & ":" & Expr1
8 @R18493
คุณ sjs ครับ
ผมลองทำดูแล้วครับ มันติด Debug บรรทัดนี้ครับ
Set Rst2 = Db.OpenRecordset(sql2, dbOpenDynaset)
ผมได้ส่งไฟล์งานไปให้ คุณ sjs ตาม email แล้วนะครับ
ขอบคุณมากครับ
ผมลองทำดูแล้วครับ มันติด Debug บรรทัดนี้ครับ
Set Rst2 = Db.OpenRecordset(sql2, dbOpenDynaset)
ผมได้ส่งไฟล์งานไปให้ คุณ sjs ตาม email แล้วนะครับ
ขอบคุณมากครับ
9 @R18494
จากที่ผมดูในไฟล์ที่ส่งมามี 3 จุดที่ต้องแก้คือ
1.ใน Set Rst2 = Db.OpenRecordset(sql2, dbOpenDynaset) เป็นเพราะว่าค่าเป็น Number ไม่ใช่ String ตามที่ผมใส่ไว้ครับต้องแก้เครื่องหมายให้เป็น Number ครับ.
2. Do While Not Rst2.EOF
MixStr2 = Rst2.Fields("Invoice").Value & "-" & Rst2.Fields("umbering").Value -- > อันนี้ชื่อไม่ตรงกับฟิลด์ในตารางครับ
3. ฟิลด์ Customer ตารางที่อ้างถึงยังมีค่าว่างอยู่ถึงถ้าเขียนใน VBA ต้องใส่เงื่อนไขเอาค่าที่ว่างออกครับผม
1.ใน Set Rst2 = Db.OpenRecordset(sql2, dbOpenDynaset) เป็นเพราะว่าค่าเป็น Number ไม่ใช่ String ตามที่ผมใส่ไว้ครับต้องแก้เครื่องหมายให้เป็น Number ครับ.
2. Do While Not Rst2.EOF
MixStr2 = Rst2.Fields("Invoice").Value & "-" & Rst2.Fields("umbering").Value -- > อันนี้ชื่อไม่ตรงกับฟิลด์ในตารางครับ
3. ฟิลด์ Customer ตารางที่อ้างถึงยังมีค่าว่างอยู่ถึงถ้าเขียนใน VBA ต้องใส่เงื่อนไขเอาค่าที่ว่างออกครับผม
10 @R18495
Test ครับ
11 @R18496
เรียน คุณ sjs ครับ
ผมลองแก้ไขตามข้อมที่ 1 แล้ว ผลออกมาเป็นแบบนี้ึครับ
ผมลองแก้ไขตามข้อมที่ 1 แล้ว ผลออกมาเป็นแบบนี้ึครับ
12 @R18500
ถ้าตาราง (สมมุติชื่อ Table1) เป็นดังนี้:
Shipment Customer Province Invoice umbering 193 โฮมโปรดักส์ พิษณุโลก BE 31404
193 โฮมโปรดักส์ พิษณุโลก BE 31405
193 โฮมโปรดักส์ พิษณุโลก BE 31406
193 ไทยดำรงค์ พิษณุโลก S2E 3035
1. สร้างฟังก์ชั่นใน Module ดังนี้:
2. สร้างคิวรี่ใหม่ ใส่ SQL ดังนี้:
ผลลัพธ์: 193 ไทยดำรงค์(พิษณุโลก): S2E-3035; โฮมโปรดักส์(พิษณุโลก); BE-31404, BE-31405, BE-31406
ประมาณนี้ ลองปรับใช้ดูครับ ผมคงไม่มีเวลาตามกระทู้เท่าไหร่ยังไงหากติดขัดลองถามท่านอื่นๆดูนะครับ
ปล. Data Type ในส่วนของฟิลด์ ผมไม่รู้คุณกำหนดเป็นอะไร แต่จากตัวอย่างฟิลด์ที่มีแต่ตัวเลขผมกำหนดเป็น Number ทั้งหมด
Shipment Customer Province Invoice umbering 193 โฮมโปรดักส์ พิษณุโลก BE 31404
193 โฮมโปรดักส์ พิษณุโลก BE 31405
193 โฮมโปรดักส์ พิษณุโลก BE 31406
193 ไทยดำรงค์ พิษณุโลก S2E 3035
1. สร้างฟังก์ชั่นใน Module ดังนี้:
Function ConcatRelated(expression$, domain$, criterial$)
Dim rs As Recordset
Dim SQLCmd$, ConCat1$, ConCat2$, Temp1$, Temp2$
SQLCmd = "SELECT " & expression$ & " FROM " & domain$ & " WHERE " & criterial$ & " ORDER BY " & expression$
Set rs = CurrentDb.OpenRecordset(SQLCmd)
If Not rs.EOF Then rs.MoveFirst
Temp1 = rs(0) & rs(1)
ConCat1 = rs(0) & "(" & rs(1) & ")"
Do While Not rs.EOF
If Temp1 <> rs(0) & rs(1) Then
ConCat1 = ConCat1 & ": " & ConCat2
ConCat2 = rs(2) & "-" & rs(3)
ConCat1 = ConCat1 & "; " & rs(0) & "(" & rs(1) & ")"
Else
If ConCat2 & "" = "" Then
ConCat2 = rs(2) & "-" & rs(3)
Else
If Temp2 <> rs(2) & rs(3) Then
ConCat2 = ConCat2 & ", " & rs(2) & "-" & rs(3)
End If
End If
End If
Temp1 = rs(0) & rs(1)
Temp2 = rs(2) & rs(3)
rs.MoveNext
Loop
If ConCat1 & "" <> "" Then
ConcatRelated = ConCat1 & "; " & ConCat2
End If
rs.Close: Set rs = Nothing
End Function
2. สร้างคิวรี่ใหม่ ใส่ SQL ดังนี้:
SELECT Shipment, ConcatRelated("Customer, Province, Invoice, umbering","Table1","Shipment=" & [Shipment]) AS Expr1
FROM Table1
GROUP BY Shipment
ORDER BY Shipment;
ผลลัพธ์: 193 ไทยดำรงค์(พิษณุโลก): S2E-3035; โฮมโปรดักส์(พิษณุโลก); BE-31404, BE-31405, BE-31406
ประมาณนี้ ลองปรับใช้ดูครับ ผมคงไม่มีเวลาตามกระทู้เท่าไหร่ยังไงหากติดขัดลองถามท่านอื่นๆดูนะครับ
ปล. Data Type ในส่วนของฟิลด์ ผมไม่รู้คุณกำหนดเป็นอะไร แต่จากตัวอย่างฟิลด์ที่มีแต่ตัวเลขผมกำหนดเป็น Number ทั้งหมด
13 @R18501
ของผมรันในไฟล์ที่คุณ อภิศักดิ์ ส่งมาก็เป็นตัวเลขที่เก็บไว้เหมือนกันครับ
ผมว่าน่าจะใช้ Dlookup ช่วยดึงชื่อมาแสดงแทนรหัสก็ได้นะครับคือจะใส่ใน Code VBA ก็ได้ใน Query ก็ได้มีให้เลือกได้หลายทางเอาทางที่คุณ อภิศักดิ์ เข้าใจก็ได้ครับ
ผมว่าน่าจะใช้ Dlookup ช่วยดึงชื่อมาแสดงแทนรหัสก็ได้นะครับคือจะใส่ใน Code VBA ก็ได้ใน Query ก็ได้มีให้เลือกได้หลายทางเอาทางที่คุณ อภิศักดิ์ เข้าใจก็ได้ครับ
14 @R18502
อื่ม เดาว่า ตารางมีการสร้างความสัมพันธ์ (Relationships) กับตารางอื่นๆ เช่น ฟิลด์ Customer สัมพันธ์กับตาราง tb_Customer และฟิลด์ Province สัมพันธ์กับตาราง tb_Province และฟิลด์ Invoice สัมพันธ์กับตาราง tb_Invoice อะไรประมาณนี้ ซึ่งผมก็คงไม่รู้รายละเอียดข้อมูลคุณ การแก้ไขง่ายสุดคือ สร้างคิวรี่ขึ้นใหม่โดยดึงฟิลด์จากตารางอื่นๆที่สร้างความสัมพันธ์กันไว้เพื่อแสดงตารางที่มีข้อมูลให้ตรงตามความต้องการก่อน โดยสมมุติใช้ชื่อ Query1 แล้วค่อยนำชื่อคิวรี่ Query1 ไปใช้แทนชื่อ Table1 ต่อไป
15 @R18509
ตามที่ คุณ TTT เดาเลยครับ แต่เหมือนว่าข้อมูลไม่เป็นปัจจุบันนะครับ ผมลองแก้ไข เพิ่มเติม ข้อมูลไม่เปลี่ยนแปลงเลยครับ ผมขอเพิ่มเติมข้อมูลของผมนะครับ
- ตารางเดิมชื่อ tblTransport ฟอร์มชื่อ frmTransport
-ผมทำตาม R18502 สร้าง Query4 ข้อมูลไปเก็บไว้ที่ Table1 แล้วสร้าง Query5
SELECT Shipment, ConcatRelated("Customer, Province, Invoice, umbering","Table1","Shipment=" & [Shipment]) AS Expr1
FROM Table1
GROUP BY Shipment
ORDER BY Shipment;
-สิ่งที่ต้องการคือ เมื่อมีการ แก้ไข เพิ่มเติมข้อมูล แล้วให้ข้อมูลมันอัพเดทเป็นข้อมูลปัจจุบันนะครับ
ขอบคุณครับ
- ตารางเดิมชื่อ tblTransport ฟอร์มชื่อ frmTransport
-ผมทำตาม R18502 สร้าง Query4 ข้อมูลไปเก็บไว้ที่ Table1 แล้วสร้าง Query5
SELECT Shipment, ConcatRelated("Customer, Province, Invoice, umbering","Table1","Shipment=" & [Shipment]) AS Expr1
FROM Table1
GROUP BY Shipment
ORDER BY Shipment;
-สิ่งที่ต้องการคือ เมื่อมีการ แก้ไข เพิ่มเติมข้อมูล แล้วให้ข้อมูลมันอัพเดทเป็นข้อมูลปัจจุบันนะครับ
ขอบคุณครับ
16 @R18510
ผมยกตัวอย่างให้ทุกคนที่กำลังเริ่มต้นได้ทำความเข้าใจดีกว่านะครับ อาจจะยาวซักหน่อย แต่ผมอยากให้เข้าใจแล้วนำไปประยุกต์ใช้กัน ดีกว่าทำให้แล้วจบไปอะครับ
- หากตาราง Table1 มีการสร้างความสัมพันธ์ (Relationships) กับตารางอื่นๆ เช่น ฟิลด์ Customer สัมพันธ์กับตาราง tb_Customer และฟิลด์ Province สัมพันธ์กับตาราง tb_Province และฟิลด์ Invoice สัมพันธ์กับตาราง tb_Invoice
- โดยตาราง Table1 เก็บข้อมูลในลักษณะแบบตัวเลขดังนี้:
-------------------------------------------------------------------------
Shipment Customer Province Invoice umbering
-------------------------------------------------------------------------
193 1 1 1 31404
193 1 1 1 31405
193 1 1 1 31406
193 2 1 2 3035
194 1 2 3 61991
194 1 2 4 61991
------------------------------------------------------------------------
- ฟิลด์ Customer ในตาราง Table1 สัมพันธ์กับตาราง tb_Customer.ID ดังนี้:
---------------------
ID Customer
---------------------
1 โฮมโปรดักส์
2 ไทยดำรงค์
---------------------
- ฟิลด์ Province ในตาราง Table1 สัมพันธ์กับตาราง tb_Province.ID ดังนี้:
-------------------
ID Province
-------------------
1 พิษณุโลก
2 กรุงเทพฯ
-------------------
- ฟิลด์ Invoice ในตาราง Table1 สัมพันธ์กับตาราง tb_Invoice.ID ดังนี้:
------------------
ID Invoice
------------------
1 BE
2 S2E
3 B2K
4 B2K
------------------
ดังนั้นหากเราใช้การอ้างถึง Table1 อย่างเดียวเหมือนตัวอย่างด้านบนโดยเขียน SQL เหมือนเดิมดังนี้:
-------------------------------------------------------------------------------------------------------------------
SELECT Shipment, ConcatRelated("Customer, Province, Invoice, umbering","Table1","Shipment=" & [Shipment]) AS Expr1
FROM Table1
GROUP BY Shipment
ORDER BY Shipment;
-------------------------------------------------------------------------------------------------------------------
ผลลัพธ์ที่ได้จะเป็น:
-------------------------------------------------------------------------
Shipment Expr1
-------------------------------------------------------------------------
193 1(1): 1-31404, 1-31405, 1-31406; 2(1): 2-3035
194 1(2): 3-61991, 4-61991
-------------------------------------------------------------------------
- แต่หากเราต้องการผลลัพธ์ที่แสดงเป็นข้อความในฟิลด์จากตารางอื่นที่เราสร้าง Relationships ไว้แล้ว สามารถทำได้ 2 วิธีคือ:
1. สร้างคิวรี่ขึ้นใหม่เพื่อแสดงตารางที่มีข้อมูลให้ตรงตามความต้องการก่อน โดยสมมุติใช้ชื่อ Query1 แล้วค่อยนำชื่อคิวรี่ Query1 ไปใช้แทนชื่อ Table1
- สร้างคิวรี่ใหม่โดยเขียน SQL ดังนี้:
-------------------------------------------------------------------------------------------------------------------
SELECT Table1.Shipment, tb_Customer.Customer, tb_Province.Province, tb_Invoice.Invoice, Table1.umbering
FROM tb_Invoice INNER JOIN (tb_Province INNER JOIN (tb_Customer INNER JOIN Table1 ON tb_Customer.ID = Table1.Customer) ON tb_Province.ID = Table1.Province) ON tb_Invoice.ID = Table1.Invoice;
-------------------------------------------------------------------------------------------------------------------
- คิวรี่ Query1 จะได้ผลลัพธ์แสดงตารางดังนี้:
-----------------------------------------------------------------------------------
Shipment Customer Province Invoice umbering
-----------------------------------------------------------------------------------
193 โฮมโปรดักส์ พิษณุโลก BE 31404
193 โฮมโปรดักส์ พิษณุโลก BE 31405
193 โฮมโปรดักส์ พิษณุโลก BE 31406
193 ไทยดำรงค์ พิษณุโลก S2E 3035
194 โฮมโปรดักส์ กรุงเทพฯ BK 61991
194 โฮมโปรดักส์ กรุงเทพฯ B2K 61991
-----------------------------------------------------------------------------------
- จากนั้นสร้าง SQL ขึ้นใหม่อีกตัว แล้วเขียน SQL statement โดยใช้ชื่อ Query1 แทน Table1 ดังนี้:
-------------------------------------------------------------------------------------------------------------------
SELECT Shipment, ConcatRelated("Customer, Province, Invoice, umbering","Query1","Shipment=" & [Shipment]) AS Expr1
FROM Table1
GROUP BY Shipment
ORDER BY Shipment;
-------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------
Shipment Expr1
-----------------------------------------------------------------------------------------
193 ไทยดำรงค์(พิษณุโลก): S2E-3035; โฮมโปรดักส์(พิษณุโลก); BE-31404, BE-31405, BE-31406
194 โฮมโปรดักส์(กรุงเทพฯ); B2K-61991, BK-61991
-----------------------------------------------------------------------------------------
- หากตาราง Table1 มีการสร้างความสัมพันธ์ (Relationships) กับตารางอื่นๆ เช่น ฟิลด์ Customer สัมพันธ์กับตาราง tb_Customer และฟิลด์ Province สัมพันธ์กับตาราง tb_Province และฟิลด์ Invoice สัมพันธ์กับตาราง tb_Invoice
- โดยตาราง Table1 เก็บข้อมูลในลักษณะแบบตัวเลขดังนี้:
-------------------------------------------------------------------------
Shipment Customer Province Invoice umbering
-------------------------------------------------------------------------
193 1 1 1 31404
193 1 1 1 31405
193 1 1 1 31406
193 2 1 2 3035
194 1 2 3 61991
194 1 2 4 61991
------------------------------------------------------------------------
- ฟิลด์ Customer ในตาราง Table1 สัมพันธ์กับตาราง tb_Customer.ID ดังนี้:
---------------------
ID Customer
---------------------
1 โฮมโปรดักส์
2 ไทยดำรงค์
---------------------
- ฟิลด์ Province ในตาราง Table1 สัมพันธ์กับตาราง tb_Province.ID ดังนี้:
-------------------
ID Province
-------------------
1 พิษณุโลก
2 กรุงเทพฯ
-------------------
- ฟิลด์ Invoice ในตาราง Table1 สัมพันธ์กับตาราง tb_Invoice.ID ดังนี้:
------------------
ID Invoice
------------------
1 BE
2 S2E
3 B2K
4 B2K
------------------
ดังนั้นหากเราใช้การอ้างถึง Table1 อย่างเดียวเหมือนตัวอย่างด้านบนโดยเขียน SQL เหมือนเดิมดังนี้:
-------------------------------------------------------------------------------------------------------------------
SELECT Shipment, ConcatRelated("Customer, Province, Invoice, umbering","Table1","Shipment=" & [Shipment]) AS Expr1
FROM Table1
GROUP BY Shipment
ORDER BY Shipment;
-------------------------------------------------------------------------------------------------------------------
ผลลัพธ์ที่ได้จะเป็น:
-------------------------------------------------------------------------
Shipment Expr1
-------------------------------------------------------------------------
193 1(1): 1-31404, 1-31405, 1-31406; 2(1): 2-3035
194 1(2): 3-61991, 4-61991
-------------------------------------------------------------------------
- แต่หากเราต้องการผลลัพธ์ที่แสดงเป็นข้อความในฟิลด์จากตารางอื่นที่เราสร้าง Relationships ไว้แล้ว สามารถทำได้ 2 วิธีคือ:
1. สร้างคิวรี่ขึ้นใหม่เพื่อแสดงตารางที่มีข้อมูลให้ตรงตามความต้องการก่อน โดยสมมุติใช้ชื่อ Query1 แล้วค่อยนำชื่อคิวรี่ Query1 ไปใช้แทนชื่อ Table1
- สร้างคิวรี่ใหม่โดยเขียน SQL ดังนี้:
-------------------------------------------------------------------------------------------------------------------
SELECT Table1.Shipment, tb_Customer.Customer, tb_Province.Province, tb_Invoice.Invoice, Table1.umbering
FROM tb_Invoice INNER JOIN (tb_Province INNER JOIN (tb_Customer INNER JOIN Table1 ON tb_Customer.ID = Table1.Customer) ON tb_Province.ID = Table1.Province) ON tb_Invoice.ID = Table1.Invoice;
-------------------------------------------------------------------------------------------------------------------
- คิวรี่ Query1 จะได้ผลลัพธ์แสดงตารางดังนี้:
-----------------------------------------------------------------------------------
Shipment Customer Province Invoice umbering
-----------------------------------------------------------------------------------
193 โฮมโปรดักส์ พิษณุโลก BE 31404
193 โฮมโปรดักส์ พิษณุโลก BE 31405
193 โฮมโปรดักส์ พิษณุโลก BE 31406
193 ไทยดำรงค์ พิษณุโลก S2E 3035
194 โฮมโปรดักส์ กรุงเทพฯ BK 61991
194 โฮมโปรดักส์ กรุงเทพฯ B2K 61991
-----------------------------------------------------------------------------------
- จากนั้นสร้าง SQL ขึ้นใหม่อีกตัว แล้วเขียน SQL statement โดยใช้ชื่อ Query1 แทน Table1 ดังนี้:
-------------------------------------------------------------------------------------------------------------------
SELECT Shipment, ConcatRelated("Customer, Province, Invoice, umbering","Query1","Shipment=" & [Shipment]) AS Expr1
FROM Table1
GROUP BY Shipment
ORDER BY Shipment;
-------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------
Shipment Expr1
-----------------------------------------------------------------------------------------
193 ไทยดำรงค์(พิษณุโลก): S2E-3035; โฮมโปรดักส์(พิษณุโลก); BE-31404, BE-31405, BE-31406
194 โฮมโปรดักส์(กรุงเทพฯ); B2K-61991, BK-61991
-----------------------------------------------------------------------------------------
17 @R18511
2. แทนชื่อ Table1 โดยการเขียนเป็นซับคิวรี่แทน วิธีนี้จะรวบลัดไม่ต้องสร้างคิวรี่ใหม่
- เขียน SQL statement โดยใช้ซับคิวรี่แทนชื่อ Table1 ดังนี้:
------------------------------------------------------------------------------------------------------------------------
SELECT Shipment, ConcatRelated("Customer, Province, Invoice, umbering","(SELECT Table1.Shipment, tb_Customer.Customer, tb_Province.Province, tb_Invoice.Invoice, Table1.umbering FROM tb_Invoice INNER JOIN (tb_Province INNER JOIN (tb_Customer INNER JOIN Table1 ON tb_Customer.ID = Table1.Customer) ON tb_Province.ID = Table1.Province) ON tb_Invoice.ID = Table1.Invoice)","Shipment=" & [Shipment]) AS Expr1
FROM Table1
GROUP BY Shipment
ORDER BY Shipment;
------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------
Shipment Expr1
-----------------------------------------------------------------------------------------
193 ไทยดำรงค์(พิษณุโลก): S2E-3035; โฮมโปรดักส์(พิษณุโลก); BE-31404, BE-31405, BE-31406
194 โฮมโปรดักส์(กรุงเทพฯ); B2K-61991, BK-61991
-----------------------------------------------------------------------------------------
ลองปรับใช้ดูนะครับ
- เขียน SQL statement โดยใช้ซับคิวรี่แทนชื่อ Table1 ดังนี้:
------------------------------------------------------------------------------------------------------------------------
SELECT Shipment, ConcatRelated("Customer, Province, Invoice, umbering","(SELECT Table1.Shipment, tb_Customer.Customer, tb_Province.Province, tb_Invoice.Invoice, Table1.umbering FROM tb_Invoice INNER JOIN (tb_Province INNER JOIN (tb_Customer INNER JOIN Table1 ON tb_Customer.ID = Table1.Customer) ON tb_Province.ID = Table1.Province) ON tb_Invoice.ID = Table1.Invoice)","Shipment=" & [Shipment]) AS Expr1
FROM Table1
GROUP BY Shipment
ORDER BY Shipment;
------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------
Shipment Expr1
-----------------------------------------------------------------------------------------
193 ไทยดำรงค์(พิษณุโลก): S2E-3035; โฮมโปรดักส์(พิษณุโลก); BE-31404, BE-31405, BE-31406
194 โฮมโปรดักส์(กรุงเทพฯ); B2K-61991, BK-61991
-----------------------------------------------------------------------------------------
ลองปรับใช้ดูนะครับ
18 @R18526
ขอบคุณครับ คุณ TTT ผมทำตามวิธีที่ 1 ได้แล้วครับ ตอนนี้ลองทำวิธีที่ 2 อยู่ครับ
ผมขอถามเพิ่มเติมครับ
-ใน Query นี้
SELECT Shipment, ConcatRelated("Customer, Province, Invoice, umbering","Query1","Shipment=" & [Shipment]) AS Expr1
FROM Table1
GROUP BY Shipment
ORDER BY Shipment;
ถ้าผมจะเลือกใช้เฉพาะฟิวด์ "Shipment , Customer , Province"
ได้หรือไม่ครับ (ผมลองเอาฟิวด์ "Invoice , umbering" ออก มันฟ้องว่า "Run time error'3265': ไม่พบรายการในคอลเลกชั่นนี้"
ขอบคุณครับ
ผมขอถามเพิ่มเติมครับ
-ใน Query นี้
SELECT Shipment, ConcatRelated("Customer, Province, Invoice, umbering","Query1","Shipment=" & [Shipment]) AS Expr1
FROM Table1
GROUP BY Shipment
ORDER BY Shipment;
ถ้าผมจะเลือกใช้เฉพาะฟิวด์ "Shipment , Customer , Province"
ได้หรือไม่ครับ (ผมลองเอาฟิวด์ "Invoice , umbering" ออก มันฟ้องว่า "Run time error'3265': ไม่พบรายการในคอลเลกชั่นนี้"
ขอบคุณครับ
19 @R18539
หมายถึงคุณต้องการให้แสดงออกมาแค่ฟิลด์ Customer และ Province อย่างนี้ใช่ป่าว
193 ไทยดำรงค์(พิษณุโลก); โฮมโปรดักส์(พิษณุโลก)
ถ้าใช้ก็ต้องเขียนฟังก์ชั่นแบบนี้แทนครับ
193 ไทยดำรงค์(พิษณุโลก); โฮมโปรดักส์(พิษณุโลก)
ถ้าใช้ก็ต้องเขียนฟังก์ชั่นแบบนี้แทนครับ
Function ConcatRelated2(expression$, domain$, criterial$)
Dim rs As Recordset
Dim SQLCmd$, ConCat$, Temp$
SQLCmd = "SELECT " & expression$ & " FROM " & domain$ & " WHERE " & criterial$ & " ORDER BY " & expression$
Set rs = CurrentDb.OpenRecordset(SQLCmd)
If Not rs.EOF Then rs.MoveFirst
Temp = rs(0) & rs(1)
ConCat = rs(0) & "(" & rs(1) & ")"
Do While Not rs.EOF
If Temp <> rs(0) & rs(1) Then
ConCat = ConCat & "; " & rs(0) & "(" & rs(1) & ")"
Temp = rs(0) & rs(1)
End If
rs.MoveNext
Loop
If ConCat & "" <> "" Then
ConcatRelated2 = ConCat
End If
rs.Close: Set rs = Nothing
End Function
20 @R18555
ขอบคุณมากครับ คุณ TTT สำหรับความช่วยเหลือทั้งหมดนี้ สำเร็จไปอีก 1 งาน
และก็ขอขอบคุณ อาจารย์พิชัย และคุณ sjs ด้วยนะครับ
และก็ขอขอบคุณ อาจารย์พิชัย และคุณ sjs ด้วยนะครับ
Time: 0.3466s
คงต้องรอท่านที่ code เก่ง และ มีเวลาพอเข้ามาตอบครับ