DBGrid를 qrInventory(ADO Query)에 연결하고, Query의 특정한 필드의 값을 fldItem(ComboBox) 추가하여 List를 만드려고 합니다. 아래와 같이 코딩하니 잘 작동합니다. 그런데, 이 루틴을 돌때 마다 DBGrid가 Query와 같이 처음부터 끝까지 이동을 합니다. DBGrid는 첫줄에서 이동하지 않고 Query만 루트를 돌아 특정값들을 ComboBox에 추가 할 수 있는 방법이 없는지요?
if qrInventory.Active then qrInventory.Close;
with qrInventory do
begin
SQL.Clear;
SQL.Add('SELECT ItemNum AS ItemNo,Dept_ID AS Dept,ItemName AS Name1,'+
'ItemName_Extra AS Name2,Price,In_Stock AS Invetory,'+
'Inv_Num_Barcode_Labels AS Labels FROM Inventory');
if sDept <> '' then
begin
SQL.Add('WHERE Dept_ID = :sDept');
Parameters.ParamByName('sDept').Value := sDept;
end;
Open;
First;
if not isEmpty then
fldItem.Items.Clear;
for i := 0 to RecordCount - 1 do
begin
sItem := FieldByName('ItemNo').AsString;
fldItem.Items.Add(sItem);
Next;
end;
end;
한가지 더 질문이 있습니다. ComboBox에서 선택된 값의 레코드을 DBGrid에 자동선택하려면 어떻게 해야하는지요? 아래와 같이 Locate을 이용하\였습니다. 그런데, 'Could not covert variant of type (Array Variant) into type (string)'이라는 에러가 생기고 실행이 않됩니다. Locate에 관한 질문을 찾아 보니 Delphi 6에선 잘 되는데 Delphi 7에선 에러가 생긴다고 하던데 그에 대한 답변이 없더군요. Locate 구문을 쓸수 없다면 다른 방법이 있는지요?
qrInventory.Locate('ItemNo',VarArrayOf([fldItem.Text]),[loCaseInsensitive]);
델 7의 ADO 콤포를 사용해보지 않아서 모르겟는데, 아마도 DisableControls, EnableControls 라는 메소드가 있을껍니다.
레코드포인트를 이동하기전에 DisableControls 를 그리고 마지막에 EnableControls를 호출하시면 됩니다.
그리고 Locate 문은...
qrInventory.Locate('ItemNo',fldItem.Text,[loCaseInsensitive]);
이렇게 한번 해보시죠?
그럼..