추가적으로 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 을 어떤식으로 해야 되는지
: : : : 조금의 힌트 부탁 드립니다.
: : : :
: : : : 그럼 행복한 주말 보네세요 ^.~
|