Einzelnen Beitrag anzeigen

Perlsau
(Gast)

n/a Beiträge
 
#1

Unbekannter Fehler MsSQL AdoDataset.Append

  Alt 16. Dez 2012, 19:39
Datenbank: MsSQL • Version: 2012 • Zugriff über: dbGo (Ado)
Guten Abend allerseits,

ich habe folgendes Problem mit einer lokalen MsSQL-Datenbank, auf die ich via dbGo-Komponenten zugreife: Wenn ich einen neuen Datensatz via Dataset.Append oder auch Dataset.Insert anlege, kommt einer Fehlermeldung (unbekannter Fehler) noch vor dem Post bereits bei der Zuweisung Dataset.FieldByName('Feldname').AsString := 'Inhalt'; . Mache ich dasselbe jedoch via SQL (TAdoQuery.ExecSQL), klappt die Zuweisung fehlerfrei.

Anfangs hatte ich durch allerlei Recherchen und Herumprobieren den Eindruck erhalten, es läge vielleicht daran, daß ich datensensitive Komponenten wie TDbEdit usw. einsetze. Der Fehler tauchte nämlich bereits beim Verlassen eines datensensitiven Eingabefeldes auf. Nach der mühevollen Umstellung auf "normale" Eingabefelder erschien jedoch derselbe unbekannte Fehler beim Zuweisen. Seltsamerweise kann ich Daten in die Felder eines bereits bestehenden Datensatzes ohne Fehler zuweisen (Dataset.Edit).

Nun habe ich irgendwo gelesen, es handle sich um ein Entwurfsproblem, jedoch keine weiteren Hinweise gefunden, was ich beim Entwurf (create table) der Tabelle falsch gemacht haben könnte. Das letzte Änderungsscript:
Code:
/*
   Sonntag, 16. Dezember 2012 00:56:49
*/

BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
GO
ALTER TABLE dbo.FilmTitel
   DROP CONSTRAINT DF_Titel_Filmtitel
GO
ALTER TABLE dbo.FilmTitel
   DROP CONSTRAINT DF_FilmTitel_Dauer
GO
ALTER TABLE dbo.FilmTitel
   DROP CONSTRAINT DF_FilmTitel_Medium
GO
ALTER TABLE dbo.FilmTitel
   DROP CONSTRAINT DF_FilmTitel_Jahr
GO
ALTER TABLE dbo.FilmTitel
   DROP CONSTRAINT DF_FilmTitel_Format
GO
ALTER TABLE dbo.FilmTitel
   DROP CONSTRAINT DF_FilmTitel_markiert
GO
ALTER TABLE dbo.FilmTitel
   DROP CONSTRAINT DF_FilmTitel_gesehen
GO
ALTER TABLE dbo.FilmTitel
   DROP CONSTRAINT DF_FilmTitel_FSK
GO
CREATE TABLE dbo.Tmp_FilmTitel
   (
   Idx_Titel bigint NOT NULL IDENTITY (1, 1),
   Titel_Name varchar(100) COLLATE Latin1_General_CI_AS NOT NULL,
   Dauer smallint NOT NULL,
   Medium varchar(50) COLLATE Latin1_General_CI_AS NULL,
   Jahr smallint NULL,
   Inhalt text COLLATE Latin1_General_CI_AS NULL,
   Format smallint NOT NULL,
   markiert bit NOT NULL,
   gesehen bit NOT NULL,
   FSK smallint NOT NULL
   ) ON [PRIMARY]
    TEXTIMAGE_ON [PRIMARY]
GO
ALTER TABLE dbo.Tmp_FilmTitel SET (LOCK_ESCALATION = TABLE)
GO
DECLARE @v sql_variant
SET @v = N'Index für Filmtitel'
EXECUTE sp_addextendedproperty N'MS_Description', @v, N'SCHEMA', N'dbo', N'TABLE', N'Tmp_FilmTitel', N'COLUMN', N'Idx_Titel'
GO
DECLARE @v sql_variant
SET @v = N'Titel des Films'
EXECUTE sp_addextendedproperty N'MS_Description', @v, N'SCHEMA', N'dbo', N'TABLE', N'Tmp_FilmTitel', N'COLUMN', N'Titel_Name'
GO
ALTER TABLE dbo.Tmp_FilmTitel ADD CONSTRAINT
   DF_Titel_Filmtitel DEFAULT ('Filmtitel') FOR Titel_Name
GO
ALTER TABLE dbo.Tmp_FilmTitel ADD CONSTRAINT
   DF_FilmTitel_Dauer DEFAULT ((0)) FOR Dauer
GO
ALTER TABLE dbo.Tmp_FilmTitel ADD CONSTRAINT
   DF_FilmTitel_Medium DEFAULT ('_unbekannt') FOR Medium
GO
ALTER TABLE dbo.Tmp_FilmTitel ADD CONSTRAINT
   DF_FilmTitel_Jahr DEFAULT ((2000)) FOR Jahr
GO
ALTER TABLE dbo.Tmp_FilmTitel ADD CONSTRAINT
   DF_FilmTitel_Format DEFAULT ((0)) FOR Format
GO
ALTER TABLE dbo.Tmp_FilmTitel ADD CONSTRAINT
   DF_FilmTitel_markiert DEFAULT ((0)) FOR markiert
GO
ALTER TABLE dbo.Tmp_FilmTitel ADD CONSTRAINT
   DF_FilmTitel_gesehen DEFAULT ((0)) FOR gesehen
GO
ALTER TABLE dbo.Tmp_FilmTitel ADD CONSTRAINT
   DF_FilmTitel_FSK DEFAULT ((0)) FOR FSK
GO
SET IDENTITY_INSERT dbo.Tmp_FilmTitel ON
GO
IF EXISTS(SELECT * FROM dbo.FilmTitel)
    EXEC('INSERT INTO dbo.Tmp_FilmTitel (Idx_Titel, Titel_Name, Dauer, Medium, Jahr, Inhalt, Format, markiert, gesehen, FSK)
      SELECT Idx_Titel, Titel_Name, Dauer, Medium, Jahr, Inhalt, Format, markiert, gesehen, FSK FROM dbo.FilmTitel WITH (HOLDLOCK TABLOCKX)')
GO
SET IDENTITY_INSERT dbo.Tmp_FilmTitel OFF
GO
DROP TABLE dbo.FilmTitel
GO
EXECUTE sp_rename N'dbo.Tmp_FilmTitel', N'FilmTitel', 'OBJECT'
GO
ALTER TABLE dbo.FilmTitel ADD CONSTRAINT
   PK_FilmTitel PRIMARY KEY CLUSTERED
   (
   Idx_Titel
   ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

GO
COMMIT
select Has_Perms_By_Name(N'dbo.FilmTitel', 'Object', 'ALTER') as ALT_Per, Has_Perms_By_Name(N'dbo.FilmTitel', 'Object', 'VIEW DEFINITION') as View_def_Per, Has_Perms_By_Name(N'dbo.FilmTitel', 'Object', 'CONTROL') as Contr_Per

Geändert von Perlsau (16. Dez 2012 um 20:51 Uhr) Grund: Überschrift ergänzt
  Mit Zitat antworten Zitat