Q&A

  • ms sql 2000의 저장프로시저와 델파이 DBGRID연결에 관해
cursor와 fetch를 이용해서 datagrid에 data반입시 여러 row를 한번에 델파이에

datagrid에 반입시키는 방법좀 가르쳐 주세요...

죄송하지만 메일로 답을 좁 부탁드립니다....



메일 thekarma@korea.com



t0001에 구조

CREATE table t0001

(

id char(02),

name varchar(20)

)



ex)

CREATE procedure ex00

@cnt int output,

@id char(02) output,

@name varchar(20) output,

@nicname varchar(20) output

as

set @cnt = 0

set @nicname = ''



declare ex00_c cursor for

select id, name,

'nicname' =

case id

when '01' then 'Tost Man'

when '02' then 'Silver'

when '03' then 'Blues Lee'

else 'Etc'

end

from t0001



open ex00_c



fetch next from ex00_c

into @id, @name, @nicname



while @@fetch_status = 0

begin

select @cnt, @id, @name, @nicname

fetch next from ex00_c

into @id, @name, @nicname

set @cnt = @cnt + 1

end



close ex00_c

deallocate ex00_c

2  COMMENTS
  • Profile
    아세만 2001.06.21 12:51
    델파이 사용자 wrote:

    > cursor와 fetch를 이용해서 datagrid에 data반입시 여러 row를 한번에 델파이에

    > datagrid에 반입시키는 방법좀 가르쳐 주세요...

    > 죄송하지만 메일로 답을 좁 부탁드립니다....

    >

    > 메일 thekarma@korea.com

    >

    > t0001에 구조

    > CREATE table t0001

    > (

    > id char(02),

    > name varchar(20)

    > )

    >

    > ex)

    > CREATE procedure ex00

    > @cnt int output,

    > @id char(02) output,

    > @name varchar(20) output,

    > @nicname varchar(20) output

    > as

    > set @cnt = 0

    > set @nicname = ''

    >

    > declare ex00_c cursor for

    > select id, name,

    > 'nicname' =

    > case id

    > when '01' then 'Tost Man'

    > when '02' then 'Silver'

    > when '03' then 'Blues Lee'

    > else 'Etc'

    > end

    > from t0001

    >

    > open ex00_c

    >

    > fetch next from ex00_c

    > into @id, @name, @nicname

    >

    > while @@fetch_status = 0

    > begin

    > select @cnt, @id, @name, @nicname

    > fetch next from ex00_c

    > into @id, @name, @nicname

    > set @cnt = @cnt + 1

    > end

    >

    > close ex00_c

    > deallocate ex00_c



    일반적으로 MS-SQL이나 ORACLE 에서는 멀티 데이터 셋 리턴을 지원하지 않는 것으로 알고 있습니다.

    INFORMIX SPL에서는 지원하고 있지만...



    결론적으로 MS-SQL이나 ORACLE은 CURSOR 안에서 임의의 데이터 셋을 여러번 반복해서 리턴 시킬 수 없다는 것입니다.

    인포믹스의 경우는 FOREACH구문안에서 RETURNING이 가능합니다.



    위와같은 경우는 PARAMETER를 받아서 커서없이 SQL문으로 가능합니다.



    그럼...



  • Profile
    mafioso 2001.06.16 09:38
    ms-sql은 procedure의 result set이 여러 row일 경우에도 select sql과 똑같이

    쓰시면 됩니다.

    굳이 cursor를 쓰지않아도



    create procedure 프로시져이름

    as

    select id, name,

    'nicname' =

    case id

    when '01' then 'Tost Man'

    when '02' then 'Silver'

    when '03' then 'Blues Lee'

    else 'Etc'

    end

    from t0001



    하시면 됩니다.



    결과값은 output parameter가 아니라 query component처럼 result set 입니다.



    델파이 사용자 wrote:

    > cursor와 fetch를 이용해서 datagrid에 data반입시 여러 row를 한번에 델파이에

    > datagrid에 반입시키는 방법좀 가르쳐 주세요...

    > 죄송하지만 메일로 답을 좁 부탁드립니다....

    >

    > 메일 thekarma@korea.com

    >

    > t0001에 구조

    > CREATE table t0001

    > (

    > id char(02),

    > name varchar(20)

    > )

    >

    > ex)

    > CREATE procedure ex00

    > @cnt int output,

    > @id char(02) output,

    > @name varchar(20) output,

    > @nicname varchar(20) output

    > as

    > set @cnt = 0

    > set @nicname = ''

    >

    > declare ex00_c cursor for

    > select id, name,

    > 'nicname' =

    > case id

    > when '01' then 'Tost Man'

    > when '02' then 'Silver'

    > when '03' then 'Blues Lee'

    > else 'Etc'

    > end

    > from t0001

    >

    > open ex00_c

    >

    > fetch next from ex00_c

    > into @id, @name, @nicname

    >

    > while @@fetch_status = 0

    > begin

    > select @cnt, @id, @name, @nicname

    > fetch next from ex00_c

    > into @id, @name, @nicname

    > set @cnt = @cnt + 1

    > end

    >

    > close ex00_c

    > deallocate ex00_c