Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for MSEide+MSEgui)

2018-10-04 Thread mohamed hamza
I must carry on my first project ( Filter project is an intermediate). That 
thread is now closed to resume later under the title ' managing  filter without 
filter propertie.

Thanks for your advices.

Med

De : Martin Schreiber 
Envoyé : jeudi 4 octobre 2018 04:51
À : mseide-msegui-talk@lists.sourceforge.net
Objet : Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for 
MSEide+MSEgui)

On Wednesday 03 October 2018 20:50:29 mohamed hamza wrote:
> I do not know If I have something to do with SkipComments()?
>
It is used in TSQLQuery.SQLParser() which you like to use if I understand
correct. I do not want to make TSQLQuery.SQLParser() publically available
because I don't want to be responsible to adapt it to user requirements.
SkipComments() is OK for me to be publically available.

Martin


___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk
___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk


Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for MSEide+MSEgui)

2018-10-03 Thread Martin Schreiber
On Wednesday 03 October 2018 20:50:29 mohamed hamza wrote:
> I do not know If I have something to do with SkipComments()?
>
It is used in TSQLQuery.SQLParser() which you like to use if I understand 
correct. I do not want to make TSQLQuery.SQLParser() publically available 
because I don't want to be responsible to adapt it to user requirements. 
SkipComments() is OK for me to be publically available.

Martin


___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk


Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for MSEide+MSEgui)

2018-10-03 Thread mohamed hamza
I do not know If I have something to do with SkipComments()?

Med

De : Martin Schreiber 
Envoyé : mercredi 3 octobre 2018 05:23
À : mseide-msegui-talk@lists.sourceforge.net
Objet : Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for 
MSEide+MSEgui)

On Tuesday 02 October 2018 22:59:03 mohamed hamza wrote:
> do I have to change tsqlquery  to improve my filter manager they have a
> parsing sql but not published.I want to use this and others to combine with
> sql macros and params. What do you think?
>
It looks like TSQLQuery.SQLParser() is intended for internal use only, it is
limited and I don't want to become responsible for it's development.
git master 5605c09566ed87def9934dd53c1b9e7a4e991440 has a SkipComments()
header in interface section.
In order to update params there is tmseparams.ParseSQL().

Martin


___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk
___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk


Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for MSEide+MSEgui)

2018-10-01 Thread Martin Schreiber
On Monday 01 October 2018 18:29:32 mohamed hamza wrote:
> In  all case length ( fieldfiltervalue) <> field.size  :   fieldfiltervalue
> is trimed.
>
Fieldfiltervalue is the value the user entered. As I wrote before padding is 
problematic because new and modified char(n) fields are not padded -> the 
filter will not work.
Why don't you want to use varchr(n) fields instead which don't suffer from 
this problem? They also use less memory in record buffer. If you insist to 
pad the filter values do it yourself in "beforeendfilteredit".

Martin


___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk


Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for MSEide+MSEgui)

2018-10-01 Thread mohamed hamza
In  all case length ( fieldfiltervalue) <> field.size  :   fieldfiltervalue is 
trimed.

Med





De : Martin Schreiber 
Envoyé : lundi 1 octobre 2018 15:45
À : mseide-msegui-talk@lists.sourceforge.net
Objet : Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for 
MSEide+MSEgui)

On Monday 01 October 2018 17:21:11 mohamed hamza wrote:
> And we must have  an  update table  set  field00=trim(:field00) into
> SQLupdate of the dataset .
>
Why? char(n) columns always are padded with spaces to length n on server. If
you don't want that use varchar(n) columns instead. The trailing spaces of
char(n) columns can be removed in dataedit by activating optionsedit
oe_trimright.

Martin


___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk
___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk


Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for MSEide+MSEgui)

2018-10-01 Thread Martin Schreiber
On Monday 01 October 2018 17:21:11 mohamed hamza wrote:
> And we must have  an  update table  set  field00=trim(:field00) into
> SQLupdate of the dataset .
>
Why? char(n) columns always are padded with spaces to length n on server. If 
you don't want that use varchar(n) columns instead. The trailing spaces of 
char(n) columns can be removed in dataedit by activating optionsedit 
oe_trimright.

Martin


___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk


Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for MSEide+MSEgui)

2018-10-01 Thread mohamed hamza
And we must have  an  update table  set  field00=trim(:field00) into SQLupdate 
of the dataset .

Med

De : Martin Schreiber 
Envoyé : dimanche 30 septembre 2018 16:26
À : mseide-msegui-talk@lists.sourceforge.net
Objet : Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for 
MSEide+MSEgui)

On Sunday 30 September 2018 17:35:41 mohamed hamza wrote:
> I  noticed that when we have  a field like:   field01   char 2   in
> database schema  and  we want to filter it we must  type  2  chars  in
> field grid.
>
It could be done in tmsebufdataset.endfilteredit() for non varchar string
fields. I'll take a look.

Martin


___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk
___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk


Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for MSEide+MSEgui)

2018-10-01 Thread Martin Schreiber
On 9/30/18 6:26 PM, Martin Schreiber wrote:> On Sunday 30 September 2018
17:35:41 mohamed hamza wrote:
>> I  noticed that when we have  a field like:   field01   char 2   in
>> database schema  and  we want to filter it we must  type  2  chars  in
>> field grid.
>>
> It could be done in tmsebufdataset.endfilteredit() for non varchar string
> fields. I'll take a look.

That becomes difficult because the field values are padded in server not
locally. -> the filter will not work on new or modified records.
Please use varchr(n) instead of char(n). If you can't change the DB
structure use the cast() function in SQL select statement.

Martin


___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk


Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for MSEide+MSEgui)

2018-09-30 Thread Martin Schreiber
On 9/30/18 6:26 PM, Martin Schreiber wrote:
> On Sunday 30 September 2018 17:35:41 mohamed hamza wrote:
>> I  noticed that when we have  a field like:   field01   char 2   in
>> database schema  and  we want to filter it we must  type  2  chars  in
>> field grid.
>>
> It could be done in tmsebufdataset.endfilteredit() for non varchar string 
> fields. I'll take a look.
> 
> Martin
> 
On 9/30/18 10:17 PM, mohamed hamza wrote:> I just want to do :
>
> If field datatype is  string then  fieldfiltervalue :=
> padright(fieldfiltervalue,field.size-length( fieldfiltervalue))

Only for char(n) fields not for varchar(n) fields!

Martin


___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk


Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for MSEide+MSEgui)

2018-09-30 Thread Martin Schreiber
On Sunday 30 September 2018 17:35:41 mohamed hamza wrote:
> I  noticed that when we have  a field like:   field01   char 2   in
> database schema  and  we want to filter it we must  type  2  chars  in
> field grid.
>
It could be done in tmsebufdataset.endfilteredit() for non varchar string 
fields. I'll take a look.

Martin


___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk


Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for MSEide+MSEgui)

2018-09-30 Thread mohamed hamza
I  noticed that when we have  a field like:   field01   char 2   in 
database schema  and  we want to filter it we must  type  2  chars  in field 
grid.

   ex :  IF the field value in dataset is  "F  "  I must type  "F  "  not  only 
 "F"?

  Then the  result of filtring is what I expected .

Med

Nb:  Is there a filter option ?

De : Martin Schreiber 
Envoyé : dimanche 30 septembre 2018 15:18
À : mseide-msegui-talk@lists.sourceforge.net
Objet : Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for 
MSEide+MSEgui)

On Sunday 30 September 2018 16:08:15 mohamed hamza wrote:
> Hi Martin,
>I think we  have to do a padright to string value before checking (
> checkfiltervalues) . I can do it in OnFilter  module or you can do it in
> checkfiltervalues?
>
Please explain more.

Martin


___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk
___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk


Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for MSEide+MSEgui)

2018-09-30 Thread Martin Schreiber
On Sunday 30 September 2018 16:08:15 mohamed hamza wrote:
> Hi Martin,
>I think we  have to do a padright to string value before checking (
> checkfiltervalues) . I can do it in OnFilter  module or you can do it in
> checkfiltervalues?
>
Please explain more.

Martin


___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk


Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for MSEide+MSEgui)

2018-09-30 Thread mohamed hamza
Hi Martin,
   I think we  have to do a padright to string value before checking ( 
checkfiltervalues) .
I can do it in OnFilter  module or you can do it in checkfiltervalues?

Med

De : Martin Schreiber 
Envoyé : jeudi 27 septembre 2018 07:51
À : mseide-msegui-talk@lists.sourceforge.net
Objet : Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for 
MSEide+MSEgui)

On Thursday 27 September 2018 09:42:28 mohamed hamza wrote:
> In addfilter proc sql.text is not  saved before changing  it to
> sql.text+'and  .   '  because we  have to restore it when the filter is
> switched off ?
>
I don't know, it is a function inherited from original Free Pascal SQLDB. Not
recommended.

Martin


___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk
___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk


Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for MSEide+MSEgui)

