안냐세요?
델파이 초보입니다.
음..제가 구현하려고 하는것은요 페이지컨트롤 위에 두개 이상의
콤보박스를 가져다놓는 것인데, 그 콤보박스는 쿼리에서 가져온
결과치를 갖고 있게끔 하려고 합니다.
콤보박스가 하나일때는 문제없이 값들이 잘 나오는데
두개 이상일때는 맨 위의 값 하나만 떨렁 나오고
두번째 콤보박스부터는 해당하는 필드를 찾을수 없다는 에러메시지가 나옵니다.
첫번째 질문은 이것을 어케 해결해야하는 것인가이고요,
두번째 질문은 쿼리를 날릴때마다 쓰기가 뭐해서 procedure로 만들었는데
제가 어디선가 선언을 제대로 못했나봅니다. 아직 잘 몰라서요..^^;
소스를 올릴테니 고수님들의 조언을 바랍니다. 잘못된곳 좀 고쳐주시면 감사!!
참고로 아래 소스는 콤보박스 하나만 가지고 테스트를 한것인데요,
첫번째 질문에 해당하는 소스도 좀 알려주시면 감사하겠습니다.
unit Unit_tab;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComCtrls, Buttons, DBCtrls, Db, DBTables;
type
TForm2 = class(TForm)
PageControl1: TPageControl;
TabSheet1: TTabSheet;
BitBtn1: TBitBtn;
Query1: TQuery;
DataSource1: TDataSource;
DBComboBox1: TDBComboBox;
Label1: TLabel;
private
{ Private declarations }
public
procedure TabSheet1Show(Sender: TObject);
procedure ExeSqlwithCombo(fieldname: String);
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.DFM}
procedure TForm2.TabSheet1Show(Sender: TObject);
begin
ExeSqlwithCombo('agent_ip');
end;
procedure TForm2.ExeSqlwithCombo(fieldname: String);
begin
with query1 do
begin
close;
sql.Clear;
sql.add('select distinct :fieldname from distribute_list');
open;
end;
query1.First;
while not query1.Eof do
begin
DBComboBox1.Items.Add( query1.fieldbyName(':fieldname').asString);
query1.next;
end;
end;
end.
parameter로 전달된 fieldName을 사용하고 싶으시다면
Source 그대로 쓸 경우 문제가 되겠네요.
>sql.add('select distinct :fieldname from distribute_list');
paramByName('fieldName').AsString = fieldName;
>DBComboBox1.Items.Add(query1.fieldbyName(':fieldname').asString);
DBComboBox1.Items.Add(query1.fieldbyName(fieldname).asString);
으로 고쳐서 해보세요