串口短信猫开发。现有一函数有些错误,本人比较菜,不太会跟踪查错。请大侠帮忙。此函数实现自动回复。
procedure TForm_main.Modem1recvMsg(ASender: TObject; const phoneNO, recvTime,MsgContent: WideString);//一控件的函数,可以不用管它,返回号码。接收消息时间和消息内容。
Var Str1,Str2:string;
Var Str3:string;
Var Str4,Str5,Str6:string;
begin
Str1:=copy(MsgContent,1,13);      //截取消息内容前13位,即KH_ID
   Str2:=copy(MsgContent,14,2);       //截取第14、15位,即特定数值,01或者02
   with Query1 do            //Query1查询客户信息表中的KH_ID
   begin
     Close;
     SQL.Clear;
     Str3:='SELECT kh_id'+
           'From khxx'+
           'Where kh_id="'+Trim(Str1)+'"';
     Query1.SQL.ADD(Str3);
     Query1.Open;
     IF Query1.RecordCount<>0 then     //是否在客户信息表中
          IF  Str2='01' then            //特定数值为01
           with Query2 do                //Query2返回该客户信息
           begin
            SQL.Clear;
            Str4:='SELECT * From khxx';
            Str4:='您好!这是您的客户信息:"'+Trim(Str4)+'"';
            Query2.SQL.ADD(Str4);
            Query2.open;
           end;
           modem1.sendMsg(phoneNO,Str4);        //发送信息
         IF  Str2='02' then              //同上
           with Query2 do
           begin
            SQL.Clear;
            Str5:='SELECT * From glfxx';
            Str5:='您好!这是您的管理费信息:"'+Trim(Str5)+'"';
            Query2.SQL.ADD(Str5);
            Query2.open;
           end;
            modem1.sendMsg(phoneNO,Str5);
         IF (Str2<>'01') And (Str2<>'02') then      //特定数值不符合要求
            Str6:='您的输入格式有误!'+
                    '正确格式为:客户ID号+01 查询客户信息;'+
                    '客户ID号+02 查询管理费信息' ;
           modem1.sendMsg(phoneNO,Str6);         //发送指定信息
   end;
   with Query1 do          //把收到的信息添加入表
   begin
   Close;
   SQL.Clear;
   SQL.Add('INSERT into JSXX(RecvTime,Phone,Content) VALUES(:time1,:phone1,:content1)');
     ParamByName('time1').AsString := trim(recvTime);
     ParamByName('phone1').AsString := trim(phoneNO);
     ParamByName('content1').AsString := trim(MsgContent);
   open;
   end;end;
劳烦修改。谢谢

解决方案 »

  1.   

    如果你数据库不错,串口也没问题,可以参考下下面的代码
    Var
     Str1,Str2:string;
     Str3:string;
     Str4,Str5,Str6:string;
    begin
      Str1:=copy(MsgContent,1,13);      //截取消息内容前13位,即KH_ID
       Str2:=copy(MsgContent,14,2);       //截取第14、15位,即特定数值,01或者02
       with Query1 do            //Query1查询客户信息表中的KH_ID
       begin
         Close;
         SQL.Clear;
         Str3:='SELECT kh_id'+
               ' From khxx'+
               ' Where kh_id='''+Trim(Str1)+'''';
         Query1.SQL.ADD(Str3);
         Query1.Open;
         IF Query1.RecordCount <>0 then     //是否在客户信息表中
              IF  Str2='01' then            //特定数值为01
               with Query2 do                //Query2返回该客户信息
               begin
                SQL.Clear;
                Str4:='SELECT * From khxx';
                Str4:='您好!这是您的客户信息:"'+Trim(Str4)+'"';
                Query2.SQL.ADD(Str4); 
                Query2.open;
               end; 
               modem1.sendMsg(phoneNO,Str4);        //发送信息
             IF  Str2='02' then              //同上
               with Query2 do 
               begin
                SQL.Clear;
                Str5:='SELECT * From glfxx'; 
                Str5:='您好!这是您的管理费信息:"'+Trim(Str5)+'"'; 
                Query2.SQL.ADD(Str5); 
                Query2.open;
               end; 
                modem1.sendMsg(phoneNO,Str5);
             IF (Str2 <>'01') And (Str2 <>'02') then      //特定数值不符合要求 
                Str6:='您的输入格式有误!'+
                        '正确格式为:客户ID号+01 查询客户信息;'+ 
                        '客户ID号+02 查询管理费信息' ; 
               modem1.sendMsg(phoneNO,Str6);         //发送指定信息
       end;
       with Query1 do          //把收到的信息添加入表 
       begin
       Close; 
       SQL.Clear;
       SQL.Add('INSERT into JSXX(RecvTime,Phone,Content) VALUES(:time1,:phone1,:content1)');
       FieldByName('time1').AsString := trim(recvTime);
       FieldByName('phone1').AsString := trim(phoneNO);
       FieldByName('content1').AsString := trim(MsgContent);
       open; 
       end;end;
      

  2.   

    应该根据客户发送的信息自动返回相应的信息。
    串口与终端通信没问题,其他功能都实现了。数据库好像也没问题。。哎,,这个东西不太号描述啊,现在我只想知道想要实现这个功能的代码怎么写。函数接收到信息后,会带回三个参数:手机号,发送时间,发送内容。规定内容是客户ID+01返回客户信息,ID+02返回管理费信息。就是直接返回表的信息。先通过客户_ID号判断是否是系统注册会员,若是就进行下一步。接着判断是01?02或者其他的。01返回客户信息表信息,02返回管理费信息。其他的返回特定语句。最后把查询记录插入接收信息统计表中。