เปลี่ยน Dynamic Query เป็น Temp Table เพื่อส่งออก
กระทู้เก่าบอร์ด อ.Yeadram

 20,942   19
URL.หัวข้อ / URL
เปลี่ยน Dynamic Query เป็น Temp Table เพื่อส่งออก

เรียน Guru ทุกท่านโปรดชี้แนะ ทางสว่างด้วยครับ

ผมฝากไฟล์ที่จะแก้ไขไว้ที่นี่ครับ
http://uploadmb.com/dw.php?id=1237539905&/09-03-20_Union.zip


ผมโพสคำถามไว้ที่

http://www.utteraccess.com/forums/showflat.php?Cat=&Number=1789961&page=&view=&sb=5&o=&fpart=all&vc=1


และก็มี Guru มาช่วยตอบ จนกระทั่งสุดท้ายผมได้ Code Save Query มา แต่ว่าทำไม่เป็นครับ ยังงงอยู่เลย


Saved queries are the queries that you create in Access Query Builder and save to Access database file. Saved queries can be select, append, update, delete or even make table query.

So, instead of doing this:

Code:
--------------------------------------------------------------------------------

Set rs = CurrentDb.OpenRecordset("SELECT * FROM foo;", dbOpenDynaset)
CurrentDb.Execute "INSERT INTO foo (bar, baz) SELECT bar, baz FROM foo2;", dbFailOnError
CurrentDb.Execute "DELETE FROM foo;", dbFailOnError
--------------------------------------------------------------------------------


We'd save those three SQL statement into a query and reference those query by name:

Code:
--------------------------------------------------------------------------------

Set rs = CurrentDb.OpenRecordset ("qtrFoo", dbOpenDynaset)
CurrentDb.Execute "qapFoo", dbFailOnError
CurrentDb.Execute "qdlFoo", dbFailOnError
--------------------------------------------------------------------------------


The difference is that because we're using saved queries instead of dynamic SQL statement, the plan Jet uses for all those queries is already compiled and optimized at the time you save those queries, and doesn't have to be repeated whereas dynamic SQL forces Jet to build a plan for each SQL statement and toss it out.

To wrap it in a transaction, it would be something like this:

Code:
--------------------------------------------------------------------------------

On Error GoTo Fail
DBEngine.BeginTrans
Set rs = CurrentDb.OpenRecordset("qtrFoo", dbOpenDynaset)
CurrentDb.Execute "qapFoo", dbFailOnError
CurrentDb.Execute "qdlFoo", dbFailOnError
DBEngine.CommitTrans
Exit Sub
Fail:
DBEngine.Rollback
--------------------------------------------------------------------------------


By doing it in a transaction, Jet will treat three executions as one transaction, rather than three separate transaction, and this can save on caching and I/Os which are traditional bottleneck in processing data. Transaction are primarily used to guarantee that the operration succeed or fail as one unit, but in this context, we can use it to help reduce on caching and I/O.

What I meant is to *not* use Make Table query at all. Just have a table at all time:

(I'll break my earlier suggestion and use SQL so you can see what each does, but they should be saved queries)
Code:
--------------------------------------------------------------------------------

'Clear out any data from the temporary table
CurrentDb.Execute "DELETE FROM tmpTable;", dbFailOnError
'Start Appending data into the temporary table
CurrentDb.Execute "INSERT INTO tmpTable SELECT * FROM foo;", dbFailOnError
CurrentDb.Execute "INSERT INTO tmpTable SELECT * FROM bar;", dbFailOnError
CurrentDb.Execute "INSERT INTO tmpTable SELECT * FROM baz;", dbFailOnError
'Now get recordset to do some reporting or whatever...
Set rs = CurrentDb.OpenRecordset("tmpTable", dbOpenSnapshot)
--------------------------------------------------------------------------------


Speaking of which, this gives me another way to optimize; instead of having "CurrentDb" in every place, use a variable as a placeholder:

Code:
--------------------------------------------------------------------------------

Dim db As DAO.Database
Set db = CurrentDb
With db
.Execute ...
.Execute ...
.Execute ...
Set rs = .OpenRecordset...
End With
--------------------------------------------------------------------------------

19 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R01676
ช่วยอธิบายด้วยครับว่าอะไรคือปัญหาที่คุณทำไม่ได้ เพราะข้อความใน UtterAccess นั้นยาวมาก
2 @R01678
สวัสดีครับ คุณสันติ

ใน Utteraccess ผมใช้ชื่อ au1uzv8 โพสคำถาม
โดย ผมมี Dynamic Query ทำเป็น Union Query แล้วส่งค่า ออกกราฟใน Report ดังนี้ครับ
ซึ่งทุกอย่างก็ใช้งานได้ดี แต่พอปริมาณข้อมูลมากขึ้น (1xx,xxxx Record) การออก Report ทำ
ให้ Process มันช้าถึงช้ามาก ผมเลยพยายาม หาวิธีใช้ VBA เพื่อแก้ปัญหา Overhead ของ
Dynamic Query ซึ่งก็ได้คำตอบแล้ว แต่ผมใช้ Code ตามที่กูรูแนะนำไม่เป็น เช่น

* การทำ Save Query แล้วส่งค่า ไปที่ Temp Table เพื่อส่งค่าออก Report ได้โดยตรง โดย
   ทางกูรู แนะนำว่า "ไม่ควรทำ Make Table Query" ซึ่งจะทำให้การประมวลผลช้า
* การทำ Wrap Transfer โดยให้ทำการประมวลผลในครั้งเดียว แล้วส่งค่า ไม่ใช่ประมวลผล
3 ครั้งเหมือนในปกติ แล้วจึงส่งค่า เพื่อลด Overhead
* Code ที่ผมได้มา ผมไม่รู้ว่าจะเริ่มตรงไหนก่อน เนื่องจากผมมี Query 3 ชนิดที่ใช้งานอยู่
1 Select Query 2 Union Query 3 Crosstab Query
* ถ้าต้องยกเลิก Query Design Grid แล้วหันมาใช้ Code เพื่อส่งค่าเก็บที่ Temp Table
แล้ว Relationship ที่สร้างไว้ใน Query จะหายไปด้วยหรือเปล่าครับ

หลักการคือ ผมต้องการให้กราฟแสดงสถานะการเงินของโครงการ เพื่อใช้ในการตัดสินใจเช่น
1 Project มีหลาย Contracts ผมต้องการดูยอดเงินใน Budget , PO's , Paid ใน Contracts ปัจจุบัน
1 Store มีหลาย Projects ผมต้องการดูยอดเงินใน Budget , PO's , Paid ใน Projects ปัจจุบัน
โดยแบ่งเป็น

กราฟด้านซ้าย Sum of Contracts Budget , PO's , Paid

กราฟด้านขวา Sum of Projects Budget , PO's , Paid

โปรดดูรูปประกอบ :

(Report)
http://www.parpern.com/upload/show.php?pID=8s4QEVOWZBLethCApSlgPuNTU3Hnr5

CrossTab Query
http://www.parpern.com/upload/show.php?pID=eKCOAG7pVBvtqiTxR6yjDfu9mLo8Yl

(จำนวน Query)

http://www.parpern.com/upload/show.php?pID=45HeL26uSYmEP8G1aAxfiR0KBnhIZg


Query ตัวนี้เป็นตัวส่งค่าทั้งหมดไป Report
http://www.parpern.com/upload/show.php?pID=mV7lJoc8MFeTjYQpxOsbdkWIagwt49

Union Query
qryBgt = เป็นยอดเงินรวมของ Budget (Field หลักคือ Contract, PJ_ID,Amt,Tag=Bgt)
qryPO = เป็นยอดเงินรวมของ PO ที่ออกไปแล้ว (Field หลักคือ Contract, PJ_ID,Amt,Tag=PO's)
qryPaid = เป็นยอดเงินรวมของ Payment (Field หลักคือ Contract, PJ_ID,Amt,Tag=Paid)

SELECT [Contract] , PJ_ID,Amt,Tag
from qryBgt
UNION SELECT Contract, PJ_ID,Amt,Tag
from qryPO
UNION SELECT Contract, PJ_ID,Amt,Tag
from qryPaid;

โดยตรรกะคือ PO จะต้องไม่เกินยอด Budget และ Paid ต้องไม่เกินยอด PO

ขออภัยที่พิมพ์ยาว เพื่อต้องการให้เห็นภาพรวมครับ
3 @R01679
ผมภาพ query design ของ qryPOReg แล้ว โอ้โห
นี่มันอาชญากรรมจริงๆ
นี่เป็นการข่มขืน CPU อย่างแท้จริงเลยครับ อิอิ

ผมดูไปดูมา (จากภาพ) รู้สึกว่า union กับ crosstab มันไม่ค่อยจะจำเป็นนะครับ หรือระบบทั้งหมดเป็นยังไงกันแน่ ชักอยากจะได้มาลอง มาดู แต่โหลดมาแล้ว ไฟล์ซิป เสียครับ ช่วยดูให้ใหม่หน่อยครับ อยากโหลดมาดู
4 @R01680
สวัสดีครับ คุณ yeadram (ออกเสียงยังไงครับ ?) ;-)

ขอโทษครับ พอดี ZIP แล้วไม่ได้เทส เอาตัว MDB เลยครับ 4 Mb
(เป็นตัวที่ผมตัดทอนรายละเอียดที่ไม่ต้องการออก แล้ว Cobine FE และ ฺBE)

ผมได้ Upload ใหม่ที่นี่ครับ
http://uploadmb.com/dw.php?id=1237606807&/09-02-25_Union.mdb

ส่วนตัวนี้เป็น RS เต็มๆทั้งก้อน
http://www.parpern.com/upload/show.php?pID=N0tnGzSql874o5JE6YbuXcK9Mvaphw

http://www.parpern.com/upload/show.php?pID=V6OqDI0RG7wMAXEjCh5QN8F3x1ZLYo

ปัญหาคือ การประมวลผลฝั่ง Client ช้ามาก User เครื่องโบราณครับ (CPU 1.5 Ghz Ram 512 Mb)
5 @R01681

เพื่อเป็นข้อมูลครับ ;-)

