unit Unit4;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, DB, ADODB;type
  TForm4 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Label5: TLabel;
    Label6: TLabel;
    Button1: TButton;
    ADOQuery1: TADOQuery;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form4: TForm4;implementation{$R *.dfm}procedure TForm4.Button1Click(Sender: TObject);
begin
     with ADOQuery1 do
     begin
        SQL.Clear;
        SQL.Add('select name from member where name =:name');
        Parameters.ParamByName('name').Value:=Edit1.Text;
        open;
        if Recordcount<>0 then
        begin
           messagedlg('用户名'+Edit1.text+'已存在',mterror,[mbok],0);
           edit1.SetFocus;
           exit;
        end;
        close;
     end;     try
      with ADOQuery1 do
      begin
        SQL.Clear;
        SQL.Add('insert into member(name,password,address,telephone)'+
                ' values(:name,:password,:address,:telephone)');
        Parameters.ParamByName('name').Value :=Edit1.Text;
        Parameters.ParamByName('password').Value :=Edit2.Text;
        Parameters.ParamByName('address').Value :=Edit3.Text;
        Parameters.ParamByName('telephone').Value :=Strtoint(Edit4.Text);
        messagedlg(SQL.Text,mterror,[mbok],0);
        ExecSQL;
      end;     except
       messagedlg('注册失败请重新注册',mterror,[mbok],0);
     end;
end;procedure TForm4.Button2Click(Sender: TObject);
begin
    close;
end;end.
上面是我的程序但是老说的SQL语句错误,但是我发现是后面的附值不进试了几种都不成功希望能帮解决这个问题,或是作个样板发到我的邮箱也行

