Hi!
Delphi6 + cxGrid(version4) + IBX + Firebird로 작업 중입니다.
Table에서 조회된 데이터를 cxGrid( Unbound Mode)에 뿌려주는데요...
//특정 칼럼의 레코드에 해당하는 값 얻기
function TForm1.GetValue(ARecordIndex, AItemIndex: Integer): Variant;
begin
Result:= tvGrid1.DataController.GetValue(ARecordIndex, AItemIndex);
end;
//데이터 조회하는 procedure
procedure TForm1.SelectData;
//데이터 뿌려주는 procedure
procedure TForm1.DisplayData;
var
i: integer;
begin
if co_SelectionMessage(data_delete_question)=ID_NO then Exit;
dm.StartTransaction;
try
with Grid1 do
begin
for i:=0 to tvGrid1.DataController.RecordCount-1 do
begin
if GetValue(i, 0)= 'False' then Continue;
S:= ' DELETE FROM tb_down'
+ ' WHERE filename=' + QuotedStr(GetValue(i, 1));
dm.ExecSQL(S);
end;
end;
dm.Commit;
except
dm.RollBack;
co_ErrorMessage('파일 송수신내역을 ' + data_delete_error);
Exit;
end;
SelectData;
end;
그리드의 첫번째 항목이 CheckBox입니다. 체크박스에 체크를 한 후 삭제버튼을 누를 때의 동작인데요.
GetValue(i, 0)에서 한두개 처리하다가 IndexOutOfRange 에러가 납니다. 별도의 예제가 없어서 cxGrid의 데모를 참조한건데 에러가 나는군요. 아시는 분 해결방법 좀 부탁드립니다.
cxGrid 좀 쓰기에 짜증이 나네요.
특이하게도 Loop 도중에 Application.ProcessMessage 를 호출하게 되면 에러가 떨어지면
요넘을 주석 처리하면 이상이 없습니다.
while not Query1.Eof do
begin
//Application.ProcessMessage; //요 코드땜에 Error 발생
{Displaying code}
Query1.Next;
end;