ผลคือ โปรแกรม ฟ้อง Relation Error ครับ สำหรับการ Query ด้วยเงื่อนไข
Query=.and.(.not.)
ที่ต่อกันลงไปเรื้อยๆ
หรือแม้แต่ใช้ Query=.and.(......#'S001'.or.....)
และแม้แต่การใช้ .and.(.not.(A.or.B.or.C...)
เพราะว่ามันไม่สามารถหาความสัมพันธ์ด้วยการคิวรี่(คือถามเข้ามาในซับเซท) ของสินค้าที่กล่าวในเงื่อนไขแบบนี้แน่นอน
คือ เราบอกว่าให้คิวรี่เอาข้อมูล สินค้าที่ รหัสผู้จำหน่ายไม่ใช่ S001 และ ไม่ใช่ S002 และไม่ใช่ S003 เช่นนี้โปรแกรมตีความไม่ได้ เพราะ หากขั้นแรกโปรแกรมค้นหา ข้อมูลที่ ไม่ใช่ S001 เสร็จแล้วมันจะมีทั้งข้อมูล S002 และ S003อยู่ในนี้ จากนั้นจะต้องเช็คว่ามี S002อยู่ด้วยหรือไม่ ถ้ามี ข้อมูลนั้นไม่เอา ซึ่งมันจะต้องมี S002 อยู่อย่างแน่นอนในขั้นตอนที่1 เพราะเมื่อเรียกข้อมูลที่ไม่มี S001 มันก็จะมี S002 ได้ เงื่อนไขมันเป็นวงลูปที่ระบบตรรกะแก้ไม่ออก
แต่สำหรับ การกรองโดย ฟิลเตอร์ ผมทดสอบแล้ว ใช้การได้ เมื่อมีโอกาสให้สามารถป้อนเงื่อนไขทั้งหมดได้สมบูรณ์ลงในบรรทัดเดียว โปรแกรมกลับเข้าใจความต้องการของเรา ที่จะไม่ขอดูข้อมูลใดๆที่มี บริษัท เหล่านี้เป็นเจ้าของสินค้านั้นๆทั้งหมด อันได้แก่ S001,S002,S003
ฉะนั้น Filter=.not.(A.or.B.or.C.or.D) โปรแกรมเข้าใจว่าให้กรองทิ้ง สำหรับเงือนไข A หรือ B หรือ C หรือ D ฯลฯ
ด้วยเหตุนี้ ความสามารถในการอ่านบรรทัดได้ยาวๆของเงื่อนไขแบบนี้จึงมีความสำคัญในกรณีนี้ โดยไม่มีทางเลือกนะครับ
หากเป็นข้อมูล บริษัทเดียวที่เราไม่ต้องการขอดู(คือขอดูเฉพาะที่เป็นบริษัทอื่นที่ไม่ใช่บริษัทนี้) Filter และ Query จะให้ผลลัพธ์ไม่แตกต่างกันครับ
อีกกรณีตัวอย่างนึงคือ ซับเซท .and.(A.or.B.or.C.or.D) จะมีค่าไม่เท่ากับ ซับเซท .and.(A.or.B) .and.(C.or.D) ซึ่งมันทำให้การตัดบรรทัดเงื่อนไขที่ยาวมากๆลงมาเป็นอีกบรรทัดคิวรี่นึงนั้น ไม่ให้ผลลัพธ์ที่เหมือนกันนะครับ
อย่างไรก็ตาม ปัญหาของผม แก้ตกแล้ว ด้วยการที่มีโอกาสให้ป้อนเงื่อนไขได้ยาว 500 ตัวอักษร มันมากพอที่จะ กรองออก(ในส่วนที่ไม่ต้องการ) หรือถ้ากรองออกไม่หมด ก็พลิกกลับมาดูด้าน กรองเข้า (ในส่วนที่ต้องการดู) ก็เป็นอันว่า จบปัญหาได้ด้วยประการฉะนี้ ครับ
ขอบคุณครับ





