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

Version Control

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

    Version Control

    My first post. I'm just starting in A5 coming from MS (VB6, .NET) and FoxPro database. So far I'm VERY impressed. I have lots of questions I hope the forum can help with.

    Let me start with Version Control. All of my MS work uses VSS. Should I continue to use VSS with A5 and what files are typically stored for version control (everything is much different - thankgoodness!).

    Jeff

    #2
    Re: Version Control

    Hi Jeff,

    Welcome to Alpha.

    I do not know about VSS, the only time you would use a Version Number in Alpha in a network environment.

    This is where you had done an update on the server and you now want all users to update their machines. This can be set to be done manually or automatically. When the Version Number on the server gets changed, this can then be seen by all the users. You can then see who has not updated if it is set to be done manually.
    Regards
    Keith Hubert
    Alpha Guild Member
    London.
    KHDB Management Systems
    Skype = keith.hubert


    For your day-to-day Needs, you Need an Alpha Database!

    Comment


      #3
      Re: Version Control

      Keith, I think Jeff is referring to MS Visual Version Safe, presumably used when more than one person is working on a development project. That leaves me out since I work alone, so I know nothing about how one might use MS VSS with Alpha Five. Interestingly, reportedly MS VSS is one case in which MS does not "eat its own dog food," so I suspect there are better products out there (I wonder what other kinds of dog food they might be eating instead of their own products?). Maybe someone else can help with this question. Or maybe Jeff means something else by "VSS".

      Ray

      Comment


        #4
        Re: Version Control

        Thanks for the replies. VSS is Visual Source Safe. It's an absolute necessity even for a single developer. It keeps a history of all of your file changes. So if you needed to roll back to "last Tuesdays" code because your new work just isn't going to make it, you just roll back to Tuesdays code and start again. VSS is actually very nice.

        I will often find myself making some sort of change that I may decide isn't better than what I had and will revert to my prior version of code/interface.

        You've peeked my curiosity about the "software versions" for deploying the applications. This is as of yet a mystery to me with A5 but I'll figure it out soon enough.

        As a developer do you recommend the add-ons for A5V9? Thanks again.

        Comment


          #5
          Re: Version Control

          Jeff, I develop and deploy on a regular basis.
          Here's what I do - right or wrong.
          Create an Install package with a sensible numbering and date system.
          Keep the data and the Run Time separate.

          This is how Alpha recovered very nicely when a Version 9 was deployed and caused a lot of problems.
          See our Hybrid Option here;
          https://hybridapps.example-software.com/


          Apologies to anyone I haven't managed to upset yet.
          You are held in a queue and I will get to you soon.

          Comment


            #6
            Re: Version Control

            Originally posted by JAF View Post
            Thanks for the replies. VSS is Visual Source Safe. It's an absolute necessity even for a single developer. It keeps a history of all of your file changes. So if you needed to roll back to "last Tuesdays" code because your new work just isn't going to make it, you just roll back to Tuesdays code and start again. VSS is actually very nice.

            I will often find myself making some sort of change that I may decide isn't better than what I had and will revert to my prior version of code/interface.

            You've peeked my curiosity about the "software versions" for deploying the applications. This is as of yet a mystery to me with A5 but I'll figure it out soon enough.

            As a developer do you recommend the add-ons for A5V9? Thanks again.
            Well, it might be a good idea but clearly it is not "an absolute necessity even for a single developer." I have daily backups I can go back to, plus when I am worried about something I'll make a backup on the fly. Still I would be interested in other people's views and what they might use (especially non-MS dog food!).

            As for other add-on utilities you should look into those by Bill Parker, Ira Perlow and Cal Locklin. There may be others.

            Ray

            Comment


              #7
              Re: Version Control

              Jeff,

              I deploy frequently and program alone and use a similar method as Ted except. I keep a folder in history with each change so I can go back. In other words, a dated folder with a backup/copy of the whole app that i can open and copy the old code that worked better as an example.

              I also have word documents filled with good and bad(didn't work right) code I can go back to. One day I will find the time to put it all in a table or 2.

              I have developed in a multiuser environment before source safe and we all worked on different areas of the program and then put it together later. We each backed up our own portion seperately. We generally had a meeting every day to discuss where we were and how it all went together at the end.

              With Alpha(and some others), 2 people(or more) could be working at the same time on the same app if needed. Again, in 2 or more different areas of the app.

              Others may have better ideas.
              Dave Mason
              [email protected]
              Skype is dave.mason46

              Comment


                #8
                Re: Version Control

                I thought Dave would be more organised than me:o but I have also developed a small app which (sort of) handles my history. It is PRINCE2 based as I work a lot for the Government. I also keep a pad for each client app so I can record the changes and bill 'em!

                If you are in a collaborative development, I suggest you look at Visual Paradigm - Community edition (unless you have $3000 spare). It is a UML based product. Also Toad Data Modeller is good for getting the Tables right. After that it is quite easy to let developers loose on the design side. Visio is OK, but expensive for what it is. The others are free and with enough functionality for us mortals.

                If you are using Agile/Scrum as a methodology, buy a Tin Hat and a bullet proof vest.

                Ted
                PS Now you have got me started, you will believe that you think that don't need to write a load of Help text. This is because you will find that Alpha is so easy to use that it should be the same for everyone else.

                Try Techsmith's "Jing" to see if you like adding video help. I've added it to screens with some fancy options, and on a button clickthrough, the video plays showing the functionaility. Saves a bit on training as well.
                Last edited by Ted Giles; 02-13-2009, 06:10 PM. Reason: Got all excited!
                See our Hybrid Option here;
                https://hybridapps.example-software.com/


                Apologies to anyone I haven't managed to upset yet.
                You are held in a queue and I will get to you soon.

                Comment


                  #9
                  Re: Version Control

                  When I am in development mode I make a "build" about once a day. For me a build consists of setting a build version number for my app in Alpha. If table structures have not been edited then I just zip all dictionaries using Alpha's zip utility. If table structures have been changed then the tables are included (with some caveats). I have a naming structure for the zip files to keep things straight.

                  I RDP to most of my clients and do the install myself, so I normally do not build an exe installer.

                  With this method of dictionaries only it is quite easy to roll back to a previous build. If I need some sort of a hybrid of dictionaries and data, I just build it in a test folder.

                  Bill.

                  Comment


                    #10
                    Re: Version Control

                    The topic has somewhat diverged from my original question, partly because I was asking about development code/table defs, etc., being stored with a complete revision history not so much deploying different versions of an app.

                    Now, on to versioning an app. IF you make changes to a deployed database, adding new tables, fields, etc., how do you update all of your customer installations (if you have hundreds or thousands of installations)? In my VB/VFP code I store the database (db) version number in a table, when I deploy a new app I check the existing db version number against the new version, run some update commands to alter the tables, and away I go. Each customer may have a number of updates depending on how long they've gone without updates and how many separate client databases they have.

                    So how is this best done in A5? I'm curious about the versioning and how the updates are done (xbasic, etc.). I'm fired up about A5. I should have switched over 5 years ago.

                    Comment


                      #11
                      Re: Version Control

                      Originally posted by JAF View Post
                      IF you make changes to a deployed database, adding new tables, fields, etc., how do you update all of your customer installations (if you have hundreds or thousands of installations)?
                      Most people here probably don't have 100s or 1000s of installations - at least based upon the posts I have read, which may explain why I have never heard anyone on this board talk about using version control software. So, in your situation I can see the problem. If you make structural updates at regular intervals, then I can see you would need a mechanism to adjust each individual user's status to the current version. Interesting...
                      Although, the versioning "control" and the update mechanism seem to be two different issues, no?

                      I'm fired up about A5. I should have switched over 5 years ago.
                      Nice to see your enthusiasm.
                      Peter
                      AlphaBase Solutions, LLC

                      [email protected]
                      https://www.alphabasesolutions.com


                      Comment


                        #12
                        Re: Version Control

                        Originally posted by JAF View Post
                        ...Now, on to versioning an app. IF you make changes to a deployed database, adding new tables, fields, etc., how do you update all of your customer installations (if you have hundreds or thousands of installations)? In my VB/VFP code I store the database (db) version number in a table, when I deploy a new app I check the existing db version number against the new version, run some update commands to alter the tables, and away I go. Each customer may have a number of updates depending on how long they've gone without updates and how many separate client databases they have.

                        So how is this best done in A5? I'm curious about the versioning and how the updates are done (xbasic, etc.). I'm fired up about A5. I should have switched over 5 years ago.
                        I have a couple generic apps but not 100 users. (not yet anyway but I keep hoping) The details could get rather lengthy but in short:

                        In my A5 database I store the database (db) version number as the Network Optimize number (A5 Control Panel / Tools / Network Optimize / Options tab), when I deploy a new app I let A5 check the existing db version number against the new version and the autoexec runs some update commands to alter the tables, and away I go. Each update I build will handle all previous updates so customers do not have to update one version at a time. If they are on version 6.150 and the current version is 6.220, they just install the update for 6.220.

                        Comment


                          #13
                          Re: Version Control

                          JAF --

                          We have an application that has been deployed to approximately 50 different sites, a number of which have multiple shadowed workstations. We put a calculated variable on the main menu of the application which is composed of the date - version number - A5 version (build number). This typically would appear as follows:

                          02-15-2009 - 231 - v9 (1938)

                          The version number (231 in this example) is also the one specified in network optimization as described elsewhere in this thread. Since it is hardcoded as displayed text on the main menu, it automatically updates with each version update, and we can quickly tell what we are dealing with when a user calls with problems. In order to update a version, we unzip only the application files & not the data files. We automated this & put it on a button. We also enable our users to download the latest version from a server so that when a new version is available, we just do a broadcast email, and the users do the rest.

                          In order to add fields to tables, we execute a script at the start of the application which I fould elsewhere on this forum. Here is a sample of the code that adds just a few fields:

                          Code:
                          dim i as n'   index for while loop.
                          i = 1
                          dim actualfields as c
                          dim missingfield as c
                          dim maxfieldstoadd as n
                          maxfieldstoadd = 100
                          dim newfields[maxfieldstoadd] as c
                          dim newfieldspecs[maxfieldstoadd] as c
                          dim newfieldtable[maxfieldstoadd] as c
                          
                          
                          'Three array entries are required for each new field in table.  
                          j= 1
                          
                          newfieldtable[j] = "tblMoveOuts"
                          newfields[j] = "UpdatedDate"
                          newfieldspecs[j] = ",D,8"
                          message.text = "Initializing "+newfieldtable[j]+" - "+newfields[j]
                          'Added 10/27/2008
                          
                          j = j + 1
                          newfieldtable[j] = "tblMoveOuts"
                          newfields[j] = "DispoCaseNo"
                          newfieldspecs[j] = ",C,20"
                          message.text = "Initializing "+newfieldtable[j]+" - "+newfields[j]
                          'Added 10/28/2008
                          
                          j = j + 1
                          newfieldtable[j] = "tblPeople"
                          newfields[j] = "BeginMonthSD"
                          newfieldspecs[j] = ",n,19,2"
                          message.text = "Initializing "+newfieldtable[j]+" - "+newfields[j]
                          'Added 11/01/2008
                          
                          j = j + 1
                          newfieldtable[j] = "tblMoveOuts"
                          newfields[j] = "BalanceRecovered"
                          newfieldspecs[j] = ",N,15,2"
                          message.text = "Initializing "+newfieldtable[j]+" - "+newfields[j]
                          'Added 11/28/2008
                          
                          j = j + 1
                          newfieldtable[j] = "tblPeople"
                          newfields[j] = "BeginLastMonthSD"
                          newfieldspecs[j] = ",n,19,2"
                          message.text = "Initializing "+newfieldtable[j]+" - "+newfields[j]
                          'Added 01/28/2009
                          
                          j = j + 1
                          newfieldtable[j] = "tblUnitInformation"
                          newfields[j] = "EmployeeUnitYN"
                          newfieldspecs[j] = ",L,1"
                          message.text = "Initializing "+newfieldtable[j]+" - "+newfields[j]
                          'Added 02/03/2009
                          
                          j = j + 1
                          newfieldtable[j] = "tblUnitInformation"
                          newfields[j] = "ModelUnitYN"
                          newfieldspecs[j] = ",L,1"
                          message.text = "Initializing "+newfieldtable[j]+" - "+newfields[j]
                          'Added 02/03/2009
                          
                          
                          
                          
                          
                          '---------------------------------
                          lblAddtheFields:
                          
                          message.text = ""
                          while i <= j
                          addedfieldspecs = newfields[i]+newfieldspecs[i]
                          actualfields = table.external_field_name_get(newfieldtable[i],"n")
                          missingfield = word_subtract(newfields[i],actualfields)
                          message.text = right(message.text + "Check:  "+newfields[i],780)
                          if missingfield <> "" then
                          	xbasic_wait_for_idle()
                          	a5_add_fields_to_table(newfieldtable[i], addedfieldspecs)
                          	message.text = Right(message.text +" - Added in " + newfieldtable[i]+ crlf(),780)
                          else
                          	message.text = Right(message.text +" - OK"+crlf(),780)
                          end if
                          i = i+1
                          if newfields[i]=""then
                              i=100000
                          end if
                          end while
                          end 
                          
                          '----------------------------------- Script ends here.
                          Running this code when the fields already exist does not cause a problem, but changing the field specs after they have been installed does not work. Furthermore, the order of fields in tables should not be changed.

                          There are others on this forum who have more sophisticated update procedures than this one, but this approach allows you to get started without obtaining update utilities from other sources.

                          Hope this is helpful.

                          -- Dick James

                          Comment


                            #14
                            Re: Version Control

                            Originally posted by DickJames View Post
                            ... changing the field specs after they have been installed does not work. ...
                            Can you clarify what you mean by that? It's not terribly unusual for me to increase a field length as part of the update routine in my autoexec. I've also been known to reduce a field length or even change a field type but both of those are highly unusual. (And, changing the field type is much more complicated.)

                            I do believe that this restructuring should be part of the autoexec routine because then it will happen as soon as the update is installed. Of course, the "update fields" part should check to see if the updates are already done and skip the update section completely in that case. (I believe the routine you posted does all that but I didn't analyze it carefully.)

                            Comment


                              #15
                              Re: Version Control

                              Cal --

                              What I mean by that is that it does not work with this routine. Once a field has been added to a table, I have found that changing the field length with my routine above does not work. I understand there are other ways to do it, however.

                              My method thus far in adding tables has been to simply include the table (dbf file) in the version update. This is not a good method, however, because if the version update is run again after the table has been used, the data added to the table is lost.

                              In your second paragraph, you give my routine too much credit. It only adds fields to tables, and it runs every time the program starts up. I realize this is a little crude. Eventually, I'll probably have to either obtain or write something that adds tables, alters field lengths, etc. I believe Finian Lenon posted some utilities several years ago that do this, but at the time I looked at them, I was not adept enough with Xbasic to take advantage of them.

                              -- Dick James

                              Comment

                              Working...
                              X