ตามที่ผมได้โพสถามไว้ที่
http://www.utteraccess.com/forums/showflat.php?Cat=&Number=1789961&page=&view=&sb=5&o=&fpart=all&vc=1

ทั้งนี้ผมได้ทำ Archive ข้อมูลปีเก่าๆ ให้เหลือเฉพาะ 2 ปี สุดท้ายเพื่อใช้งาน ผลคือไฟล์ขนาดเล็กลง แต่ Performance Report ไม่ดีขึ้น
อันเนื่องจาก ทุกครั้งที่กดปุ่มออก Report ตัว Query ทุกตัวจะประมวลผลใหม่ทุกครั้ง เพื่อเอาข้อมูลล่าสุดมาแสดง รวถึงยอด PO ปัจจุบัน

กูรูท่านนึง ให้แนวทางไว้ว่า ให้ลอง Upsize MS Access ไปใช้ SQL Server Engine ซึ่งคาดว่า Performance จะดีกว่า
Jet Database Engine ใน Access ผมใช้เวลาร่วม อาทิตย์เพื่อศึกษา Feature และวิ?ีติดตั้ง SQL Server 2005 Express
(ผมไม่พื้นฐาน SQL Server เลย) จากนั้นผม Connect โดยสร้างไฟล์ ADP เชื่อม Server ปัญหาเกิดอีก เนื่องจากผมสามารถ
Import Tables , Forms , Reports ได้แต่ มองไม่เห็น Server Object ที่เป็น Query ..เลยไม่ทราบทำไงต่อ...และดูเหมือนว่า
Access ADP จะไม่ Support Code ที่กล่าวข้างต้น....ก็เลยไปต่อไม่ได้ครับ

เลยกลับมาที่ MS Access Back-End เหมือนเดิม ( Saved Query และ Transaction Query เป็นเรื่องใหม่สำหรับผม)