2018-09-27 Thread Martin Schreiber
On Thursday 27 September 2018 09:51:29 Martin Schreiber wrote:
> On Thursday 27 September 2018 09:42:28 mohamed hamza wrote:
> > In addfilter proc sql.text is not  saved before changing  it to
> > sql.text+'and  .   '  because we  have to restore it when the filter
> > is switched off ?
>
> I don't know, it is a function inherited from original Free Pascal SQLDB.
> Not recommended.
>
It seems there is a backup (fsqlbuf):
"
procedure tsqlquery.applyfilter;
//var
// s: string;
begin
 freefldbuffers;
 tcustomsqlconnection(database).unpreparestatement(fcursor);
 fiseof := false;
 inherited internalclose;
 if filtered and (filter <> '') then begin
  fsqlprepbuf:= addfilter(fsqlbuf);
 end
 else begin
  fsqlprepbuf:= fsqlbuf;
 end;
 if not (bdo_noprepare in foptions) then begin
  tcustomsqlconnection(database).preparestatement(fcursor,
 
tsqltransaction(transaction),fsqlprepbuf,fparams);
 end;
 execute;
 inherited internalopen;
 first;
end;
"

Martin




___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk


Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for MSEide+MSEgui)

2018-09-27 Thread Martin Schreiber
On Thursday 27 September 2018 09:42:28 mohamed hamza wrote:
> In addfilter proc sql.text is not  saved before changing  it to
> sql.text+'and  .   '  because we  have to restore it when the filter is
> switched off ?
>
I don't know, it is a function inherited from original Free Pascal SQLDB. Not 
recommended.

Martin


___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk


Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for MSEide+MSEgui)

2018-09-27 Thread mohamed hamza
In addfilter proc sql.text is not  saved before changing  it to sql.text+'and  
.   '  because we  have to restore it when the filter is switched off ?

Med

De : Martin Schreiber 
Envoyé : jeudi 27 septembre 2018 05:48
À : mseide-msegui-talk@lists.sourceforge.net
Objet : Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for 
MSEide+MSEgui)

On 9/26/18 7:59 PM, mohamed hamza wrote:
> Using OnFilter event  is more appropriate I believe ?
> It depends on your needs. OnFilterRecord is used for local filtering.

> Nb:
>
> Function TSQLQuery.AddFilter(SQLstr : msestring) : msestring;
>
>
> Is never called from tmsebufdataset ?
>
Correct, tmsebufdataset has no SQL property. I assume that you expect
that tmsebufdataset composes a new SQL query from the edited values in
dataset dsFilter state. It does not because it is too error-prone and
limited and also has the security risk of SQL injection. Better setup
the filtered query yourself and use params.

Martin


___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk
___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk


Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for MSEide+MSEgui)

2018-09-27 Thread mohamed hamza
In addfilter sql

De : Martin Schreiber 
Envoyé : jeudi 27 septembre 2018 05:48
À : mseide-msegui-talk@lists.sourceforge.net
Objet : Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for 
MSEide+MSEgui)

On 9/26/18 7:59 PM, mohamed hamza wrote:
> Using OnFilter event  is more appropriate I believe ?
> It depends on your needs. OnFilterRecord is used for local filtering.

> Nb:
>
> Function TSQLQuery.AddFilter(SQLstr : msestring) : msestring;
>
>
> Is never called from tmsebufdataset ?
>
Correct, tmsebufdataset has no SQL property. I assume that you expect
that tmsebufdataset composes a new SQL query from the edited values in
dataset dsFilter state. It does not because it is too error-prone and
limited and also has the security risk of SQL injection. Better setup
the filtered query yourself and use params.

Martin


___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk
___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk


Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for MSEide+MSEgui)

2018-09-26 Thread Martin Schreiber
On 9/26/18 7:59 PM, mohamed hamza wrote:
> Using OnFilter event  is more appropriate I believe ?
> It depends on your needs. OnFilterRecord is used for local filtering.

> Nb:
> 
> Function TSQLQuery.AddFilter(SQLstr : msestring) : msestring;
> 
> 
> Is never called from tmsebufdataset ?
> 
Correct, tmsebufdataset has no SQL property. I assume that you expect
that tmsebufdataset composes a new SQL query from the edited values in
dataset dsFilter state. It does not because it is too error-prone and
limited and also has the security risk of SQL injection. Better setup
the filtered query yourself and use params.

Martin


___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk


Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for MSEide+MSEgui)

2018-09-26 Thread mohamed hamza
Using OnFilter event  is more appropriate I believe ?

Nb:

Function TSQLQuery.AddFilter(SQLstr : msestring) : msestring;


Is never called from tmsebufdataset ?

Med.

