재고관리하는 프로그램입니다.
MIINPT(입고데이타파일) ,MIHIST(재고데이타파일)이 있습니다.
[MIINPT] [MIHIST]
INPT_DATE HIST_DATE
INPT_ITEM HIST_ITEM
INPT_KUBUN HIST_KUBUN
. .
. .
. .
INPT_QTY(수량) HIST_IQTY(입고수량)
이렇게 정의되어 있습니다.
예를들면,
①번예제
INPT_DATE INPT_ITEM INPT_KUBUN ... INPT_QTY(수량)
20010724 AAAAAAA AF ... 400
②번예제
HIST_DATE HIST_ITEM HIST_KUBUN HIST_IQTY
20010724 AAAAAAA AF 500
전제조건이
INPT_DATE INPT_ITEM INPT_KUBUN 와
HIST_DATE HIST_ITEM HIST_KUBUN 이
같을시에만 가능합니다.
위의 ①과②의 예제를 보시면
①번 데이타를 삭제했을시 ②번 데이타의 HIST_IQTY의
수량에서 INPT_QTY의 수량값을 빼준값을 다시 HIST_IQTY에
MOVE시켜주는 겁니다.당연히 HIST_IQTY = 100 이 되겠죠..
그리고 INPT_QTY이 HIST_IQTY보다 클경우는 HIST_IQTY = 0
으로 해줘야 되는데 SQL문을 잘 몰라서 질문을 올립니다.
자세하게좀 설명좀 해주시면 감사하게씁니다.
xxx wrote:
> 재고관리하는 프로그램입니다.
> MIINPT(입고데이타파일) ,MIHIST(재고데이타파일)이 있습니다.
> [MIINPT] [MIHIST]
> INPT_DATE HIST_DATE
> INPT_ITEM HIST_ITEM
> INPT_KUBUN HIST_KUBUN
> . .
> . .
> . .
> INPT_QTY(수량) HIST_IQTY(입고수량)
> 이렇게 정의되어 있습니다.
> 예를들면,
> ①번예제
> INPT_DATE INPT_ITEM INPT_KUBUN ... INPT_QTY(수량)
> 20010724 AAAAAAA AF ... 400
> ②번예제
> HIST_DATE HIST_ITEM HIST_KUBUN HIST_IQTY
> 20010724 AAAAAAA AF 500
> 전제조건이
> INPT_DATE INPT_ITEM INPT_KUBUN 와
> HIST_DATE HIST_ITEM HIST_KUBUN 이
> 같을시에만 가능합니다.
> 위의 ①과②의 예제를 보시면
제일먼저 삭제할 데이타값을 변수에 미리 저장해야할것같네요
var
sINPT_DATE : STRING;
iINPT_QTY,iHIST_IQTY : Integer;
sINPT_DATE := 20010724;
iINPT_QTY := 400;
그다음 ②데이타의 양을 조회합니다.
select HIST_IQTY
from Table명
where HIST_DATE = '20010724' <<- Primarry Key
and <<- Key 가 여러개라면 Key 값을 잡으세요
근다음 Select 한 HIST_IQTY 값을 변수에 저장
iHIST_IQTY := FieldByName('HIST_IQTY').AsInteger;
> ①번 데이타를 삭제했을시 <<-- DELETE FROM 테이블명 WHERE INPT_DATE = '20010724' 해서 1번의 해당 데이타를 삭제하시고
그다음 2번 데이타를 UPDATE하시면 될것같습니다.
②번 데이타의 HIST_IQTY의
> 수량에서 INPT_QTY의 수량값을 빼준값을 다시 HIST_IQTY에
> MOVE시켜주는 겁니다. 그리고 INPT_QTY이 HIST_IQTY보다 클경우는 HIST_IQTY = 0
> 으로 해줘야 되는데 <<- Sql.Add(' UPDATE TABLE명 ');
//완전한 update문장을 실행하기전에 1번값과 2번값의 양을 비 교를 해야겠죠
if iINPT_QTY > iHIST_IQTY then
Sql.Add(' SET HIST_IQTY = 0 ')
else
Sql.Add(' SET HIST_IQTY = HIST_IQTY - :INPT_QTY');
Sql.Add(' WHERE HIST_DATE = :INPT_DATE ');
ParamByName(INPT_QTY).AsInteger := iINPT_QTY;
ParamByName(INPT_DATE).AsString := sINPT_DATE;
ExecSql;
당연히 HIST_IQTY = 100 이 되겠죠..
> SQL문을 잘 몰라서 질문을 올립니다.
> 자세하게좀 설명좀 해주시면 감사하게씁니다.
>
그럼 즐코딩을 Have a NaicDay!