ADODB.Recordset Delete method causes ''Could not find server'' error

  • Hi

    I get a strange error while calling Delete method on ADODB.Recordset.

    Microsoft OLE DB Provider for SQL Server error '80004005'

    Could not find server 'MyServerName' in sysservers. Execute sp_addlinkedserver to add the server to sysservers.

    I reproduced the behaviour in a very simple test program. It connects to fresh local test database, creates and fills a table and then tries to delete rows using ADODB.Recordset.

    I suppose the problem emerged after promoting the server to domain controller.

    Thanks in advance

    Kuba

    -------------------------------------------------------------

    Test VBScript program

    Dim connectionString, conn, rs

    connectionString = "Provider=SQLOLEDB;Data Source=(local);Initial Catalog=testb"

    Set conn = Server.CreateObject("ADODB.Connection")

    conn.Open connectionString, dbUser, dbPassword

    conn.Execute "if exists(select * from sysobjects where name = 'qqq') drop table qqq"

    conn.Execute "create table qqq (aaaaa int identity, bbbbb int)"

    conn.Execute "insert into qqq (bbbbb) values(3)"

    Set rs = Server.CreateObject("ADODB.Recordset")

    rs.LockType = adLockPessimistic

    rs.Open "select * from qqq", conn, adOpenKeyset

    While Not rs.EOF

       rs.Delete  '!!!!!  Here

       rs.MoveNext

    Wend

    rs.Close

  • This worked fine for me once I dropped the "Server." from the "Server.CreateObject".  Your vbs file should only have

    Set conn = CreateObject("ADODB.Connection")

    Set rs = CreateObject("ADODB.Recordset")

    I also changed your lock enumerator from adLockPessimistic to 2 (ie the numeric constant for that lock type)

    worked a treat after that.  The full code that worked is:

    Dim connectionString, conn, rs

    connectionString = "Provider=SQLOLEDB;Data Source=(local);Initial Catalog=testb"

    Set conn = CreateObject("ADODB.Connection")

    conn.Open connectionString, dbUser, dbPassword

    conn.Execute "if exists(select * from sysobjects where name = 'qqq') drop table qqq"

    conn.Execute "create table qqq (aaaaa int identity, bbbbb int)"

    conn.Execute "insert into qqq (bbbbb) values(3)"

    Set rs = CreateObject("ADODB.Recordset")

    rs.LockType = 3

    rs.Open "select * from qqq", conn, adOpenKeyset

    While Not rs.EOF

       rs.Delete  '!!!!!  Here

       rs.MoveNext

    Wend

    rs.Close

  • Unfortunately it did not help. I think the program is correct. It works on most computers, except for the domain controller. It also worked on that computer before configuration changes.

  • I am also faced same problem, and i fixed in the following way:

    This problem arises if you had changed computer's name.

    execute this query in sql server:

    select @@servername as 'server name'

    This should return the currect name of your server (<server or computername>\<instance name>)

    If it returns value other than your server then execute this command:

    sp_dropserver '<OldServerName>\<InstanceName>'

    -- eg: sp_dropserver 'MyComputersOldName_OrAnyOtherServerName\SQLExpress'

    sp_addserver '<NewServerName>\<InstanceName>' , 'local'

    -- eg: sp_addserver 'MyComputersCurrentName\SQLExpress' , 'local'

    Then restart sql server, and check again ther servernames by executing

    select @@servername as 'server name'

    If it returns 'NULL' value then repeat the above commands as:

    sp_dropserver '<CurrentServerName>\<InstanceName>'

    sp_addserver '<CurrentServerName>\<InstanceName>', 'local'

    Then again restart sql server.

  • Thank you very much. It sounds good.

    Regards

    Kuba

Viewing 5 posts - 1 through 4 (of 4 total)

You must be logged in to reply to this topic. Login to reply