Q&A

  • sql 쿼리시 maskedit에서 날짜를....
안녕하십니까..



오라클을 사용하고 있고요..



오라클 쿼리시 : select * from emp

where 일자 >= '20010701'

and 일자 <= '20010702'



델파이에서는 위의 일자를 maskedit에서 불러오려고 합니다.

maskedit1,maskedit2 에서 시작일과 종료일을 불러와서 쿼리 하려고 했는데 ..안되네여



with query1 do

begin

close;

sql.clear;

sql.add ('select * from emp');

sql.add ('일자 >= ''' +maskedit1.text+ ''' '); -->틀렸나여?

sql.add ('일자 <= ''' +maskedit2.text+ ''' '); -->틀렸나여?

sql.open;



param을 이용하면 된다는데..쩝 초보라서여..부탁드립니다.

3  COMMENTS
  • Profile
    송기원 2001.07.02 20:57
    tmpString := format('select * from emp where 일자 >= ''%s'' and 일자 <= ''%s'''

    ,[maskedit1.text, maskedit1.text]);

    query1.sql.clear;

    query1.sql.add(tmpString);



    이렇게 하시거나..

    with query1 do

    Begin

    sql.add('select * from emp ');

    sql.add('where 일자 >= :k1 and 일자 <= :k2 ');

    params[0].asstring := maskedit1.text;

    params[1].asstring := maskedit2.text;

    end;

    요렇게 하시데....중요한건 일자의 DataType이 Varchar또는 Char로 정의된경우에만

    가능합니다..

    만인 DataType이 날짜형이면 오라클의 ToDate함수를 사용해 보세요...



    초보자 wrote:

    > 안녕하십니까..

    >

    > 오라클을 사용하고 있고요..

    >

    > 오라클 쿼리시 : select * from emp

    > where 일자 >= '20010701'

    > and 일자 <= '20010702'

    >

    > 델파이에서는 위의 일자를 maskedit에서 불러오려고 합니다.

    > maskedit1,maskedit2 에서 시작일과 종료일을 불러와서 쿼리 하려고 했는데 ..안되네여

    >

    > with query1 do

    > begin

    > close;

    > sql.clear;

    > sql.add ('select * from emp');

    > sql.add ('일자 >= ''' +maskedit1.text+ ''' '); -->틀렸나여?

    > sql.add ('일자 <= ''' +maskedit2.text+ ''' '); -->틀렸나여?

    > sql.open;

    >

    > param을 이용하면 된다는데..쩝 초보라서여..부탁드립니다.

  • Profile
    초보자 2001.07.04 20:14
    송기원 wrote:

    > tmpString := format('select * from emp where 일자 >= ''%s'' and 일자 <= ''%s'''

    > ,[maskedit1.text, maskedit1.text]);

    > query1.sql.clear;

    > query1.sql.add(tmpString);

    >

    > 이렇게 하시거나..

    > with query1 do

    > Begin

    > sql.add('select * from emp ');

    > sql.add('where 일자 >= :k1 and 일자 <= :k2 ');

    > params[0].asstring := maskedit1.text;

    > params[1].asstring := maskedit2.text;

    > end;

    > 요렇게 하시데....중요한건 일자의 DataType이 Varchar또는 Char로 정의된경우에만

    > 가능합니다..

    > 만인 DataType이 날짜형이면 오라클의 ToDate함수를 사용해 보세요...

    >

    > 초보자 wrote:

    > > 안녕하십니까..

    > >

    > > 오라클을 사용하고 있고요..

    > >

    > > 오라클 쿼리시 : select * from emp

    > > where 일자 >= '20010701'

    > > and 일자 <= '20010702'

    > >

    > > 델파이에서는 위의 일자를 maskedit에서 불러오려고 합니다.

    > > maskedit1,maskedit2 에서 시작일과 종료일을 불러와서 쿼리 하려고 했는데 ..안되네여

    > >

    > > with query1 do

    > > begin

    > > close;

    > > sql.clear;

    > > sql.add ('select * from emp');

    > > sql.add ('일자 >= ''' +maskedit1.text+ ''' '); -->틀렸나여?

    > > sql.add ('일자 <= ''' +maskedit2.text+ ''' '); -->틀렸나여?

    > > sql.open;

    > >

    > > param을 이용하면 된다는데..쩝 초보라서여..부탁드립니다.









    자문자답이 되었네여



    위 문제는 간단하게 해결되었습니다.

    알면 너무 쉬운것을...모르니....쩝



    일단 string 변수를 2개 만들어서

    그럼...저 처럼 초보자 분들을 위해....자세히 설명합니다.

    먼저 변수지정 ..

    var

    s1,s2 : string; ->이러면 스트링변수가 지정 되겠져











    그리고 아셔야 될건...add함수는 sql문을 옆으로 부쳐버립니다.

    예를들어 sql.add('select * from emp');

    sql.add('where 매장 =''2222''');

    이렇게 코딩하면 에러납니다. 왜냐..위 문은

    select * from empwhere 매장 = '2222' 이렇게 표현됩니다.

    emp와 where 절이 붙어 버리는거죠.



    에러가 안나려면 sql.add('select * from emp '); ->emp와 ' 사이 공간을 띄어 주시던가 where 앞의 한칸을 띄워주셔야 합니다. ^-^ 다아시는 건가여..?

    저는 이걸 간과해서...쩝





    아이고 말이 길어 졌네여

    아까 스트링 변수로 잡은 s1,s2에 maskedit값을 넣어 주시면 되는데..

    copy함수를 쓰죠



    s1 := copy(maskedit1.Text,1,4) + copy(maskedit1.Text,6,2);

    s2 := " 위와 똑같이 하면 되겠져...



    문제는 maskedit 에 있는 ' - - ' 값을 처리하는 방법입니다.

    예를들어 2001-07-03 이 maskeedit의 값이라면 2001과 07 사이의 - 값을 처리해야

    하는거져...

    copy함수로 날자만 빼오시면 됩니다. copy함수는 오라클에서 substr 과 같죠.

    결과는

    sql.add('where 일자 between '''+s1+''' and '''+s2+''''); 하심 되겠죠..









    위의꺼 총 결과



    var

    s1,s2 : string;



    begin

    s1 := copy(maskedit1.Text,1,4) + copy(maskedit1.Text,6,2);

    s2 := copy(maskedit2.Text,1,4) + copy(maskedit2.Text,6,2);



    with query1 do

    begin

    close;

    sql.add ('select * from emp '); -> emp후에 한칸 띄우는거 잊지 마세여..

    sql.add ('where 일자 between '''+s1+''' and '''+s2+'''');

    sql.open;





  • Profile
    성더기 2001.07.05 03:09
    MaskEdit의 Mask설정할때 보면 Save Literal(맞나?)

    할튼 이넘의 채크를 빼면 - <-- 요놈 안찍힘다..^^