ตอนนี้เลยยังงงอยู่ครับ เนื่องจากค่าที่คำนวณหลักเป็น Select Query 3 ตัวแล้ว Union ออกมาเป็นก้อนๆนึง ออก Report
แต่ Code ที่เค้าให้มา ผมไม่ทราบว่าจะเริ่มตรงไหน ลอง Rename Query ของเราเป็นชื่อที่เค้าตั้งไว้ (qtrFoo,qapFoo,qdlFoo)
ไหนจะ Bar, Baz , Foo , Foo2 อีกยิ่งงงไปใหญ่เลยครับ (เข้าใจว่าเป็นตัวแปร แต่ไม่ทราบว่าจะใช้แทนตรงไหนครับ)

ขอความกรุณาด้วยครับ
6 @R01685
นี่เป็นเรื่องของการ Tune Performance โดยส่วนตัวผมแล้ว

1) คุณใช้ Query Object ก็ดีอยู่แล้ว จัดการสะดวกกว่าเขียนเป็น VBA   คุณจะเขียน VBA และสร้าง Make Table อะไรเนี่ย จะใช้เมื่อคุณจะสร้างเทเบิลชั่วคราวไว้เก็บข้อมูล ในเรื่องนี้ฝรั่งเขาก็แนะนำตามหลักการโดยทั่วไป ซึ่งมักจะทำเมื่อเราจะเปลี่ยนลำดับการประมวลผลโดยคิวรี่ ซึ่งถ้าเรารู้ว่าจุดไหนที่คิวรี่มันทำแล้วชักช้าหรือไม่เหมาะสมที่จะปล่อยคิวรี่มันหาผลลัพธ์เอง เราก็เปลี่ยนมาเป็นเราทำเองซึ่งมักจะต้องมีเทเบิลชั่วคราวไว้เก็บข้อมูลพักไว้ก่อนประมวลผลในขั้นตอนต่อไป แต่ในการทำจริงๆแล้ว มันเป็นเรื่องยากและเสียเวลาเป็นอย่างมาก คุณต้องรู้ให้ได้จริงๆว่าจุดไหนเป็นปัญหา ถ้าไม่รู้แล้วทำไป มันอาจจะช้ากว่าปล่อยให้คิวรี่ทำในปัจจุบันก็เป็นได้ ถ้าคุณอยากรู้ว่า Jet Engine มันมีขั้นตอนประมวลผลงานของคุณอย่างไรบ้าง ให้ไปดูที่นี่ http://msdn.microsoft.com/en-us/library/aa188211(office.10).aspx

2) Wrap Transaction ผมว่ามันไม่เกี่ยวอะไรกับการออกรายงาน มันจะใช้เมื่อมีการเขียนข้อมูลเข้าฐานข้อมูลต่างหาก และใช้เพื่อการันตีว่า Integrity ของข้อมูลนั้นถูกต้องครบถ้วน

3) การหันไปใช้ SQL Server และต้องใช้ Store Procedure เพื่อประมวลผลข้อมูล ย่อมจะช่วยได้อย่างแน่นอน แต่ต้องใช้เวลาศึกษาพอสมควรทีเดียว

ที่นี้ มาถึงจุดที่ผมกวาดสายตาแล้วเห็นว่ามีปัญหากับ Performance ก็คือในคิวรี่ BgtCrosstab นี่แหล่ะครับ ตรงที่คิวรี่ BgtCombine ไม่มี relationship อะไรเลยกับเทเบิลที่เหลือในคิวรี่ สิ่งที่เกิดขึ้นก็คือ แต่ละเรคอร์ดใน BgtCombine จะจับคู่กับแต่ละเรคอร์ดที่ได้จากเทเบิลที่เหลือ กลายเป็นลักษณะของ ผลคูณ "คาทีเชียน" มันจึงช้ามากๆๆๆๆๆ   ดังนั้นให้สร้าง relationship ที่ขาดไปครับ   ถ้าทำแล้ว Performance ยังไม่ดีขึ้นหรือดีขึ้นนิดหน่อย ตรงนี้ก็ยากแล้วครับ เพราะต้องไปควานหาว่าคอขวดมันอยู่ที่ไหน

ที่เหลือก็คือ เพิ่ม Ram, เปลี่ยน CPU, หรือแม้แต่ทำ Ram Disk เพื่อก๊อปปี้ฐานข้อมูลจาก Hard Disk ไปไว้ใน Ram เฉพาะเวลาเมื่อต้องการประมวลผลงานหนักๆอย่างนี้
7 @R01688
ไม่สามารถสร้าง Relationship ใน BgtCombine ได้ครับเนื่องจาก
มุมมอง Design ถูก Disable ไว้

