Avatar billede krogstrup Nybegynder
01. april 2007 - 01:11 Der er 3 kommentarer og
1 løsning

fejl ved sletning af data i ms sql server via recordset

Hej Alle

Jeg har lidt problemer med en fejl, der opstår når jeg forsøger at slette nogle data i en ms sql server. Men fejlen opstår kun når jeg kører min applikation fra vores "live" webserver og sammen med "live" sql serveren. På mit test setup fungerer koden upåklageligt og jeg kan slette uden problemer. Jeg formoder derfor det ikke er min asp kode den er gal med, men opsætningen af "live" sql serveren.

Fejlen ser således ud:

Microsoft OLE DB Provider for ODBC Drivers error '80004005'

[Microsoft][ODBC SQL Server Driver][SQL Server]Could not find server 'XXXXX' in sysservers. Execute sp_addlinkedserver to add the server to sysservers.

/admin/includes/asp/functions.asp, line 293

Det skal nævnes at 'XXXXX' naturligvis i den originale fejlbesked refererer til servernavnet for sql serveren.

Her er den funktion der får fejlen til at opstå:

function doPagesDelete(intParentId,intFirstRun)
    dim sql, sql2, parentId, intCountDeletedPages, rs, strColumn
    if intFirstRun = 1 then strColumn = "id" else strColumn = "parent_id"
    sql = "select id from pages where " & strColumn & " = '" & intParentId & "'"
    set rs = Server.CreateObject("ADODB.RecordSet")
    rs.ActiveConnection = db
    rs.Source = sql
    rs.CursorType = 1
    rs.LockType = 3
    rs.Open
    do while not rs.eof
        intCountDeletedPages = doPagesDelete(rs("id"),0) + intCountDeletedPages
        sql2 = "delete from products_pagebindings where page_id = '" & rs("id") & "'"
        db.execute(sql2)
        rs.delete
        rs.update
        rs.movenext
        intCountDeletedPages = intCountDeletedPages + 1
    loop
    rs.Close
    set rs = Nothing
    doPagesDelete = intCountDeletedPages
end function

Det er en rekursiv funktion, der har til formål at slette den ønskede side fra databasen, men også alle sidens eventuelle undersider og undersider til disse osv osv.

Når der i fejlbeskeden refereres til linie 293 svarer det i ovenstående funktion til linie 15:

rs.delete

Fejlen opstår altså når jeg forsøger at slette en side i mit recordset via rs.delete - men fejlen opstår ikke når jeg kører scriptet op imod en anden sql server.

Det skal nævnes at hvis jeg forsøger at slette elementer i "live" databasen via ordinære sql sætninger der blot executes direkte mod et connection objekt, så kan jeg slette uden problemer. Det er altså i denne sammenhæng tilsyneladende fordi jeg bruger et recordset at fejlen opstår.

Kan nogen hjælpe mig videre til en løsning ?!?
Avatar billede madeindk Nybegynder
01. april 2007 - 01:36 #1
Du må være ved at være træt Krogstrup (hilsen Søren fra DW) ;-) Men du sletter jo allerede posten en gang i den forrige SQL sætning. Vil nok foreslå den skal se sådan her ud:

function doPagesDelete(intParentId,intFirstRun)
    dim sql, sql2, parentId, intCountDeletedPages, rs, strColumn
    if intFirstRun = 1 then strColumn = "id" else strColumn = "parent_id"
    sql = "select id from pages where " & strColumn & " = '" & intParentId & "'"
    set rs = Server.CreateObject("ADODB.RecordSet")
    rs.ActiveConnection = db
    rs.Source = sql
    rs.CursorType = 1
    rs.LockType = 3
    rs.Open
    do while not rs.eof

        intCountDeletedPages = doPagesDelete(rs("id"),0) + intCountDeletedPages
        sql2 = "delete from products_pagebindings where page_id = '" & rs("id") & "'"
        db.execute(sql2)

        rs.movenext
        intCountDeletedPages = intCountDeletedPages + 1
    loop
    rs.Close
    set rs = Nothing
    doPagesDelete = intCountDeletedPages
end function
Avatar billede krogstrup Nybegynder
01. april 2007 - 21:24 #2
Hej Søren

Jeg forstår ikke helt hvad du mener med at "jeg sletter posten i forrige sql sætning" ?!?

I den ene sql sletter jeg jo fra tabellen 'pages' og i den anden sql fra tabellen 'products_pagebindings'

Desuden fejler koden jo heller ikke når jeg tester det på et andet servermiljø, hvilket indikerer at der ikke er tale om nogen kodefejl...

Hilsen Krogstrup
Avatar billede madeindk Nybegynder
02. april 2007 - 09:03 #3
Nårh ja, det havde jeg ikke set. Kan det ikke ha noget med rettigheder til recordsetet at gøre? Det synes jeg det lugter lidt hen af :)
Avatar billede krogstrup Nybegynder
02. april 2007 - 22:23 #4
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester