Q&A

  • SQL 변수 선언 어떻게 합니까 ?
잘아시는분 도움좀 부탁드립니다.



재고계산을 하기위해 아래와 같은 문장을 구성했는데 UPDATE문에서 변수선언에러가

발생합니다. 변수는 어떻게 선언해야 하는가요 ?



procedure TEBProdF.gaesanClick(Sender: TObject);

var m_selgal,m_selbot,m_seldr,m_seltr,m_slmgal,m_slmbot,m_slmdr : integer;

begin



while not ebdm.EBProdT.Eof do

begin

ebdm.ebqry.close;

ebdm.ebqry.sql.clear;

ebdm.ebqry.sql.add('update ebprodt set selgal = m_selgal + elgal - lelgal,');

ebdm.ebqry.sql.add(' selbot = m_selbot + elbot - lelbot,');

ebdm.ebqry.sql.add(' seldr = m_seldr + eldr - leldr,');

ebdm.ebqry.sql.add(' seltr = m_seltr + eltr - leltr,');

ebdm.ebqry.sql.add(' slmgal = m_slmgal + lmgal - llmgal,');

ebdm.ebqry.sql.add(' slmbot = m_slmbot + lmbot - llmbot,');

ebdm.ebqry.sql.add(' slmdr = m_slmdr + lmdr - llmdr');

ebdm.ebqry.ExecSQL;

m_selgal := ebdm.EBProdT['selgal'];

m_selbot := ebdm.EBProdT['selbot'];

m_seldr := ebdm.EBProdT['seldr'];

m_seltr := ebdm.EBProdT['seltr'];

m_slmgal := ebdm.EBProdT['slmgal'];

m_slmbot := ebdm.EBProdT['slmbot'];

m_slmdr := ebdm.EBProdT['slmdr'];

ebdm.EBProdT.Next;

end

end;