De : Martin Schreiber 
Envoyé : mercredi 26 septembre 2018 17:01
À : mseide-msegui-talk@lists.sourceforge.net
Objet : Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for 
MSEide+MSEgui)

On 9/26/18 6:54 PM, mohamed hamza wrote:
> SQL of course
>
> NB:
> I thought of doing it now. You did it   there are   ??  years .Thanks
>
I normally use params in query. You can setup the params in tmsesqlqury
onafterendfilteredit.

Martin


___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk
___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk


Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for MSEide+MSEgui)

2018-09-26 Thread Martin Schreiber
On 9/26/18 6:54 PM, mohamed hamza wrote:
> SQL of course
> 
> NB:
> I thought of doing it now. You did it   there are   ??  years .Thanks
> 
I normally use params in query. You can setup the params in tmsesqlqury
onafterendfilteredit.

Martin


___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk


Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for MSEide+MSEgui)

2018-09-26 Thread mohamed hamza
SQL of course

NB:
I thought of doing it now. You did it   there are   ??  years .Thanks

Med


de : Martin Schreiber 

Envoyé : mercredi 26 septembre 2018 16:39
À : mseide-msegui-talk@lists.sourceforge.net
Objet : Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for 
MSEide+MSEgui)

On 9/26/18 6:33 PM, mohamed hamza wrote:
> In dbfilter2 I  opened the  watch window, I  noticed that  quey.sql.text 
> never change in all event procs it's always ' select * from table01 '  and 
> yet it works when I set the filter on.
>
Correct, filtering by onfilterrecord is not the same as filtering by the
SQL query expression. What do you want to use? Hint: there is no SQL
text in use by local mode.

Martin


___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk
___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk


Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for MSEide+MSEgui)

2018-09-26 Thread Martin Schreiber
On 9/26/18 6:33 PM, mohamed hamza wrote:
> In dbfilter2 I  opened the  watch window, I  noticed that  quey.sql.text 
> never change in all event procs it's always ' select * from table01 '  and 
> yet it works when I set the filter on.
> 
Correct, filtering by onfilterrecord is not the same as filtering by the
SQL query expression. What do you want to use? Hint: there is no SQL
text in use by local mode.

Martin


___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk


Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for MSEide+MSEgui)

2018-09-26 Thread mohamed hamza
In dbfilter2 I  opened the  watch window, I  noticed that  quey.sql.text never 
change in all event procs it's always ' select * from table01 '  and yet it 
works when I set the filter on.

  I expected to find sql.text+' And ...'  what I typed in.

Med

De : Martin Schreiber 
Envoyé : mercredi 26 septembre 2018 08:05
À : mseide-msegui-talk@lists.sourceforge.net
Objet : Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for 
MSEide+MSEgui)

On 9/25/18 8:03 PM, mohamed hamza wrote:
> I believed that filter  has been set somewhere by a module of lib and set 
> filtred  to true also. I find that I am wrong ?
>
AFAIK TSQLQuery.Filter will be added to TSQLQuery.SQL text:
"
Function TSQLQuery.AddFilter(SQLstr : msestring) : msestring;

begin
  if FWhereStartPos = 0 then
SQLstr := SQLstr + ' where (' + msestring(Filter) + ')'
  else if FWhereStopPos > 0 then
system.insert(' and ('+msestring(Filter)+') ',SQLstr,FWhereStopPos+1)
  else
system.insert(' where ('+msestring(Filter)+') ',SQLstr,FWhereStartPos);
  Result := SQLstr;
end;
"
which filters the result set on server if "Filtered" is true. I never
used that functionality. The dbfilter2 demo uses "onfilterrecord" in
order to filter records locally:
"
procedure tmainfo.onfilterrecordev(dataset: tdataset; var accept: boolean);
//slow! in order to improve performance use
//local copies of the filter values, don't use variants
begin
 accept:= tmsebufdataset(dataset).checkfiltervalues();
end;
"

which checks the set filter values:

"
function tmsebufdataset.checkfiltervalue(const afield: tfield;
   const akind: filtereditkindty = fek_filter;
   const acaseinsensitive: boolean = true): boolean;
var
 i1: int32;
 p1: precheaderty;
 v1: variant;
 b1: boolean;
