On Monday 18 November 2013 15:54:03 Ivanko B wrote:
> Do You request real code from PODPISKA & ROZNITSA ? OK:
> ----------------------
> procedure tmt1inputfo.findindexexec(const sender: TObject);
> begin
>   with qryFindBase do begin
>       active:= false; active:= true;
>       if recordcount = 0 then begin
>         may_ok:= false;
>         showmessage('Данный индекс не найден для данных капмании,
> каталога и типа подписки!','ИНДЕКС НЕ НАЙДЕН',200);
>       end else if recordcount > 1 then begin
>         may_ok:= false;
>         showmessage('Данный индекс имеет дубли для данных капмании,
> каталога и типа подписки!','ОШИБКА В ДАННЫХ НА СЕРВЕРЕ',200);
>       end;
>   end;
> end;
"
procedure tmt1inputfo.findindexexec(const sender: TObject);
begin
 with qryFindBase do
  active:= false; active:= true;
  if recordcount = 0 then
   may_ok:= false;
   showmessage('Данный индекс не найден для данных капмании,
         каталога и типа подписки!','ИНДЕКС НЕ НАЙДЕН',200);
  else
   if recordcount > 1 then
    may_ok:= false;
    showmessage('Данный индекс имеет дубли для данных капмании,
         каталога и типа подписки!','ОШИБКА В ДАННЫХ НА СЕРВЕРЕ',200);
   end;
  end;
 end;
"
looks OK for me.

> ----------------------
> REGEXPR
>
> class function TRegExpr.ParseModifiersStr (const AModifiers :
> RegExprString; var AModifiersInt : integer) : boolean;
> // !!! Be carefull - this is class function and must not use object
> instance fields
>  var
>   i : integer;
>   IsOn : boolean;
>   Mask : integer;
>  begin
>   Result := true;
>   IsOn := true;
>   Mask := 0; // prevent compiler warning
>   for i := 1 to length (AModifiers) do
>    if AModifiers [i] = '-'
>     then IsOn := false
>     else begin
>       if Pos (AModifiers [i], 'iI') > 0
>        then Mask := MaskModI
>       else if Pos (AModifiers [i], 'rR') > 0
>        then Mask := MaskModR
>       else if Pos (AModifiers [i], 'sS') > 0
>        then Mask := MaskModS
>       else if Pos (AModifiers [i], 'gG') > 0
>        then Mask := MaskModG
>       else if Pos (AModifiers [i], 'mM') > 0
>        then Mask := MaskModM
>       else if Pos (AModifiers [i], 'xX') > 0
>        then Mask := MaskModX
>       else begin
>         Result := false;
>         EXIT;
>        end;

I would use a table:
"
type
 maskmodty = (mm_i,mm_r,mm_s,mm_g,mm_m,mm_x);
 maskmodsty = set of maskmodty;
const
 modifiers: array[maskmodty] of string = (
     //mm_i,mm_r,mm_s,mm_g,mm_m,mm_x
        'iI','rR','sS','gG','mM','xX');
var
 ch1: char;
 mod1: maskmodty;
 mask: maskmodsty;
...

 mask:= [];
 ch1:= amodifiers [i];
 for mod1 in maskmodty do
  if pos(ch1,modifiers[mod1]) > 0 then
   mask:= [mod1];
   break;
  end;
 end;

> ------------------------------------
> SYNAPSE
>
> procedure CopyLinesFromStreamUntilBoundary(var APtr:PANSIChar;
> AEtx:PANSIChar; ALines:TStrings; const ABoundary:ANSIString);
> var
>   bol:      PANSIChar;
>   lng:      integer;
>   s:        ANSIString;
>   BackStop: ANSIString;
>   eob1:     PANSIChar;
>   eob2:     PANSIChar;
> begin
>   BackStop := '--'+ABoundary;
>   eob2     := nil;
>   // Copying until Boundary will be reached
>   while (APtr<AEtx) do
>     begin
>       SearchForLineBreak(APtr,AEtx,bol,lng);
>       SkipLineBreak(APtr,AEtx);
>       eob1 := MatchBoundary(bol,APtr,ABoundary);
>       if Assigned(eob1) then
>         eob2 := MatchLastBoundary(bol,AEtx,ABoundary);
>       if Assigned(eob2) then
>         begin
>           APtr := eob2;
>           Break;
>         end
>       else if Assigned(eob1) then
>         begin
>           APtr := eob1;
>           Break;
>         end
>       else
>         begin
>           SetString(s,bol,lng);
>           ALines.Add(s);
>         end;
>     end;
> end;
"
 while (APtr<AEtx) do
  SearchForLineBreak(APtr,AEtx,bol,lng);
  SkipLineBreak(APtr,AEtx);
  eob1:= MatchBoundary(bol,APtr,ABoundary);
  if Assigned(eob1) then
   eob2 := MatchLastBoundary(bol,AEtx,ABoundary);
  end;
  if Assigned(eob2) then
   APtr := eob2;
   Break;
  else
   if Assigned(eob1) then
    APtr := eob1;
    Break;
   else
    SetString(s,bol,lng);
    ALines.Add(s);
   end;
  end;
 end;
"
looks OK for me.

> --------------------
>    if (value_len < tab_len)  then begin
>
>     s1:= avalues[i];
>     setlength(ar1[i],1); // на выходе столбца будет однострочный массив
>     ar1[i][0]:=  fitstring(s1,tab_len,alignment[i]);
>
>    end else if (value_len = tab_len)  then begin
>
>     setlength(ar1[i],1); // на выходе столбца будет однострочный массив
>     ar1[i][0]:= avalues[i];
>
>    end else begin
> [...]
"
   if (value_len < tab_len) then
    s1:= avalues[i];
    setlength(ar1[i],1); // на выходе столбца будет однострочный массив
    ar1[i][0]:=  fitstring(s1,tab_len,alignment[i]);
   else
    if (value_len = tab_len) then
     setlength(ar1[i],1); // на выходе столбца будет однострочный массив
     ar1[i][0]:= avalues[i];
    else
     ...
    end;
   end;
"
looks OK for me.

> ----------------------------
 if editmode= em_edit then
         // редактирование записи
         // Проставить дату деактивации текущей записи рабочей таблицы
         // (дата активации новой записи)
         // редактированная запись деактивируется введенной
         // датой активации новой записи
  asql:= asql+'update '+ref_name+' set date_deactiv='+
          fieldtosql(fldDateActiv)+' where '+id_field_name +'='+
          curr_id+';'; // новое ID для текущего кода 
  new_rec_get(false);  // Вставить новую запись в рабочую таблицу
  asql:= asql+'insert into '+ref_name+
              ' (' + field_names + ') values (' + field_values + ');';
         // новая запись - рабочая ?
  if calc_ref_state(fldDateActiv,fldDateDeactiv) then // по новому ID
         // если новая запись подходит под активирование - сделать это
   asql:= asql+'insert into '+bit_name+' (current_record,'+
            code_field_name+',ref_state) '+' values (' + 
fieldtosql(fldID)+','+
            fieldtosql(fieldbyname('code'))+','+#39'A'#39 + ');'
         // или же старая запись - рабочая ?
         // проверка между деактивацией старой и активацией новой
   else
    if calc_ref_state(fldDateActiv,fldDateActiv,true) then // по старому ID
         // если старая запись подходит под активирование - сделать это
     asql:= asql+'insert into '+bit_name+' (current_record,'+
               code_field_name+',ref_state) '+' values (' + curr_id + ','+
               fieldtosql(fieldbyname('code'))+','+#39'A'#39+');';
    else // удаление записи
         // удаленная запись деактивируется прямо введенной датой деактивации
     asql:= asql+'update '+ref_name+' set date_deactiv='+
                 fieldtosql(fldDateDeactiv)+' where '+id_field_name+'='+
                 curr_id + ';';
         // если удаленная запись все еще рабочая - активировать ее
     if calc_ref_state(fldDateActiv,fldDateDeactiv) then
      asql:= asql+'insert into '+bit_name+' (current_record,'+
               code_field_name+',ref_state) '+
               ' values (' + curr_id + ',' + fieldtosql(fieldbyname('code'))+
               ',' + #39'A'#39 + ');';
     end;
    end;
   end;
  end;
 end;
"
The problem here are the many comments, I don't think "elseif" makes it any 
better.

> ----------------------------------
>                       if mainfo <> nil then begin // меняется пароль логина
>
>                               if seOldPassword.value <> 
> dmmainmo.fldOperPassword.asmsestring then
>                       showmessage('Прежний пароль введен неправильно!')
>                       else begin
>                               b1:= true;
>                               dmmainmo.dbpasswchange(seNew.value);
>                       end;
>
>                       end else if loginfo <> nil then begin // меняется 
> пароль входа в
> программу
>
>                       if not
> md5digestcomp(pswencode(seOldPassword.value),pswread('admin.psw')) then
>                       showmessage('Прежний пароль введен неправильно!')
>                       else begin
>                               b1:= true;
>                               pswwrite('admin.psw',pswencode(seNew.value));
>                       end;
>
>                       end;

"
 if mainfo <> nil then // меняется пароль логина
  if seOldPassword.value <> dmmainmo.fldOperPassword.asmsestring then
   showmessage('Прежний пароль введен неправильно!')
  else
   b1:= true;
   dmmainmo.dbpasswchange(seNew.value);
  end;
 else
  if loginfo <> nil then // меняется пароль входа в программу
   if not md5digestcomp(pswencode(seOldPassword.value),
                                     pswread('admin.psw')) then
    showmessage('Прежний пароль введен неправильно!');
   else
    b1:= true;
    pswwrite('admin.psw',pswencode(seNew.value));
   end;
  end;
 end;
"
looks OK for me.

> -----------------------
> procedure clean4notfound(
>       const fieldread, fieldwrite: tfield;
>       const local_idx_num: integer = -1
> );
> var
>       bm: bookmarkdataty{string};
>       fld: tfield;
> sr,sw: widestring;
> begin
>
> if (fieldread = nil) or (fieldwrite = nil) then exit;
> if not ((fieldread.dataset.active) and (fieldwrite.dataset.active)) then
> exit;
>
> with fieldread, (dataset as tmsesqlquery) do begin
>   if (fieldwrite.dataset.state in [dsBrowse,dsInactive]) then exit;
>       if fieldread is tmselongintfield then begin
>               if local_idx_num >= 0 then begin
>                       if not indexlocal[local_idx_num].find(
>                               [fieldwrite.asinteger],[],bm,
>                               false,false,true
>                       ) then begin
>                               fieldwrite.clear;
>                       end;
>               end;
>       end else if fieldread is tmsestringfield then begin
>               if local_idx_num >= 0 then begin
>                       if not indexlocal[local_idx_num].find(
>                               [fieldwrite.asmsestring],[],bm,
>                               false,false,true
>                       ) then begin
>                               fieldwrite.clear;
>                       end;
>               end;
>       end;
> end;
> end;

"
procedure clean4notfound(const fieldread, fieldwrite: tfield;
                               const local_idx_num: integer = -1);
var
 bm: bookmarkdataty{string};
 fld: tfield;
 sr,sw: msestring;
begin
 if (fieldread = nil) or (fieldwrite = nil) or 
       not ((fieldread.dataset.active) and (fieldwrite.dataset.active)) or
                      (fieldwrite.dataset.state in [dsBrowse,dsInactive]) then
  exit;
 end;
 with d: (dataset as tmsesqlquery) do
  if fieldread is tmselongintfield then
   if local_idx_num >= 0 then
    if not d.indexlocal[local_idx_num].find([fieldwrite.asinteger],[],bm,
                                                      false,false,true) then
     fieldwrite.clear;
    end;
   end;
  else
   if fieldread is tmsestringfield then
    if local_idx_num >= 0 then
     if not d.indexlocal[local_idx_num].find([fieldwrite.asmsestring],[],bm,
                                                        false,false,true) then
      fieldwrite.clear;
     end;
    end;
   end;
  end;
 end;
"
looks OK for me.

> ----------------------------------
> function GetPSStream( adir: msestring = ''): ttextstream;
> begin
>       if adir = '' then
>               outfile:= gettempfilename(gettempdir ,'msepsout')
>       else if finddir(adir) then
>               outfile:= gettempfilename(adir,'msepsout')
>       else
>               raise exception.create('GetPSStream: failed to access the output
> directory ' + adir);
>
>       result:= ttextstream.create(outfile,fm_create);
> end;
"
function GetPSStream(adir: msestring = ''): ttextstream;
begin
 if adir = '' then
  outfile:= gettempfilename(gettempdir ,'msepsout');
 else
  if finddir(adir) then
   outfile:= gettempfilename(adir,'msepsout');
  else
   raise exception.create(
      'GetPSStream: failed to access the output directory '+ adir);
  end;
  result:= ttextstream.create(outfile,fm_create);
 end;
end;
"
looks OK for me.


> ----------------------------
> procedure tform5edifo.monthbegsettext(const sender: tdataedit;
>  var atext: msestring; var accept: Boolean);
> begin
>  if ExecRegExpr('^[0-9]+\.[0-9]+$', atext) then
>   atext:= '01.' + atext
>  else if ExecRegExpr('^[0-9]+$', atext) then
>   atext:= '01.' + atext + '.' + IntToStr(YearOf(Today));
> end;

"
procedure tform5edifo.monthbegsettext(const sender: tdataedit;
                       var atext: msestring; var accept: Boolean);
begin
 if ExecRegExpr('^[0-9]+\.[0-9]+$', atext) then
  atext:= '01.' + atext;
 else 
  if ExecRegExpr('^[0-9]+$', atext) then
   atext:= '01.' + atext + '.' + IntToStr(YearOf(Today));
  end;
 end;
end;
"
looks OK for me.

> --------------------------
> procedure tform5singleeditfo.applyrecupdate(const sender: tmsesqlquery;
>       const updatekind: TUpdateKind; var asql: AnsiString; var done: Boolean);
> var
>       i1: integer;
>       form6id_sql: ansistring;
>       s: ansistring;
>  {$ifdef DEBUG_SQL}
>       f: text;
> {$endif}
> begin
>
>  {$ifdef DEBUG_SQL}
>       if updatekind = ukModify then
>               debugwriteln('qryForm5Single.ApplyRecUpdate : updatekind is 
> ukModify')
>       else if updatekind = ukInsert  then
>               debugwriteln('qryForm5Single.ApplyRecUpdate : updatekind is 
> ukInsert');
>
>       debugwriteln('qryForm5Single.ApplyRecUpdate : step 1');
>  {$endif}
"
procedure tform5singleeditfo.applyrecupdate(const sender: tmsesqlquery;
                                     const updatekind: TUpdateKind;
                                     var asql: AnsiString; var done: Boolean);
var
 i1: integer;
 form6id_sql: ansistring;
 s: ansistring;
{$ifdef DEBUG_SQL}
 f: text;
{$endif}

begin
{$ifdef DEBUG_SQL}
 if updatekind = ukModify then
  debugwriteln('qryForm5Single.ApplyRecUpdate : updatekind is ukModify');
 else
  if updatekind = ukInsert then
   debugwriteln('qryForm5Single.ApplyRecUpdate : updatekind is ukInsert');
  end;
 end;
 debugwriteln('qryForm5Single.ApplyRecUpdate : step 1');
{$endif}
"
or
"
{$ifdef DEBUG_SQL}
 case updatekind of
  ukModify:
   debugwriteln('qryForm5Single.ApplyRecUpdate : updatekind is ukModify');
  ukInsert:
   debugwriteln('qryForm5Single.ApplyRecUpdate : updatekind is ukInsert');
 end;
 debugwriteln('qryForm5Single.ApplyRecUpdate : step 1');
{$endif}
"
even better. :-)

Martin

------------------------------------------------------------------------------
DreamFactory - Open Source REST & JSON Services for HTML5 & Native Apps
OAuth, Users, Roles, SQL, NoSQL, BLOB Storage and External API Access
Free app hosting. Or install the open source package on any LAMP server.
Sign up and see examples for AngularJS, jQuery, Sencha Touch and Native!
http://pubads.g.doubleclick.net/gampad/clk?id=63469471&iu=/4140/ostg.clktrk
_______________________________________________
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk

Reply via email to