⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 untmain.~pas

📁 1、通过串口连接手机或短信终端发送短信; 2、内置Access数据库
💻 ~PAS
📖 第 1 页 / 共 2 页
字号:
      EdtAddr.Text := TADOQuery(DBGridEh2.DataSource.DataSet).fieldbyname('地址').AsString
    else EdtAddr.Text := '';
    if not TADOQuery(DBGridEh2.DataSource.DataSet).fieldbyname('公司').IsNull then
      EdtCorp.Text := TADOQuery(DBGridEh2.DataSource.DataSet).fieldbyname('公司').AsString
    else EdtCorp.Text := '';
    if not TADOQuery(DBGridEh2.DataSource.DataSet).fieldbyname('职务').IsNull then
      EdtJob.Text := TADOQuery(DBGridEh2.DataSource.DataSet).fieldbyname('职务').AsString
    else EdtJob.Text := '';
    if not TADOQuery(DBGridEh2.DataSource.DataSet).fieldbyname('电子邮箱').IsNull then
      EdtEmail.Text := TADOQuery(DBGridEh2.DataSource.DataSet).fieldbyname('电子邮箱').AsString
    else EdtEmail.Text := '';
    if not TADOQuery(DBGridEh2.DataSource.DataSet).fieldbyname('通讯方式').IsNull then
      EdtComm.Text := TADOQuery(DBGridEh2.DataSource.DataSet).fieldbyname('通讯方式').AsString
    else EdtComm.Text := '';
    if not TADOQuery(DBGridEh2.DataSource.DataSet).fieldbyname('电话').IsNull then
      EdtPhone.Text := TADOQuery(DBGridEh2.DataSource.DataSet).fieldbyname('电话').AsString
    else EdtPhone.Text := '';
    if not TADOQuery(DBGridEh2.DataSource.DataSet).fieldbyname('手机').IsNull then
      ComboBoxToHuman.Text := TADOQuery(DBGridEh2.DataSource.DataSet).fieldbyname('手机').AsString
    else ComboBoxToHuman.Text := '';
  end;
end;

procedure TFrmMain.RemoveOldData;
var
  sSQL1,sSQL2:string;
