Q&A

  • 다중 사용자용 DB 프로그램을 개발할려면? 조언 부탁드립니다.
지금까지 로컬용으로 프로그램을 개발하다가 다중 사용자용 DB 프로그램을



개발할려고 합니다. DB는 MSSQL 7.0과 델파이5.0 에 ADO를 사용해서 쓸려고



하는데 델파이와 MSSQL 연결을 시켰는데 다중 사용자로 처리를 할려니까



어떻게 구현을 해야할지 방법을 모르겠네요. DB그리드상에서 자료를 처리하는데



동시에 같은 레코드의 자료를 A라는 사용자는 삭제할수도 있고 B라는 사용자는



수정할 수도 있지 않습니까? 먼저 A라는 사용자가 삭제를 해 버리면



B라는 사용자는 수정할 수 없는데 어떻게 구현을 해야 에러 없이 자료를 삭제,수정이



가능할까요? 대충 귀뜸이라도 이렇게 구현하고 조언을 부탁 드립니다.

2  COMMENTS
  • Profile
    won 2000.11.15 05:27
    우선은 ADO를 테스트해보고, 완벽하게 이해하시기 바랍니다.

    CursorType, LockType을요..

    정답은 가까운 곳에 있습니다.



    다중사용자프로그램에서, 에레메세지 표시는 필수죠.



    (아래처럼 POST시 메세지 표시만 해주시면 됩니다.)

    (ADO는 MDAC가 꼭 핸들링 하기 때문에, 미리 쿼리를 돌려서, 레코드가

    있는지 체크한 다음

    해야 할겁니다. )

    select*from .. where () 로 해서 존재하는 레코드인지 체크.



    Try POSTorINSERT 처리

    Except "이미 삭제된 레코드이거나.." 메세지 표시





    아래는 IBExpress 사용시인데, ADOExpress 사용시에도 거의 같습니다.



    procedure TForm1.IBQuery1PostError(DataSet: TDataSet; E: EDatabaseError;

    var Action: TDataAction);

    begin

    showmessage('알립니다. : 쓰기에러입니다. 확인을 누른후 재시도 해주세요'+#13+

    '수정중이었다면'+#13+

    '[다른사용자가 같은 레코드를 편집] 또는'+#13+

    '[이미 삭제된 레코드]'+#13+#13+

    '추가중이었다면'+#13+'[키 값 중복 Key Violation]');

    //위에러처리도 DBGrid에서 화살표키로 저장한경우엔, 소용이없다

    //"deadlock.." 메세지 박스가 위메세지표시한다음, 뜨기때문에..

    //(되긴된다. "deadlock.." 박스하나 더뜬다뿐.. 다른문제는 없으므로..)

    //프로그램이 종료되는건아니다.

    //그리드직접편집 버튼 하나 만들자!!.



    //화살표키는 (자기만저장)이다. 다른사용자한테 보여지지 않는다.

    //그래도 db에 직접쓰긴쓴다.

    //저장버튼(Commit)은 다른사용자에게 보여지게하기위해서다.(전역저장)



    //위 에러처리(안내)는 DBGrid에서 직접편집안하고 별도입력폼과 코딩으로 할때는

    //Commit한 후에(다른사용자 편집한걸 가져오므로), 저장(쓰기)하면 에러안난다.







    //이걸로 임시로 에러 막았는데,

    // 화면에 계속 뿌릴려면, 타이머 사용해야 한다.



    //

    //윌리에서 발생했던 공유문제 총정리.

    //Post시 에러나면 EIBInterbase Error message를 가로챈다.

    //Post시 에러는 Edit (수정)에러 밖에 없다.=== 같은 레코드를 수정할 경우

    // === 다른 레코드 수정시는 에러안남

    // Insert (삽입)는 에러안남

    // Delete (삭제)는 삭제하기전에 Commit한다음 삭제하면 됨.

    // (아니다. 삭제한다음 Commit => 다른컴에서 삭제한 레코드를

    // 읽어오지 않은 상태에서 어떤 처리를 하면 에러난다.. <==

    // <==이것은 무조건 삽입,삭제시에 레코드셋을 새로 읽어오도록

    // <==수정시는 아래 showmessage

    // 즉 커미트 +(ibquery.close)+ ibquery.open하도록 <== ()는 생략가능(커미트하면 자동적으로 close되므로)



    // 수정,삽입시 공통으로 발생할수 있는 에러는 바로 KEY VIOLATION

    // showmessage('프로그래머 권원재');







    end;





    강은영 wrote:

    > 지금까지 로컬용으로 프로그램을 개발하다가 다중 사용자용 DB 프로그램을

    >

    > 개발할려고 합니다. DB는 MSSQL 7.0과 델파이5.0 에 ADO를 사용해서 쓸려고

    >

    > 하는데 델파이와 MSSQL 연결을 시켰는데 다중 사용자로 처리를 할려니까

    >

    > 어떻게 구현을 해야할지 방법을 모르겠네요. DB그리드상에서 자료를 처리하는데

    >

    > 동시에 같은 레코드의 자료를 A라는 사용자는 삭제할수도 있고 B라는 사용자는

    >

    > 수정할 수도 있지 않습니까? 먼저 A라는 사용자가 삭제를 해 버리면

    >

    > B라는 사용자는 수정할 수 없는데 어떻게 구현을 해야 에러 없이 자료를 삭제,수정이

    >

    > 가능할까요? 대충 귀뜸이라도 이렇게 구현하고 조언을 부탁 드립니다.

  • Profile
    AONE 2000.11.15 02:09
    정확한 답변인지는 모르지만...

    첫번째 테이블락을 설정하는 방법

    두번째 등록, 수정, 삭제시 해당 테이블의 자료를 검색하는 방법등 여러가지가 있습니다.

    그건 님께서 어떤방법이 편한것인지 확인후 했으면 합니다.



    강은영 wrote:

    > 지금까지 로컬용으로 프로그램을 개발하다가 다중 사용자용 DB 프로그램을

    >

    > 개발할려고 합니다. DB는 MSSQL 7.0과 델파이5.0 에 ADO를 사용해서 쓸려고

    >

    > 하는데 델파이와 MSSQL 연결을 시켰는데 다중 사용자로 처리를 할려니까

    >

    > 어떻게 구현을 해야할지 방법을 모르겠네요. DB그리드상에서 자료를 처리하는데

    >

    > 동시에 같은 레코드의 자료를 A라는 사용자는 삭제할수도 있고 B라는 사용자는

    >

    > 수정할 수도 있지 않습니까? 먼저 A라는 사용자가 삭제를 해 버리면

    >

    > B라는 사용자는 수정할 수 없는데 어떻게 구현을 해야 에러 없이 자료를 삭제,수정이

    >

    > 가능할까요? 대충 귀뜸이라도 이렇게 구현하고 조언을 부탁 드립니다.

    • 김일영
      2000.11.15 00:56
    • 김민석(델초보)
      2000.11.15 18:13
    • 김일영
      2000.11.15 18:14
    • 김민석(델초보)
      2000.11.15 02:47
    • 김일영
      2000.11.15 04:16
    • 김민석(델파이 초보)
      2000.11.15 08:01
    • 초보왕
    • 2000.11.15 00:44
    • 1 COMMENTS
    • /
    • 0 LIKES
    • AONE
      2000.11.15 02:04
      정확한 답변인지 모르지만....LOCATE 를 사용하시면 찾을수 있을것 같은데... 초보왕 wrote: > 델 초보...
    • 초보자
    • 2000.11.14 23:16
    • 1 COMMENTS
    • /
    • 0 LIKES
    • Azurei
      2000.11.15 02:57
      초보자 wrote: > 한 RichEdit에서 한 라인당 80Byte가 입력이 되면 자동으로 > 다음 라인으로 가게끔 할...
    • 강은영
    • 2000.11.14 22:42
    • 2 COMMENTS
    • /
    • 0 LIKES
    • won
      2000.11.15 05:27
      우선은 ADO를 테스트해보고, 완벽하게 이해하시기 바랍니다. CursorType, LockType을요.. 정답은 가까운 ...
    • AONE
      2000.11.15 02:09
      정확한 답변인지는 모르지만... 첫번째 테이블락을 설정하는 방법 두번째 등록, 수정, 삭제시 해당 테이...
    • 이용희
      2000.11.16 19:46
      castle road wrote: > 볼랜드 BDE 관리자(Admin...) configuration 탭에서 > [-]Configuration > [-...
    • 박인우
      2000.11.15 17:58
      음 제생각에는 혹시 윈98에 오라클 클라이언트를 설치 하셨나요? 확실한 답변은 아니지만 저는 아직 한...
    • 최명관
    • 2000.11.14 22:01
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최진환
      2000.11.15 03:14
      최명관 wrote: > 동적으로 생성할 폼을 avaliable form 으로 지정하고 > > 그 폼을 생성할때 > >...
    • Azurei
      2000.11.15 01:00
      최명관 wrote: > 동적으로 생성할 폼을 avaliable form 으로 지정하고 > > 그 폼을 생성할때 > >...
    • 바보감자
      2000.11.14 23:01
      이야.... 정말 되넹 ㅜ.ㅜ흑흑 정말 감사하구여 select a, max(b) from xxx group by a 이거 다른...
    • 공성환
      2000.11.14 21:55
      select a, max(b) from xxx group by a 하면 님이 원하시는 답변이 될것같습니다... 지금 3개의 로...
    • Azurei
      2000.11.14 21:52
      바보감자 wrote: > 안냐세염~~~~~~~~~~~~~~~ > 바보감자입니당... > 여러분.. 제가 궁금한게 있어서염. ...
    • 임성룡
    • 2000.11.14 21:47
    • 1 COMMENTS
    • /
    • 0 LIKES
    • Azurei
      2000.11.14 21:50
      임성룡 wrote: > 안녕하세요...다름이 아니라 > 버튼의 이벤트 처리를 하는데.... > 계속 누르고 있었...
    • 델러브
    • 2000.11.14 21:52
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 공성환
      2000.11.14 21:57
      예전에 제가 코디으로 무식하게 한적있는데... 검색해보세요... 소스도 올렸습니다... 델러브 wrote: > ...
    • youngae
    • 2000.11.14 20:11
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 타락천사
      2000.11.14 20:15
      안녕하세여.. 타락임다.. ^^ 라인에 넣는게 16바이16 또는 32바이32 를 넣는건가여? 아님, 유저디파...
    • youngae
      2000.11.14 23:19
      타락천사 wrote: > 안녕하세여.. 타락임다.. ^^ > > 라인에 넣는게 16바이16 또는 32바이32 를 넣는건...
    • 타락천사
      2000.11.15 02:19
      안녕하세여.. 타락임다..^^ 아래와 가치 하면 됩니다.. procedure TMainForm.Button2Click(Sender: T...
    • youngae
      2000.11.15 05:24
      아 ~~~ 감동 감동 정말 감사합니다.... 헤헤 근데 지금 저희 멜 서버가 죽어버렸어요..낼이나 돼야 확인...
    • cell
    • 2000.11.14 19:54
    • 2 COMMENTS
    • /
    • 0 LIKES
    • nilriri
      2000.11.14 22:40
      cell wrote: > LOC_NO W REPAIR_D EMP_CO MACHIN BAD_CO CHK_QTY > ------ - -------- ------- ----...
    • 공성환
      2000.11.14 22:04
      데이타 베이스가 오라클이면 인라인뷰와 디코더를 이용해서 표현하실수 있습니다... 보통이런거를 짜빠트...
    • 타락천사
      2000.11.14 20:12
      안녕하세여. 타락임다..^^ 팁모아에 제가 올려놓은 글이 있습니다... "타락천사"로 검색해 보세여.. ...
    • coolling
      2000.11.14 20:03
      자료실이나 강의실에 가면, 실력있는 고수님들이 만들어놓은 시간/날짜 계산 프로그램 소스가 있을겁니다.....
    • 어이! 허준
      2000.11.14 20:10
      버퍼 전송시 4096정도가 안정적 입니다. 8192정도로 하면 패킷을 잃어버리는 경우가 생겨서 전송 Block을 ...
    • 김하늘
      2000.11.15 00:26
      허준의원 나리 답변 감사요... 그럼 4배는 뛸수 있겠네요... 어이! 허준 wrote: > 버퍼 전송시 4096...
    • 이경문
      2000.11.19 14:40
      참고..... TCP/IP로 패킷을 전송하는 방법에는 크게 두가지가 있습니다. 첫번째 방법(안정적인 방법) ...