Alpha Software Mobile Development Tools:   Alpha Anywhere    |   Alpha TransForm subscribe to our YouTube Channel  Follow Us on LinkedIn  Follow Us on Twitter  Follow Us on Facebook

Announcement

Collapse

The Alpha Software Forum Participation Guidelines

The Alpha Software Forum is a free forum created for Alpha Software Developer Community to ask for help, exchange ideas, and share solutions. Alpha Software strives to create an environment where all members of the community can feel safe to participate. In order to ensure the Alpha Software Forum is a place where all feel welcome, forum participants are expected to behave as follows:
  • Be professional in your conduct
  • Be kind to others
  • Be constructive when giving feedback
  • Be open to new ideas and suggestions
  • Stay on topic


Be sure all comments and threads you post are respectful. Posts that contain any of the following content will be considered a violation of your agreement as a member of the Alpha Software Forum Community and will be moderated:
  • Spam.
  • Vulgar language.
  • Quotes from private conversations without permission, including pricing and other sales related discussions.
  • Personal attacks, insults, or subtle put-downs.
  • Harassment, bullying, threatening, mocking, shaming, or deriding anyone.
  • Sexist, racist, homophobic, transphobic, ableist, or otherwise discriminatory jokes and language.
  • Sexually explicit or violent material, links, or language.
  • Pirated, hacked, or copyright-infringing material.
  • Encouraging of others to engage in the above behaviors.


If a thread or post is found to contain any of the content outlined above, a moderator may choose to take one of the following actions:
  • Remove the Post or Thread - the content is removed from the forum.
  • Place the User in Moderation - all posts and new threads must be approved by a moderator before they are posted.
  • Temporarily Ban the User - user is banned from forum for a period of time.
  • Permanently Ban the User - user is permanently banned from the forum.


Moderators may also rename posts and threads if they are too generic or do not property reflect the content.

Moderators may move threads if they have been posted in the incorrect forum.

Threads/Posts questioning specific moderator decisions or actions (such as "why was a user banned?") are not allowed and will be removed.

The owners of Alpha Software Corporation (Forum Owner) reserve the right to remove, edit, move, or close any thread for any reason; or ban any forum member without notice, reason, or explanation.

Community members are encouraged to click the "Report Post" icon in the lower left of a given post if they feel the post is in violation of the rules. This will alert the Moderators to take a look.

Alpha Software Corporation may amend the guidelines from time to time and may also vary the procedures it sets out where appropriate in a particular case. Your agreement to comply with the guidelines will be deemed agreement to any changes to it.



Bonus TIPS for Successful Posting

Try a Search First
It is highly recommended that a Search be done on your topic before posting, as many questions have been answered in prior posts. As with any search engine, the shorter the search term, the more "hits" will be returned, but the more specific the search term is, the greater the relevance of those "hits". Searching for "table" might well return every message on the board while "tablesum" would greatly restrict the number of messages returned.

When you do post
First, make sure you are posting your question in the correct forum. For example, if you post an issue regarding Desktop applications on the Mobile & Browser Applications board , not only will your question not be seen by the appropriate audience, it may also be removed or relocated.

The more detail you provide about your problem or question, the more likely someone is to understand your request and be able to help. A sample database with a minimum of records (and its support files, zipped together) will make it much easier to diagnose issues with your application. Screen shots of error messages are especially helpful.

When explaining how to reproduce your problem, please be as detailed as possible. Describe every step, click-by-click and keypress-by-keypress. Otherwise when others try to duplicate your problem, they may do something slightly different and end up with different results.

A note about attachments
You may only attach one file to each message. Attachment file size is limited to 2MB. If you need to include several files, you may do so by zipping them into a single archive.

If you forgot to attach your files to your post, please do NOT create a new thread. Instead, reply to your original message and attach the file there.

When attaching screen shots, it is best to attach an image file (.BMP, .JPG, .GIF, .PNG, etc.) or a zip file of several images, as opposed to a Word document containing the screen shots. Because Word documents are prone to viruses, many message board users will not open your Word file, therefore limiting their ability to help you.

Similarly, if you are uploading a zipped archive, you should simply create a .ZIP file and not a self-extracting .EXE as many users will not run your EXE file.
See more
See less

index filter dbsum corruption

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    index filter dbsum corruption

    Hi,

    A question regarding the use of a filtered index. I have read many times on the board that the number of indices, especially those that are filtered, should be limited as when you have an errant one it can corrupt them and cause problems....and that filtered indices are especially prone to corruption.

    Given the above, is there anything I should be aware of in using a filtered index that can cause problems? Or perhaps another way in which to add a filter to dbsum() as that is the reason behind using the filtered index. Tablesum() is too slow over a network / mapped drive and so is why I chose dbsum().
    Mike
    __________________________________________
    It is only when we forget all our learning that we begin to know.
    It's not what you look at that matters, it's what you see.
    Henry David Thoreau
    __________________________________________




    #2
    Re: index filter dbsum corruption

    Mike:

    The problems with filtered indexes are real. If the table you are referring to is a component of any form used for data entry, I wouldn't allow filtered indexes on that table.

    On the other hand, a temp table, with filtered indexes defined to match your dbsum expressions, will work well. Assuming the temp table is populated via an append, the filtered indexes are no more fragile than any others and you have a great way to get the results you need. It's true that it involves more work but it pays back with reliability.

    I've used a variant of this method for years to generate monthly statements in our application. The DBSum method is much faster than tablesum, even taking into account the pre-processing time for appends etc.
    Finian

    Comment


      #3
      Re: index filter dbsum corruption

      Thanks Finian,

      It so happens that the table in question is the parent table of a set. The filtered index is on a single field of the parent table that, once data is entered, it generally would remain. It is a simple filter (although whether the simplicity matters or not I don't know)--

      .NOT. (CONTAINSI(ACCOUNTNAME,"Total"))
      Mike
      __________________________________________
      It is only when we forget all our learning that we begin to know.
      It's not what you look at that matters, it's what you see.
      Henry David Thoreau
      __________________________________________



      Comment


        #4
        Re: index filter dbsum corruption

        Hi Mike,

        I've talked about this before, and will reiterate it again. If you think filtered indexes are potentially a problem (and I can't say that I've seen this in my apps), the solution is to eliminate the filter portion and create a more complex index expression like this for your example:

        IF(CONTAINSI(ACCOUNTNAME,"Total"),"0","1")

        All of your desireded records will have an index starting with "0", which can be used in links, dbcount() etc. with the right coding.
        Regards,

        Ira J. Perlow
        Computer Systems Design


        CSDA A5 Products
        New - Free CSDA DiagInfo - v1.39, 30 Apr 2013
        CSDA Barcode Functions

        CSDA Code Utility
        CSDA Screen Capture


        Comment


          #5
          Re: index filter dbsum corruption

          Ira,
          Thanks.

          This gives me a possible alternate now in case, for some reason, the index does corrupt.

          I am not entirely certain of how to use this though and while this is still fresh, I am wondering if a bit more insight could be given for say the following...

          I want to sum a specific field in the parent table.
          The records have groupings---say group1 and group2
          I only want the group2 records to be summed.

          Currently the Group_Index does this with the aforementioned filter on the index by eliminating any record that has "Total" in a different parent field's value (this value will always correspond to the grouping field which happens to be a child table field).

          Code:
          t.parent_field=dbsum("parent_table","Group_Index",var->indexed_field,"summed_parent_field")
          So again, currently the dbsum creates the sum of the summed_parent_field over the variable indexed_field, but only when that particular record does NOT contain the word "Total" in the parent field that corrresponds to the Child grouping field.

          Clear as mud I see while trying to write this!!! It actually is very straight-forward, but explaining it in writing is extremely difficult.



          Even if the above is not understood, maybe just a little more explanation regarding how to use the index result in your example in order to limit the records.

          ---I have a feeling that maybe due to my using a different field in the index filter, I may not be able to use your suggested alternative??

          If this is something that cannot be easily explained, I will simply wait until I need it I guess...I just wanted to be prepared is all.
          Mike
          __________________________________________
          It is only when we forget all our learning that we begin to know.
          It's not what you look at that matters, it's what you see.
          Henry David Thoreau
          __________________________________________



          Comment


            #6
            Re: index filter dbsum corruption

            Hi Mike,

            For the example I gave you, you can use something like this to sum each group within the entire index

            Group0=dbsum("parent_table","Group_Index","0","summed_parent_field")
            Group1=dbsum("parent_table","Group_Index","1","summed_parent_field")

            If you use the index expression with more conditions, you can create different groups within the entire index that can be each be summed or totaled individually.
            Regards,

            Ira J. Perlow
            Computer Systems Design


            CSDA A5 Products
            New - Free CSDA DiagInfo - v1.39, 30 Apr 2013
            CSDA Barcode Functions

            CSDA Code Utility
            CSDA Screen Capture


            Comment


              #7
              Re: index filter dbsum corruption

              Super! Thanks once again Ira....much appreciated. :)
              Mike
              __________________________________________
              It is only when we forget all our learning that we begin to know.
              It's not what you look at that matters, it's what you see.
              Henry David Thoreau
              __________________________________________



              Comment


                #8
                Re: index filter dbsum corruption

                Mike,

                Code:
                dim vSovid as c ="08-1884-F"
                dim vInvDate as d={10/15/2010}
                
                vtest= tablesum("invoice_itms","Sov_Id="+quote(vSovId)+" .and. link_invdate<"+s_quote(vInvDate),"Current_work")
                ui_msg_box("test","tablesum is    "+vtest)
                
                vdb = dbsum("invoice_itms","Sov_date","Sov_Id="+quote(vSovId)+" .and. link_invdate<"+s_quote(vInvDate),"current_work")
                ui_msg_box("test 2","dbsum is  "+vdb)
                
                vNodt = dbsum("invoice_itms","Sov_Id",var->vSovId,"current_work")
                ui_msg_box("test 3","No date dbsum is  "+vNodt)
                
                vSmp = dbsum("invoice_itms","Sov_date",var->vSovId + cdate(var->vInvDate),"current_work")
                ui_msg_box("test 4","dbsum is  "+vSmp)
                The "tablesum()" is working and it is what I want but too slow so I want to use the "Dbsum()" but I could not get the right way to write it.

                I think, If I set the Index as Sov_date = Sov_Id + cdate(Invoice_date) at Index Builder, the last test (vSmp) code should be work but it does not.

                Do you have any idea what is correct coding?

                Comment


                  #9
                  Re: index filter dbsum corruption

                  Sov_date = Sov_Id + cdate(Invoice_date)

                  if Sov_id is a character field that is not fully filled in all records then you need to trim it.

                  Sov_date = trim(Sov_Id) + cdate(Invoice_date)
                  There can be only one.

                  Comment


                    #10
                    Re: index filter dbsum corruption

                    What Stan said.....and I also trim the index definition as well. That way you will always be comparing apples to apples. Another remote possible is that some functions seem to have a hard time with multiple variables and/or parsing an expression and by using only one variable in the function by setting it to the others has cured this oddity for me -- ie; additional_variable = var->vSovId + cdate(var->vInvDate)....an eval() should be able to be used you would think in this rare case but I have not successfully been able to use eval() in a function so had to resort to the above. Sometimes it seems that to cure Alpha's confusion you have to make things very simple at times in expressions.
                    Mike
                    __________________________________________
                    It is only when we forget all our learning that we begin to know.
                    It's not what you look at that matters, it's what you see.
                    Henry David Thoreau
                    __________________________________________



                    Comment


                      #11
                      Re: index filter dbsum corruption

                      Stan,

                      You are right. After changed the Index, works well
                      Thank you

                      if Sov_id is a character field that is not fully filled in all records then you need to trim it.

                      Comment

                      Working...
                      X