Lo veo
todo perfecto, pero tento una duda:
Código Delphi
[-]carpeta:=DBGetPathAlias(nombre);
Carpeta debe estar definido como \\nombreservidor\unidad\carpeta, si es así, DirectoryExist encontrará la carpeta y entonces el LocalShare no quedará configurado.
Si Carpeta está definida como c:\bla blah, el BDE no trabajará bien en red.
Una opción es guardar en el archivo de configuración si ese es el servidor o no. Cuando vayas a hacer el instalador, pues haces 2 copias del archivo, uno como servidor y otro como Cliente y según la instalación copias uno u otro.
En cuanto al error que dices, parece que va por otro lado. Se supone (por el error que dá) que es una tabla que forma una relación Master-Detail con otra tabla, y en ese caso, primero tienes que abrir la tabla Maestra y despues la de detalle,
siempre en ese orden.
No veo que abras la Session y conectes el TDatabase por ningún lado, supongo que para no alargar mucho el código, como sabes, ambos deben abrirse antes de abrir una tabla. Además si están abiertos en tiempo de diseño, al ejecutarse el programa te dará errores, tienes que tener ese detalle en cuenta y desconectar el TDatabase y cerrar la Session en tiempo de diseño, al ejecutarlo lo conectas por código.
En cuanto a Windows XP /98 solo he detectado un pequeño problema que el propio Windows lo dice al compartir la carpeta de la Base de Datos. Windows 98 no puede conectarse a un recurso de red que tenga más de 12 carácteres o espacios en blanco en su nombre (con el código que has puesto no sé como lo tienes, lo comento por si acaso

).
Un detalle más. En caso de que el alias no esté definido, tambien puede darte errores, puedes subsanarlo así:
Código Delphi
[-]
if not Session.IsAlias(fprincipal.nombreAlias) then
begin
Session.Config := cmAll;
Session.AddStandardAlias(fprincipal.nombreAlias, 'ruta de la base de datos');
Session.SaveConfig; end;
Saludos, da gusto ver cómo la gente hace los deberes (muy currado el código)
