|
몇가지 질문을 같이 드리죠.
1. 하나의 커넥션으로 연결된 DB내의 모든 테이블 목록을 어떻게 가져오는가?
2. 그리고 각 테이블의 필드목록은 어떻게 가져오는가?
테이블의 필드 목록은
SELECT * FROM tablename WHERE false
실행해서 필드를 죽 스캔하면 될 것 같은데요.. 좀 더 쌈박한 방법은 없는지..
3. 특정 쿼리문(SELECT)을 실행했을 때 어떤 필드들을 얻게 되는지 아는 방법은?
예를 들어 SELECT table1.*, table2.* FROM table1, table2 WHERE table1.sn=table2.psn
이라는 쿼리문을 실행하면 결과로 어떤 필드들을 얻게 되는지.. 이 경우 table1의 모든
필드와 table2의 모든 필드가 되겠죠. 물론 WHERE에 and false같은거 하나 넣어두면
레코드는 0개가 추출될거고, 데이터셋의 모든 필드를 스캔하는 방법이 있긴하지만
쿼리문 자체를 사용자가 입력하게끔 하는 경우라면 사용하기가 여의치 않은 것 같습니다.
좀 위험하겠죠..
또한, TOP어쩌구를 써서 무조건 1개 레코드만 뽑아오게 할 수 있겠지만 이 역시 SQL서버의
종류에 따라 첫 1개 레코드를 뽑아오는 명령을 지원하기도 하고 안하기도 하고..
지원한다고 해도 서로 문법이 다르고..
뭔가 방법이 없을까요? 이거 하나 하려고 SQL문 파서를 만드는것도 바보짓이고..
3번 질문에 대해 약간 보충을 한다면,
이런 경우를 생각해보죠.
사용자가 SELECT * FROM table이라는 쿼리를 입력했습니다.
프로그램에서는 이 쿼리 결과로 얻어지는 필드명을 사용해야 합니다.
그런데, 그 테이블의 레코드가 100만개입니다.
게다가 원격으로 꽤 먼곳에 있는 DB입니다.
이 쿼리가 제대로 된 것인지 확인하고, 또 결과로 어떤 필드들이 날아오는지 채크하기 위해
마냥 실행한다면.. 아마 몇시간 기다려야겠죠.
그쪽 DB서버도 부하가 많이 걸릴건 당연하구요.
TADOQuery의 MaxRecord였나요? 하여간 비스무리한 프라퍼티 값을 1로 제한해도 소용 없는 것
같더라구요. 제가 해 봤을땐.
뭔가 속시원한 방법이 있다면 좀 알려주시면 고맙겠습니다.
|