กระทู้เก่าบอร์ด อ.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 มันคำนวนได้บ้างหรือเปล่าครับ
บริษัท 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
Eval ได้หรือเปล่า : แดนน้อย : Posted : on : 25/7/2551 10:27:22
2 @R07539
555 สมองเสื่อมเคยถามแล้วกลับมาถามอีก ใช่แล้วครับ... สรุปว่าเก็บไว้ใช้ไปไม่ได้เลยโดยตรง ผมเลยต้องใช้
บริษัท A ใช้ [Amount] - [Discount] - [Promotion]
บริษัท B ใช้ [Amount] - [Discount]
บริษัท C ใช้ [Amount] - [Discount] - [VAT]
คือมันก็ยังใช้ไม่ได้??ะนะ
ตอนที่ไปเขียนอ้างอิงใน report เลยต้องเขียน
=Eval(Replace([strFormula],"[","Report![ReportName]![")
ถึงจะใช้ได้... ก็พอจะเก็บสูตรไว้ใน table ได้ครับ
...ใครพอมีวิธีอื่นแนะนำไหมครับ
บริษัท A ใช้ [Amount] - [Discount] - [Promotion]
บริษัท B ใช้ [Amount] - [Discount]
บริษัท C ใช้ [Amount] - [Discount] - [VAT]
คือมันก็ยังใช้ไม่ได้??ะนะ
ตอนที่ไปเขียนอ้างอิงใน report เลยต้องเขียน
=Eval(Replace([strFormula],"[","Report![ReportName]![")
ถึงจะใช้ได้... ก็พอจะเก็บสูตรไว้ใน table ได้ครับ
...ใครพอมีวิธีอื่นแนะนำไหมครับ
3 @R07545
ไม่ได้อีกแล้ว... อยากเอาตารางที่คำนวนได้ export ไปเป็น excel
ใน query มันใช้ สูตร eval แบบอ้างอิงฟิลดได้หรือไม่ครับ
ใน 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 แทนละครับ ง่ายกว่ากันเยอะ
ให้เปลี่ยนไปใช้เป็นชื่อ 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 แต่แรก
อยากให้ user เข้าไปแก้ไขสูตรได้ด้วยตัวเองเลย โดยผมจะบอกรูปแบบไปเลยว่า ถ้าคุณจะเปลี่ยนสูตรคุณต้องใส่รูปแบบอย่างนี้นะ...
...ครับ ก็เลยอยากได้วิธีการดังกล่าว การเขียนฟังชั่นไปเลยก็ออกแนว hardcode ซึ่ง user ไม่สามารถเปลี่ยนเองได้ หากสูตรที่เพิ่มเข้ามาใหม่ไม่ได้ถูกกำหนดไว้ใน function แต่แรก
6 @R07622
เนื่องจากไปเขียน eval ใน report ตอนที่จะไปหาผล sum สรุปตรงท้าย report เลยทำไม่ได้ครับ
จะไปใช้สูตร eval กรณีของผมใน query ได้ไหมครับ
เนื่องจากไปเขียน 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 เข้ามาก็ได้ครับ
ได้ผลยังไงแล้วบอกกันด้วย
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 เข้ามาก็ได้ครับ
ได้ผลยังไงแล้วบอกกันด้วย
Time: 0.3555s