http://www.parpern.com/upload/show.php?pID=2Fd3tbOZ7vkPrYyxoDBS4QAgslhWqi

เดี๋ยวผมจะลองค้นหา ผลคูณ "คาทีเชียน" เพิ่มเติม ตอนนี้สงสัยว่า
Bottlenecks มาจาก Jet Query Engine จะแก้ไขอย่างไร

ขอบคุณสำหรับคำชี้แนะครับ
8 @R01690
ไม่ทราบว่า Hyperlink ในบอรด์ทำไมใช้ได้บ้าง ไม่ได้บ้างครับ?
9 @R01691
- ไม่ใช่ตัว BgtCombine ครับ แต่เป็นตัว BgtCrosstab   ลองอ่านที่ผมเขียนอีกที

- ปัญหาคอขวดบางทีก็แก้ไขได้ยาก เราอาจจะต้องปรับคิวรี่ จากที่ใช้คิวรี่กระทำกับผลลัพธ์ของคิวรี่อื่น มาเป็นการใช้ Sub Query แทน ตรงนี้ผมไม่เคยทดลองเหมือนกันว่าคิวรี่แบบไหนเร็วช้ากว่าแบบไหน เพราะต้องเป็นคนที่เข้าใจ Query Optimizer ของ Jet Engine ซึ่งคิดว่านอกจากทีมงานของ Microsoft เองแล้ว คนอื่นที่รู้เรื่องนี้ดีคงมีน้อยเต็มทน
10 @R01692
Hyperlink ต้องกดที่เมนู (รูป ลูกโลกติดโซ่) มันนะครับ แล้วมันจะถามสองครั้ง ครั้งแรกเขียนคำอะไรก็ได้ที่สื่อความหมายของลิงค์ ครั้งที่สอง ค่อยเป็น url ที่แท้จริง แต่ส่วนใหญ่ผมก็อบปี้ ลิงค์ แล้ววางใส่สองครั้งไปเลย ง่ายดี อิอิ

ผมลองโหลดตัวอย่างงานของคุณลองไป แกะๆ แก้ๆ ปรับๆ ดูใหม่ ด้วยความรู้สึก ตั้งแต่หัวค่ำ จนถึงบัดนี้ ตั้งแต่ใช้เครื่องแรม 1 Gb จนใช้เครื่องแรม 3G
ผมคิดว่า มันเร็วขึ้นนะครับ อิอิ เป็นที่ subquery + temptable หรือเป็นที่ เครื่องกันแน่ก็ไม่รู้แฮะ เครื่องหลังนี่ นอกจากจะ แรม 3G แล้ว ซีพียูก็แรงกว่าเครื่องก่อนเยอะเลย

แล้วก็แก้ๆ ไป ปรับๆ ไป จนไม่แน่ใจว่า ทำถูกโจทก์หรือเปล่า 5555 ขอแรงคุณ tanapong ช่วยตรวจทาน ทดสอบดูหน่อยครับ ส่งทางไหนดีครับ จะให้อัพขึ้นเว็บผม คงไม่เหมาะ เหอๆ ตัวไฟล์หนักตั้ง 4 mb พื้นที่เว็บเหลือน้อยแล้วครับ อิอิ

อืมม ไป Gmail แล้วกันนะครับ

http://mail.google.com/mail/?shva=1#drafts/1202a31defdc10d0

user name : accboard
Pass word : accgmail
11 @R01693
ผมได้ Download ไฟล์เรียบร้อยแล้วครับ ขอบพระคุณที่สละเวลา

หลังจากกด Print จะมี Dialog ถาม Option for Print

1) Print without Graph
2) Print with Graph
3) Print Original

ปัญหาสำหรับการออก Report อยู่ที่การ Print Multi-line PO
(1 PO มีหลาย Project)

