有关数据库的有关问题

有关数据库的问题
表名称a
temp       h
100       10
200       20  
300       30
400       40
500       50
...
放两个edit,一个用来输入temp的值,一个用来显示对应的h的值,代码如下:
procedure   TForm1.Button1Click(Sender:   TObject);
  begin
    with   adoquery1   do
begin
    close;
    sql.Clear;
    sql.Add( 'select   h   from   a   where   h=:temp ');
    parameters.ParamByName( 'temp ').Value:=edit1.Text;
    open;
    if   adoquery1.RecordCount> 0   then
    begin
    edit2.Text:=adoquery1.fieldbyname( 'h ').AsString;

end;
  end;
  end;
但是 edit2.Text:=adoquery1.fieldbyname( 'h ').AsString;这句中的adoquery1.中fieldbyname没有,但是写出来可以运行,输入edit1后按纽edit2不显示请问错在哪里?大家帮忙看一下

------解决方案--------------------
修改一下:
procedure TForm1.Button1Click(Sender: TObject);
begin
with adoquery1 do
begin
close;
sql.Clear;
sql.Add( 'select h from a where h= ' ' '+edit1.Text+ ' ' ' ');
open;
if adoquery1.RecordCount> 0 then
begin
edit2.Text:=adoquery1.fieldbyname( 'h ').AsString;
end else ShowMessage( '数据未找到! ');
end;
end;
还有为什么表名和字段名都用单个字母呢?