James makes a good point about proper design. However, if the windows (as described in the OP, but later clarified) are actually completely independent of each other, then each should have its own connection.
I define "number of users" as the number of unique IP addresses. But that is all within a local area network. It wouldn't work as well on the net, where you could have multiple users behind a NAT.
In my own apps, I only use one connection. But then I adhere to the scenario that James outlined. It could be that a user could have more than one instance of the app (really a suite of apps) open, but they only count as a single user, based on their LAN address.
However, the one exception I have run into is MS SQL, which basically requires you to have a separate connection for each table. I handle that behind the scenes, so my code doesn't care if it's talking to an sqlite database, or MySql, or Postgres, or MS SQL. The details should all be hidden behind an API.