Når man kører C5 på SQL er det relativt vigtigt hvordan rettighederne opsættes – og især hvilket skema den enkelte tilgår databasen med – i hvert fald hvis der ændres i tabeldefinitioner.
Problemet er at C5 forudsætter at man har rettigheder til de pågældende tabeller (helst dbo=database owner) og selv om man kan tilgå SQL-databasen med et andet skemanavn, så går det galt hvis man skriver tabeldefinitioner. Så får de nemlig skemanavnet som de skrives med – og så har de andre brugere formentligt ikke adgang til dem.
Dvs. typisk vil man opleve denne fejl som at C5 viser en SQL-fejl om at man ikke har rettigheder til at tilgå tabellen og man kan så se i SQL manageren at tabellen har forkert skema.
Man kan i øvrigt ikke bare synkronisere C5s tabeller med SQL’en v.hj.a. synkroniseringskørslen i udviklingsmenuen – for den “forkerte” tabel indeholder jo alle data (så skal man da i hvert fald flytte den bagefter!).
Den letteste løsning er naturligvis at man fra starten af opsætter brugerne så de tilgår tabeller med et fælles korrekt skema – så går det aldrig galt.
Er det gået galt – dvs. man pludselig har en tabel med et andet skemanavn, hvori alle data ligger men som kun enkelte brugere har adgang til – så kan man heldigvis skifte skema på tabellerne direkte på SQL-serveren.
En enkelt table skiftes således:
ALTER SCHEMA [<nyt skema – typisk dbo eller C5Supervisor>] TRANSFER [<gammelt skema>].[<tabelnavn>];
Er det gået helt galt og man gerne vil have skiftet alle skemaer på alle tabeller, så kan det også arrangeres:
DECLARE tabcurs CURSOR FOR SELECT '<gammelt skema>.' + [name] FROM sysobjects WHERE xtype = 'u' OPEN tabcurs DECLARE @tname NVARCHAR(517) FETCH NEXT FROM tabcurs INTO @tname WHILE @@fetch_status = 0 BEGIN EXEC sp_changeobjectowner @tname, '<nyt skema – typisk dbo eller C5Supervisor>' FETCH NEXT FROM tabcurs INTO @tname END CLOSE tabcurs DEALLOCATE tabcurs