begin
 if afield.dataset <> self then begin
  databaseerror('Invalid field "'+afield.name+'"',self);
 end;
 result:= true; //default
 i1:= afield.fieldno-1;
 p1:= @ffilterbuffer[akind]^.header;
 if i1 >= 0 then begin //data field
  b1:= not getfieldflag(p1^.fielddata.nullmask,i1);
 end
 else begin //calc field
  i1:= -2 - i1;
  if i1 >= 0 then begin //calc field
   b1:= not getfieldflag(pointer(p1)+frecordsize,i1);
  end
  else begin
   exit;//invalid field
  end;
 end;
 if not b1 then begin //filter not null
  b1:= afield.isnull;
  v1:= fieldfiltervalue(afield,akind);
  if afield.datatype = ftstring then begin
   if acaseinsensitive then begin
i1:= unicodecomparetext(afield.asmsestring,unicodestring(v1));
   end
   else begin
i1:= unicodecomparestr(afield.asmsestring,unicodestring(v1));
   end;
   case akind of
fek_filtermin: begin
 result:= not b1 and (i1 >= 0);
end;
fek_filter: begin
 result:= i1 = 0;
end;
fek_filtermax: begin
 result:= b1 or (i1 <= 0);
end;
   end;
  end
  else begin
   case akind of
fek_filtermin: begin
 result:= not b1 and (afield.value >= v1);
end;
fek_filter: begin
 result:= afield.value = v1;
end;
fek_filtermax: begin
 result:= b1 or (afield.value <= v1);
end;
   end;
  end;
 end;
end;

function tmsebufdataset.checkfiltervalues(const afield: tfield;
   const acaseinsensitive: boolean = true): boolean;
//calls checkfiltervalue() for all filtereditkinds
var
 f1: filtereditkindty;
begin
 for f1:= low(f1) to fek_filtermax do begin
  result:= checkfiltervalue(afield,f1,acaseinsensitive);
  if not result then begin
   break;
  end;
 end;
end;

function tmsebufdataset.checkfiltervalues(
  const acaseinsensitive: boolean = true): boolean;
//calls checkfiltervalue() for all fields and all filtereditkinds
var
 i1: int32;
begin
 result:= true;
 for i1:= 0 to fields.count-1 do begin
  result:= checkfiltervalues(fields[i1],acaseinsensitive);
  if not result then begin
   break;
  end;
 end;
end;
"

> Concerning the second point I can not see why dbfilter2  will run normally  
> with bdo_local option and a database will not ?
>
With the same fields and field types?

> I used the same event manager than dbfilter2. Are there other methods to 
> manage filter ?
>
There can be any code executed in onfilterrecord in order to define if a
record should be visible.

Martin


___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk
___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk


Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for MSEide+MSEgui)

2018-09-26 Thread Martin Schreiber
On 9/25/18 8:03 PM, mohamed hamza wrote:
> I believed that filter  has been set somewhere by a module of lib and set 
> filtred  to true also. I find that I am wrong ?
> 
AFAIK TSQLQuery.Filter will be added to TSQLQuery.SQL text:
"
Function TSQLQuery.AddFilter(SQLstr : msestring) : msestring;

begin
  if FWhereStartPos = 0 then
SQLstr := SQLstr + ' where (' + msestring(Filter) + ')'
  else if FWhereStopPos > 0 then
system.insert(' and ('+msestring(Filter)+') ',SQLstr,FWhereStopPos+1)
  else
system.insert(' where ('+msestring(Filter)+') ',SQLstr,FWhereStartPos);
  Result := SQLstr;
end;
"
which filters the result set on server if "Filtered" is true. I never
used that functionality. The dbfilter2 demo uses "onfilterrecord" in
order to filter records locally:
"
procedure tmainfo.onfilterrecordev(dataset: tdataset; var accept: boolean);
//slow! in order to improve performance use
//local copies of the filter values, don't use variants
begin
 accept:= tmsebufdataset(dataset).checkfiltervalues();
end;
"

which checks the set filter values:

"
function tmsebufdataset.checkfiltervalue(const afield: tfield;
   const akind: filtereditkindty = fek_filter;
   const acaseinsensitive: boolean = true): boolean;
var
 i1: int32;
 p1: precheaderty;
 v1: variant;
 b1: boolean;
begin
 if afield.dataset <> self then begin
  databaseerror('Invalid field "'+afield.name+'"',self);
 end;
 result:= true; //default
 i1:= afield.fieldno-1;
 p1:= @ffilterbuffer[akind]^.header;
 if i1 >= 0 then begin //data field
  b1:= not getfieldflag(p1^.fielddata.nullmask,i1);
 end
 else begin //calc field
  i1:= -2 - i1;
  if i1 >= 0 then begin //calc field
   b1:= not getfieldflag(pointer(p1)+frecordsize,i1);
  end
  else begin
   exit;//invalid field
  end;
 end;
 if not b1 then begin //filter not null
  b1:= afield.isnull;
  v1:= fieldfiltervalue(afield,akind);
  if afield.datatype = ftstring then begin
   if acaseinsensitive then begin
