1、 您好:我做了一个窗体,在其中有一个Edit1、还有一个DBEdit1,有一个datasource1、query1。属性如下:
datasource1的dataset为query1。
Query1的databasename为shbx2(为SQL server中的数据库的名字),SQL属性为’select * from 单位情况表(shbx2中的一个表) where dwbh=’a00100’’  。active属性设为true。
然后我想通过edit1的onkeypress方法来直接将单位情况表中单位编号(dwbh)为edit1 中的text的单位的名称(dwmc)读出来,写入Dbedit1中,可是我如下写是出现运行错误:   Query1: field 'dwmc' not fonud.
 
代码是这样的:
procedure TfmBJForm.Edit6KeyPress(Sender: TObject; var Key: Char);
var
   dwbh1,dwbh2,dwbh3,dwbh4:string;
begin
    if key=#13 then
      begin
       dwbh1:=copy(edit6.text,1,1);
       dwbh2:=copy(edit6.text,2,5);
       dwbh3:=uppercase(dwbh1); //转换为大写形式;
       edit6.Text :=dwbh3+dwbh2;
       dwbh4:=copy(edit6.Text,1,6);
       with query1 do
         begin
          query1.Close ;
          query1.sql.Clear;
          query1.sql.add('select * from  单位情况表 where dwbh='''+edit6.text+'''');
//此处为什么要加上+ +,还有怎么会有三个引号
          dbedit1.Text :=query1.fieldbyname('dwmc').AsString ; 
          query1.ExecSQL ;
         end;
      end;
  end;
2、另外我在运行程序时为什么每次总是要求我输入用户名和密码,怎么样去掉?(这个密码好像是我的shbx2的安全登录和配置ODBC时设置的用户名和密码)。          databasename:  shbx2
          username:
          password:
 

解决方案 »

  1.   

    一、
    procedure TfmBJForm.Edit6KeyPress(Sender: TObject; var Key: Char);
    var
       dwbh1,dwbh2,dwbh3,dwbh4:string;
    begin
        if key=#13 then
          begin
           dwbh1:=copy(edit6.text,1,1);
           dwbh2:=copy(edit6.text,2,5);
           dwbh3:=uppercase(dwbh1); //转换为大写形式;
           edit6.Text :=dwbh3+dwbh2;
           dwbh4:=copy(edit6.Text,1,6);
           with query1 do
             begin
              query1.Close ;
              query1.sql.Clear;
              query1.sql.add('select * from  单位情况表 where dwbh='''+edit6.text+'''');
    //此处为什么要加上+ +,还有怎么会有三个引号
              Query1.Open ;
             if Query1.recordcounts > 0 then
              dbedit1.Text :=query1.fieldbyname('dwmc').AsString ; 
            end;
          end;
      end;
    二\
    1.BDE连接:
    1.1.通过BDE别名连接
    1.1.1.通过ODBC来连接(创建ODBC别名,人工与程序两种方式都可实现,具体请查以前的帖子)
    1.1.2.通过BDE 管理器创建BDE别名来连接
    1.1.3.在程序中创建BDE别名来连接.
    1.1.4.不创建BDE别名,通过TDatabase来实现连接.
    2.ADO连接:
    1.1.通过ODBC连接
    1.2.在设计期设置ADOConnection的ConnectString来实现
    1.3.在程序中动态实现ADOConnection的ConnectString的字符串内容,然后再连接.
    3.dbExpress连接:
    这种方法我只是试了一下,没有具体应用,感觉与ADO的用法差不多.
    4.第三方连接方法:
    第三方提供的连接数据库的方法(太多了)
      

  2.   

    1.将DBedit1的DataSource为datasource1,DataField为dwmc,去掉dbedit1.Text :=query1.fieldbyname('dwmc').AsString ; 
    dbedit可以直接实现你说的功能。
    Delphi中规定:字符串中若存在字符“'”为了区别于字符串的边界字符“'”,在写该字符串时用“''”表示一个单引号;
    query1.sql要到SQL中执行,SQL不会认识edit6.text,所以要用“+”分开
    2.用TADOconnection连接数据库,将TADOconnection的LoginPrompt属性改为false,这样就不用每次其他控件连这个ADOconnection时要求输入密码了(前提条件:链接时选中“允许保存密码”)