I don't understand why you have that questions. Your questions show a lack of understanding, which is he reasons for questions, but your questions even show a lack of understanding what to ask or a totally different understanding of how things should work. Where do you come from, which other database or languages did you use? I think you have to forget some concepts you already know, which are not at all valid for Foxpro.
So this reveals a lot more to answer to than just asking how to network an app. Keep going in that direction.
-No Visually Added table/s on the data environment[form & report]. instead, i created cursors
--Does this : makes any future error/s?
Why should that make future errors?
If you didn't used the dataenvironment of forms that's fine. So how did you create cursors? Via SQL-Select INTO Cursor, via Views?
Both of these for example would just depend on an OPEN DATABASE yourpath.yourdatabase.DBC and that would be the only line you would need to change, when you move data to the LAN. And even that only, if you devloped using a local drive for data. If you even started putting the data in a LAN shared folder then nothing is to change in pathing.
Concurrent use of tables
-setting Shared ON of tables : w/c is default
SET EXCLUSIVE OFF (not SET SHARED ON, this doesn't exist) solves usng data shared, yes. With SET EXCLUSIVE ON only the first user will be able to open a DBF, no matter if via dataenvironment USE, View, SQL, all of these open a DBF to start with and do so shared or exclusive.
SET EXCLUSIVE OFF is the default, so there is NOTHING TO DO with this, this is just something you should keep in the head for times you need exclusive access.
--Does this solves : having an error when accessing the table when more than one workstation uses the same table at the same time?
Yes.
Concurrent updating of records
-i've used buffer. locking of tables/records, i used: replace, delete-sql, append blank, tableupdate, insert-sql. these have auto locks.
--Does this solves : manually locking and unlocking of records/tables and no more public data session -> private data session needed?
There's no need to manually lock, that's right, but even if you only make use of automatic locks you could have conflicts. What you say you make use of is buffers, that means you will commit buffer changes at some time concentrated, and every change made inbetween from starting to edit to committing changes has the petential to cause conflicts, if other workstations changed same records. And this is not about the conflict you could have at concurrent changes at the same split second, but on the scale of how many minutes users edit, before they save.
If you INSERT INTO TABLE that has no potenial of conflicts, as it always creates new records, if you UPDATE TABLE instead of using TABLEUPDATE() to commit changes, that also has no potential of conflicts, as the SQL-Update doesn't take OLDVAL() and CURVAL() of fields into account, it blindly updates whatever is in the record disregarding what was there when user/workstation started editing. That concept of conflict detection is not part of SQL. If you do SQL-UPdates this, then you don't make use of buffering, as you say or think.
Private vs. Public data session don't make a difference like private and public variables or methods do, this has not the full and same OOP meeaning of these terms. Private data sessions just means a form creates a new datasession, in which no table is opened at start. Any other form can use ASESSION() giiving an array of currently open data sessions and then SET DATASESSION to another private datasessin and work there. That's not the intention of private datasessions, but it shows they are not that private and protected as variables would be. The reasoning for private datasessions is just to have a fresh new session and be able to CLOSE ALL without affecting other forms running in parallel, for example. You can move to other records than a parallel form, so this is nice for a situation you have a list form showing a list of records and a detail form showing one record in detail. If that detail form reopens a table in a private datasession you can move to a certain record and display it, and you can then start 2,3, N such detail forms in parallel all having their own datasession with their own record pointer to their record. Reusing the current datasession each new detail form would move the record and all detail form would show the same record of the last opened detail form. There you have a good usage for private datasessions. You can also use the ALIAS clause or cursor naming, and USE AGAIN, to do all this in one datasession, but life is much simpler having seperate data sessions.
Bye, Olaf.