1 (edited by StateOne 2022-06-06 03:52:22)

Topic: loop (Solved... thanks)

hello friends...
here i am uploading sms sending script by selecting rows from database

procedure FormReport_SmsSendAllbtn_OnClick (Sender: TObject; var Cancel: boolean);
var
   Msg,smsNumber,smsServer1,SMS_API1,SenderName1 : string;
   sl,slParam: TStringList;
  j : integer;
   jDataStream: TJSONObject;
   jStatus, jSmsID: TJSONString;
   dt : tDateTime;
begin
for j := 0 to SQLExecute('select (id) from smsLogs')  -1 do
        begin
            if SQLExecute('Select (id) from smsLogs where id ='+inttostr(j)) then
                begin
                    smsNumber := SQLExecute('select smsNumber from smsLogs where id = '+inttostr(j)+'');
                    Msg := SQLExecute('select smsData from smsLogs where id = '+inttostr(j)+'');
                    ShowMessage(smsNumber+' '+Msg);
                    //-------------------------------------------------------
                   SMS_API1 := SQLExecute('Select SmsAPI from Extras where id = 1');
                   SenderName1 := SQLExecute('select SenderName from Extras where id = 1');//'BlackPearl';
                   slParam := TStringList.Create;
                   smsResult := HTTPPost('http://api.veevotech.com/sendsms?hash='+SMS_API1+'&receivenum='+smsNumber+'&sendernum='+SenderName1+'&textmessage='+Msg+'',slParam);
                   slParam.Free;
    //--------------------------------------------------------
                     sl:=TStringList.Create;
                     sl.Text := smsResult;
                     jDataStream := nil;

                     jDataStream:=TJSONObject(TJSONObject.ParseJSONValue(sl.Text));
                     if jDataStream <> nil then
                       begin
                            jStatus := TJSONString(jDataStream.GetPairByIndex(0).JsonValue);
                            jSmsID := TJSONString(jDataStream.GetPairByIndex(3).JsonValue);
                       end;
                       ShowMessage(jStatus.Value);
                     if (vartostr(jStatus.Value) = 'ACCEPTED') then
                     begin
                         SQLExecute('delete from smsLogs where id = '+inttostr(j)+'');
                     end
                     else ShowMessage('Status : '+vartostr(jStatus.Value));

     //-------------------------------------------------------
                end;
        end;

end;

not working... how to fix it

Re: loop (Solved... thanks)

I'm not so sure to what you are trying to do here. Are you perhaps selecting all records from smsLogs? If so then, here's an untested code that might help you

procedure FormReport_SmsSendAllbtn_OnClick (Sender: TObject; var Cancel: boolean);
var
   Msg,smsNumber,smsServer1,SMS_API1,SenderName1 : string;
   sl,slParam: TStringList;
   j : integer;
   jDataStream: TJSONObject;
   jStatus, jSmsID: TJSONString;
   dt : tDateTime;
   SData: TDataSet;
begin
  SQLQuery('SELECT * from smsLogs', SData);
  
  // you might want to just initialize this and not include it in the loop
  SMS_API1 := SQLExecute('Select SmsAPI from Extras where id = 1');
  SenderName1 := SQLExecute('select SenderName from Extras where id = 1');//'BlackPearl';
  
  try
    while (not SData.EoF) do
    begin
      smsNumber := SData.FieldByName('smsNumber').asString;
      Msg := SData.FieldByName('smsData').asString;
      // ShowMessage(smsNumber+' '+Msg);
      slParam := TStringList.Create;
      smsResult := HTTPPost('http://api.veevotech.com/sendsms?hash='+SMS_API1+'&receivenum='+smsNumber+'&sendernum='+SenderName1+'&textmessage='+Msg+'',slParam);
      // slParam.Free;

      sl:=TStringList.Create;
      sl.Text := smsResult;
      jDataStream := nil;

      jDataStream:=TJSONObject(TJSONObject.ParseJSONValue(sl.Text));
      if jDataStream <> nil then
      begin
        jStatus := TJSONString(jDataStream.GetPairByIndex(0).JsonValue);
        jSmsID := TJSONString(jDataStream.GetPairByIndex(3).JsonValue);
      end;
      ShowMessage(jStatus.Value);
      if (vartostr(jStatus.Value) = 'ACCEPTED') then
      begin
        SQLExecute('delete from smsLogs where id = '+inttostr(j)+'');
      end else 
        ShowMessage('Status : '+vartostr(jStatus.Value));

      SData.Next;
    end;    
  finally
    SData.Free;
    sl.Free;
    slParam.Free;
  end;                 
end;
brian

Re: loop (Solved... thanks)

hello brian.zaballa
thanks for Help.....
now working properly