Q&A

  • 델파이 고수님들 꼭좀 부탁드립니다. 이 부분에서 지금 몇일동안..못하고 있어요
화면에는 dbgrid가 있습니다. 내가 특정한 레코드를 선택후 버튼을 누르면 아래 문장이 실행이 되어서 하나의 레코드가 삭제가 되는데. dbgrid에서는 삭제가 잘 됩니다.

그런데 실질적인 database에서는 적용이 되지 않아 계속 실제 디비에서는 데이타가 그대로 있습니다.

설정은 database1 <--여기서 translsolation = tidirtyread 로 하고(다른것도 해봤음)

updatesql도 연결을 해놨고. 별에 별거 다 해봤습니다.

아래 어떤분이 인덱스키 설정하라해서 그 키도 설정해봤습니다.

그런대도...안됩니다...대체 뭐가 문제에요?





dm.Database1.StartTransaction;

try

dm.qr.Delete;

dm.Database1.Commit;

except

dm.Database1.RollBack;

end;



3  COMMENTS
  • Profile
    김광섭 2001.02.02 20:25
    맥스맨 wrote:

    > 화면에는 dbgrid가 있습니다. 내가 특정한 레코드를 선택후 버튼을 누르면 아래 문장이 실행이 되어서 하나의 레코드가 삭제가 되는데. dbgrid에서는 삭제가 잘 됩니다.

    > 그런데 실질적인 database에서는 적용이 되지 않아 계속 실제 디비에서는 데이타가 그대로 있습니다.

    > 설정은 database1 <--여기서 translsolation = tidirtyread 로 하고(다른것도 해봤음)

    > updatesql도 연결을 해놨고. 별에 별거 다 해봤습니다.

    > 아래 어떤분이 인덱스키 설정하라해서 그 키도 설정해봤습니다.

    > 그런대도...안됩니다...대체 뭐가 문제에요?

    >

    >

    > dm.Database1.StartTransaction;

    > try

    > dm.qr.Delete;

    > dm.Database1.Commit;

    > except

    > dm.Database1.RollBack;

    > end;

    >

    어제도 본 질문이라서 몇자 적어요.

    보통 코딩할 때 자신은 분명히 수정을 했는데 프로그램에는 반영이 안되는 경험을 누구나 한 번쯤 하게되죠.

    이러면 대개 열나죠 코딩 하기두 싫구 계속 보고 있으면 열만 더 나죠 =="



    특별한 방법이 없습니다.

    아예 새로 폼을 만들어서 첨부터 새마음으로 하던지...

    아니면 코딩 젤 처음부터 하나하나 꼼꼼히 찾아가면서 하던지...



    제가 경험한 바로는 여튼 컴은 거짓말 안한다는거죠. 대부분이 사용자의 아주 사소한 실수(==")가 대부분이라는거죠.

  • Profile
    맥스맨 2001.02.02 20:30
    테스트 할려고 만든 아주 간단한 전체 소스 입니다.

    그런데 이것도 안되네요..ㅠ.ㅠ

    컴포넌트는 쿼리,데이타소스,업데이트쿼리,데이타베이스 4개를 사용하였고 디비그리드사용하였습니다.

    변경사항은 query1에서 cachedupdate = true, requestlive = true, updatemode = upwhereall, updateobject = updatesql, constrained = false, autorefresh = false입니다

    database1 에서는 translsolation = tidirtyread, readonly = false, exclusive = false입니다...



    정말..알수가 없네요..ㅠ.ㅠ제가 능력이 너무 딸리나요..ㅠ.ㅠ







    unit test;



    interface



    uses

    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    Db, DBTables, StdCtrls, Grids, DBGrids;



    type

    TForm1 = class(TForm)

    DBGrid1: TDBGrid;

    Button1: TButton;

    DataSource1: TDataSource;

    Query1: TQuery;

    UpdateSQL1: TUpdateSQL;

    Database1: TDatabase;

    procedure Button1Click(Sender: TObject);

    procedure FormCreate(Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }

    end;



    var

    Form1: TForm1;



    implementation



    {$R *.DFM}



    procedure TForm1.Button1Click(Sender: TObject);

    begin

    Database1.StartTransaction;

    try

    query1.Delete;

    // dm.Qr.ApplyUpdates;

    // dm.tmp_qr.edit;

    // dm.tmp_qr.Post;

    Database1.Commit;

    except

    Database1.RollBack;

    end;

    end;



    procedure TForm1.FormCreate(Sender: TObject);

    begin

    query1.Close;

    query1.SQL.Clear;

    query1.SQL.add('select * from tmp_kyj_file_evt ');

    query1.open;

    end;



    end.

  • Profile
    조덕진 2001.02.02 22:49
    안녕하세요. 델초봅니다.



    TQuery1의 RequestLive := False; 로 설정하세요.

    그리고, TUpdateSQL의 SQL문을 확인해보세요.

    키값 설정에 따라 문제가 발생할 수 있습니다.(제 개인적인 경험에 따르면)

    여기서 말하는 키값이란, TUpdateSQL을 사용할때 기본적으로 3가지의 이벤트가

    발생됩니다. Insert, Modify, Delete이죠. 이 3가지 작업을 할때 비교할

    대상을 키값이라 보시면 됩니다. 즉 select할때 where절과 같은거죠.



    제가 예전에 이와 비슷한 질문을 하신 분이 계셔서, 간단한 소스를

    작성했었는데, 찾아보고 있으면, 메일로 보내드리죠.



    그럼..



    맥스맨 wrote:

    > 테스트 할려고 만든 아주 간단한 전체 소스 입니다.

    > 그런데 이것도 안되네요..ㅠ.ㅠ

    > 컴포넌트는 쿼리,데이타소스,업데이트쿼리,데이타베이스 4개를 사용하였고 디비그리드사용하였습니다.

    > 변경사항은 query1에서 cachedupdate = true, requestlive = true, updatemode = upwhereall, updateobject = updatesql, constrained = false, autorefresh = false입니다

    > database1 에서는 translsolation = tidirtyread, readonly = false, exclusive = false입니다...

    >

    > 정말..알수가 없네요..ㅠ.ㅠ제가 능력이 너무 딸리나요..ㅠ.ㅠ

    >

    >

    >

    > unit test;

    >

    > interface

    >

    > uses

    > Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    > Db, DBTables, StdCtrls, Grids, DBGrids;

    >

    > type

    > TForm1 = class(TForm)

    > DBGrid1: TDBGrid;

    > Button1: TButton;

    > DataSource1: TDataSource;

    > Query1: TQuery;

    > UpdateSQL1: TUpdateSQL;

    > Database1: TDatabase;

    > procedure Button1Click(Sender: TObject);

    > procedure FormCreate(Sender: TObject);

    > private

    > { Private declarations }

    > public

    > { Public declarations }

    > end;

    >

    > var

    > Form1: TForm1;

    >

    > implementation

    >

    > {$R *.DFM}

    >

    > procedure TForm1.Button1Click(Sender: TObject);

    > begin

    > Database1.StartTransaction;

    > try

    > query1.Delete;

    > // dm.Qr.ApplyUpdates;

    > // dm.tmp_qr.edit;

    > // dm.tmp_qr.Post;

    > Database1.Commit;

    > except

    > Database1.RollBack;

    > end;

    > end;

    >

    > procedure TForm1.FormCreate(Sender: TObject);

    > begin

    > query1.Close;

    > query1.SQL.Clear;

    > query1.SQL.add('select * from tmp_kyj_file_evt ');

    > query1.open;

    > end;

    >

    > end.