begin
  sSQL1 := ' Insert into 发送短信历史表 select * from 发送短信表'
          +'  Where 发送情况=''' + '成功' + '''';
  sSQL2 := ' Delete from 发送短信表'
          +'  Where 发送情况=''' + '成功' + '''';
  sSQL1 := sSQL1 + ' Or DateDiff("y",请发时间,now())>'
                 + IntToStr(myLocalIni.SMSValidTimeToSend);
  sSQL2 := sSQL2 + ' Or DateDiff("y",请发时间,now())>'
                 + IntToStr(myLocalIni.SMSValidTimeToSend);
  DM1.QryLogin.Close;
  DM1.QryLogin.Connection.BeginTrans;
  try
    DM1.QryLogin.SQL.Text := sSQL1;
    DM1.QryLogin.ExecSQL;
    DM1.QryLogin.Close;
    DM1.QryLogin.SQL.Text := sSQL2;
    DM1.QryLogin.ExecSQL;
    DM1.QryLogin.Close;
  except
    DM1.QryLogin.Connection.RollbackTrans;
    exit;
  end;
  DM1.QryLogin.Connection.CommitTrans;
  DM1.QryLogin.Close;
end;

function TFrmMain.LoadSMSData: Boolean;
var
  TmpStr:string;
begin
  LoadGroups(LoginUser.ID);        //填写“接收者组”
  TmpStr := '';
  LoadPeople(TmpStr);//填写“接收者人”
  EdtSender.Text :=  LoginUser.Name + LoginUser.MobilePhone;  //填写“发送者”
  ComboBoxToGroup.ItemIndex := 0;
  Result := True;
end;

function TFrmMain.LoadGroups(UserID: string): Boolean;
var
  TmpStr,sSQL:string;
begin
  Result := False;
  ComboBoxToGroup.Clear;
  ComboBoxToGroup.Items.Add('所有组');
  DM1.QryGUI2DB.Close;
  if Length(UserID)=0 then
  begin
    sSQL := ' select 组名 from 联系人组别定义字典'
           +' where 所属用户ID=' + '''' + '00000000000000000000' + '''';
  end else
  begin
    sSQL := ' select 组名 from 联系人组别定义字典'
           +' where (所属用户ID=' + '''' + '00000000000000000000' + ''''
           +'        )or(所属用户ID=' + '''' + UserID + '''' + ')';
  end;
  DM1.QryGUI2DB.SQL.Text := sSQL;
  DM1.QryGUI2DB.Open;
  if DM1.QryGUI2DB.RecordCount=0 then exit;
  DM1.QryGUI2DB.First;
  while not DM1.QryGUI2DB.Eof do
  begin
    TmpStr := DM1.QryGUI2DB.FieldByName('组名').AsString;
    ComboBoxToGroup.Items.Add(TmpStr);
    DM1.QryGUI2DB.Next;
  end;
  DM1.QryGUI2DB.Close;
  Result := True;
end;

function TFrmMain.LoadPeople(GroupName: string): Boolean;
var
  TmpStr,sSQL:string;
begin
  Result := False;

  ComboBoxToHuman.Clear;
  ComboBoxToHuman.Items.Add('该组所有人');
  DM1.QryGUI2DB.Close;
  if Length(GroupName)=0 then
  begin
    sSQL := ' Select 姓名 from 联系人字典';
    sSQL := sSQL + ' Where 2>1';
  end else
  begin
    sSQL := ' Select p.姓名 from 联系人组别定义字典 g, 联系人分组表 pvg, 联系人字典 p ';
    sSQL := sSQL + ' Where g.组名=' + '''' + StrToSQL(GroupName) + '''';
    sSQL := sSQL + '   And g.组ID=pvg.组ID ';
    sSQL := sSQL + '   And pvg.联系人ID=p.联系人ID ';
  end;
  DM1.QryGUI2DB.SQL.Text := sSQL;
  DM1.QryGUI2DB.Open;
  if DM1.QryGUI2DB.RecordCount=0 then exit;
  DM1.QryGUI2DB.First;
  while not DM1.QryGUI2DB.Eof do
  begin
    TmpStr := DM1.QryGUI2DB.FieldByName('姓名').AsString;
    ComboBoxToHuman.Items.Add(TmpStr);
    DM1.QryGUI2DB.Next;
  end;
  DM1.QryGUI2DB.Close;
  Result := True;
end;

function TFrmMain.WhenToSendSMS(aTime: TDateTime;
  SendAtOnce: Boolean): Boolean;
var
  CryptSMS,sSender,TmpStr,sTmp,sSMS,sSQL:string;
  nSenderLen,nMaxMsgLen,i,j:integer;
  DestMobiles:array of string;
begin
  inherited;
  Result := False;
  //确定目标手机
  SetLength(DestMobiles,0);
  case ComboBoxToHuman.ItemIndex of
    -1:  begin
           TmpStr := ComboBoxToHuman.Text ;
           if Length(TmpStr)<>11 then
           begin
             Application.MessageBox('输入的目标手机号(应为11位)不正确,请重新输入!','消息');
             exit;
           end;
           for i:=1 to 11 do
             if (Ord(TmpStr[i])<48)or(Ord(TmpStr[i])>57) then
             begin
               Application.MessageBox('输入的目标手机号(应为数字)不正确,请重新输入!','消息');
               exit;
             end;
           SetLength(DestMobiles,1);
           DestMobiles[0] := TmpStr;
         end;
    0:   begin
           if ComboBoxToHuman.Items.Count<2 then
           begin
             Application.MessageBox('没有接收者,请重新选择组或输入手机号!','消息');
             exit;
           end else
           begin
             sSQL := ' Select 手机 from 联系人字典'
                    +' Where 姓名=' + '''' + StrToSQL(comboBoxToHuman.Items.Strings[1]) + '''';
             for i:=2 to ComboboxToHuman.Items.Count-1 do
               sSQL := sSQL + ' or 姓名=' + '''' + StrToSQL(comboBoxToHuman.Items.Strings[i]) + '''';
             DM1.QryGUI2DB.Close;
             DM1.QryGUI2DB.SQL.Text := sSQL;
             DM1.QryGUI2DB.Open;
             SetLength(DestMobiles,DM1.QryGUI2DB.RecordCount);
             i:=0;
             While not DM1.QryGUI2DB.Eof do
             begin
               DestMobiles[i] := DM1.QryGUI2DB.FieldByName('手机').AsString;
               DM1.QryGUI2DB.Next;
               Inc(i);
             end;
             DM1.QryGUI2DB.Close;
           end;
         end;
    else begin
           sSQL := ' Select 手机 from 联系人字典'
                  +' Where 姓名=' + '''' + StrToSQL(ComboBoxToHuman.Text) + '''';
           DM1.QryGUI2DB.Close;
           DM1.QryGUI2DB.SQL.Text := sSQL;
           DM1.QryGUI2DB.Open;
           SetLength(DestMobiles,DM1.QryGUI2DB.RecordCount);
           i:=0;
           While not DM1.QryGUI2DB.Eof do
           begin
             DestMobiles[i] := DM1.QryGUI2DB.FieldByName('手机').AsString;
             DM1.QryGUI2DB.Next;
             Inc(i);
           end;
           DM1.QryGUI2DB.Close;
         end;
  end;//of "case..."

  //确定短消息内容
  sSender := '';
  if Length(EdtSender.Text)>0 then
    sSender := ' ' + EdtSender.Text;  //加了一个汉字的空格
   nSenderLen := Length(sSender);
   nMaxMsgLen := 108 - nSenderLen;
   TmpStr := MemoSend.Text ;
   if Length(TmpStr)>nMaxMsgLen then
   begin
     sTmp := '';
     i := 1;
     while  i<nMaxMsgLen do
     begin
       if Ord(TmpStr[i])>160 then
       begin
         sTmp := sTmp + Copy(TmpStr, i, 2);
         i := i + 2;
       end else
       begin
         sTmp := sTmp + Copy(TmpStr, i, 1);
         i := i + 1;
       end;
     end;
     if (i=nMaxMsgLen)and(Ord(TmpStr[i])<160) then
     begin
       sTmp := sTmp + TmpStr[i];
       i := i + 1;
     end;
     TmpStr := sTmp;
     //TmpStr := LeftStr(TmpStr,nMaxMsgLen);//暂没作“截断后导致字符串最后是半个汉字”的处理  傅远山200206
   end;
   sSMS := TmpStr + sSender;

   //若要求立刻发送,则发送之
   if SendAtOnce then
   begin
     for i:=1 to StrToInt(EdtSendTimes.Text) do
       for j:=0 to Length(DestMobiles)-1 do
       begin
         StatusBar1.Panels[1].Text := '正在发送......';
         if CheckBoxCrypt.Checked then CryptSMS := CryptStr2(sSMS, 0)
         else CryptSMS := sSMS;
         if (SMSEnabled)and(SendSMS(PChar(DestMobiles[j]), 11, PChar(CryptSMS), Length(CryptSMS))=0) then
           StatusBar1.Panels[1].Text := '发送成功!'
         else StatusBar1.Panels[1].Text := '发送失败!';
       end;
   end;

   //将要发送的短信存入数据库
   for i:=0 to Length(DestMobiles)-1 do
   begin
     if SendAtOnce then
     begin
       sSQL := ' Insert into 发送短信表( 短信ID, 用户ID, 请求机器名, 请求手机, 请求时间,';
       sSQL := sSQL +' 目标手机, 请发次数, 实发次数, 请发时间, 实发时间, 内容, 加密, 发送情况 )';
       sSQL := sSQL +' values ( ' + '''' + GetRandomStr + '''';
       sSQL := sSQL + ',' + '''' + LoginUser.ID + '''';
       sSQL := sSQL + ',' + '''' + StrToSQL(myLocalHostMsg.HostName) + '''';
       sSQL := sSQL + ',' + '''' + LoginUser.MobilePhone + '''';
       sSQL := sSQL + ',' + '''' + FormatDateTime('yyyy-MM-dd HH:mm:ss',Now()) + '''';
       sSQL := sSQL + ',' + '''' + DestMobiles[i] + '''';
       sSQL := sSQL + ',' + EdtSendTimes.Text;
       sSQL := sSQL + ',' + EdtSendTimes.Text;
       sSQL := sSQL + ',' + '''' + FormatDateTime('yyyy-MM-dd HH:mm:ss',aTime) + '''';
       sSQL := sSQL + ',' + '''' + FormatDateTime('yyyy-MM-dd HH:mm:ss',Now()) + '''';
       if SysConfigData.SMSMustBeRecordCryptly then
       begin
         sSQL := sSQL + ',' + '''' + StrToSQL(CryptStr(sSMS,0)) + '''';
         sSQL := sSQL + ',' + '''' + '是' + '''';
       end else
       begin
         sSQL := sSQL + ',' + '''' + StrToSQL(sSMS) + '''';
         sSQL := sSQL + ',' + '''' + '否' + '''';
       end;
       sSQL := sSQL + ',' + '''' + '成功' + ''')';
     end else
     begin
       sSQL := ' Insert into 发送短信表( 短信ID, 用户ID, 请求机器名, 请求手机, 请求时间,';
       sSQL := sSQL +' 目标手机, 请发次数, 实发次数, 请发时间, 内容, 加密, 发送情况 )';
       sSQL := sSQL +' values ( ' + '''' + GetRandomStr + '''';
       sSQL := sSQL + ',' + '''' + LoginUser.ID + '''';
       sSQL := sSQL + ',' + '''' + StrToSQL(myLocalHostMsg.HostName) + '''';
       sSQL := sSQL + ',' + '''' + LoginUser.MobilePhone + '''';
       sSQL := sSQL + ',' + '''' + FormatDateTime('yyyy-MM-dd HH:mm:ss',Now()) + '''';
       sSQL := sSQL + ',' + '''' + DestMobiles[i] + '''';
       sSQL := sSQL + ',' + EdtSendTimes.Text;
       sSQL := sSQL + ',' + '0';
       sSQL := sSQL + ',' + '''' + FormatDateTime('yyyy-MM-dd HH:mm:ss',aTime) + '''';
       if SysConfigData.SMSMustBeRecordCryptly then
       begin
         sSQL := sSQL + ',' + '''' + StrToSQL(CryptStr(sSMS,0)) + '''';
         sSQL := sSQL + ',' + '''' + '是' + '''';
       end else
       begin
         sSQL := sSQL + ',' + '''' + StrToSQL(sSMS) + '''';
         sSQL := sSQL + ',' + '''' + '否' + '''';
       end;
       sSQL := sSQL + ',' + '''' + '请求' + ''')';
     end;
     DM1.QryGUI2DB.Close;
     DM1.QryGUI2DB.SQL.Text := sSQL;
     DM1.QryGUI2DB.ExecSQL;
   end;
   DM1.QryGUI2DB.Close;
   Result := True;