解决方案 »

  1.   

    procedure TForm4.Button1Click(Sender: TObject);
    begin
         with ADOQuery1 do
         begin
            Close;
            SQL.Clear;
            SQL.Add('select name from member where name =:name');
            Parameters.ParamByName('name').Value:=Edit1.Text;
            open;
            if Recordcount<>0 then
            begin
               messagedlg('用户名'+Edit1.text+'已存在',mterror,[mbok],0);
               edit1.SetFocus;
               exit;
            end;
            
         end;     try
          with ADOQuery1 do
          begin
            Close;
            SQL.Clear;
            SQL.Add('insert into member(name,password,address,telephone)'+
                    ' values(:name,:password,:address,:telephone)');
            Parameters.ParamByName('name').Value :=Edit1.Text;
            Parameters.ParamByName('password').Value :=Edit2.Text;
            Parameters.ParamByName('address').Value :=Edit3.Text;
            Parameters.ParamByName('telephone').Value :=Edit4.Text;
            messagedlg(SQL.Text,mterror,[mbok],0);
            ExecSQL;
          end;     except
           messagedlg('注册失败请重新注册',mterror,[mbok],0);
         end;
    end;procedure TForm4.Button2Click(Sender: TObject);
    begin
        close;
    end;
      

  2.   

    干么有这么写,直接用几个变量就可以了啊。
    var Name , Password , Address , Telephone
    ...Name := edit1.text; 
    Password := edit2.text;
    ...insert into member (Name , Password , Address , Telephone) values
    ('''+name+''' , '''+Password+''' , '''+Address+''' , '''+Telephone+''');execSQL;
      

  3.   

    应该改为
    try
          with ADOQuery1 do
          begin
            SQL.Clear;
            SQL.Add('insert into member(name,password,address,telephone) values  (:name,:password,:address,:telephone)');//你的这句错了,已经验证
            Parameters.ParamByName('name').Value :=Edit1.Text;
            Parameters.ParamByName('password').Value :=Edit2.Text;
            Parameters.ParamByName('address').Value :=Edit3.Text;
            Parameters.ParamByName('telephone').Value :=Strtoint(Edit4.Text);
            messagedlg(SQL.Text,mterror,[mbok],0);
            ExecSQL;
          end;
      

  4.   

    SQL.Add('insert into member(name,password,address,telephone) values  (:name,:password,:address,:telephone)');
    不能这样写。
    可改为:
    sql.add('insert into member(name,password, address,telphone) values('''+NameStr
    +''','''+passwordStr+''','''+addressStr+''','''+TelphoneStr+''')');
      

  5.   

    不用变量,
    with ADOQuery1 do
          begin
            Close;
            SQL.Clear;
            SQL.Add('insert into member(name,password,address,telephone)'+
                    ' values(:name,:password,:address,:telephone)');
            Parameters.ParamByName('name').Value :=Edit1.Text;
            Parameters.ParamByName('password').Value :=Edit2.Text;
            Parameters.ParamByName('address').Value :=Edit3.Text;
            Parameters.ParamByName('telephone').Value :=Edit4.Text;
            messagedlg(SQL.Text,mterror,[mbok],0);
            ExecSQL;
          end;
    改写为:
    with adoqury1 do
        begin
            Close;
            SQL.Clear;
            SQL.Add('insert into member(name,password,address,telephone)'+
                    ' values('''+edit1.text+''','''+edit2.text+''','''+edit3.text+''','''+edit4.text''')');
            messagedlg(SQL.Text,mterror,[mbok],0);
           ExecSQL;
         end;
    这样应该不会错的!
      

  6.   

    你看行不行,用param[0]代替parambyname('name'),用Param[1]代替
    parambyname('password').等
      

  7.   

    unit Unit4;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, DB, ADODB;type
      TForm4 = class(TForm)
        Label1: TLabel;
        Label2: TLabel;
        Label3: TLabel;
        Label4: TLabel;
        Edit1: TEdit;
        Edit2: TEdit;
        Edit3: TEdit;
        Edit4: TEdit;
        Label5: TLabel;
        Label6: TLabel;
        Button1: TButton;
        ADOQuery1: TADOQuery;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);  private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form4: TForm4;implementation{$R *.dfm}procedure TForm4.Button1Click(Sender: TObject);
    begin
         with ADOQuery1 do
         begin
            cative:=false;  //****
            SQL.Clear;
            Params.Clear;  //****
            Params.CreateParam(ftstring,'name',ptinput).AsString:=Edit1.Text; //****
            SQL.Add('select name from member where name =:name;');//***
            // Parameters.ParamByName('name').Value:=Edit1.Text;  //****
            //open;  //****
            Prepare; ///****
            if Recordcount<>0 then
            begin
               messagedlg('用户名'+Edit1.text+'已存在',mterror,[mbok],0);
               edit1.SetFocus;
               exit;
            end;
            close;
         end;     try
          with ADOQuery1 do
          begin
            close;  //****
            SQL.Clear;
            Params.Clear;  //****
            Params.CreateParam(ftstring,'name',ptinput).AsString:=Edit1.Text; //****
            Params.CreateParam(ftstring,'password',ptinput).AsString:=Edit1.Text;//*
            Params.CreateParam(ftstring,'address',ptinput).AsString:=Edit1.Text; //**
            Params.CreateParam(ftstring,'telephone',ptinput).AsString:=Edit1.Text;//*
            //SQL.Add('insert into member(name,password,address,telephone)'//+应去掉
            //        ' values(:name,:password,:address,:telephone)');
            SQL.Add('insert into member(name,password,address,telephone)
                   values(:name,:password,:address,:telephone;)');     {///////////////////////////////////////////////////////****
            Parameters.ParamByName('name').Value :=Edit1.Text;
            Parameters.ParamByName('password').Value :=Edit2.Text;
            Parameters.ParamByName('address').Value :=Edit3.Text;
            Parameters.ParamByName('telephone').Value :=Strtoint(Edit4.Text);
          }
            messagedlg(SQL.Text,mterror,[mbok],0);
            ExecSQL;
          end;     except
           messagedlg('注册失败请重新注册',mterror,[mbok],0);
         end;
    end;procedure TForm4.Button2Click(Sender: TObject);
    begin
        close;
    end;end.
      

  8.   

    Params.CreateParam
    (ftstring,'name',ptinput).AsString:=Edit1.Text; //****如上面的那几句应该写成一行,即象
    Params.CreateParam(ftstring,'name',ptinput).AsString:=Edit1.Text; //****
      

  9.   

    name,password都是关键字最好不要作为字段使用
    尤其是access 
    加中括号
    改成SQL.Add('insert into member([name],[password],address,telephone)'+
                    ' values(:name,:password,:address,:telephone)');
      

  10.   

    我一直都用这个,希望在你那里也能编译通过:SQL.Add('insert into member(name,password,address,telephone)'+
                    ' values('+#39+edit1.text+#39+','+#39+edit2.text+#39+','+#39+edit3.text+#39+','+#39+edit4.text+#39+')');
      

  11.   

    谢谢楼上的SQL语句能赋值拉,但是还是说我的INSERT into 语句错误
    是不是在delphi里,数据库带自动编号的insert要用什么不同吗