3  COMMENTS
  • Profile
    조복기 2000.08.22 03:52


    안녕하세요~

    변수선언을 통해서 넘겨도 되지만

    바로 파라미터로 넘기시면 더 편하지않을까 생각되네여..

    어차피 파라미터나 프로시저로 넘겨주는값도 변수값이지만요..

    용도별로 프로시저를 쪼갰는데

    한번 확인해보세요..

    그리고 elgal, lelgal등은 선언된곳이 없는데

    전역변수인듯 싶어서 계산식에 넣었습니다..

    설마 필드명들은 아니겠죠?

    예외처리부분은 시간상 넣지않았구요..

    아참..변수로 넘겨주는 값은 원래 업데이트전에 넣어줘야 되는것 같아

    몇가지부분은 임으로 고쳐봤습니다..

    컴파일시 에러는 나지않지만 테이블 업데이트작업은

    환경상 하지못해서..혹 에러가나면 다시 글 올려주세요..

    흠냐..정말 간만에 답변하는데 에러나면 안되는데^^



    그럼 즐거운하루되세요~





    procedure TEBProdF.gaesanClick(Sender: TObject);



    // Update SQL

    const

    ebprodt_update = 'update ebprodt set selgal = :pselgal, ' +

    ' selbot = :pselbot, ' +

    ' seldr = :pseldr, ' +

    ' seltr = :pseltr, ' +

    ' slmgal = :pslmgal, ' +

    ' slmbot = :pslmbot, ' +

    ' slmdr = :pslmdr ' ;



    // ebprodt update procedure

    procedure Ebprodt_up(selgal, selbot, seldr, seltr, slmgal, slmbot, slmdr : integer);

    begin

    with ebdm.ebqry do

    begin

    if Active then Close;

    SQL.Text := ebprodt_update;

    ParamByName('pselgal').AsInteger := selgal + elgal - lelgal;

    ParamByName('pselbot').AsInteger := selbot + elbot - lelbot;

    ParamByName('pseldr' ).AsInteger := seldr + eldr - leldr;

    ParamByName('pseltr' ).AsInteger := seltr + eltr - leltr;

    ParamByName('pselgal').AsInteger := selgal + elgal - lelgal;

    ParamByName('pslmbot').AsInteger := slmbot + lmbot - llmbot;

    ParamByName('pslmdr ').AsInteger := slmdr + lmdr - llmdr;

    ExecSQL;

    end;

    end;



    begin

    with ebdm.EBProdT do

    begin

    while not Eof do

    begin

    // 업데이트 프로시져 실행

    Ebprodt_up(ebdm.EBProdT['selgal'],

    ebdm.EBProdT['selbot'],

    ebdm.EBProdT['seldr' ],

    ebdm.EBProdT['seltr' ],

    ebdm.EBProdT['slmgal'],

    ebdm.EBProdT['slmbot'],

    ebdm.EBProdT['slmdr' ]);

    Next;

    end;

    end

    end;











    장성호 wrote:

    > 잘아시는분 도움좀 부탁드립니다.

    >

    > 재고계산을 하기위해 아래와 같은 문장을 구성했는데 UPDATE문에서 변수선언에러가

    > 발생합니다. 변수는 어떻게 선언해야 하는가요 ?

    >

    > procedure TEBProdF.gaesanClick(Sender: TObject);

    > var m_selgal,m_selbot,m_seldr,m_seltr,m_slmgal,m_slmbot,m_slmdr : integer;

    > begin

    >

    > while not ebdm.EBProdT.Eof do

    > begin

    > ebdm.ebqry.close;

    > ebdm.ebqry.sql.clear;

    > ebdm.ebqry.sql.add('update ebprodt set selgal = m_selgal + elgal - lelgal,');

    > ebdm.ebqry.sql.add(' selbot = m_selbot + elbot - lelbot,');

    > ebdm.ebqry.sql.add(' seldr = m_seldr + eldr - leldr,');

    > ebdm.ebqry.sql.add(' seltr = m_seltr + eltr - leltr,');

    > ebdm.ebqry.sql.add(' slmgal = m_slmgal + lmgal - llmgal,');

    > ebdm.ebqry.sql.add(' slmbot = m_slmbot + lmbot - llmbot,');

    > ebdm.ebqry.sql.add(' slmdr = m_slmdr + lmdr - llmdr');

    > ebdm.ebqry.ExecSQL;

    > m_selgal := ebdm.EBProdT['selgal'];

    > m_selbot := ebdm.EBProdT['selbot'];

    > m_seldr := ebdm.EBProdT['seldr'];

    > m_seltr := ebdm.EBProdT['seltr'];

    > m_slmgal := ebdm.EBProdT['slmgal'];

    > m_slmbot := ebdm.EBProdT['slmbot'];

    > m_slmdr := ebdm.EBProdT['slmdr'];

    > ebdm.EBProdT.Next;

    > end

    > end;

    >

  • Profile
    정지호 2000.08.21 22:13
    sql문에서 변수앞에 :를 붙여주심 될 것 같습니다.

    아래처럼요...

    도움이 되셨길 바랍니다

    ....

    .....

    ebdm.ebqry.sql.add('update ebprodt set selgal = :m_selgal + elgal - lelgal,');

    ebdm.ebqry.sql.add(' selbot = :m_selbot + elbot - lelbot,');

    ....

    ....

  • Profile
    장성호 2000.08.22 01:11
    정지호 wrote:

    > sql문에서 변수앞에 :를 붙여주심 될 것 같습니다.

    > 아래처럼요...

    > 도움이 되셨길 바랍니다

    > ....

    > .....

    > ebdm.ebqry.sql.add('update ebprodt set selgal = :m_selgal + elgal - lelgal,');

    > ebdm.ebqry.sql.add(' selbot = :m_selbot + elbot - lelbot,');

    > ....

    > ....



    답변 감사드립니다.

    근데요 elgal,lelgal은 float로 선언되어있어서 인지 '알수없는 타입'이라고 그러는데

    ....

    변수타입은 어디서 지정하나요 ?



    고맙습니다.