Keeping track of modified databases / procedures

I am slogging my way through the conversion of many Pan 6 databases to Pan X. Keeping track of which databases I’ve modified where and when is a challenge (multiple users, multiple computers, etc. plus working on my laptop at home in the evening and then bringing updated DBs back to work). Is there any sneaky way for a Pan database to ‘know’ that one or more procedures has been modified, or a form added, or other substantive change made? I’ve found that just checking the last date modified doesn’t always do the trick.

In my dreams there’d be a little text object or something that would say “Database last modified at ______” with date and time to the minute.



Add a timestamp field to each database?

It looks like the time stamp is used for tracking changes to records. Is that correct? Is there a way to use if to track changes to procedures?

There’s no time stamp on individual forms or procedures.

I don’t understand why the last data modified doesn’t do the trick. This date will be updated any time a change is saved to the disk.

It’s probably overkill for your purposes, but what I do is set up a Git repo, and export the database to a blueprint whenever significant changes are made. That way I have a complete historical record of all changes to the database, which I find very handy when writing the release notes for a new version.

If you want to learn more about Git, here’s a place to start.

There are many books, web articles and even youtube videos on the topic. Git repos can be hosted on GitHub or BitBucket, or on your own computer. As you know, ProVUE uses BitBucket, for one thing they have an excellent free option (GitHub is also free for open source projects). You can run Git from the command line, but I like the free Sourcetree program from Atlassian. There are other free and paid programs out there, and Xcode supports Git as well (free).

A full source control system is probably way more than @barry_kahn had in mind, but it is worth looking into for really large/complex projects.

I myself is confused about it . Can soeone out there help me out with this ???

Could you be more specific as to what you are confused about?

In the Finder, the “last modified”; date database shows when the database was last modified. I don’t know why Barry says that didn’t work for him – it definitely does work.

If you want granular information as to what line of code was modified when, you’ll have to use Git with blueprints, as I outlined above. Here is the main help page for Panorama blueprints.

Using Git is a huge topic that is way beyond the scope of this forum. There are actually entire books on this topic - check Amazon, O’Reilly Books, etc. There are also many web sites, Youtube videos, etc.

I’d say that he is looking for an object that he can drag onto a form that would be pre-designed to display this kind of info.

I have sometimes wanted to be able to drag an object that would display the current date and time so that someone viewing a form in full screen or such could see a reference date and time. This object would have to of course be designed so that it was continually refreshed but all of this would be beyond a beginners capability but nonetheless, a desired ‘thing’.

Do you mean like a clock? That is certainly already possible with a Text Display object and a timer. Set up the text display object with a formula something like this:

timepattern(now(),"hh:mm:ss am/pm")+catcherror("",updateTime)

Then add this code to the Form Event Procedure area of the form properties:

    starttimer "updateClock",
        "code",{showvariables updateTime} 

As I have coded this the clock will update every second, but only when the form window is active (the front window). You can also make it run in the background, or at other intervals, for example once a minute. See the starttimer help page to learn how these options are controlled. You could also set this up as an elapsed time/stopwatch display.

For more information on these topics see:

Create a Text Display object, set it from “Literal Text” to “Formula” and apply this formula:

datepattern(nthline(fileinfo(DB),5),"YYYY-MM-DD")+", "+?(val(timepattern(nthline(fileinfo(DB),6),"hh")) < 10 , "0" + timepattern(nthline(fileinfo(DB),6),"hh:MM"), timepattern(nthline(fileinfo(DB),6),"hh:MM"))

The fileinfo( function creates a array containing

  • Type of file
  • Type Code
  • Creation Date
  • Creation Time
  • Modification Date
  • Modifikation Time
  • Size
  • Locked

In my code you would have to replace the string “DB” with either the name of your database or with an empty string “” to make it work in any database.

I am aware of how it would be done but my point is that sometimes there is a feeling that it should be as easy as to simply ‘drag an object from a tool tray to acquire an end goal.’

I do believe that Panorama can do essentially anything that a programmer needs. There is essentially no limit to what can be done. But the original poster was expecting/wanting to just be able to grab from a tool set, a ‘Last Date Modified’ object.

ie, There have been times that I’ve wanted the ability to easily just drag onto a form, an object that displayed a ‘Page x of y’ or ‘Last Printed mm/dd/yy’ object. I can put together these simplistic accomplishments but sometimes it seems that these types of things could be pulled from an object library as ‘doesn’t everyone need these things’ mentality.? ‘Why am I having to do this?’ If my memory has any value, Filemaker did have these library of objects that a user could grab when needed. I did stop developing in Filemaker many years ago because while it was much easier in Filemaker to do many things, Filemaker was truly limited as well. It just couldn’t do many things that I needed the ability to do to impress my clients. I chose the raw toolbox that did not limit what I could do.

I do know the answer is that this is not the Panorama way. Panorama gives us every tool imaginable that allows us to do anything we wish to do. Some other programs that are not anywhere near as capable as Panorama do have the drag and drop capabilities that people have become accustomed to. It has be understood that there is a line of who is responsible for what, and having a raw but powerful toolbox is not what some are expecting.

And your answer is exactly my point. There is a majority of users that could never write a formula like that. They want to drag an object from a tool tray, use a pop down to select the specific item they desire, and move on. Some are thinking, ‘Why am I having to reinvent the wheel. This is too difficult for me’.

Note that there are some tasks that have been ‘automated’ by use of wizards or such to allow a user to easily accomplish a need. ie the Lookup dialog that Michael took the time to ‘recreate’ that Pano 6 had but Pano X did not. People got used to it being slam dunk easy and did not want to have to be slowed down and have to learn the details of figuring out how to manually put together a lookup. They wanted to choose from pop downs.

As if I’ve not already used way too many words on this issue…

In my imagination, this whole change of path would be the best way to grow the Panorama market or number of users. Stop creating more functions and commands. The number of users that will make use of them is very limited. Instead grow the Panorama user base by creating libraries of ‘commonly used objects’ with pop down modifications that are beyond the capabilities of most users. Make Panorama simpler for them rather than more capable for the few.

1 Like