I've moved two Access 97/2000 applications to Access/SQL Server 7 versions and am in the process of moving a third application over. One of these apps has a database with three tables that contain over 2 million records each and a database size of about 4 gig of data...and it works really well and really fast. I've learned some important things:
1. For any table that does not have a primary key, set one up to be used internally using an identify column (comparable to Access autonumber column). That makes the link easier, faster, and better and avoids trying to define a unique set of columns for the link (which Access will prompt you for).
2. DTS will import autonumber columns with the proper values, but does not make them identify columns automatically. If the autonumber value is meaningful to users (i.e., not just used internally to link lookup table values) and you want to continue with higher numbers, you need to make those columns identify columns, primary keys and set the starting value to one over the highest current value. For other tables where the ID value is just used internally, you can leave the starting value as 1 and SQL Server will assign the next unused value. So if the highest number is 2500 but 18 and 395 were not used, 18 will be assigned to the next new row and 395 to the second new row.
3. Any queries that are used in your front end in a way where the data should be updated and new rows added (like a query on one table that provides sorting for a form) must include the (new) ID column set up in SQL server, since that is the real link between the Access front end and the SQL back end.
4. For handling large amounts of data for reports, etc., any views and/or stored procedures you can set up in the SQL Server back end to reduce the amount of data to be sent to the Access front end will speed things up. This can be especially useful when grouping queries and queries combining data from multiple tables are involved. Even if you do sorting and selecting with an Access query that uses the SQL view as a source, if less data is sent over to Access or less work must be done by the Access front end (like with combining multiple tables), you should see a speed up of the results.
5. Use Access Pass Through Queries as another way to speed things up. These actually are Transact SQL query statements that you are sending the the SQL Server to be executed at the SQL Server and only the results returned. Unfortunately, in order to pass specific selection data for a SQL statement or to a stored procedure, you must create a new pass through query each time that includes the specific values needed at that time.
6. Remember that one critical difference in syntax between the Access SQL and SQL Server SQL is that date values in SQL Server are surrounded by single quotes (') rather than the pound sign as in Access (#).
7. You will have to define the relationships in SQL Server. I don't think that SQL Server's DTS imports the Access relationships.
8. Any text (254/255 character size) and memo fields that are automatically created by DTS as ntext fields in SQL Server must be redefined as text fields (they will probably have a size of "16", which does not seem to mean 16 characters), rather than nvarchar (as the 254 and 255 fields become) or ntext (which the memo fields become). Otherwise, any record with 255 or so characters of actual data will be unreadable in Access and any memo field will be unreadable because the ntext SQL type is not recognized by Access. But the text type of size "16" is (like a memo field). I suspect that nvarchar sends one or two extra characters back to Access, so if you have 255 characters of actual data SQL sends 256 or so characters to Access....and Access chokes (and makes that entire record unreadable) because it can only handle up to 255 text character fields.
Good luck. The results are worth it, and the transformation can actually work fairly easily.
One other observation. I looked into using Access Project, but found some concerns:
1. You need to modify the programming VBA code.
2. No tables are available in the front end application (for application control) because there is no Access database at all.
3. Although in Access 2000 Project you can create and modify the SQL Server objects (views, stored procedures, etc.), it's very good to know that you can't do that in the newer versions of Access Project. So if you need to create a view or stored procedure based on selection values of the moment you are screwed whenever you move up to a newer version, which of course will happen at some time.