Ok!
After a lot of erm... not so nasty words, I found out that having Oracle AND Sqlserver 7 running on the same box means no functional named pipe functionality and other nasties (corrupt network stack etc.)
So I shut down the oracle processes and managed to get sqlserver 7 running.
I found out that the INFORMATION_SCHEMA views in sqlserver 7 are very buggy. For example they report the CHARACTER_MAXIMUM_LENGTH and the CHARACTER_OCTET_LENGTH wrong (they confused the columns). So an nvarchar(40) has a maxlength of 20 and an octet length of 40. In SqlServer 2000 this is correct, however in sqlserver 7 maximum length is 40 and octet length is 20.
So I defined a new column which uses COLUMNPROPERTY() and which reports the correct length. This is also fixed for views. Stored procedures were already ok as I had to use OleDb to retrieve those on SqlServer 7.
I'll now check if the code reports the same on sqlserver 2000 and will release a hotfix for the sqlserver driver.