在数据库中一个表中有ID 和NAME字段
在设计窗口中输入ID,但是不知道怎么才能显示相应的NAME
str:=Edit1.Text;
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select name from 学生分数表 Str=ID');
str:=fieldbyname('ID').asinteger;
j:=fieldbyname('name').asinteger;
Edit2.text:=inttostr(j);
ADOQuery1.Open;
程序始终不能实现.请高手.指点怎么样实现这个功能(具体的代码).

解决方案 »

  1.   

    str:=Edit1.Text; ADOQuery1.Close; 
    ADOQuery1.SQL.Clear; 
    ADOQuery1.SQL.Add('select name from 学生分数表 where ID=:Str');
    ADOQuery1.Parameters[0].Value:=StrToInt(Str);
    ADOQuery1.Open; with ADOQuery1 do
    begin
      str:=fieldbyname( 'ID ').asinteger; 
      j:=fieldbyname( 'name ').asinteger; //Name 会是 Integer?!!
    end;
    Edit2.text:=inttostr(j); 
      

  2.   

    procedure TfrmMain.Edit1KeyPress(Sender: TObject; var Key: Char);
    Const
      sSQL ='Select Name From StudentGrade Where ID='
    Begin
      if key =#13 then
      With ADOQuery1 do
      Begin
        Close ;
        SQL.Clear;
        SQL.ADD(sSQL+QuotedStr(Trim(Edit1.Text)));
        Open
      End;
      If ADOQuery1.RecordCount>0 then
         ADOQuery1.FieldByName('Name').AsString
      Else
         Begin
            ShowMessage('很抱歉,没有找到你要的值,请重新输入ID号');
            Edit1.Clear;
            Edit1.SetFocus; 
         End;  
    End;
      

  3.   

    procedure TfrmMain.Edit1KeyPress(Sender: TObject; var Key: Char); 
    Const 
      sSQL = 'Select Name From StudentGrade Where ID= ' 
    Begin 
      if key =#13 then 
      With ADOQuery1 do 
      Begin 
        Close ; 
        SQL.Clear; 
        SQL.ADD(sSQL+QuotedStr(Trim(Edit1.Text))); 
        Open 
      End; 
      If ADOQuery1.RecordCount >0 then 
         Edit1.Text :=ADOQuery1.FieldByName( 'Name ').AsString 
      Else 
         Begin 
            ShowMessage( '很抱歉,没有找到你要的值,请重新输入ID号 '); 
            Edit1.Clear; 
            Edit1.SetFocus;  
         End;   
    End; 哈哈,刚才少了个赋值的东东
      

  4.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
    str:string;
    begin
    with ADOQuery1 do
    begin
    try
         str:=Edit1.text;
         ADOQuery1.close;
         ADOQuery1.SQL.clear;
         ADOQuery1.SQL.add('select name from TABLE1 where ID='''+str+'''');
         ADOQuery1.Open;
         i:=fieldbyname('name').AsString;
         str:=fieldbyname('ID').AsString;
          ADOQuery1.Parameters[0].Value:=Str ;
         Edit2.Text:=i;
         Edit1.Text:=str;     finally
         end;
         end;end;
    end.
    这代码还是有错误阿.错误是ADOQuery:field 'ID'not found.
      

  5.   

    procedure TfrmMain.Edit1KeyPress(Sender: TObject; var Key: Char);  
    Const  
      sSQL =  'Select Name From StudentGrade Where ID=  '  ;
    Begin  
      if key =#13 then  
      With ADOQuery1 do  
      Begin  
        Close ;  
        SQL.Clear;  
        SQL.ADD(sSQL+QuotedStr(Trim(Edit1.Text)));  
        Open  
      End;  
      If ADOQuery1.RecordCount  >0 then  
         Edit1.Text :=ADOQuery1.FieldByName(  'Name  ').AsString  
      Else  
         Begin  
            ShowMessage(  '很抱歉,没有找到你要的值,请重新输入ID号  ');  
            Edit1.Clear;  
            Edit1.SetFocus;   
         End;    
    End;  我总是丢三落四的,上面的常量那又少了个分号
      

  6.   


    procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
    begin
          if key=#13 then //在edit1里输入后按回车键执行查询
          begin
            with adoquery1 do
              begin
              close;
              sql.clear;
              sql.add('select name from test where id=:tempid');
              parameters.ParamByName('tempid').Value:=strtoint(trim(edit1.Text));
              open;
              end;
            if adoquery1.RecordCount>0 then
              edit2.Text:=adoquery1.fieldbyname('name').AsString;
            else
              application.MessageBox('没有找到信息','提示',mb_ok+mb_iconinformation);
          end;
    end;
    end.
      

  7.   

    以上代码为 edit1的onkeypress事件进行查询。
    也可以加个button,在button的onclick事件里执行上述代码即可,也就是最外层begin和end之间的代码
      

  8.   

    以前的代码实现了,但是如果输入的ID在数据库里面没有.想让系统提示下.
    procedure TForm1.Button1Click(Sender: TObject);
    var
    str:string;
    begin
    with ADOQuery1 do
    begin
    try
         str:=Edit1.text;
         ADOQuery1.close;
         ADOQuery1.SQL.clear;
         ADOQuery1.SQL.add('select name,score,scoreduan,xianshi from TABLE1 where ID='''+str+'''');
         ADOQuery1.Open;
         If ADOQuery1.Recordset.RecordCount >0 then
         
         Edit4.Text:=fieldbyname('scoreduan').asstring;
         Edit3.Text:=fieldbyname('name').AsString;
         Edit2.Text:=fieldbyname('score').AsString;     Memo1.Text:=fieldbyname('xianshi').asstring
         else         application.MessageBox('没有找到信息','提示',mb_ok+mb_iconinformation);
         finally
         close;
         end;
         end; end;
    end.提示的错误是[Error] Unit2.pas(71): E2125 EXCEPT or FINALLY expected
    [Error] Unit2.pas(89): E2029 '.' expected but ';' found
    [Fatal Error] Project2.dpr(5): F2063 Could not compile used unit 'Unit2.pas'
      

  9.   

    TDBMemo控件与TMemo在功能有什么区别
      

  10.   

    前者是数据邦定控件,后者则是普通的Memo控件。数据邦定控件在连上数据源并设置了字段后,再打开数据源会自动显示这个字段的值。普通的Memo控件则不具备这种功能,若要和数据库交互,则只能自己手工写代码。可根据不同的情况使用不同的控件。
      

  11.   

    str:=trim(Edit1.Text); ADOQuery1.Close; 
    ADOQuery1.SQL.Clear; 
    ADOQuery1.SQL.Add( 'select id,kname from 学生分数表 Str='+quotedstr(str)); 
    ADOQuery1.Open;
    if adoqurey1.isempty
      then 
        begin
           ShowMessage(   '很抱歉,没有找到你要的值,请重新输入ID号   ') ;
            edit1.clear;edit1.setfocus;
        end
       else
    Edit2.text:=ado.fieldbyname( 'name ').asstring;
      

  12.   

    用TDBMemo控件时.怎么样清除显示在TDBMemo里文字.怎么样写代码.
      

  13.   

    每次都要数据库中查询开销很大,速度也不会太快(当数据量比较大时),建议楼主将ID与Name信息加载到内存中,每次在内存中查询,开销会降低,速度也会有所提升。
    在TForm1中声明一个私有的TStringList对象IDNameList,用以存储ID与Name值对。procedure TForm1.Create(Sender: TObject);
    begin
      IDNameList := TStringList.Create;
      with ADOQuery1 do begin
        SQL.Text := '';
        Open;
        While not Eof do begin
          IDNameList.Values[FieldByName('ID').AsString] := FieldByName('Name').AsString;
          Next;
        end;
        Close;
      end;
    end;procedure TForm1.FormDestroy(Sender: TObject);
    begin
      IDNameList.Clear;
      IDNameList.Free;
    end;procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
    var
      Index: Integer;
    begin
      if key= Chr(VK_RETURN) then begin
        Index := IDNameList.IndexOfName(Trim(TEdit(Sender).Text));
        if Index > -1
          then Edit2.Text := IDNameList.ValueFromIndex[Index]
          else ShowMessage('没有找到信息');
      end;
    end;