Page 1 of 2

ใช้คำสั่ง Union All แล้ว Access ฟ้อง invalid in use is null

Posted: Fri May 25, 2018 10:50 am
by chalidas
Union All คิวรี่ 2 ตัวเข้าด้วยกัน
1.ผลคิวรี่ตัวแรกฟิลด์ที่ 3 มีค่า
2.ผลคิวรี่ตัวที่สองฟิลด์ที่3 จะเป็นค่าว่าง
ต้องทำยังไงให้ 2 คิวรี่นี้ Union all กันได้ค่ะ


ขอบคุณค่ะ

Re: ใช้คำสั่ง Union All แล้ว Access ฟ้อง invalid in use is null

Posted: Fri May 25, 2018 8:21 pm
by snasui
:D ลองแนบไฟล์ Access โดยตัดมาเฉพาะพอเป็นตัวอย่างได้ หากมีขนาดใหญ่ให้ Zip มาก่อน จะได้ช่วยทดสอบได้ครับ

Re: ใช้คำสั่ง Union All แล้ว Access ฟ้อง invalid in use is null

Posted: Sun May 27, 2018 9:47 pm
by chalidas
ขอเปลี่ยนคำถามใหม่ค่ะ จะมีไฟล์ที่ชื่อ query1 ไฟล์นี้จะเป็นตัว Union All ของคิวรี่ทั้ง 8 ตัวตอนนี้มัน Union All มาได้ 6 คิวรี่แล้วติดคิวรี่ตัวที่ชื่อ ChildPersonalกับ ChildEmployee มันติดตรงฟิลด์สุดท้ายที่ชื่อว่า CHILD_REGULARITY ที่มันทำให้ขึ้น Error ส่วน query2 เอาไว้แสดงผลการ Union All ของquery1
สร้างโฟลเดอร์ชื่อ NHSO แล้วเอาโฟลเดอร์DATA และ DB ไปวางภายใต้ NHSO มีEmailไหมคะไฟล์ DATA มันแนบไม่ได้ไฟล์มันใหญ่

ขอบคุณค่ะ

Re: ใช้คำสั่ง Union All แล้ว Access ฟ้อง invalid in use is null

Posted: Sun May 27, 2018 9:53 pm
by chalidas
https://drive.google.com/file/d/1RUQ1OC ... sp=sharing

โหลดไฟล์ DATA จาก LINK นี้ได้เลยค่ะ

Re: ใช้คำสั่ง Union All แล้ว Access ฟ้อง invalid in use is null

Posted: Mon May 28, 2018 7:44 am
by snasui
:D หาก Run ทั้งหมดจะเกิด Error เกี่ยวกับ Data Type เข้าใจว่าบางฟังก์ชั่นให้ผลเป็นค่าผิดพลาดหรือ Null กับบาง Filed ผมลอง Union แค่ Top 5 , Top 100, Top 1000 สามารถทำงานได้ปกติครับ

ตัวอย่าง SQL ของ Query1 เฉพาะ Top 5 ครับ

Code: Select all

SELECT Top 5 [PID_SELECT],[PID_SELECT_FNAME],[PID_SELECT_MNAME],[PID_SELECT_LNAME],[PID_SELECT_SEX],[PID_SELECT_BIRTHDATE],[PID_SELECT_NATION]
,[PID_SELECT_RELIGION],[WORK_START_DATE],[POSITION_REGISTER_ID],[RELATION],[PID],[PID_FNAME],[PID_MNAME],[PID_LNAME],[PID_SEX],[PID_BIRTHDAY]
,[PID_NATION],[PID_RELIGION],[Child_Incompletent],[CHILD_REGULARITY]
from 1_Personal1

UNION ALL 
SELECT Top 5 [PID_SELECT],[PID_SELECT_FNAME],[PID_SELECT_MNAME],[PID_SELECT_LNAME],[PID_SELECT_SEX],[PID_SELECT_BIRTHDATE],[PID_SELECT_NATION]
,[PID_SELECT_RELIGION],[WORK_START_DATE],[POSITION_REGISTER_ID],[RELATION],[PID],[PID_FNAME],[PID_MNAME],[PID_LNAME],[PID_SEX],[PID_BIRTHDAY]
,[PID_NATION],[PID_RELIGION],[Child_Incompletent],[CHILD_REGULARITY]
from 2_Employee

UNION ALL 
SELECT Top 5 [PID_SELECT],[PID_SELECT_FNAME],[PID_SELECT_MNAME],[PID_SELECT_LNAME],[PID_SELECT_SEX],[PID_SELECT_BIRTHDATE],[PID_SELECT_NATION]
,[PID_SELECT_RELIGION],[WORK_START_DATE],[POSITION_REGISTER_ID],[RELATION],[PID],[PID_FNAME],[PID_MNAME],[PID_LNAME],[PID_SEX],[PID_BIRTHDATE]
,[PID_NATION],[PID_RELIGION],[Child_Incompetent],[CHILD_REGULARITY]
from 3_Couple_Personal

UNION ALL 
SELECT Top 5 [PID_SELECT],[PID_SELECT_FNAME],[PID_SELECT_MNAME],[PID_SELECT_LNAME],[PID_SELECT_SEX],[PID_SELECT_BIRTHDATE],[PID_SELECT_NATION]
,[PID_SELECT_RELIGION],[WORK_START_DATE],[POSITION_REGISTER_ID],[RELATION],[PID],[PID_FNAME],[PID_MNAME],[PID_LNAME],[PID_SEX],[PID_BIRTHDATE]
,[PID_NATION],[PID_RELIGION],[Child_Incompetent],[CHILD_REGULARITY]
from 4_Couple_Employee

UNION ALL 
SELECT Top 5 [PID_SELECT],[PID_SELECT_FNAME],[PID_SELECT_MNAME],[PID_SELECT_LNAME],[PID_SELECT_SEX],[PID_SELECT_BIRTHDATE],[PID_SELECT_NATION]
,[PID_SELECT_RELIGION],[WORK_START_DATE],[POSITION_REGISTER_ID],[RELATION],[PID],[PID_FNAME],[PID_MNAME],[PID_LNAME],[PID_SEX],[PID_BIRTHDATE]
,[PID_NATION],[PID_RELIGION],[Child_Incompetent],[CHILD_REGULARITY]
from 5_Parent_Personal_DAD

UNION ALL
SELECT Top 5 [PID_SELECT],[PID_SELECT_FNAME],[PID_SELECT_MNAME],[PID_SELECT_LNAME],[PID_SELECT_SEX],[PID_SELECT_BIRTHDATE],[PID_SELECT_NATION]
,[PID_SELECT_RELIGION],[WORK_START_DATE],[POSITION_REGISTER_ID],[RELATION],[PID],[PID_FNAME],[PID_MNAME],[PID_LNAME],[PID_SEX],[PID_BIRTHDATE]
,[PID_NATION],[PID_RELIGION],[Child_Incompetent],[CHILD_REGULARITY]
from 6_Parent_Personal_MOM;

UNION ALL
SELECT Top 5 [PID_SELECT],[PID_SELECT_FNAME],[PID_SELECT_MNAME],[PID_SELECT_LNAME],[PID_SELECT_SEX],[PID_SELECT_BIRTHDATE],[PID_SELECT_NATION]
,[PID_SELECT_RELIGION],[WORK_START_DATE],[POSITION_REGISTER_ID],[RELATION],[PID],[PID_FNAME],[PID_MNAME],[PID_LNAME],[PID_SEX],[PID_BIRTHDATE]
,[PID_NATION],[PID_RELIGION],[Child_Incompetent],[CHILD_REGULARITY]
from 7_Child_Personal;

UNION ALL
SELECT Top 5 [PID_SELECT],[PID_SELECT_FNAME],[PID_SELECT_MNAME],[PID_SELECT_LNAME],[PID_SELECT_SEX],[PID_SELECT_BIRTHDATE],[PID_SELECT_NATION]
,[PID_SELECT_RELIGION],[WORK_START_DATE],[POSITION_REGISTER_ID],[RELATION],[PID],[PID_FNAME],[PID_MNAME],[PID_LNAME],[PID_SEX],[PID_BIRTHDATE]
,[PID_NATION],[PID_RELIGION],[Child_Incompetent],[CHILD_REGULARITY]
from 8_Child_Employee;

Re: ใช้คำสั่ง Union All แล้ว Access ฟ้อง invalid in use is null

Posted: Mon May 28, 2018 8:50 am
by chalidas
สอบถามอาจารย์เพิ่มเติมค่ะ ถ้าใช้ NZ วางครอบตรงคิวรี่ของ Child_Personal ตรงส่วนของการคำนวณอายุต้องครอบช่วงไหนคะ


ขอบคุณค่ะ

Re: ใช้คำสั่ง Union All แล้ว Access ฟ้อง invalid in use is null

Posted: Mon May 28, 2018 9:24 am
by snasui
:D ใช้ NZ ครอบ Expression ของการคำนวณอายุ หากเป็น Null สามารถกำหนดให้แสดงเป็นอย่างอื่นได้ครับ

ตัวอย่างการใช้งานดูที่นี่ครับ https://www.techonthenet.com/access/fun ... ced/nz.php

Re: ใช้คำสั่ง Union All แล้ว Access ฟ้อง invalid in use is null

Posted: Mon May 28, 2018 4:31 pm
by chalidas
อาจารย์ค่ะ เช็คแล้วพบว่าที่ฟิลด์CHILD_REGULARITY มีของคนนึงขึ้นว่า #Error ถ้าเราจะเช็คว่าถ้าเป็น#Error ให้เก็บค่าเป็น Text แทนต้องทำอย่างไรค่ะ


ขอบคุณค่ะ

Re: ใช้คำสั่ง Union All แล้ว Access ฟ้อง invalid in use is null

Posted: Mon May 28, 2018 6:57 pm
by snasui
:D ลองประยุกต์ใช้ฟังก์ชั่น IsDate เข้ามาช่วยดูครับ

ตัวอย่าง

CHILD_REGULARITY: IIf(IsDate(Format(Left$([Date of Birth],4) & Right$([Date of Birth],4)-543,"00\/00\/0000")),IIf((DateDiff('d',Format(Left$([Date of Birth],4) & Right$([Date of Birth],4)-543,"00\/00\/0000"),Date())/365)>20,'N','Y'),"")

Re: ใช้คำสั่ง Union All แล้ว Access ฟ้อง invalid in use is null

Posted: Wed May 30, 2018 6:56 pm
by chalidas
อาจารย์คะ ลองรันดูแล้วตอนunion all มันฟ้องว่า data type mismatch in criteria expression


ขอบคุณค่ะ

Re: ใช้คำสั่ง Union All แล้ว Access ฟ้อง invalid in use is null

Posted: Wed May 30, 2018 7:50 pm
by snasui
:D ได้ลองปรับเป็นแบบอื่นแล้วหรือไม่ ด้านบนผมยกตัวอย่างโดยให้มันแสดงเป็นค่าว่าง ต้องการให้แสดงค่าใดก็ปรับเป็นค่านั้นครับ

Re: ใช้คำสั่ง Union All แล้ว Access ฟ้อง invalid in use is null

Posted: Thu May 31, 2018 4:09 pm
by chalidas
อาจารย์คะ ปรับให้เป็นแบบนี้ค่ะ
IIf(IsDate(Format(Left$([Date of Birth],4) & Right$([Date of Birth],4)-543,"00\/00\/0000")),IIf((DateDiff('d',Format(Left$([Date of Birth],4) & Right$([Date of Birth],4)-543,"00\/00\/0000"),Date())/365)>20,'N','Y'),'Notfound')

จากนั้นลอง Union All ก็ขึ้น Data type mismatch in criteria expression

Re: ใช้คำสั่ง Union All แล้ว Access ฟ้อง invalid in use is null

Posted: Thu May 31, 2018 6:37 pm
by snasui
:D ถ้าได้แปลงคอลัมน์อื่นที่ Error ไปเป็นข้อความที่ไม่ Error แล้วยัง Query ไม่ได้อีกผมคงช่วยได้เท่านี้ครับ เท่าที่ตรวจสอบดูมีปัญหาเพียงรายการเดียวที่ Access ไม่สามารถแปลงวันที่แบบพ.ศ.มาเป็นค.ศ.ได้ หากเร่งด่วนใช้วิธีการแก้ปัญหาเฉพาะหน้าไปก่อนด้วยการ Query โดยไม่รวม Id นั้นครับ

Re: ใช้คำสั่ง Union All แล้ว Access ฟ้อง invalid in use is null

Posted: Fri Jun 01, 2018 11:18 am
by chalidas
อาจารย์ค่ะ ลองปรับคิวรี่ใหม่แล้วขึ้นดังไฟล์แนบค่ะ

Re: ใช้คำสั่ง Union All แล้ว Access ฟ้อง invalid in use is null

Posted: Fri Jun 01, 2018 6:35 pm
by snasui
:D ภาพเล็กมากไม่สามารถอ่านได้ครับ

เท่าที่พออ่านได้แปลว่าใส่ Argument ของฟังก์ชั่นไม่ถูกต้อง ยกตัวอย่างเช่นฟังก์ชั่นนั้นมีส่วนประกอบ 10 ส่วนแต่ใส่มาเพียง 1 ส่วน หรือใส่ส่วนประกอบได้ 2 ส่วนแต่ใส่ไปจริง 5 ส่วนก็จะฟ้องลักษณะนี้ครับ

Re: ใช้คำสั่ง Union All แล้ว Access ฟ้อง invalid in use is null

Posted: Sat Jun 02, 2018 11:44 pm
by chalidas
อาจารย์คะ อยากตัดคำนำหน้าชื่อออก เช่น นาย สมหวัง ดีมาก ต้องการตัดให้เหลือแค่ สมหวัง ดีมากต้องใช้คำสั่งอะไรครอบค่ะ
SELECT [9_Personal_Termination].PID_SELECT, [9_Personal_Termination].PID_SELECT_FNAME, [9_Personal_Termination].PID_SELECT_MNAME, [9_Personal_Termination].PID_SELECT_LNAME, FamilyReport.[Identity Number for Father] AS PID, FamilyReport.[First name] AS PID_FNAME, ' ' AS PID_MNAME, FamilyReport.[Last name] AS PID_LNAME, '4' AS RELATION, [9_Personal_Termination].POSITION_REGISTER_ID, '11' AS RELEASE_ID, 'บันทึกข้อมูลบิดาไม่ถูกต้อง' AS REMARK, MASTER.[Terminate Date]
FROM (KMSTPNEL INNER JOIN 9_Personal_Termination ON KMSTPNEL.[Personnel ID]=[9_Personal_Termination].[Personnel ID]) LEFT JOIN FamilyReport ON (KMSTPNEL.[Personnel ID]=FamilyReport.PersNo) AND (KMSTPNEL.[Father Name]=(FamilyReport.คำนำหน้าชื่อ+' '+(FamilyReport.[First name])+' '+(FamilyReport.[Last name])))
WHERE (((KMSTPNEL.[Father Name])<>' ')) And FamilyReport.Membr='11';


ขอบคุณค่ะ

Re: ใช้คำสั่ง Union All แล้ว Access ฟ้อง invalid in use is null

Posted: Sun Jun 03, 2018 7:41 am
by snasui
:D ตัวอย่างการตัดมาเฉพาะชื่อและนามสกุลโดยไม่เอาคำนำหน้านาม

หากมีวรรคคั่นกลางระหว่างคำนำหน้านามกับชื่อสามารถใช้ Instr เข้ามาช่วยได้ครับ ยกตัวอย่างตามสูตรด้านล่าง

์Name: Mid([FullName],InStr([FullName]," ")+1)

ลองนำ FullName ไปแทน Statement ที่ Reuturn ค่าที่ต้องการจะตัดครับ

Re: ใช้คำสั่ง Union All แล้ว Access ฟ้อง invalid in use is null

Posted: Mon Jun 04, 2018 2:42 pm
by chalidas
SELECT [9_Personal_Termination].PID_SELECT, [9_Personal_Termination].PID_SELECT_FNAME, [9_Personal_Termination].PID_SELECT_MNAME, [9_Personal_Termination].PID_SELECT_LNAME, FamilyReport.บัตรประชาชน AS PID, KMSCHD01.[Family First Name] AS PID_FNAME, ' ' AS PID_MNAME, KMSCHD01.[Family Last Name] AS PID_LNAME, [7_Child_Personal].RELATION AS RELATION, [9_Personal_Termination].POSITION_REGISTER_ID, '16' AS RELEASE_ID, 'บันทึกข้อมูลบุตรไม่ถูกต้อง' AS REMARK
FROM (KMSCHD01 INNER JOIN 9_Personal_Termination,7_Child_Personal
ON KMSCHD01.[Personnel ID] = [9_Personal_Termination].[Personnel ID]) LEFT JOIN FamilyReport
ON (KMSCHD01.[Family First Name] = FamilyReport.[First name]) AND (KMSCHD01.[Personnel ID] = FamilyReport.PersNo)
ON [9_Personal_Termination].[PID_SELECT] = [7_Child_Personal].[PID_SELECT] AND (KMSCHD01.[Personnel ID] = FamilyReport.PersNo))
WHERE (((KMSCHD01.[Family First Name])<>' ') AND ((FamilyReport.Membr)='2'));

สอบถามเพิ่มเติมค่ะอาจารย์ จะinner join 3 ตารางแต่ Syntax มันผิดตรงไหนค่ะอาจารย์

Re: ใช้คำสั่ง Union All แล้ว Access ฟ้อง invalid in use is null

Posted: Mon Jun 04, 2018 7:48 pm
by snasui
:D ลอง Update ไฟล์มาใหม่ให้มี Query 9_Personal_Termination จะได้ช่วยดูให้ได้ครับ

Re: ใช้คำสั่ง Union All แล้ว Access ฟ้อง invalid in use is null

Posted: Tue Jun 05, 2018 1:08 am
by chalidas
ขอบคุณค่ะอาจารย์แก้ได้แล้วค่ะ ขอเปลี่ยนคำถามเป็น ต้องการจะตัดชื่อ กับนามสกุลในคิวรี่ที่ชื่อ6_Personal_MOM นามสกุลให้เอาไปใส่ช่อง Lnameในคำสั่งคิวรี่ลองวางคำสั่งMid แล้วมันฟ้องเออเร่อว่า Syntax ไม่ถูกต้องค่ะ

SELECT [1_Personal1].PID_SELECT, [1_Personal1].PID_SELECT_FNAME, [1_Personal1].PID_SELECT_MNAME, [1_Personal1].PID_SELECT_LNAME, [1_Personal1].PID_SELECT_SEX, [1_Personal1].PID_SELECT_BIRTHDATE, [1_Personal1].PID_SELECT_NATION, [1_Personal1].PID_SELECT_RELIGION, [1_Personal1].WORK_START_DATE, [1_Personal1].POSITION_REGISTER_ID, '4' AS RELATION, FamilyReport.[Identity Number for Mother] AS PID, KMSTPNEL.[Mother Name] AS PID_FNAME, ' ' AS PID_MNAME, ' ' AS PID_LNAME, '2' AS PID_SEX, ' ' AS PID_BIRTHDATE, ' ' AS PID_NATION, ' ' AS PID_RELIGION, ' ' AS CHILD_INCOMPETENT, ' ' AS CHILD_REGULARITY
FROM (KMSTPNEL INNER JOIN 1_Personal1 ON KMSTPNEL.[Personnel ID]=[1_Personal1].[Personnel ID]) LEFT JOIN FamilyReport ON (Mid([KMSTPNEL].[Mother Name],InStr([Mother Name]," ")+1)=(FamilyReport.[First name])+' '+(FamilyReport.[Last name])) AND (KMSTPNEL.[Personnel ID]=FamilyReport.PersNo)
WHERE (((KMSTPNEL.[Mother Name])<>'')) And FamilyReport.Membr='12';


ขอบคุณค่ะ