5,386
社区成员
发帖
与我相关
我的任务
分享
procedure TFormPhoneMain.Button1Click(Sender: TObject);
begin
CheckConnect;
if not GBConnected then
begin
Exit;
end;
// 验证登录
if (Edit3.Text='')or(Edit4.Text='') then
begin
// ShowMessage('请输入登录信息!');
if Edit3.Text='' then
begin
Popup1.PlacementTarget:=Edit3;
Label20.Text:='请输入账号!';
end
else
begin
Popup1.PlacementTarget:=Edit4;
Label20.Text:='请输入密码!';
end;
Popup1.Popup();
// Edit3.SetFocus;
Exit;
end;
// 登录
with UniQuery5 do
begin
Close;
SQL.Clear;
SQL.Add(format('select * from tfsyy_ryzd where (dm = ''%s'' or mc = ''%s'') and mm = ''%s''',
[trim(Edit3.Text), trim(Edit3.Text), trim(Edit4.Text)]));
Open;
if RecordCount=0 then
begin
Popup1.PlacementTarget:=Button1;
Label20.Text:='账号或密码不匹配!';
Popup1.Popup();
// ShowMessage('登录失败!不能下载!');
Exit;
end;
end;
TThread.CreateAnonymousThread(//无需界面显示的
procedure()
var
i: integer;
begin
// 下载号码本
try
try
UniQuery3.Close;
UniQuery3.SQL.Clear;
UniQuery3.SQL.Add('delete from phoneno where phone_flag = ''Y''');
UniQuery3.ExecSQL;
// UniQuery3.Close;
UniQuery3.SQL.Clear;
UniQuery3.SQL.Add('select * from phoneno where 1<>1');
UniQuery3.Open;
UniQuery2.Open;
Layout2.Visible:=True;
ScaledLayout1.Visible:=False;
UniQuery4.Open;
i:=UniQuery4.FieldByName('sl').AsInteger;
ProgressBar1.Max:=i;
ProgressBar1.Value:=0;
Label1.Text:=format('正在更新记录:已更新%.0f 条记录/ 共%d条记录', [ProgressBar1.Value, i]);
// Application.ProcessMessages;//线程内不可用此代码
UniQuery2.First;
while not UniQuery2.eof do
begin
UniQuery3.Append;
UniQuery3.FieldByName('User_Name').AsString:=UniQuery2.FieldByName('User_Name').AsString;
UniQuery3.FieldByName('User_Office').AsString:=UniQuery2.FieldByName('User_Office').AsString;
UniQuery3.FieldByName('User_Number').AsInteger:=UniQuery2.FieldByName('SID').AsInteger;
UniQuery3.FieldByName('User_ID').AsString:=UniQuery2.FieldByName('User_ID').AsString;
UniQuery3.FieldByName('Phone_YDDH').AsString:=UniQuery2.FieldByName('Phone_YDDH').AsString;
UniQuery3.FieldByName('Phone_YDHM').AsString:=UniQuery2.FieldByName('Phone_YDHM').AsString;
UniQuery3.FieldByName('Phone_DXDH').AsString:=UniQuery2.FieldByName('Phone_DXDH').AsString;
UniQuery3.FieldByName('Phone_DXHM').AsString:=UniQuery2.FieldByName('Phone_DXHM').AsString;
UniQuery3.FieldByName('Phone_FLag').AsString:=UniQuery2.FieldByName('Phone_FLag').AsString;
UniQuery3.FieldByName('User_Photo').Value:=UniQuery2.FieldByName('User_Photo').Value;
UniQuery3.FieldByName('WBM').AsString:=UniQuery2.FieldByName('WBM').AsString;
UniQuery3.FieldByName('PYM').AsString:=UniQuery2.FieldByName('PYM').AsString;
UniQuery3.Post;
UniQuery2.Next;
// 更新进度条,存在界面显示的线程
TThread.Synchronize(TThread.CurrentThread,
procedure()
begin
ProgressBar1.Value:=ProgressBar1.Value+1;
Label1.Text:=format('更新记录:已更新%.0f 条记录/ 共%d条记录', [ProgressBar1.Value, i]);
// Application.ProcessMessages;
end);
end;
UniQuery4.Close;
UniQuery2.Close;
UniConnection2.Disconnect;
ShowMessage('更新成功!');
except
on E: Exception do
ShowMessage('更新失败,请检查网络后重试!'+E.Message);
end;
finally
Layout2.Visible:=False;
ScaledLayout1.Visible:=True;
end;
end).Start;
end;
手机更新号码本的一段代码,不用线程,更新时出现假死,会提示‘’无响应,是否结束‘’,用了线程后就没这些问题了