Ok, I've altered the title a bit, because office 2003 is not the cause of it, sqlserver and its incorrect docs are
What's the cause? When you look at the docs of INFORMATION_SCHEMA.COLUMNS, you'll see a column 'ORDINAL_POSITION'. Now, when you look at the docs of sp_columns, you also will see a column ORDINAL_POSITION. Now, the sp_columns one is simply the index of the column in the table (which is what I need) and the INFORMATION_SCHEMA.COLUMNS one is the colid, and NOT the index, although the docs try to let you believe that.
So I used that INFORMATION_SCHEMA one to get the index of a column in a table and to refer to a column internally. However, and here's the catch: SQLServer does not keep the colid's continuous. This means that when you delete a column at the end, and add 2 new ones, the 2 new ones have an ORDINAL_POSITION of 1 higher than the column you just deleted, that is, in the INFORMATION_SCHEMA.COLUMNS view. When you call sp_columns, they have correct, continous numbers.
Still with me?
ok. Here's what I'm gonna do: I'll rework some code in the sqlserver driver which will insert the correct POSITION of a column in the table in the fields, not relying on the ORDINAL_POSITION of INFORMATION_SCHEMA. This way, the ordinal positions are kept correct and stay correct and every code relying on these columns will keep on working.
I don't think I'll manage to fix it all today, so it will be tomorrow (friday) when I'll release the patch. If you get an index out of range exception when refreshing a catalog, you now know what the reason is and that a patch is available shortly.