Schulung, Beratung und Entwicklung

Glück IT

Gesellschaft für IT Beratung, Schulung und Entwicklung

NEWS

Content Management System ®CMAssist

SQL Server: TSQL Tipp - Tabellen Tuning für Access

Verknüpfte Tabellen in Access sind eine elegante Möglichkeit die Beschränkungen von Access aufzuheben und die Leistungsfähigkeit vom MS SQL Server zu nutzen. Die Jet Engine von MS Access benötigt aber Hilfe um das volle Potenzial des SQL Servers ausnutzen zu können.

Normalerweise könnte man davon ausgehen das es ausreicht einen Datensatz über den Primärschlüssel zu identifizieren, wenn ein solcher abgeändert werden soll. In einer Mehrbenutzerumgebung reicht dies jedoch nicht aus. Wenn Sie beispielsweise in MS Access einen Datensatz aktualisieren (ändern), vergleicht Access jeden Feldinhalt des aktuell im Speicher stehenden Datensatzes mit dem in der Datenbank gespeicherten und das obwohl vielleicht nur ein Wert, beispielsweise der Name, abgeändert wurde.

UPDATE Person SET Nachname=’Maier’ WHERE PersonID=1 AND Nachname=’Meier’ AND Vorname=’Fritz’ AND…

Dieser Mechanismus ist entsprechend langsam jedoch unumgänglich um Probleme im Mehrnutzerbetrieb zu umgehen, denn der Datensatz könnte bereits vorher von einem anderen Anwender abgeändert worden sein.

Dieses Problem umgeht der MS SQL Server mit einem internen Datentypen, dem Timestamp. Der Timestamp Datentyp ist ein reiner interner Datentyp binärer art und kann inhaltlich nicht ausgelesen werden. MS Access, genauer die Jet Engine von MS Access, kennt diesen Datentypen und nutzt diesen zur Verifikation von Datensetzen. So das eine Aktualisierung auf eine Tabelle mit einem Timestampfeld wesentlich schneller abläuft.

UPDATE Person SET Nachname=’Maier’ WHERE PersonID=1 AND TimeStampX=########

Der Einfachste Weg MS Access im Zusammenspiel mit dem MS SQL Server zu optimieren besteht also darin, in jede verknüpfte Tabelle ein zusätzliches Feld vom Typ Timestamp hinzuzufügen.

Das lässt sich auch mit Hilfe eines Transact SQL Statements (TSQL) automatisieren. Das folgende TSQL Skript erstellt ein ALTER TABLE Statement für jede in der Datenbank befindliche Tabelle. Dieses fügt eine Spalte mit dem Namen TimeStampX und vom Typ TIMESTAMP ein.

declare @table varchar(200)
declare @altersql nvarchar(4000)
declare cur cursor for

select name from sysobjects where xtype = 'u'

open cur

fetch next from cur into @table

while @@fetch_status =0
begin
set @altersql = 'alter table [' + @table + '] ADD DATEFIELD TimeStampX'
print @altersql
-- exec(@altersql) -- Wenn Sie diese Zeile entkommentieren, wird Ihre Datenbank verändert!!!
fetch next from cur into @table
end

close cur
deallocate cur

Das Skript gibt die Auszuführenden ALTER TABLE Befehle nur auf den Bildschirm aus und führt sie nicht aus. Wenn die Befehle sofort ausgeführt werden sollen, muss lediglich das -- vor der Zeile mit dem exec entfernt werden.