<체크박스 입력시>
repeat
sId := FrmDM.qryTmp.FieldByName('id').AsString; ---->1
//sId := '11111'; ---->2
sName := FrmDM.qryTmp.FieldByName('name').AsString;
checkbox.AddItem( sName, TObject(PChar( sId )));
until FrmDM.qryTmp.FindNext() <> true;
<체크박스 조회시>
PChar(checkbox.Items.Objects[0]) 를 보여줌...
체크박스에 access db에서 값을 읽어와서 넣어줍니다.
그런데 문제는 입력시에 1번과 같이 하면 조회때 이상한 쓰레기 값들이 나오고
2번과 같이 하면 11111로 제대로 나옵니다.
포인터가 잘못지정되는지 null 값과 관련이 있는건지....
암튼 1번 방법이 뭐가 잘못됐는지요...
한수 가르침을.....
우선 체크 박스가 아니라 CheckListBox에 넣으시는것 같구요.
AddItem(Item: String; AObject: TObject);
의 형태의 메소드인데, AObject는 TObject 형태 입니다.
즉, 포인터라는 것이지요. TObject 형태의 객체를 생성해서 Create 해서 사용하던지,
아니면 메모리를 직접 할당해 준 다음에 그 포인터를 TObject 형태로 변환해서 저장한다던지
하셔야 하는데 메모리 할당한 부분도 없고 단지 TObject(PChar(sId)) 와 같은 형태로만 하시면
안되요..
특히 sId가 Local 변수일 경우에는 나중에 그 값이 뭐가 나올지 장담할 수 없어요.
2번처럼했을때 제대로 나온다는것은 sId가 로컬변수가 아니라면 제대로 나오겠지요.
즉 sId 가 메모리의 일정 부분을 계속 차지하고 있으니....
^^;