end;

procedure TFrmMain.LoadSysConfigData;
var
  sSQL:string;
begin
  SysConfigData.SMSMustBeRecordCryptly := True;
  SysConfigData.UserPasswordMustBeRecordCryptly := True;

  DM1.QryLogin.Close;
  sSQL := ' Select 值 from 系统配置信息字典'
         +'  Where 名='+''''+'手机短信必须加密存储'+'''';
  DM1.QryLogin.SQL.Text := sSQL;
  try
    DM1.QryLogin.Open;
    if DM1.QryLogin.RecordCount>0 then
    begin
      DM1.QryLogin.First;
      if DM1.QryLogin.FieldByName('值').AsString='否' then SysConfigData.SMSMustBeRecordCryptly := False
      else SysConfigData.SMSMustBeRecordCryptly := True;
    end;
  except
    SysConfigData.SMSMustBeRecordCryptly := True;
  end;
  DM1.QryLogin.Close;
  sSQL := ' Select 值 from 系统配置信息字典'
         +'  Where 名='+''''+'用户口令必须加密存储'+'''';
  DM1.QryLogin.SQL.Text := sSQL;
  try
    DM1.QryLogin.Open;
    if DM1.QryLogin.RecordCount>0 then
    begin
      DM1.QryLogin.First;
      if DM1.QryLogin.FieldByName('值').AsString='否' then SysConfigData.UserPasswordMustBeRecordCryptly := False
      else SysConfigData.UserPasswordMustBeRecordCryptly := True;
    end;
  except
    SysConfigData.UserPasswordMustBeRecordCryptly := True;
  end;
  DM1.QryLogin.Close;
