본문 바로가기
프로그래밍 언어/파일메이커(FileMaker)

FileMaker ExecuteSQL() 오류 해결 과정 기록

by upself 2025. 3. 4.
728x90

FileMaker의 ExecuteSQL() 함수는 SQL을 이용해 데이터를 조회할 수 있는 강력한 기능이지만, 특정 필드명 처리 문제로 인해 예상치 못한 오류가 발생할 수 있습니다. 이번 포스팅에서는 직접 겪은 오류와 해결 과정을 공유합니다.


🔍 문제 발생

 

다음과 같이 특정 _OrderPK 값과 productCode 값을 기준으로 totalPrice 필드를 조회하는 SQL 쿼리를 작성했습니다.

Let ( [
    sql = "SELECT totalPrice FROM OrderItems 
           WHERE \"_OrderPK\" = ? 
           AND \"productCode\" = ? 
           ORDER BY totalPrice ASC" ;

    priceList = ExecuteSQL ( sql ; ¶ ; "" ; Quote($$orderPK) ; $productCode )
] ; 
    priceList
)

그러나 실행해도 결과가 반환되지 않았고, 오류도 발생하지 않아 어디에서 문제가 생긴 건지 쉽게 찾을 수 없었습니다.


❌ 문제의 원인

 

여러 가지 시도를 해본 결과, 원인은 _OrderPK 필드명이었습니다. FileMaker의 ExecuteSQL()에서 언더스코어(_)로 시작하는 필드는 반드시 Quote()로 감싸야 한다는 점을 놓쳤던 것입니다.

 

잘못된 코드:

"SELECT totalPrice FROM OrderItems WHERE \"_OrderPK\" = ? AND \"productCode\" = ?"

위처럼 _OrderPK를 일반 필드처럼 사용하면 ExecuteSQL()에서 필드를 인식하지 못해 결과가 반환되지 않습니다.


✅ 해결 방법

 

필드명을 Quote()로 감싸주면 정상적으로 실행됩니다.

Let ( [  
    productID = OrderItems_Orders::productCode ;
    sql = "SELECT totalPrice FROM OrderItems  
           WHERE " & Quote("_OrderPK") & " = ?  
           AND " & Quote("productCode") & " = ?  
           ORDER BY totalPrice ASC" ;

    priceList = ExecuteSQL ( sql ; ¶ ; "" ; $$orderPK ; productID )  
] ;  
    priceList  
)

 

해결 과정 정리:

1. 쿼리 자체의 문법 오류 점검 → 오류 메시지가 없어 찾기 어려웠음.

2. 다른 필드로 테스트 진행_OrderPKOrderPK로 바꿔보니 정상 작동.

3. 언더스코어 필드 처리 방식 확인_OrderPKQuote()로 감싸야 한다는 점을 발견.

4. Quote() 적용 후 정상 실행 확인.

반응형