Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makale, Datetime alanında varsayılan değere sahip SQL Server tablosuna kayıt eklemek için istemci imlecini kullandığınızda oluşan sorunu çözmenize yardımcı olur.
Özgün ürün sürümü: SQL Server
Özgün KB numarası: 279888
Belirtiler
İstemci tarafı kayıt kümesi aracılığıyla yeni bir kaydı varsayılan değere sahip null atanamaz datetime bir alana sahip bir SQL Server tablosuna eklemek için ADO kullanırsanız, alan için datetime bir değer sağlamazsanız aşağıdaki hata iletisini alırsınız:
Çalışma zamanı hatası '-2147217887 (80040e21)': Çok adımlı işlem hatalar oluşturdu. Her durum değerini denetleyin.
Bu hata, SQL Server için OLE DB Sağlayıcısını veya ODBC Sürücüleri için OLE DB Sağlayıcısı'nı kullanmanız fark etmeksizin oluşur. Microsoft Veri Erişim Bileşenleri (MDAC) sürüm 2.5 Service Pack 1 (SP1) veya önceki bir sürümü kullandığınızda hata iletisi farklı olabilir. Bu hata sunucu tarafı imleçte oluşmaz.
Neden
Bu hata, türünün DBTYPE_DBTIMESTAMP DBTYPE_VARIANTdeğerini olarak dönüştürmeye çalıştığında İstemci İmleç Altyapısı'nda oluşur.
Çözüm
Bu sorunu geçici olarak çözmenin birkaç yolu vardır:
- Kayıt kümesi için sunucu tarafı imleci kullanın.
- Veritabanındaki alan için belirtilen varsayılan değeri kaldırın.
- Yeni bir kayıt eklediğinizde her zaman alan için bir değer belirtin.
Davranışı Yeniden Oluşturma Adımları
SQL Server'a null değerleri kabul etmeyen ve varsayılan değeri olan bir tarih saat alanı içeren bir tablo ekleyin. En az bir ek alan ekleyin. Bu makale için aşağıdaki SQL Server 2000 tablosu oluşturulur:
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[DateTest]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table [dbo].[DateTest] GO CREATE TABLE [dbo].[DateTest] ([DateId] [int] IDENTITY (1, 1) NOT NULL , [TestDate] [datetime] NOT NULL , [Nonsense] [varchar] (16) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ) ON [PRIMARY] GO ALTER TABLE [dbo].[DateTest] WITH NOCHECK ADD CONSTRAINT [DF_DateTest_TestDate] DEFAULT ('3/1/2001') FOR [TestDate], PRIMARY KEY CLUSTERED ([DateId] ) ON [PRIMARY] GOTabloya satır eklemek için aşağıdaki koda benzer bir kod çalıştırın.
Not
Bu kodu çalıştırmadan önce Kullanıcı Kimliği =<UID> ve parola =<strong parola> değerlerini doğru değerlerle değiştirmeniz gerekir. UID'nin <> bu işlemi veritabanında gerçekleştirmek için uygun izinlere sahip olduğundan emin olun. Ayrıca, alan için bir değer sağlamadığınızdan
datetimeemin olun.Dim cnn As ADODB.Connection Dim rst As ADODB.Recordset Set cnn = New ADODB.Connection cnn.Open "Provider=SQLOLEDB;Data Source=(local);" & _ "Initial Catalog=test;User Id=<UID>;Password=<strong password>;" Set rst = New ADODB.Recordset With rst .CursorLocation = adUseClient .Open "SELECT * FROM DateTest", cnn, adOpenStatic, adLockOptimistic .AddNew .Fields("Nonsense").Value = "test data" .Update End With Debug.Print rst("TestDate").ValueAlanın Value özelliğini
datetimeincelediğinizde yukarıda bahsedilen hata iletisini alırsınız.