Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 Q&A
Delphi Programming Q&A
[10695] Re:Re:Re:Re:[질문]인디스레드에서 트랜잭션을 사용하려 합니다.
꿈의대화 [] 1330 읽음    2006-05-03 09:40
추가적으로 Database 컴포넌트 하나에 여러 Session을 사용할 수 없다는건 아닙니다.

단지 TDatabase에 Session을 바꾸게 되면 TDataBase의 연결이 끊어지게 됩니다.

위의 사항이 상관없다면 CriticalSection등을 사용하여 각 Thread별로 동기화를

시키면 되지만 속도문제가 걸린다고 하니 고려대상에서 제외시켰습니다.

좋은 결과 맺으세요.

(잘못된 답변으로 헛고생시켜드린듯 해서 쥐구멍 찾고있습니다 ^^;)

꿈의대화 님이 쓰신 글 :
: 먼저 죄송하다는 사과부터 드려야겠군요.
:
: TDataBase와 Tsession은  1:1로 대응되므로 Session은 DataBase와 같이 생성해야 합니다.
:
: 왜 갑자기 1 : n이 된다고 생각된건지 ㅡㅡ;;
:
: 잘못된 답변을 드려서 죄송할뿐이네요.
:
: ps) 참고로 SessionName을 정할땐 Random보다는 생성된 thread 의 Handle값을
:       부여해 주는게 안전할것 같습니다.
:
:
: 델짱 님이 쓰신 글 :
: : 답글 감사 드립니다.^^;
: : 아래 처럼 구현 했는데 ....
: :
: :  try
: :       session := TSession.Create(nil);
: :       session.SessionName := 'session' +  IntToStr(Random(1000));;
: :
: :       QRtmp := TQuery.Create(nil);
: :       QRtmp.SessionName :=  session.SessionName;
: :       QRtmp.DatabaseName := Database1.Databasename;
: :       session.Active := True;
: :       try
: :         Database1.StartTransaction;
: :         with QRtmp,QRtmp.SQL do begin
: :            Close;Clear;
: :            Add('insert into tmtable values(''aaa'',''bbbb'')' );
: :            EXECSQL;
: :           ...
: :           ...
: :         end;
: :         Database1.Commit;
: :       Except
: :         ON E:Exception do begin
: :           Database1.Rollback;
: :         end;
: :       end;
: :  finally
: :       QRtmp.free;
: :       session.Free;
: :  end;
: : EXECSQL 실행 부분에서 "UnKnown database : test " 라는 메세지가 나옵니다.
: : 분명 QRtmp.DatabaseName 의 값은 Database1.Databasename 로 할당
: : 되었고, Database1.Open 은  TForm1.CReate 부에서 Open 된 상태입니다.
: : 뭐가 잘 못 된건지 종일 뒤져 보아도 해결이 되지 않네요~~ ^.^
: :
: : 그럼 수고 하세요~.~
: :
: :
: :
: :
: : 꿈의대화 님이 쓰신 글 :
: : : 안녕하세요. ^^;
: : :
: : : 일단 Database는 하나만 생성하셔서 사용하셔도 되구요.
: : :
: : : 여러 Client에서 각각 Tquery를 생성하여 처리되어진다면
: : :
: : : 생성된 TQuery별로 Session을 따로 생성하셔서 작업하시면 됩니다.
: : :
: : : 그럼 수고하세요.^^;
: : :
: : : 델짱 님이 쓰신 글 :
: : : : 안녕하세요.^_^
: : : :
: : : : 인디서버 소켓, Database(BDE) 를 두고 클라이언트에서 보내온 string를
: : : : 파싱해서 ms-sql database 에 Insert , Update, delete 역활을 하는 소켓서버를
: : : : 만들려고 합니다.
: : : :
: : : : 클라인트 접속시 마다 Tqeury 를 생성해서 각 클라이언트의 요청을 처리합니다
: : : :
: : : : 그런데 한가지 염려 스러운게 있는데 Database는 1개 인데
: : : :
: : : : 클라이언트가 동시 접속해서 각각 동시 트랜잭션을 요구하면 충돌이 발생 될 것 같은데 ..
: : : :
: : : : 그렇다고 해서 DB insert, delete , update 시 동기화를 시키면 작업속도가
: : : : 많이 떨어질것 같고 ,
: : : :
: : : : 클라이언트 연결시 마다 새로운 DATABASE를 생성 연결하면 database connect시에
: : : : 시간이 많이 걸릴것 같고
: : : :
: : : : 좋은 해결 방법이 없을까요?
: : : :
: : : : database pooling 이 혹시 해결 방법이 되나요?  
: : : : 혹시 이것이 해결 방법이라면 DB Pooling 을 어떤식으로 해야 되는지
: : : : 조금의 힌트 부탁 드립니다.
: : : :
: : : : 그럼 행복한 주말 보네세요 ^.~

+ -

관련 글 리스트
10683 [질문]인디스레드에서 트랜잭션을 사용하려 합니다. 델짱 1389 2006/04/28
10687     Re:[질문]인디스레드에서 트랜잭션을 사용하려 합니다. 꿈의대화 1199 2006/05/01
10690         Re:Re:[질문]인디스레드에서 트랜잭션을 사용하려 합니다. 델짱 1199 2006/05/02
10694             Re:Re:Re:[질문]인디스레드에서 트랜잭션을 사용하려 합니다. 꿈의대화 1215 2006/05/03
10695                 Re:Re:Re:Re:[질문]인디스레드에서 트랜잭션을 사용하려 합니다. 꿈의대화 1330 2006/05/03
10696                     ^|^ 델짱 1329 2006/05/04
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.