procedure TMainForm.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
  str: string;
  USER, UserName, PassWord, xinming, xinbie, dizhi, yidongdianhua, zuoji, email: string;
  s: array[0..25] of Char;
begin  str := Socket.ReceiveText;  if Pos('reg_', str) > 0 then
  begin    str := Copy(str, 5, Length(str) - 4);
    UserName := Copy(str, 1, Pos('_', str) - 1);
    str := Copy(str, Pos('_', str) + 1, Length(str) - Pos('_', str));
    PassWord := Copy(str, 1, Pos('_', str) - 1);
    str := Copy(str, Pos('_', str) + 1, Length(str) - Pos('_', str));
    xinming := Copy(str, 1, Pos('_', str) - 1);
    str := Copy(str, Pos('_', str) + 1, Length(str) - Pos('_', str));
    xinbie := Copy(str, 1, Pos('_', str) - 1);
    str := Copy(str, Pos('_', str) + 1, Length(str) - Pos('_', str));
    dizhi := Copy(str, 1, Pos('_', str) - 1);
    str := Copy(str, Pos('_', str) + 1, Length(str) - Pos('_', str));
    yidongdianhua := Copy(str, 1, Pos('_', str) - 1);
    str := Copy(str, Pos('_', str) + 1, Length(str) - Pos('_', str));
    zuoji := Copy(str, 1, Pos('_', str) - 1);
    email := Copy(str, Pos('_', str) + 1, Length(str) - Pos('_', str));
    ADOQuery1.Close;
    ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.Add('select * from vo_userinfor where username=:username');
    ADOQuery1.Parameters.ParamByName('username').Value := UserName;
    ADOQuery1.Open;
    if ADOQuery1.RecordCount >= 1 then
    begin      s := '用户名已经被注册!';      Send(Socket.SocketHandle, s, SizeOf(s), 0);
      Exit;
    end
    else
    begin      ADOQuery1.Close;
      ADOQuery1.SQL.Clear;
      ADOQuery1.SQL.Add('insert into vo_userinfor(turename,username,userpassword,departmentid,fd_employee_isdeleted,xinming,xinbie,dizhi,yidongdianhua,zuoji,email) values(:user,:username,:password,1,0,:xinming,:xinbie,:dizhi,:yidongdianhua,:zuoji,:email)');      ADOQuery1.Parameters.ParamByName('user').Value := USER;      ADOQuery1.Parameters.ParamByName('username').Value := UserName;
     
      ADOQuery1.Parameters.ParamByName('password').Value := PassWord;
       
      ADOQuery1.Parameters.ParamByName('xinming').Value := xinming;      ADOQuery1.Parameters.ParamByName('xinbie').Value := xinbie;      ADOQuery1.Parameters.ParamByName('dizhi').Value := dizhi;      ADOQuery1.Parameters.ParamByName('zuoji').Value := zuoji;      ADOQuery1.Parameters.ParamByName('email').Value := email;
      ADOQuery1.ExecSQL;
       showmessage('4');
      s := '注册成功!';
      Send(Socket.SocketHandle, s, SizeOf(s), 0);
      Exit;
上面是代码,执行行   ADOQuery1.Parameters.ParamByName('password').Value := PassWord;就不执行了
          
      ADOQuery1.Parameters.ParamByName('xinming').Value := xinming;      ADOQuery1.Parameters.ParamByName('xinbie').Value := xinbie;      ADOQuery1.Parameters.ParamByName('dizhi').Value := dizhi;      ADOQuery1.Parameters.ParamByName('zuoji').Value := zuoji;      ADOQuery1.Parameters.ParamByName('email').Value := email;
      ADOQuery1.ExecSQL;
       showmessage('4');
      s := '注册成功!';
      Send(Socket.SocketHandle, s, SizeOf(s), 0);
      Exit;

解决方案 »

  1.   

    就是实现用户名注册功能,但是没有注册成功我格一行加一句showmessage('1'),发现执行到ADOQuery1.Parameters.ParamByName('password').Value := PassWord; 就没有执行下去了
      

  2.   

    没有执行下去?会不会是password变量没有赋值?
      

  3.   

    str := Copy(str, 5, Length(str) - 4); 
        UserName := Copy(str, 1, Pos('_', str) - 1); 
        str := Copy(str, Pos('_', str) + 1, Length(str) - Pos('_', str)); 
        PassWord := Copy(str, 1, Pos('_', str) - 1); 
        str := Copy(str, Pos('_', str) + 1, Length(str) - Pos('_', str)); 
        xinming := Copy(str, 1, Pos('_', str) - 1); 
        str := Copy(str, Pos('_', str) + 1, Length(str) - Pos('_', str)); 
        xinbie := Copy(str, 1, Pos('_', str) - 1); 
        str := Copy(str, Pos('_', str) + 1, Length(str) - Pos('_', str)); 
        dizhi := Copy(str, 1, Pos('_', str) - 1); 
        str := Copy(str, Pos('_', str) + 1, Length(str) - Pos('_', str)); 
        yidongdianhua := Copy(str, 1, Pos('_', str) - 1); 
        str := Copy(str, Pos('_', str) + 1, Length(str) - Pos('_', str)); 
        zuoji := Copy(str, 1, Pos('_', str) - 1); 
        email := Copy(str, Pos('_', str) + 1, Length(str) - Pos('_', str)); 
    在这已经全赋值了,
      

  4.   

    1.单步跟踪,看看在执行到ADOQuery1.Parameters.ParamByName('password').Value := PassWord这里时,password的值是多少.
    2.可以把这部分的adoquery1换成一个新的adoquery试试.
      

  5.   

    string类型的这样看看:ADOQuery1.Parameters.ParamByName('password').Value := ''+PassWord+''
      

  6.   

    SQL语句没什么问题
    跟踪一下看取值是否正确
      

  7.   

    可能Password变量的取值有问题。
    如有乱码,或其它数据库不认识的编码
    这些问题都可以导致写数据库失败
      

  8.   

    把ParamByName('password').Value换成ParamByName('password').AsString试试