Q&A

  • SQL Update문제 -지저분한 소스지만 부탁드립니다.
회원등록 테이블에서 신규회원만을 선택

for문으로 돌면서 그 회원의 직판, 팀장, 등을 찾아서

수당을 지급할수 있게 만들려고 합니다.



구조는

for

qryTemp 직판계산

qryTemp 팀장계산

qryTemp 장려수당 계산

Next



qryCustomer 는 customer table에서 신규회원을 선택하고

for i:=0 to qryCustomer.recordCount -1로 루프를 합니다.

for문안에서 해당 회원의 직판, 팀장 등을 찾아서 수당을 올리고,

수당발생 자들을 정보를 정산테이블에 입력시켜줍니다.



먼저 정산테이블의 수당발생자의 정보가 있는지 없는지를 검사한 후

없다면

qryTemp.SQL.Text:='INSERT INTO ....';

있다면

qryTemp.SQL.Text:='UPDATE Account Set ....' ;

ExecSQL



이런식으로 직판, 팀장 ,추천인 등의 수당을 계산해 줄려고하는데

실행을 시켜주면 계산하는척하면서 정작 Account Table에는

전혀 값이 올라가있지 않습니다.

아예 아무값도 올라가지 않는다면 제 잘못을 찾기 가 쉬웠을텐데

처음 계산값인 직판수당은 또,계산이 되는군요



잠을못자서 그런지 제법 횡설수설을 해버린거같은데,

밑에 지저분해서 보여주긴 싫지만, 급한 마음에 소스일부를 올립니다.

잘못된 부분이나, 아님 좀더 쉽게 문제를 해결할수 있는 방법이있다면

한수 지도를 부탁드립니다.

고수님들의 많은 관심 부탁드립니다.





//Account db에 장려수당 정보가 있는지 없는지를 검사

if qryTemp1.Active then

qryTemp1.Close;

qryTemp1.SQL.Clear;

qryTemp1.SQL.Text:='Select * From account WHERE Num=:Num;

qryTemp1.ParamByName('Num').AsString:=qryPromote.FieldByName('Num').AsString;

qryTemp1.Open;



//장려가 존재할때만 실행

if qryPromote.RecordCount > 0 then

begin

qryTemp.SQL.Clear;

if qryTemp1.RecordCount = 0 then

begin

qryTemp.SQL.Text:='INSERT INTO account (Num, Name, ADate, PromotePay) VALUES (:Num, :Name, :ADate, :Pay)';

qryTemp.ParamByName('Num').AsString := qryPromote.FieldByName('Num').ASString;

qryTemp.ParamByName('Name').AsString := qryPromote.FieldByName('Name').AsString;

qryTemp.ParamByName('ADate').AsString := FormatDateTime('yyyy-mm-dd', dtpADate.Date);

qryTemp.ParamByName('Pay').AsInteger := PPay;



end else

begin

qryTemp.SQL.Text := 'UPDATE account SET PromotePay=PromotePay+:Pay WHERE Num=:Num';

qryTemp.ParamByName('Pay').AsInteger := PPay;

qryTemp.ParamByName('Num').AsString := qryPromote.FieldBYName('Num').AsString;

end;

qryTemp.ExecSQL;

end;

1  COMMENTS
  • Profile
    mafioso 2000.09.27 03:58
    제 생각에 문제는 qryTEMP.RecordCount 에 있습니다.



    이렇게 해보심이 어떨런지...



    with qryTEMP do begin

    First;



    while not EOF do begin

    //반복처리부분

    Next;

    end;

    end;







    (급)부탁 wrote:

    > 회원등록 테이블에서 신규회원만을 선택

    > for문으로 돌면서 그 회원의 직판, 팀장, 등을 찾아서

    > 수당을 지급할수 있게 만들려고 합니다.

    >

    > 구조는

    > for

    > qryTemp 직판계산

    > qryTemp 팀장계산

    > qryTemp 장려수당 계산

    > Next

    >

    > qryCustomer 는 customer table에서 신규회원을 선택하고

    > for i:=0 to qryCustomer.recordCount -1로 루프를 합니다.

    > for문안에서 해당 회원의 직판, 팀장 등을 찾아서 수당을 올리고,

    > 수당발생 자들을 정보를 정산테이블에 입력시켜줍니다.

    >

    > 먼저 정산테이블의 수당발생자의 정보가 있는지 없는지를 검사한 후

    > 없다면

    > qryTemp.SQL.Text:='INSERT INTO ....';

    > 있다면

    > qryTemp.SQL.Text:='UPDATE Account Set ....' ;

    > ExecSQL

    >

    > 이런식으로 직판, 팀장 ,추천인 등의 수당을 계산해 줄려고하는데

    > 실행을 시켜주면 계산하는척하면서 정작 Account Table에는

    > 전혀 값이 올라가있지 않습니다.

    > 아예 아무값도 올라가지 않는다면 제 잘못을 찾기 가 쉬웠을텐데

    > 처음 계산값인 직판수당은 또,계산이 되는군요

    >

    > 잠을못자서 그런지 제법 횡설수설을 해버린거같은데,

    > 밑에 지저분해서 보여주긴 싫지만, 급한 마음에 소스일부를 올립니다.

    > 잘못된 부분이나, 아님 좀더 쉽게 문제를 해결할수 있는 방법이있다면

    > 한수 지도를 부탁드립니다.

    > 고수님들의 많은 관심 부탁드립니다.

    >

    >

    > //Account db에 장려수당 정보가 있는지 없는지를 검사

    > if qryTemp1.Active then

    > qryTemp1.Close;

    > qryTemp1.SQL.Clear;

    > qryTemp1.SQL.Text:='Select * From account WHERE Num=:Num;

    > qryTemp1.ParamByName('Num').AsString:=qryPromote.FieldByName('Num').AsString;

    > qryTemp1.Open;

    >

    > //장려가 존재할때만 실행

    > if qryPromote.RecordCount > 0 then

    > begin

    > qryTemp.SQL.Clear;

    > if qryTemp1.RecordCount = 0 then

    > begin

    > qryTemp.SQL.Text:='INSERT INTO account (Num, Name, ADate, PromotePay) VALUES (:Num, :Name, :ADate, :Pay)';

    > qryTemp.ParamByName('Num').AsString := qryPromote.FieldByName('Num').ASString;

    > qryTemp.ParamByName('Name').AsString := qryPromote.FieldByName('Name').AsString;

    > qryTemp.ParamByName('ADate').AsString := FormatDateTime('yyyy-mm-dd', dtpADate.Date);

    > qryTemp.ParamByName('Pay').AsInteger := PPay;

    >

    > end else

    > begin

    > qryTemp.SQL.Text := 'UPDATE account SET PromotePay=PromotePay+:Pay WHERE Num=:Num';

    > qryTemp.ParamByName('Pay').AsInteger := PPay;

    > qryTemp.ParamByName('Num').AsString := qryPromote.FieldBYName('Num').AsString;

    > end;

    > qryTemp.ExecSQL;

    > end;