AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Unbekannter Fehler MsSQL AdoDataset.Append
Thema durchsuchen
Ansicht
Themen-Optionen

Unbekannter Fehler MsSQL AdoDataset.Append

Ein Thema von Perlsau · begonnen am 16. Dez 2012 · letzter Beitrag vom 17. Dez 2012
Antwort Antwort
Perlsau
(Gast)

n/a Beiträge
 
#1

Unbekannter Fehler MsSQL AdoDataset.Append

  Alt 16. Dez 2012, 20: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 21:51 Uhr) Grund: Überschrift ergänzt
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#2

AW: Unbekannter Fehler MsSQL AdoDataset.Append

  Alt 17. Dez 2012, 08:49
Welche Fehlermeldung ist es genau?
Welcher Code führt zu dem Fehler? Der dargestellte ist ja offenbar Pseudocode..
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#3

AW: Unbekannter Fehler MsSQL AdoDataset.Append

  Alt 17. Dez 2012, 09:41
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
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.736 Beiträge
 
Delphi 6 Enterprise
 
#4

AW: Unbekannter Fehler MsSQL AdoDataset.Append

  Alt 17. Dez 2012, 10:08
Muss man nicht bei MSSQL auf case-sensitive achten?
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#5

AW: Unbekannter Fehler MsSQL AdoDataset.Append

  Alt 17. Dez 2012, 10:32
Zitat:
Sie können die Nichtunterscheidung nach Groß-/Kleinbuchstaben durch Angeben von "_CI" explizit auswählen.
http://msdn.microsoft.com/de-de/libr...3-a4c39b0f39eb
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#6

AW: Unbekannter Fehler MsSQL AdoDataset.Append

  Alt 17. Dez 2012, 12:34
Welche Fehlermeldung ist es genau?
Es gibt keine genaue Fehlermeldung. Im Error-Fenster steht lediglich "Unbekannter Fehler". Alle Zuweisungen führen zu dieser Fehlermeldung.

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
Bei Vorbelegung geschieht das Gleiche. Der serverseitige Cursor hat nur die eine Auswirkung: alles wird viel viel langsamer.

Muss man nicht bei MSSQL auf case-sensitive achten?
Muß man, wenn das eingestellt ist. Hat aber mit meinem Problem nicht zu tun.

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.
Miniaturansicht angehängter Grafiken
neuesfeld.jpg  

Geändert von Perlsau (17. Dez 2012 um 12:46 Uhr)
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#7

Nachtrag: gelöst

  Alt 17. Dez 2012, 12:44
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

Und ich hab heute nacht bis in die frühen Morgenstunden herumprobiert, aber darauf bin ich nicht gekommen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz