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

Setting active row in list control programatically

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

    #16
    Re: Setting active row in list control programatically

    David,

    I have an SQL 2008 back-end. I am receiving a database API error when executing the query that returns the row number and lot. I think it's the way we are trying to create the row number. I think rownum is used for a mysql database to create a rownumber in the query.

    I can create a row number in a query I run against my database by using row_number() OVER(Order by Lotno) as rowno...That will execute successfully directly against the db but if I change my sql statement inside the xbasic function to reflect the change the rs.ToString breaks.

    Here is the function

    Error: error.png

    Code:
    function lotsWithRowNumber as c (e as p)
    
    debug(1)
    
    dim cn as sql::Connection
    dim flag as l
    dim sqlStmt as c
    dim rs as sql::ResultSet
    dim args as sql::arguments
    
    
    flag = cn.open("::Name::SPLive")
    
    if flag then
    	args.Set("soid",e.rv._state.__args_C_soid)
    	args.Set("sdid",e.rv._state.__args_C_sdid)
    	sqlStmt = "select row_number() OVER(Order by LotNo) - 1 as rowno, LotNo as ln from buyer_view where salesofficeid = :soid and subdivisionid = :sdid;"
    	flag = cn.Execute(sqlStmt,args)
    	if flag then
    		rs = cn.ResultSet
    		dim firstRow as n = rs.Data("rowno")
    		dim dataRows as c = rs.ToString(-1,1,.f.,"|")
    		dataRows = "RowNo|LN" + crlf() + dataRows
    		lotsWithRowNumber = dataRows
    	else
    		'there was an error - close the connection and exit
    		cn.Close()
    		dim msg as c 
    		msg = "Could not execute the query. Error reported was: " + cn.CallResult.text
    		msg = js_escape(msg)
    		dim jscmd as c 
    		jscmd = "alert('" + msg + "');"
    		lotsWithRowNumber = jscmd
    		exit function
    	end if  
    
    else
    	'there was an error - close the connection and exit
    	dim msg as c 
    	msg = "Could not open the connection. Error reported was: " + cn.CallResult.text
    	msg = js_escape(msg)
    	dim jscmd as c 
    	jscmd = "alert('" + msg + "');"
    	lotsWithRowNumber = jscmd
    	exit function
    end if
    
    cn.FreeResult()
    cn.close()
    
    
    
    
    end function
    Last edited by coleresources; 01-27-2015, 04:16 PM.

    Comment


      #17
      Re: Setting active row in list control programatically

      I always think it's funny that some things are easier in SQL Server and some in MySQL. ROW_NUMBER() is quite nice. However, for some reason, as you've found, the ToString method doesn't like it. So, just create the string by hand... so to speak...

      Code:
      dim dataRows as c = ""
      while (rs.NextRow())
           dataRows = dataRows + rs.Data("rowno") + "|" + rs.Data("FirstName") + crlf()
      end while
      You'll need to remove that last crlf().

      Comment


        #18
        Re: Setting active row in list control programatically

        David,

        I'll give that a shot

        How were you able to determine where the breakdown was exactly? Was the error enough for you to understand that it is the row_number() function that is the issue?

        Trying to learn and grow a deeper understanding

        Comment


          #19
          Re: Setting active row in list control programatically

          I took the row_number() stuff out and ran it... then ToString works.

          Comment


            #20
            Re: Setting active row in list control programatically

            Makes sense

            Ok so I no longer receive an error and when I watch lotsWithRowNumber in the debugger I see the values but the drop down list of the lots does not get populated. Can you see anything wrong with my function? Do I need to create column headers? Is that a requirement.

            Screenshot of values showing in debugger and properties of lookup. Can you see anything I've missed?

            debugger.pnglookup_properties.png

            Code:
            function lotsWithRowNumber as c (e as p)
            
            
            debug(1)
            
            dim cn as sql::Connection
            dim flag as l
            dim sqlStmt as c
            dim rs as sql::ResultSet
            dim args as sql::arguments
            
            
            flag = cn.open("::Name::SPLive")
            
            if flag then
            	args.Set("soid",e.rv._state.__args_C_soid)
            	args.Set("sdid",e.rv._state.__args_C_sdid)
            	sqlStmt = "select row_number() OVER(Order by LotNo) - 1 as rowno, LotNo as ln from buyer_view where salesofficeid = :soid and subdivisionid = :sdid;"
            	flag = cn.Execute(sqlStmt,args)
            	if flag then
            		rs = cn.ResultSet
            		dim dataRows as c = ""
            		while rs.NextRow()
                 		dataRows = dataRows + rs.Data("rowno") + "|" + rs.Data("ln")
            		end while
            		lotsWithRowNumber = dataRows
            	else
            		'there was an error - close the connection and exit
            		cn.Close()
            		dim msg as c 
            		msg = "Could not execute the query. Error reported was: " + cn.CallResult.text
            		msg = js_escape(msg)
            		dim jscmd as c 
            		jscmd = "alert('" + msg + "');"
            		lotsWithRowNumber = jscmd
            		exit function
            	end if  
            
            else
            	'there was an error - close the connection and exit
            	dim msg as c 
            	msg = "Could not open the connection. Error reported was: " + cn.CallResult.text
            	msg = js_escape(msg)
            	dim jscmd as c 
            	jscmd = "alert('" + msg + "');"
            	lotsWithRowNumber = jscmd
            	exit function
            end if
            
            cn.FreeResult()
            cn.close()
            
            
            end function

            Comment


              #21
              Re: Setting active row in list control programatically

              Yes... same as originally posted... and you're missing the crlf() at the end of each row...

              Code:
              dim dataRows as c = ""
              while (rs.NextRow())
                  	dataRows = dataRows + rs.Data("rowno") + "|" + rs.Data("FirstName") + crlf()
              end while
              dataRows = "RowNo|Firstname" + crlf() + dataRows
              getCustTableRow = dataRows

              Comment


                #22
                Re: Setting active row in list control programatically

                It's working as expected now...That should be easy right? I really struggled with some of this but I do understand it now.

                I had to uncheck "Allow data caching" inside of the lookup control before my list of lots that the xbasic function was creating would appear.

                Why do you have to perform a refreshCascadingList on the parent lotList to pull the options in? I thought giving focus to that row would create the cascading affect?

                Thanks for sticking with me on this David, I really appreciate it.

                Comment


                  #23
                  Re: Setting active row in list control programatically

                  Excellent... glad you got it working.

                  Yes... with the dropdown data caching turned off, the callback happens every time.

                  Maybe you don't need to do a refreshCascadingLIst. Comment it out and try it. It may be that giving a row focus isn't enough... I was trying a lot of stuff and can't remember.

                  Comment


                    #24
                    Re: Setting active row in list control programatically

                    It doesnt work without it. Was just curious as setting focus to the row seems like it should work

                    Comment


                      #25
                      Re: Setting active row in list control programatically

                      There are really subtle differences between programmatically settings values and clicking to set values. Although setting focus to a row affects that List, I guess the process ends there and does not affect child Lists. Since there is a method to refresh cascading lists, then just setting focus to a row should do no more. That gives us the freedom to do what we need to do next. It's perfect.

                      Comment


                        #26
                        Re: Setting active row in list control programatically

                        I had not looked at it that way but it makes sense. Thanks again for all your help

                        Comment

                        Working...
                        X