Aanmelden met Microsoft
Meld u aan of maak een account.
Hallo,
Selecteer een ander account.
U hebt meerdere accounts
Kies het account waarmee u zich wilt aanmelden.

Symptomen

Als u ADO een nieuwe record in een recordset aan de clientzijde invoegen in een SQL Server-tabel met een niet null datum/tijd-veld met een standaardwaarde gebruikt, wordt het volgende foutbericht weergegeven als u een waarde voor de datum/tijd-veld niet opgeeft:

Runtime-fout "-2147217887 (80040e21)": meerdere stappen bewerking gegenereerde fouten. Controleer alle statuswaarden.

Deze fout treedt op of u de OLE DB-Provider voor SQL Server of de OLE DB-Provider voor ODBC-stuurprogramma's. Het foutbericht kan verschillen wanneer u Microsoft Data Access Components (MDAC) versie 2.5 Service Pack 1 (SP1) of lager. Deze fout treedt niet op met een cursor aan de serverzijde.

Oorzaak

Deze fout treedt op in de Client Cursor Engine wanneer wordt geprobeerd de waarde van het type DBTYPE_DBTIMESTAMP converteren naar DBTYPE_VARIANT.

Oplossing

Er zijn verschillende manieren om dit probleem te omzeilen:

  • Een cursor aan de serverzijde gebruiken voor de recordset.

  • De standaardwaarde die is opgegeven voor het veld in de database verwijderen.

  • Altijd een waarde voor het veld opgeven als u een nieuwe record toevoegt.

Status

Microsoft heeft bevestigd dat dit zich kan voordoen in de Microsoft-producten die aan het begin van dit artikel worden vermeld.

Meer informatie

Stappen om het probleem te reproduceren

  1. Toevoegen aan een tabel met SQL Server met een datum/tijd-veld geen null-waarden en die accepteert een standaardwaarde heeft. Ten minste één extra veld bevatten. Voor dit artikel, is in de volgende tabel voor SQL Server 2000 gemaakt:

    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]
    GO
  2. Als u wilt een rij in de tabel invoegen, code die vergelijkbaar is met de volgende code worden uitgevoerd.

    Opmerking Moet u gebruikers-ID = < UID > en wachtwoord = < wachtwoord > op de juiste waarden voordat u deze code uitvoert. Zorg dat < UID > heeft de juiste machtigingen voor deze bewerking uitvoeren op de database. Zorg er ook voor dat u een waarde voor de datum/tijd-veld niet opgeeft.

        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").Value

    U ontvangt het hierboven vermelde foutbericht wordt weergegeven wanneer u de eigenschap Value van het datum/tijd-veld.

Meer hulp nodig?

Uw vaardigheden uitbreiden

TRAINING VERKENNEN >

Als eerste nieuwe functies krijgen

DEELNEMEN AAN MICROSOFT 365 INSIDERS >

Was deze informatie nuttig?

Hoe tevreden bent u met de taalkwaliteit?
Wat heeft uw ervaring beïnvloed?

Hartelijk dank voor uw feedback.

×