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
[email protected]
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk