Q&A

  • sql문장
* 정말 답답하네요...

어찌해야 할지 몰라서요.

하고자 하는 내용은



우선 txt파일을 읽어서

dbgrid에 뿌려주는 거에요...



그런데 table은 오라클에서 사용하는 dual이라서요.

데이타를 직접 입력할 수 없습니다.

동적으로 필드명, 값을 입력 해야 한다는 겁니다.

그러니까 table에 직접 값을 입력할 수 없습니다.

단지 dbgrid에만 나타내 주는 거지요..



그래서 query의 sql에 txt파일이 이런식으로 입력됩니다.

***************************************************

select '95.47'"3월 국어",'96.32'"4월 국어",.......

'98.45'"8월 국어",'92.89'"9월 국어".......

from dual

***************************************************



문제는 dbgrid에 나타납니다. 이문장으로 돌리면,,,

qw := '';

AssignFile(F,'e:23.txt');

Reset(F);

while not Eof(f) do

begin

Readln(F,qq);

qw := qw + qq;

end;



Query1.Close;

Query1.SQL.Clear;

Query1.SQL.add:= (qw);

Query1.Open;

end;



dbgrid자료에



3월 국어" 4월 국어"

95.47' '96.32'

98.45' '92.89'

. .

. .

. .



이렇게 나타내고 싶은데요

3월 국어" 4월 국어" 3월 국어 4월 국어

95.47' '96.32' 98.45' '92.89' ....

이렇게 나타납니다.



sql문장중에 union기능을 사용해봤지만,,,



그래서



select '95.47'"3월 국어",'96.32'"4월 국어",.......

'98.45'"8월 국어",'92.89'"9월 국어".......

from dual



union



select '95.47'"3월 국어",'96.32'"4월 국어",.......

'98.45'"8월 국어",'92.89'"9월 국어".......

from dual

이렇게 txt파일에서 해봐도 안되더라구요...

해결할 수 있는 방법이 없을까요...

1  COMMENTS
  • Profile
    이재식 2000.09.21 09:56
    안녕하세요?



    여기에 자세한 질문이 있었네요.. ^^



    왜 이런 경우가 발생했는지에대해서는 이해가 좀 안가지만...

    이 문제는 실제 테이블과의 연동이 전혀없는 그런 쿼리인데다,

    쿼리의 결과를 그대로 보여주는 것이 아니라, 편집이 필요한 것이네요.



    이런것은 db그리드로 하지말고 스트링 그리드나 formula등 그런 display툴을

    이용하시는 것이 좋을 듯 합니다.

    현재 저의 생각으론 이것은 하드코딩을 좀 하셔야 합니다.

    얼핏 보기엔 그리 어려운 문제는 아니라고 생각이 됩니다.

    우선 약간의 문제 정의가 있으면 됩니다.

    가령, 질문에서 보니까 "3월 국어"라는 필드가 여러개 나타나는것 같은데요,

    반드시 이름 형식이 같아야 한다는 것이죠. 코딩을 쉽게 하기 위해서...

    무슨 이야기냐면요, 가령, select '71.21'"3월 국어", '99.11'"4월 국어",

    '91.11'"3월 국어"...

    이렇게 되어있을때 위에서 위 select문에서 두번째 보이는 "3월 국어"에서

    공백이 두개 들어가 있는데, 이렇게 되면 안되고 첫번째 "3월 국어"처럼 공백이

    한개 들어가 있어야 한다는 거죠.

    가령, 또 두번째 "3월 국어"에서 이것이 "3월의 국어" 이런식으로 또 필드명에

    변형이 있으면 안된다는 거죠.

    사람이 보기엔, "3월 국어"나 "3월 국어"나 "3월의 국어"나 다 "3월의 국어"지만

    말이죠...



    우선 가장 먼저 정의를 해야 할것은 파일에 들어가 있는 쿼리의 형식입니다.

    select '95.47'"3월 국어",'96.32'"4월 국어",.......

    '98.45'"8월 국어",'92.89'"9월 국어".......

    from dual

    위처럼 쓰셨는데요,

    98.45는 "8월 국어"점수인데, 어째서 "3월 국어"점수에 있는지 모르겠네요.(아래처럼..)

    오타가 아닌지... 이 오타가 문제이해에 무척 혼란을 주네요.. ^^

    3월 국어" 4월 국어"

    95.47' '96.32'

    98.45' '92.89'



    요건정의 1. 파일에 들어가있는 쿼리데이터의 형식

    요건정의 2. 필드명 형식은 어떻게 되는가?

    (가령, "3월 국어", "3월의 국어"... 뭐 이런것도 허용하는 것인가?)

    이 두가지만 확실히 요건정의되면 하드코딩으로 해서 해결될 듯 합니다.

    다만, display시, 그 화면양식도 중요합니다.

    가령, 쿼리에는 3월, 4월, 8월 데이터만 있을경우

    나머지 1월, 2월 ... 9월, 10월등의 데이터는 보여주는것인지 안보여주는것인지

    이런것에대한 정의는 어떻게 되느냐는 것이죠.



    그리고, 대략 양은 어느정도 되는지도 알았으면 하네요.



    이 문제는 우선 말씀하신 것처럼 테이블에서 불러와서 그냥 쿼리를 던집니다.

    그럼, 원치않는 형식의 데이터가 되겠죠...

    (아래처럼)

    3월 국어" 4월 국어" 3월 국어 4월 국어

    95.47' '96.32' 98.45' '92.89' ....



    이렇게 되면 우린 필드의 개수를 알수 있고, 우리가 그 개수를 n이라고 했을때

    n에 for n-1를 돌려서

    즉, n * (n-1)번의 반복으로 문제를 풀수 있습니다.

    아님, 좀 더 간단히 n번의 반복으로 문제를 풀수도 있죠.



    n*(n-1)번의 반복은 같은 필드명을 찾는 것이고요,

    n번의 반복은 그냥 필드명의 첫 숫자만을 읽는 것이죠.

    필드명에서 무조건 2개를 읽어요. 왜냐하면 10월, 11월 12월도 있으니까요.

    그럼 1월~9월의 경우는 첫 2자를 읽어서 그것을 수치로 전환할때 에러가 나겠죠.

    그럼 이때는 1자를 읽는 것이죠.

    그리고, 읽는 문자값을 수치로 전환하면 각 필드마다 찍힐 위치가 결정되고

    그 위치만 결정되면(다른 테이블은 절대 쓰면 안된다고 했으니까)

    스트링 그리드나 formula에 그 위치를 알고 있으므로 출력해 주면 되죠...



    흠~~. 디비그리드에 연연하지 마시고, 약간의 하드코딩으로 어렵지않게 해결가능한

    문제입니다. 다시 한번 잘 정리해서 생각하시면 좋은 아이디어가 나올 것입니다.

    잘 되길 바랍니다...

    제가 샘플로 작성해 드리고 싶은데요,

    위 문제에 대해서 다소 궁금한 사항들이 있어서 확답을 못드리겠습니다....