procedure Tmain.FormCreate(Sender: TObject);
begin
with ibquery1 do
begin
close;
sql.clear;
sql.add('select distinct(itemno) from tbldata');
open;
end;
ibquery1.first;
while not ibquery1.Eof do
begin
cbitemno.Items.Add(ibquery1.fieldbyname('itemno').asString) ;
ibQuery1.Next ;
end ;
end; //여기까지 콤보박스에 데이터를 넣는 부분입니다.
procedure Tmain.cbitemnoChange(Sender: TObject);
begin
with ibquery2 do
begin
SQL.Clear;
sql.add('select * from tbldata');
sql.add('where itemno = "+cbitemno.Text+" ');
if not prepared then prepare;
open;
end;
edplant.Text:=ibquery2.fieldByName('plant').asstring;
// 이밑으로 내용을 표현하려고 합니다.
end;
end.
1. 내용를 보니 디비콤보박스를 왜 쓰시려구 하는지 모르겠네요!
저라면 그냥 콤보박스를 쓰고 거기에 아이템을 추가 하겠습니다.
왜냐하면 디비콤보박스는 데이타셋과 이동을 함께 한다는 것인데....디비콤보박스에서
보여지는 값 외에 다른것을 선택하실 수가 없을것 같은데요!
따로 데이타셋 이동 시키는 그 무엇이 있다면 모를까?
2. 쿼리문에 왜 distinct 를 쓰셨는지 모르겟네요!
itemno 값이 똑같은것이 여러개 있을수 있다는 건가요?
그렇다면 나중에 그 값으로 조인을 해서 쿼리를 하면 해당되는 값이 여러개가 발생될테고
그중에 첫번째 값만 에디트 박스에 보여주신다는 건가요?
이정도로 제 의문사항을 접고요
제가 한다면 이렇습니다.
일반 콤보박스에 값을 집어넣고 쿼리도 하나만 쓰겟습니다.
(체인지 될때마다 쿼리를 계속 한다는 것이 왠지...나름대로 사정이 있으시다면 어쩔수 없지만요)
그리고 일단 몽땅 쿼리를 한 다음에 해당 값만 Add를 하고
그런후 콤보박스 Change 이벤트에서
ibquery1.Locate 함수를 쓰겟습니다.(Locate 는 헬프나 책을 참조 아주 쉬워요)
procedure Tmain.FormCreate(Sender: TObject);
begin
with ibquery1 do
begin
close;
sql.clear;
sql.add('select * from tbldata');
open;
end;
ibquery1.first;
while not ibquery1.Eof do
begin
cbitemno.Items.Add(ibquery1.fieldbyname('itemno').asString) ;
ibQuery1.Next ;
end ;
end; //여기까지 콤보박스에 데이터를 넣는 부분입니다.
procedure Tmain.cbitemnoChange(Sender: TObject);
begin
with ibquery1 do
begin
Locate(......)
//이렇게 되면 해당하는 값으로 데이타셋이 이동됩니다. 그런후
//각 해당 에디트에 값을 넣는 거지요!
//또는 해당 값을 쿼리....
edplant.Text:= fieldByName('plant').asstring;
.....
.....
end;
end.
위와 같이 하시면 별 어려움이 없을것으로 사료됩니다.
각 해당 에디트에 값을 뿌리시기 귀찮으시면
DBEdit 를 쓰셔도 되겠죠....(DBEdit 의 프라퍼티에 몇개만 설정하시면 되니까요!)
TDBComboBox연결된 Dataset과 나머지 컨트롤들의 dataset이 틀릴경우 간단하게 처리할려면
두 테이블을 Master-Detail관계로 관계를 맺어주면 쉽게 해결 할 것 같내요...
그럼..