Fragensteller
"#Gelöscht" in Formuar/Sicht

Allgemeine Diskussion
-
Hallo,
bei der Umstellung eines ADP auf ACCDB habe ich ein Formular an eine eingebundene Sicht gebunden.
Es funktioniert alles bestens, außer, dass bei Eingabe eines NULL-Wertes nach dem Speichern in allen Feldern "#Gelöscht" steht, obwohl die Daten korrekt gespeichert werden.
Lt. Profiler tritt der Fehler auf, wenn beim Speichern die ID geholt wird:
exec sp_executesql N'SELECT "dbo"."AB"."aID" FROM "dbo"."AB" WHERE "aText" = @P1',N'@P1 varchar(255)',NULLMeine Testobjekte:
USE [test] ; GO SET ANSI_NULLS ON ; GO SET QUOTED_IDENTIFIER ON ; GO IF EXISTS ( SELECT * FROM sys.triggers WHERE object_id = OBJECT_ID(N'[dbo].[tr_AB_Del]') ) DROP TRIGGER [dbo].[tr_AB_Del] ; GO IF EXISTS ( SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[AB]') ) DROP VIEW [dbo].[AB] ; GO IF EXISTS ( SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[A]') AND type IN ( N'U' ) ) DROP TABLE [dbo].[A] ; GO IF EXISTS ( SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[B]') AND type IN ( N'U' ) ) DROP TABLE [dbo].[B] ; GO CREATE TABLE [dbo].[A] ( [aID] [int] IDENTITY, [aText] [varchar](255) NULL, [aTS] [timestamp] NOT NULL, [abID] [int] NULL, PRIMARY KEY CLUSTERED ( [aID] ASC ) WITH ( PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON ) ON [PRIMARY] ) ON [PRIMARY] ; GO CREATE TABLE [dbo].[B] ( [bID] [int] IDENTITY, [bText] [varchar](255) NULL, [bTS] [timestamp] NOT NULL, PRIMARY KEY CLUSTERED ( [bID] ASC ) WITH ( PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON ) ON [PRIMARY] ) ON [PRIMARY] ; GO CREATE VIEW [dbo].[AB] AS SELECT A.*, B.* FROM A LEFT OUTER JOIN B ON A.abID = B.bID ; GO CREATE TRIGGER [dbo].[tr_AB_Del] ON [dbo].[AB] INSTEAD OF DELETE AS SET NOCOUNT ON ; DELETE FROM dbo.A WHERE aID IN ( SELECT aID FROM DELETED ) ; GO
Wenn ich aID nicht auf IDENTITY setze, funktioniert es, aber ich kann doch den Key nicht in jedem Datensatz manuell schreiben?
Diesen Artikel habe ich gefunden, komme aber auch nicht weiter:
http://support.microsoft.com/kb/128809/deBin für jeden Tip dankbar!!
Gruß Thomas
- Typ geändert Peter DoeringMVP, Moderator Samstag, 13. November 2010 00:14
Alle Antworten
-
Hallo Thomas,
der "Fehler" ist relativ simpel erklärt. Der PK ist geclustered. Ein geclusterter Index führt immer zu einer Neuorganisation der Tabelle.
Nimm' doch mal den Cluster raus:IF EXISTS (SELECT * FROM sys.sysobjects WHERE id = OBJECT_ID('dbo.A', 'U')) DROP TABLE dbo.A GO CREATE TABLE [dbo].[A] ( [aID] [int] IDENTITY PRIMARY KEY NONCLUSTERED, [aText] [varchar](255) NULL, [aTS] [timestamp] NOT NULL, [abID] [int] NULL ) GO
Weiterhin gibt es bei ADP die Option des Resyn-Commands. Da bin ich aber in Bezug auf ODBC etwas überfragt, da ich auch weiterhin ausschließlich mit ADP arbeite. Ich bin mir aber sicher, dass das nur noch beschränkt möglich sein wird, je größer die Version wird ;-)
Uwe Ricken
Microsoft Certified Database Administrator SQL Server 2005
db Berater GmbH
http://www-db-berater.de -
Hallo Uwe,
daran liegt es leider nicht. Der Fehler tritt auch auf, wenn ich die Keys NONCLUSTERED erstelle.
Bisher habe ich auch mit ADPs gearbeitet. Aber da momentan eine Überarbeitung ansteht, habe ich mich für den empfohlenen Weg entschlossen.
Wenn es nicht anders geht, werde ich die Keys beim Erfassen ("BeforeUpdate") manuell zuweisen, dann funktioniert alles.
Gruß Thomas