i1:= unicodecomparetext(afield.asmsestring,unicodestring(v1));
   end
   else begin
i1:= unicodecomparestr(afield.asmsestring,unicodestring(v1));
   end;
   case akind of
fek_filtermin: begin
 result:= not b1 and (i1 >= 0);
end;
fek_filter: begin
 result:= i1 = 0;
end;
fek_filtermax: begin
 result:= b1 or (i1 <= 0);
end;
   end;
  end
  else begin
   case akind of
fek_filtermin: begin
 result:= not b1 and (afield.value >= v1);
end;
fek_filter: begin
 result:= afield.value = v1;
end;
fek_filtermax: begin
 result:= b1 or (afield.value <= v1);
end;
   end;
  end;
 end;
end;

function tmsebufdataset.checkfiltervalues(const afield: tfield;
   const acaseinsensitive: boolean = true): boolean;
//calls checkfiltervalue() for all filtereditkinds
var
 f1: filtereditkindty;
begin
 for f1:= low(f1) to fek_filtermax do begin
  result:= checkfiltervalue(afield,f1,acaseinsensitive);
  if not result then begin
   break;
  end;
 end;
end;

function tmsebufdataset.checkfiltervalues(
  const acaseinsensitive: boolean = true): boolean;
//calls checkfiltervalue() for all fields and all filtereditkinds
var
 i1: int32;
begin
 result:= true;
 for i1:= 0 to fields.count-1 do begin
  result:= checkfiltervalues(fields[i1],acaseinsensitive);
  if not result then begin
   break;
  end;
 end;
end;
"

> Concerning the second point I can not see why dbfilter2  will run normally  
> with bdo_local option and a database will not ?
> 
With the same fields and field types?

> I used the same event manager than dbfilter2. Are there other methods to 
> manage filter ?
> 
There can be any code executed in onfilterrecord in order to define if a
record should be visible.

Martin


___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk


Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for MSEide+MSEgui)

2018-09-25 Thread mohamed hamza
I believed that filter  has been set somewhere by a module of lib and set 
filtred  to true also. I find that I am wrong ?

Concerning the second point I can not see why dbfilter2  will run normally  
with bdo_local option and a database will not ?

I used the same event manager than dbfilter2. Are there other methods to manage 
filter ?

Med.






De : Martin Schreiber 
Envoyé : mardi 25 septembre 2018 14:41
À : mseide-msegui-talk@lists.sourceforge.net
Objet : Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for 
MSEide+MSEgui)

On 9/25/18 2:35 PM, mohamed hamza wrote:
> I have the same resultt in onFilter Procedure?  tmsesql.filter is ''?
>
Why do you expect that "filter" is not ''? Do you set it somewhere?

> Why the filter worked  in prior version ( Before checkValue function ) for 
> all database?
>
How did you implement filtering before checkvalue()?

Martin


___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk
___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk


Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for MSEide+MSEgui)

2018-09-25 Thread Martin Schreiber
On 9/25/18 2:35 PM, mohamed hamza wrote:
> I have the same resultt in onFilter Procedure?  tmsesql.filter is ''?
> 
Why do you expect that "filter" is not ''? Do you set it somewhere?

> Why the filter worked  in prior version ( Before checkValue function ) for 
> all database?
> 
How did you implement filtering before checkvalue()?

Martin


___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk


Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for MSEide+MSEgui)

2018-09-25 Thread mohamed hamza
I have the same resultt in onFilter Procedure?  tmsesql.filter is ''?

Why the filter worked  in prior version ( Before checkValue function ) for all 
database?

In my case only one database has a problem  with filter?

I tried to change character set ...  but  nothing ?

Med.


De : Martin Schreiber 
Envoyé : mardi 25 septembre 2018 05:42
À : mseide-msegui-talk@lists.sourceforge.net
Objet : Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for 
MSEide+MSEgui)

On 9/25/18 12:36 AM, mohamed hamza wrote:
> I tried to  watch  tmsesql.filter  in  tfilterchange procedure  this one is 
> "".Where do i have to see it ?
>
Isn't the filtering is done locally in tmsesqlquery.onfilterrecord?

Martin


___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk
___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk


Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for MSEide+MSEgui)

2018-09-24 Thread Martin Schreiber
On 9/25/18 12:36 AM, mohamed hamza wrote:
> I tried to  watch  tmsesql.filter  in  tfilterchange procedure  this one is 
> "".Where do i have to see it ?
> 
Isn't the filtering is done locally in tmsesqlquery.onfilterrecord?

Martin


___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk


Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for MSEide+MSEgui)

2018-09-24 Thread mohamed hamza
I tried to  watch  tmsesql.filter  in  tfilterchange procedure  this one is ""  
  .Where do i have to see it ?

MED

De : mohamed hamza 
Envoyé : lundi 24 septembre 2018 13:10
À : General list for MSEide+MSEgui
Objet : Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for 
MSEide+MSEgui)

I start using  my project with  different  databases :

appending , updating , querying, filtring...

It works.

I was suprised with one database :  Filtring was impossible,  blanked grid is 
displayed. I tried filtring manually it works?

What do you think?

Med.

De : Martin Schreiber 
Envoyé : dimanche 23 septembre 2018 15:17
À : mseide-msegui-talk@lists.sourceforge.net
Objet : Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for 
MSEide+MSEgui)

On 9/23/18 4:54 PM, mohamed hamza wrote:
> Then we must  manage this error locally  ( afterendfilter) or in 
> msebufdataset. function t_local_index_find?
>
In "afterendfilter" yes.

> Nb: The user can type a value  in a comumn of grid wich has not an  index.
>
The inaproppriate edit widgets must be disabled in
"afterbeginfilteredit". There are many different possibilities to do
record searching. I think it is not possible to offer a function in
MSEgui which fulfills all user expectations so it does the basic
functionality only. Maybe we can add more flags to t*field.optionsfield
(of_filter,of_find...).

Martin


___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk
___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk


Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for MSEide+MSEgui)

2018-09-24 Thread Martin Schreiber
On 9/24/18 3:10 PM, mohamed hamza wrote:
> I start using  my project with  different  databases :
> 
> appending , updating , querying, filtring...
> 
> It works.
> 
> I was suprised with one database :  Filtring was impossible,  blanked grid is 
> displayed. I tried filtring manually it works?
> 
> What do you think?
> 
Debugging of the issue needed?

Martin


___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk


Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for MSEide+MSEgui)

2018-09-24 Thread mohamed hamza
I start using  my project with  different  databases :

appending , updating , querying, filtring...

It works.

I was suprised with one database :  Filtring was impossible,  blanked grid is 
displayed. I tried filtring manually it works?

What do you think?

Med.

De : Martin Schreiber 
Envoyé : dimanche 23 septembre 2018 15:17
À : mseide-msegui-talk@lists.sourceforge.net
Objet : Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for 
MSEide+MSEgui)

On 9/23/18 4:54 PM, mohamed hamza wrote:
> Then we must  manage this error locally  ( afterendfilter) or in 
> msebufdataset. function t_local_index_find?
>
In "afterendfilter" yes.

> Nb: The user can type a value  in a comumn of grid wich has not an  index.
>
The inaproppriate edit widgets must be disabled in
"afterbeginfilteredit". There are many different possibilities to do
record searching. I think it is not possible to offer a function in
MSEgui which fulfills all user expectations so it does the basic
functionality only. Maybe we can add more flags to t*field.optionsfield
(of_filter,of_find...).

Martin


___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk
___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk


Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for MSEide+MSEgui)

2018-09-23 Thread Martin Schreiber
On 9/23/18 5:17 PM, Martin Schreiber wrote:
> functionality only. Maybe we can add more flags to t*field.optionsfield
> (of_filter,of_find...).
> 
git master 907d028910caa4bdb5b911bd3eca62f67bd3e5b7 has optionfieldty
of_filter, of_find.

Martin


___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk


Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for MSEide+MSEgui)

2018-09-23 Thread Martin Schreiber
On 9/23/18 4:54 PM, mohamed hamza wrote:
> Then we must  manage this error locally  ( afterendfilter) or in 
> msebufdataset. function t_local_index_find?
> 
In "afterendfilter" yes.

> Nb: The user can type a value  in a comumn of grid wich has not an  index.
> 
The inaproppriate edit widgets must be disabled in
"afterbeginfilteredit". There are many different possibilities to do
record searching. I think it is not possible to offer a function in
MSEgui which fulfills all user expectations so it does the basic
functionality only. Maybe we can add more flags to t*field.optionsfield
(of_filter,of_find...).

Martin


___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk


Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for MSEide+MSEgui)

2018-09-23 Thread mohamed hamza
Then we must  manage this error locally  ( afterendfilter) or in msebufdataset. 
function t_local_index_find?

For example :  Unauthaurized  or operation not allowed  as error messages

Nb: The user can type a value  in a comumn of grid wich has not an  index.

Med

De : Martin Schreiber 
Envoyé : dimanche 23 septembre 2018 14:38
À : mseide-msegui-talk@lists.sourceforge.net
Objet : Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for 
MSEide+MSEgui)

On 9/23/18 4:28 PM, mohamed hamza wrote:
>  Did you try to find with a field which has not a local index?
>
The find function in demo uses tlocalindex.findvariant() -> every
searched field needs a dedicated local index.

Martin


___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk
___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk


Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for MSEide+MSEgui)

2018-09-23 Thread Martin Schreiber
On 9/23/18 4:28 PM, mohamed hamza wrote:
>  Did you try to find with a field which has not a local index?
> 
The find function in demo uses tlocalindex.findvariant() -> every
searched field needs a dedicated local index.

Martin


___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk


Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for MSEide+MSEgui)

2018-09-23 Thread mohamed hamza
 Did you try to find with a field which has not a local index?

Med

De : Martin Schreiber 
Envoyé : dimanche 23 septembre 2018 06:44
À : mseide-msegui-talk@lists.sourceforge.net
Objet : Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for 
MSEide+MSEgui)

On 9/22/18 8:28 PM, mohamed hamza wrote:
> All it's Ok. But when I tried  to  connect  to a  firebird server  ( 
> bdo_local off )  it is an  other result did  you try it ?
>
Works for me.

Martin


___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk
___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk


Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for MSEide+MSEgui)

2018-09-23 Thread Martin Schreiber
On 9/22/18 8:28 PM, mohamed hamza wrote:
> All it's Ok. But when I tried  to  connect  to a  firebird server  ( 
> bdo_local off )  it is an  other result did  you try it ?
> 
Works for me.

Martin


___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk


Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for MSEide+MSEgui)

2018-09-22 Thread Martin Schreiber
On 9/22/18 8:28 PM, mohamed hamza wrote:
> All it's Ok. But when I tried  to  connect  to a  firebird server  ( 
> bdo_local off )  it is an  other result did  you try it ?
> 
No, what happens?

Martin


___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk


Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for MSEide+MSEgui)

2018-09-22 Thread mohamed hamza
All it's Ok. But when I tried  to  connect  to a  firebird server  ( bdo_local 
off )  it is an  other result did  you try it ?

Med

De : Martin Schreiber 
Envoyé : samedi 22 septembre 2018 06:16
À : mseide-msegui-talk@lists.sourceforge.net
Objet : Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for 
MSEide+MSEgui)

On 9/21/18 11:01 PM, mohamed hamza wrote:
> did you commit last mseuniverse archive ? I  have the same error with archive 
> dating 20 ? ( I have seen Gitlab with 2 archives  with the  same date 20)
>
Forgotten, sorry. Should be there now.

Martin


___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk
___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk


Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for MSEide+MSEgui)

2018-09-22 Thread Martin Schreiber
On 9/21/18 11:01 PM, mohamed hamza wrote:
> did you commit last mseuniverse archive ? I  have the same error with archive 
> dating 20 ? ( I have seen Gitlab with 2 archives  with the  same date 20)
> 
Forgotten, sorry. Should be there now.

Martin


___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk


Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for MSEide+MSEgui)

2018-09-21 Thread mohamed hamza
did you commit last mseuniverse archive ? I  have the same error with archive 
dating 20 ? ( I have seen Gitlab with 2 archives  with the  same date 20)

regards

De : Martin Schreiber 
Envoyé : vendredi 21 septembre 2018 12:03
À : mseide-msegui-talk@lists.sourceforge.net
Objet : [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for 
MSEide+MSEgui)

On 9/21/18 1:36 PM, mohamed hamza wrote:
> I have an exception : Stream read Error
>
> I can not open dataset.
>
> By  algorithm I am referring to procedure tmainfo.filterchangedev(const 
> sender: tmsebufdataset) is it universal or depending on  number of fields in  
> dataset?;
>
tmainfo.filterchangedev() is used in example in order to show the filter
values in the grid headers. In your own code you probably don't need it.

Martin


___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk
___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk


Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for MSEide+MSEgui)

2018-09-21 Thread Martin Schreiber
On 9/21/18 2:03 PM, Martin Schreiber wrote:
> On 9/21/18 1:36 PM, mohamed hamza wrote:
>> I have an exception : Stream read Error
>>
>> I can not open dataset.
>>
Should be fixed in 6238275e6d12c864a32ecec68b95c8c3432a2143.

Martin


___
mseide-msegui-talk mailing list
mseide-msegui-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk