![]() |
Datenbank: MsSQL • Version: 2012 • Zugriff über: dbGo (Ado)
Unbekannter Fehler MsSQL AdoDataset.Append
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
Delphi-Quellcode:
. Mache ich dasselbe jedoch via SQL (TAdoQuery.ExecSQL), klappt die Zuweisung fehlerfrei.
Dataset.FieldByName('Feldname').AsString := 'Inhalt';
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 |
AW: Unbekannter Fehler MsSQL AdoDataset.Append
Welche Fehlermeldung ist es genau?
Welcher Code führt zu dem Fehler? Der dargestellte ist ja offenbar Pseudocode.. |
AW: Unbekannter Fehler MsSQL AdoDataset.Append
Das dargestellte ist ein SQL-Script der die Struktur der Tabellen beschreibt(eigentlich ein Änderungsscript).
Hast Du einmal versucht wie sich das ganze Verhält wenn Du - die Spalten die in der DB einen Defaultwert bekommen im AfterInsert codeseitig mit Werten vorbelegst - Serverseitige Cursor verwendest |
AW: Unbekannter Fehler MsSQL AdoDataset.Append
Muss man nicht bei MSSQL auf case-sensitive achten?
|
AW: Unbekannter Fehler MsSQL AdoDataset.Append
Zitat:
![]() |
AW: Unbekannter Fehler MsSQL AdoDataset.Append
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Zitat:
Zitat:
Ich hab eben nach dem Frühstück eine Testanwendung und eine Testdatenbank mit drei Tabellen angelegt: Einmal Person mit Personendaten und einmal Land mit ein paar EU-Ländern, auf die das Feld Land aus der Tabelle Person verweist. Danach hab ich in meiner Testanwendung DB-Editfelder und eine TDBLookUpComboBox eingebaut und konnte editieren und einfügen (Dataset.Edit und Dataset.Append bzw. Dataset.Insert) ohne Fehlermeldung. Dann hab ich mir noch eine Tabelle (DBGrid) auf die Form geklatscht. Noch immer funktionierte alles bestns. So, und jetzt kommt's: Nachdem ich im Feld-Editor des Datasets für die Pesonendaten (Aset_Person) ein neues Feld angelegt hatte, erschien wieder dieser unbekannte Fehler beim Wechsel von einem Editfeld ins nächste. Dieses neue Feld, das einfach für den Integer-Wert im Feld Land der Tabelle Person das entsprechende Land statt dem Index anzeigt, benötige ich für die Tabellendarstellung im DBGrid. Ich werde nun einmal versuchen, mit einem View zu arbeiten, da die Tabelle ja ReadOnly ist und ich so den Landnamen schon im View (in der Datenbank) ermitteln und betreitstellen kann. |
Nachtrag: gelöst
Ich habe jetzt aufgrund des Hinweises von Bummi die Lösung gefunden:
Wenn ich statt in AfterInsert gleich nach dem Dataset.Append die entsprechenden Spalten vorbelege – nämlich die mit einem Fremdschlüssel –, erscheint der Fehler nicht. Hurra :thumb: Und ich hab heute nacht bis in die frühen Morgenstunden herumprobiert, aber darauf bin ich nicht gekommen :? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:15 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz