현재 Delphi 7.0을 쓰고 있습니다.
개발 시작한지 몇달 안되는 초보입니다.
DBGrid를 쓰기땜에 SQLQuery 와 ClientDataSet을 사용하고 있습니다.
SQLQuery의 SQL String Editor에 쿼리를 넣구서 Open을 시키면 이상없이 작동을 합니다. 하지만, 소스코드에서 ClientDataSet을 실행시에 Open 시키면 Access Violation Error가 납니다.
sql_select_pre :=
' SELECT TO_CHAR(i_page) i_page, TO_CHAR(i_prodline1) i_prodline1,' +
' TO_CHAR(i_prodline3) i_prodline3, s_prodlinename, s_description, ' +
' AVG_SellPrice, ' +
' GDQty, RANK() Over (ORDER BY GDQty DESC) GDQty_Rank,' +
GIP_IND,' +
' RTQty, RTVal, RTQty_Per, RTVal_Per ' ...
위 SQL문에서 RANK() 함수부분을 없애면 아무 문제없이 작동을 하는데 RANK()를 넣고 실행만 하면 에러가 나네요.
에러 메시지는 Access Violation ....in module 'midas.dll' .. 이 나는데..
구글에서 이런경우에 Uses문에 MidasLib를 넣으라는 부분이 있길래
추가를 했더니 한번 Access Violation ... in module '프로그램이름'... 으로 메시지가 바뀌어서 나오고 난 후에 다시 누르면 작동을 하기도 하고, 작동했다가 에러났다가를 반복합니다.
참고로, SQL String Editor에 SQL문을 박아놓구 ClientDataSet을 Open시킨상태에서는 DBGrid에 데이타가 이상없이 잘 나오네요.
오라클 함수를 안쓰자니 순위 매기는 부분을 만들어야 할것 같기도 하구...
이틀동안 이부분땜에 꼬박 보냈는데도..이유를 모르겠씁니다.
고수님들의 조언 부탁드립니다.
도와주세요.
감사합니다.
8i이상을 사용하시는 것 같군요..
델파이에서 직접적인 SQL문 상으로 Analytic Function을
사용할 수 있는 오라클 버젼은 9i부터입니다..
따라서 9i미만 버젼에서는 직접적인 Analytic Function의
호출은 불가능합니다..
다만, Dynamic SQL문을 이용해서 사용은 가능합니다.
결론적으로,
3-tier이든 2-tier이든간에
직접적인 SQL문에 Analytic Function을 사용하기 위해서는
오라클 버젼은 9i이상이어야 한다는 뜻입니다..
그렇지 않다면,
무조건 Error!!!
답이 되었다면 좋겠군여..