สอบถาม Eval function ครับ
กระทู้เก่าบอร์ด อ.Yeadram

 1,907   7
URL.หัวข้อ / URL
สอบถาม Eval function ครับ

พอดีอยากทำตารางเก็บสูตรไว้หนะครับเช่น
บริษัท A ใช้ Amount - Discount - Promotion
บริษัท B ใช้ Amount - Discount
บริษัท C ใช้ Amount - Discount - VAT
อะไรประมาณนี้
พอทีนี้ตอนเอาไปใช้ กะว่าจะใช้ Eval(FldFormula)
แต่มันไม่ออกหนะครับ
ก็เลยอยากถามว่า Eval(...) จะใช้คำควน/อ้างอิง field อย่างไรครับ ทำได้หรือเปล่า

หรือใครมีวิธีอื่นในการแปลงสูตร(string)ที่เก็บไว้ มาให้ access มันคำนวนได้บ้างหรือเปล่าครับ

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

1 @R07537
2 @R07539
555 สมองเสื่อมเคยถามแล้วกลับมาถามอีก ใช่แล้วครับ... สรุปว่าเก็บไว้ใช้ไปไม่ได้เลยโดยตรง ผมเลยต้องใช้
บริษัท A ใช้ [Amount] - [Discount] - [Promotion]
บริษัท B ใช้ [Amount] - [Discount]
บริษัท C ใช้ [Amount] - [Discount] - [VAT]
คือมันก็ยังใช้ไม่ได้??ะนะ
ตอนที่ไปเขียนอ้างอิงใน report เลยต้องเขียน
=Eval(Replace([strFormula],"[","Report![ReportName]![")
ถึงจะใช้ได้... ก็พอจะเก็บสูตรไว้ใน table ได้ครับ

...ใครพอมีวิธีอื่นแนะนำไหมครับ
3 @R07545
ไม่ได้อีกแล้ว... อยากเอาตารางที่คำนวนได้ export ไปเป็น excel
ใน query มันใช้ สูตร eval แบบอ้างอิงฟิลดได้หรือไม่ครับ
4 @R07556
เจอปัญหาเดียวกันเลยครับ

ให้เปลี่ยนไปใช้เป็นชื่อ Function แทน โดยเก็บชื่อ Function ลงไปใน Field ที่ต้องการ
เช่น สูตร A - "FunctionA"
สูตร B - "FunctionB"

ตอนสั่งก็ประมาณ Eval(MyField)

Function FunctionA()
[Amount] - [Discount] - [Promotion]
...
end function

function FunctionB()
[Amount] - [Discount]
...
end function


ประมาณนี้ละครับ

แต่ว่าทำให้ไม่ใช้ If หรือ select case แทนละครับ ง่ายกว่ากันเยอะ
5 @R07568
คือผมไม่รู้หนะครับว่าในอนาคต สูตรมันจะเปลี่ยนไปอย่างไร...
อยากให้ user เข้าไปแก้ไขสูตรได้ด้วยตัวเองเลย โดยผมจะบอกรูปแบบไปเลยว่า ถ้าคุณจะเปลี่ยนสูตรคุณต้องใส่รูปแบบอย่างนี้นะ...
...ครับ ก็เลยอยากได้วิธีการดังกล่าว การเขียนฟังชั่นไปเลยก็ออกแนว hardcode ซึ่ง user ไม่สามารถเปลี่ยนเองได้ หากสูตรที่เพิ่มเข้ามาใหม่ไม่ได้ถูกกำหนดไว้ใน function แต่แรก
6 @R07622

เนื่องจากไปเขียน eval ใน report ตอนที่จะไปหาผล sum สรุปตรงท้าย report เลยทำไม่ได้ครับ

จะไปใช้สูตร eval กรณีของผมใน query ได้ไหมครับ
7 @R07732
ผมคิดไปคิดมามันก็น่าทำได้ แต่ไม่ใช่ใช้ Eval( ) แต่ใช้การสร้างฟังก์ชั่นของเราเองตามโครงร่างนี้

public function fn(expression as string, PK1 as ... , PK2 as ... , ... ) as datatype หรือใช้ Variant datatypeถ้าค่าที่คืนอาจเป็น Null ได้
   dim db as dao.database
   dim rs as dao.recordset
   dim sql as string

   set db = currentdb
   sql = "select " & expression & " as result from table as t where t.pk1 = " & PK1 & " and t.pk2 = & PK2 & " ..... "
   set rs = db.openrecordset(sql)
   fn = rs!result
   rs.close: set rs = nothing
   db.close: set db = nothing
end public

sql select statement ในคิวรี่ ก็มีลักษณะดังนี้ select fld1 , fld2 , ... , fn(formula, t.pk1, t.pk2, t.pk3, ...) from table as t where .....

สิ่งสำคัญคือในเทเบิล t ต้องมี primary key ถ้าไม่มี ฟังก์ชั่นนี้ทำไม่ได้ครับ และ formula ต้องป้อนให้ถูก syntax ส่วน formula จะอยู่ในเทเบิล t หรือจะ inner join เข้ามาก็ได้ครับ

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