ซึ่งจะมีการประมวลผล คิวรี่กระทำกับผลลัพธ์ของคิวรี่อื่น วนลูป
ตรงนี้ ผมคิดว่า Temp Table ของคุณ yeadram รวดเร็วมาก
จะมีแต่ยอด Sum ของ Graph Contract (ด้านซ้าย) แสดงแปลกๆอยู่
เดี๋ยวผมจะลองปรับดู แล้วจะรายงานผลให้ทราบครับ

ขอบพระคุณอีกครั้งหนึ่ง

ปล. ผมก็เป็นขาประจำ(แอบอ่าน) Access Webboard อ.สุภาพ ไชยา
เมื่อประมาณ 4-5 ปี และหยุดใช้ Access ประมาณ 2 ปีที่แล้ว (การเรียนรู้เลยขาดตอน) โดยอาชีพผมไม่ได้เป็น Programer แต่ลักษณะงานบังคับ
และผมใช้ Access เป็นก็เพราะท่าน อ.สุภาพ
ท่านใช้ชื่อ Tim K เป็นชื่อ Login ที่ http://www.utteraccess.com

ผมลอง Search ชื่อท่านดูปรากฏว่ามีจำนวนโพส 2,610 ครั้ง
ที่มา Tim K

ไม่เพียงคนไทยได้ความรู้จากท่าน แต่รวมถึงต่างประเทศด้วยครับ

แฮะๆ ถึงโอกาสทดลอง hyperlink ดูครับ
12 @R01694
เรียน คุณ yeadram

Temp Table "qryGraphCT" สามารถรับค่าจาก Code ได้
แต่ ยอด Sum ของ Contract ไม่ได้เชื่อมโยงกับ PJ_ID
จึงทำให้แสดงค่า Sum หลาย Contract เบิ้ลในกราฟเดียวกัน
เหตุผลที่ต้องมี Field [PJ_ID] และ [Contract] กำกับใน Union เพื่ออ้างอิง Record Set
ให้เป็นชุดข้อมูลเดียวกัน

Temp Table "qryGraphPJ" ไม่สามารถรับค่าจาก Code ได้ โดยแสดงค่าเป็น Null

โดยความเห็นของผม หากนำชุดข้อมูล?ั้งหมด บันทึกลง Temp Table เดียวกัน โดยมี
Fiel ทั้งหมด 4 Fields ก็น่าจะทำให้ข้อมูลแสดงได้ถูกต้อง เช่น
PJ_ID , Contract , Amt , Tag

คงต้องขออนุญาต รบกวนอีกนิดนึงครับ สำหรับความเร็ว ผมเชื่อว่าเร็วกว่าเดิมแน่นอน
วันอังคาร ผมจะลองเทียบความเร็วจริงที่เชื่อมต่อกับ Server ตอนนี้ของลอง Local ไปพลางๆ

ส่วนเรื่องอัพเกรดสเปค PC คงยากในสถานะการณ์เศรษฐกิจแบบนี้
=====================================
SELECT [Contract] , PJ_ID,Amt,Tag
from qryBgt
UNION SELECT Contract, PJ_ID,Amt,Tag
from qryPO
UNION SELECT Contract, PJ_ID,Amt,Tag
from qryPaid;
=====================================
13 @R01695
on MSN ได้ไหมครับ ชื่อผม + hotmail ครับ
ผมงง กับโจกท์ อยากถามอะไรเพิ่มเติมครับ
14 @R01696
ขอใส่รูปเพิ่มเติมครับ
กราฟ Contract และ Project


เป็นไปได้ที่จะมี Report 2 ตัวโดยให้แสดงกราฟ หรือไม่แสดง

ถ้าไม่แสดงกราฟ ให้มีข้อมูล Bgt , PO's , Paid ขึ้นมาแทน
แต่จะยากตรง Field "Amt" , "Tag" ต้องไปแตก Tag เป็น 3 Column มันจะช้าอีกหรือเปล่าครับ
(อันนี้น่าจะเป็นเหตุผลเดิม ที่ต้องมี CrossTab Query) เพื่อดึงค่าใน Field มาแสดง

ขอนอกเรื่องนิดนึงครับ คือจริงๆ ผมก็ยังสนใจเรื่อง Upsizing to SQL Server Engine.
สำหรับอนาคต เพียงแต่ตอน Import Server Object มันมองไม่เห็น Access Query
เลยไปต่อไม่ได้ครับ....
15 @R01697
หลังจาก on MSN ท่าน yeadram ได้ให้แนวทางไว้เป็น Code เพื่อส่งค่าลง Temp Table
ซึ่งตอบโจทย์เรื่องความเร็วที่เป็นปัญหาได้ ต้องขอขอบพระคุณเป็นอย่างสูง

จะมีที่เหลือก็เรื่องความถูกต้องของข้อมูลที่จะนำมาแสดง ผมพบปัญหา Sum จาก Bgt
เนื่องจากยอด Budget มีการ Key-in ปรับตัวเลขหลายครั้ง ฉะนั้นยอดที่จะนำมาใช้ต้อง
เป็นยอดรวม Record ถึงจะแสดงค่า แถวเดียว ตัวอย่างเช่น ReqNO. 019178

สำหรับไฟล์ที่แก้ไขผมได้ Upload ไว้ที่นี่ครับ09-03-22_Fixed_Tmp_Tbl.mdb

และผลลัพธ์ ที่รอการต่อยอด ที่นี่ครับ Sum of Bgt

ขอบพระคุณเป็นอย่างสูงครับ
16 @R01698
แก้ไขครับ

สำหรับไฟล์ที่แก้ไขผมได้ Upload ไว้ที่นี่ครับ
09-03-22_Fixed_Tmp_Tbl.mdb
17 @R01756
สว้สดีครับ คุณ Yeadram

ผมคิดว่าปัญหาจบแล้ว แต่กลับมีปัญหาอื่นตามมา
คือตัว Temp Table จะให้สิทธิ์แก่ User ที่ Print Form คนเดียว
โดยจะ Lock Table ไว้คนอื่นๆ ใน Network ไม่สามารถ Print
ได้ในเวลาเดียวกัน

อนึ่งจำเป็นต้อง Preview ดูสถานะ Graph ก่อนพิมพ์เสมอครับ

ไม่ทราบว่าพอจะมีแนวทางแก้ไขไหมครับ

ขอขอบคุณ อีกครั้งหนึ่งครับ
18 @R01758
ในโค้ดการสร้าง tmptable
ให้เพิ่มการตั้งชื่อ table เข้าไปด้วยครับ
ชื่อตารางให้นำหน้าด้วยชื่อขอ user ได้มั้ย
ก็จะกลายเป็นว่า จะมี ตารางพัก ของใครของมัน
แล้วไปเพิ่มงานที่ เหตุการณ์เมื่อปิดรายงาน หรือปิดฟอร์มนั้น หรือเมื่อปิดโปรแกรม
ให้ไปลบตารางพัก (ที่นำหน้าด้วยชื่อของตัวเอง) ออก
เพราะแหล่งข้อมูลที่นำไปออกออกรายงานแต่ละครั้ง (น่าจะมาจาก temptable เท่านั้น ถ้าจำไม่ผิด) ซึ่งจะตัดปัญหาการล็อกตารางไปได้ครับ

ไม่ได้ทำเป็น backend - front end เหรอครับ ทำไม สร้างตารางพักแล้วยังติดปัญหาการ lock ได้อีก
19 @R01762
ตัวตาราง Temp Table อยู่ที่ Front End ครับ
เหตุผลคือ ตอนออก Report ไม่อยากให้โยนข้อมูลกลับไปที่ Back End
เนื่องจากเป็นตารางชั่วคราว หรือผมควรเก็บที่ BE ดีครับ ?

อนึ่ง Temp Table เมื่อลองเชื่อมกับ Network ความเร็วที่ได้มา
เร็วกว่าเดิมนิดหน่อยเองครับ แต่มีข้อดีคือ บาง Report ที่ Print
ไม่ออก ตอนนี้สามารถ Print ได้ แม้จะใช้เวลา Process นานก็ตาม

==== ชื่อตารางให้นำหน้าด้วยชื่อขอ user ได้มั้ยครับ ========

ได้ครับ โดยให้ใช้ Current User () เป็นชื่อ Tmp Table

ขอขอบคุณ ที่สละเวลาครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3172s