|
안녕하세요? 아무리 찾아도 이와 비슷한 현상에 대한 질문이 없어서 여기에 질문 올립니다.
IndySever안에서 특정 문자열을 받으면 데이터베이스(MySQL)에서 내용을 불러와 조작한 후 다시 데이터베이스에
넣는 작업을 행함에 있어서, Locate 혹은 FindKey 함수를 사용하면 해당 키필드를 찾았을 경우 그 레코드를 가르키는 걸로
알고있습니다만, 위 명령 후 바로 특정필드를 읽어오면 이전에 선택되어 있는 내용을 읽어오는 경우가 생깁니다.
그래서, 디버깅해보니 그런 현상이 생길 때는 레코드가 이전 레코드 그대로를 가르키고 있는 것이 확인되었는데요.
로케이트 함수를 부른 뒤에 바로 특정 필드를 읽어오면 찾은 곳으로 바로 가지 않는지 뭔가 제가 잘 못 쓰고 있는지 고견 부탁드립니다.
일부러 키필드를 다르게 찾으면 분명 없다고만 나오는데, 있는 키필드로 찾고 난 후에 다른 레코드를 가르키고 있으니 도저히 이해가 안됩니다.
로케이팅 함수로 찾고 난 후 수십밀리 딜레이를 준 후 읽으면 현상이 거의 안 나타나지만 이렇게 하는 것은 아니다 싶어서요.
CutData=RxBuf.SubString(3,12);
if(EQP_TBL->Locate("EQPSN", CutData, TLocateOptions()) )
{
UsrStr= EQP_TBL->FieldByName("USERS")->AsString;
EQP_TBL->Edit();
EQP_TBL->FieldByName("XUSERS")->AsString=UsrStr;
EQP_TBL->Post();
}
이렇게 흘러가는 내용인데요 . FindKey()를 써도 마찬가지더군요.
[PS] TFDTable의 AfterScroll 이벤트에 Sleep(10);으로 해결을 했는데 과연 이게 제대로 된 접근인지 궁금하네요.
뭔가 주의해야할 점이나 파이어DAT테이블을 사용함에 있어서 유의해야할 점이 있는지 답변부탁드립니다. 감사합니다.
|