Hi Ron,
Great to see you're diving head first into data-driven design. We do teach a 3-4 hour course on this that covers:
-
Auto-populating forms from default data
-
Creating config files to hold your default data
-
Iteratively copying data from config files into repeating groups
-
Replacing view-only data with calculated values (expression boxes)
-
Switching data population options through input parameters
-
Loading data from one form into another form of a different type
So, if you're interested in that training (comes with lots of good labs and presentations), please send email to our CourseManager -at- Qdabra *dot* com
Disclaimer: the best practice with SQL connections is to use a Web service as your proxy. The Web service handles the filtering and permissions, etc. I'm guessing you don't have one of those so you have to pull all of the data into your form on load. That can be a lot of data which is why a Web service is recommended. For browser forms, you need a Web service since there is an authentication issue going from client to browser and then SQL database (client to SQL database can work across the web if they have VPN, etc.). Bottom line: you should consider a Web service and we've got a great generic one called DBXL that will save you oodles of time and money, but that's neither here nor there, just a disclaimer comment ...
To do a complex population, you can add filters to your set value actions that pull data from a secondary data source based on conditions with comparisons against your main data source. That's pretty common. You can add multiple conditions here. That should be all that you need. But, if you need to add conditions where the comparison is with another secondary data source, you can do this too but sometimes InfoPath will get confused about the current() axis. Since you will set the value to pull from the Locations table, if the SoftwareList table is in a separate secondary data source, you may need to manually edit the xpath to get it to work. Not hard, but tricky. Hopefully, all of your data is in the same secondary data source and your are comparing to values in the main data source - that's the easy scenario.
Best of luck!