|
커넥션을 쓰레드가 뜰 때 마다 매 번 만드는 것은 한마디루
'미친짓'입니다.
메모리 낭비도 엄청나고, 님이 말씀하신 것과 같은 문제들도 발생하죠.
커넥션은 메인 폼이나 메인 데이터 모듈에 하나만 만드세요.
그리고, 쓰레드에서 생성하는 TDataSet계열(TADOQuery등)에서는 이 커넥
션을 이용하면 됩니다.
최익수 님이 쓰신 글 :
: 안녕하세요?.....꾸벅....^^
: 오우....정말 오래간만에 와 보네요...
: 근데 확 달라졌네요?
: 순간 잘못들어 왔는줄 알고 나갔다가 다시 들어왔어요....^^
:
: 간만에 이렇게 들어와서 또 이상한 질문만...올리네요...에구...죄송....^^
: 다름이 아니라....하나의 프로그램에서 여러개의 Thread가 생성되서는
: mdb의 하나의 table을 읽고 쓰는데 이걸 ADO로 할때에 대해서 여쭤볼까해요....
: 그니까....더 자세히 얘기하면...
: 쓰레드가 한번 생길때 마다 하나의 TADOConnection과 TADOQuery가 생깁니다.
: 그래서 각 쓰레드는 하나의 테이블 (예로, TestTable)을 읽고 쓰는데...
: 이때, 바로 쓸때...그니까...Insert를 할때 문제가 생기더라고요....
: 에러가 발생하면서 프로그램이 멈춥니다....에러메시지가 뭐라고 나냐 하면....
: "현재 잠겨 있으므로 업데이트할 수 없습니다"
: 라고 뜹니다....아무래도 데드락이 걸리는거 같은데....
: 물론, 어떠한 Syncronize변수도 사용하지 않았읍니다...글구..
: 일부러 transaction도 걸지 않았거든요...(insert는 맨 마지막에 한번 일어나니까...
: 글구, insert문이나 update문 하나만 수행하면 transaction을 걸 필요 없는거 아닌가요?
: 알아서 처리해 주는거 아닌가요?)
: 하여튼 그래서 mdb화일있는 폴더를 보면..."Access.LockFile.9"화일이 생겨 잇어요...
: 왜 이런일이 생기는거죠? mdb는 한프로그램에서 하나의 session만 열수 있나요?
: 아니면 쓰레드에서 ADO를 쓰려면 다른 뭔가를 해줘야 하나요?
:
: 고수님들 부탁합니다....꾸벅....
: 그럼, 수고들 하시고...안녕....
:
|