Q&A

  • DBEdit를 이용한 업데이트에 있어서....
DBEdit를 사용해서 DB에 데이타를 자동으로 업데이트 할려고 합니다.

그런데 최초 업데이트 시에는 문제없이 되는데 두번째 부턴 최초 업데이트시
값이 들어있던 필드만 업데이트 되고 나머지 필드는 값을 넣어도 널값이 들어갑니다.
심지어 다른 레코드를 업데이트 할때도 나머지 필드는 기존 데이타가 있더라도
널값이 들어가버립니다. 그래서 데이타가 날아가버리져....ㅡㅜ
사용 DB는 오라클입니다.
무슨 방법이 없을지.... 자동으론 안되는건지...

웃긴건 테스트삼아 똑같은 소스를 DB만 ms-sql로 바꿔서 해보니깐 암 문제없이 업데이트 잘 되더군여.... ㅡ,.ㅡ
오라클에선 방법이 없을지 .... 꼭 답변 부탁드립니다.... 그럼 꾸벅..
3  COMMENTS
  • Profile
    KDDG_Cali 2003.07.02 07:57
    저도 그런현상 때문에 고생하다...
    질문을 올려도 답변이 없길래 노가다로 해결하고 있슴돠.

    쿼리의 beforepost 부분에 각 필드값을 다시 치환합니다.
    이런식으로요..

    with clientdataset1 do
    begin
           edit ;
           fieldbyname('AA').Asstring := fieldbyname('AA').Asstring ;
           fieldbyname('BB').Asstring := fieldbyname('BB').Asstring ;
           fieldbyname('CC').Asstring := fieldbyname('CC').Asstring ;
           fieldbyname('DD').Asstring := fieldbyname('DD').Asstring ;
          // 물론 for 문으로 사용할 수도 있고요....

         // 이런식으로 쿼리된 필드 전부를 다시 대입합니다.
        // 완존히 노가다죠??

    end ;




  • Profile
    박민규 2003.07.02 20:27
    역시 BeforePost에서

      with DataSet do
      begin
        for i:=0 to FieldCount-1 do
        begin
          if Fields[i].IsNull then Fields[i].AsString := '';
        end;
      end;

    전체 필드중 널인것들만 한번씩 치환해주는 방식인데...
    이방법은 어떨지 검증을 좀 부탁드립니다...
    테스트결과 이상없는것 같은데..
    이렇게 하면 노가다작업이 훨씬 줄어들것 같죠?


  • Profile
    KDDG_Cali 2003.07.02 21:41
    처음의 문제가 값이 있는데 사라지는현상이 아니었나요??
    만약 그렇다면 님처럼하는건 의미가 없을것 같은데...
    차라리
    with DataSet do
      begin
        for i:=0 to FieldCount-1 do
        begin
          fieldbyname(Fields[i].FieldName).Asstring := fieldbyname(Fields[i].FieldName).Asstring ;  // 그냥 POST 되기 이전의 값으로 치환하는게 더 확실할 듯 싶네요.
        end;
      end;