DBGrid에 Table을 select하여 출력하는 것입니다.
아래와 같이 했는데 DBGrid에 데이타가 출력이 되지 않습니다.
물론 Table에는 조건에 맞는 데이타는 존재하고 있어요..
DBGrid에는 table필드 중 2개 필드만 출력해 주고,
폼이 생성될 때 조건에 관계없이 모두 출력이 되도록 연결을 하였습니다.
그리고 폼의 콤보 박스 값에 따라 조건에 맞는 것만 출력을 해주는 것으로
했는데 잘 안되고 있어요...
고수님의 도움을 요청합니다.
procedure TSeqInqForm.ComboBox1Change(Sender: TObject);
begin
Case StrToInt(copy(TComboBox(Sender).Text,1,2)) Of
00:begin
combobox2.Items.Clear;
combobox2.Enabled := True;
combobox2.Text := '';
01:begin
combobox2.Items.Clear;
combobox2.Enabled := False;
combobox2.Text := '';
w_item_kb := '01';
end;
end;
Stock_code_inq;
end;
procedure Stock_code_inq;
var
i,ii :integer;
begin
Try
queryi1 := Tquery.create(application);
queryi1.DatabaseName := 'DBTEST';
if (w_item_kb = '00') or (w_item_kb = '') then
wk_sql := ' Select * from TT_000_IF ' +
' order by St_kbn1, St_kbn2 '
else
if (w_item_kb = '01') or (w_item_kb = '02') then
wk_sql := ' Select * from TT_000_IF ' +
' where St_kbn1 = :sb1 ' +
' order by St_code '
else wk_sql := ' Select * from TT_000_IF ' +
' where St_kbn2 = :sb2 ' +
' order by St_code ';
// wk_sql의 값이 두번째입니다. wk_item_kb => '01'
with queryi1 do
begin
Close;
SQL.Clear;
SQL.Add(wk_sql);
if (w_item_kb = '00') or (w_item_kb = '') then
else
if (w_item_kb = '01') or (w_item_kb = '02') then
queryi1.params.ParamByName('sb1').Value := w_item_kb
else
queryi1.params.ParamByName('sb2').Value := w_item_kb;
try
open;
except
on E: EDBEngineError do
begin
sterr_no := inttostr(E.Errors[0].ErrorCode);
sterr_pg := 'SeqInq';
sterr_tb := 'TT_100_IF';
sterr_mg := E.Message;
w_return := 'S100';
Error_msg := sterr_no + ' : ' +
sterr_pg + ' : ' +
sterr_tb + ' : ' +
sterr_mg + ' : ' +
w_return;
TEST_error(Error_msg);
end;
on E: Exception do
begin
sterr_pg := 'SeqInq';
sterr_tb := 'TT_100_IF';
sterr_mg := E.Message;
w_return := 'S101';
Error_msg := sterr_no + ' : ' +
sterr_pg + ' : ' +
sterr_tb + ' : ' +
sterr_mg + ' : ' +
w_return;
TEST_error(Error_msg);
end;
end;
end;
EndFlag := false;
while (not queryi1.eof) and (EndFlag = false) do begin
if queryi1.eof then EndFlag := true
else begin
with SeqInqForm do
begin
DBGrid1.Columns[0].FieldName
:= queryi1.fieldbyname('St_code').asstring;
DBGrid1.Columns[1].FieldName
:= queriy1.fieldbyname('St_name').asstring;
i := i +1;
end
end;
queryi1.next;
end; // while end
finally
queryi1.free;
end;
// * 'i'의 값이 56이 나왔습니다.
end;
DBGrid는 기본적으로 연결된 DataSource와 함께 동작하도록 되어 있습니다.
폼이 생성될때는 DBGrid와 연결된 Query 컴포넌트(DataSource)에서 모든 데이터를 읽어오시는 것 같은데....
폼의 콤보 박스 값에 따라 조건에 맞는 것만 출력하실때는 연결된 쿼리컴포넌트를 쓰시지 않고 따로 쿼리 컴포넌트를 생성하셔서 하는것 같네요...
DBGrid와 연결된 쿼리 컴포넌트에서 SQL을 실행하시던가, 생성한 쿼리컴포넌트와 DataSource를 연결해주시면 해결될것 같네요...
^^ 항상 즐코하세요...