end;

procedure TFrmMain.Button2Click(Sender: TObject);
var
  askTime:TDateTime;
begin
  if not SMSEnabled then exit;
  TimerRS.Enabled := False;
  askTime := TimeOf(TimePickerSend.DateTime) + DateOf(DatePickerSend.DateTime);
  if WhenToSendSMS(askTime, False) then StatusBar1.Panels[1].text := '提示:已成功记录到发送短信!'
  else StatusBar1.Panels[1].Text := '提示:记录到发送短信失败!';
  TimerRS.Enabled := True;
end;

procedure TFrmMain.Button3Click(Sender: TObject);
begin
  if not SMSEnabled then exit;
  //if CheckBoxReqStatus.Checked then PDUtype:='31' else PDUtype:='11';
  WhenToSendSMS(now,True);
end;

procedure TFrmMain.EdtSenderChange(Sender: TObject);
begin
  lblCount.Caption := IntToStr(Length(MemoSend.Lines.Text)+Length(EdtSender.Text));
  Statusbar1.Panels[1].Text := '';  
end;

procedure TFrmMain.MemoSendChange(Sender: TObject);
begin
  lblCount.Caption := IntToStr(Length(MemoSend.Lines.Text)+Length(EdtSender.Text));
  Statusbar1.Panels[1].Text := '';
end;

procedure TFrmMain.ComboBoxToHumanChange(Sender: TObject);
begin
  Statusbar1.Panels[1].Text := '';
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -