Re: [MSEide-MSEgui-talk] dbfilter2 demo (was: General list for MSEide+MSEgui)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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