Avatar billede krc_ Nybegynder
13. september 2003 - 01:28 Der er 7 kommentarer og
2 løsninger

Problemer med ID ved delete

Hej !

Jeg har problemer med at slette fra min access database.
Jeg har 2 filer

Fil 1 :

<html>
<head>
<title>Delete Entry Select</title>
</head>
<body bgcolor="white" text="black">
<%
'Dimension variables
Dim adoCon             'Holds the Database Connection Object
Dim rsGuestbook            'Holds the recordset for the records in the database
Dim strSQL            'Holds the SQL query for the database

'Create an ADO connection odject
Set adoCon = Server.CreateObject("ADODB.Connection")

'Set an active connection to the Connection object using a DSN-less connection
adoCon.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("krcDB.mdb")

'Create an ADO recordset object
Set rsGuestbook = Server.CreateObject("ADODB.Recordset")

'Initialise the strSQL variable with an SQL statement to query the database
strSQL = "SELECT testtabel.* FROM testtabel;"

'Open the recordset with the SQL query
rsGuestbook.Open strSQL, adoCon

'Loop through the recordset
Do While not rsGuestbook.EOF
   
    'Write the HTML to display the current record in the recordset
    Response.Write ("<br>")
    Response.Write ("<a href=""delete_entry.asp?ID=" & rsGuestbook("ID_no") & """>")
    Response.Write (rsGuestbook("Forfatter"))
    Response.Write ("</a>")
    Response.Write ("<br>")
    Response.Write (rsGuestbook("Fangstmnd"))
    Response.Write ("<br>")
    Response.Write (rsGuestbook("Fangst"))
    Response.Write ("<br>")
    Response.Write (rsGuestbook("Vaegt"))
    Response.Write ("<br>")
    Response.Write (rsGuestbook("Sted"))
    Response.Write ("<br>")
    Response.Write (rsGuestbook("Metode"))
    Response.Write ("<br>")
    Response.Write (rsGuestbook("Beretning"))
    Response.Write ("<br>")

    'Move to the next record in the recordset
    rsGuestbook.MoveNext

Loop

'Reset server objects
rsGuestbook.Close
Set rsGuestbook = Nothing
Set adoCon = Nothing
%>
</body>
</html>


Fil 2:

<%
'Dimension variables
Dim adoCon             'Holds the Database Connection Object
Dim rsDeleteEntry        'Holds the recordset for the record to be deleted
Dim strSQL            'Holds the SQL query for the database
Dim lngRecordNo            'Holds the record number to be deleted

'Read in the record number to be deleted
lngRecordNo = CLng(Request.QueryString("ID"))

'Create an ADO connection odject
Set adoCon = Server.CreateObject("ADODB.Connection")

'Set an active connection to the Connection object using a DSN-less connection
adoCon.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("krcDB.mdb")

'Create an ADO recordset object
Set rsDeleteEntry = Server.CreateObject("ADODB.Recordset")

'Initialise the strSQL variable with an SQL statement to query the database
strSQL = "SELECT testtabel.* FROM testtabel WHERE ID_no=" & lngRecordNo

'Set the lock type so that the record is locked by ADO when it is deleted
rsDeleteEntry.LockType = 3

'Open the recordset with the SQL query
rsDeleteEntry.Open strSQL, adoCon

'Delete the record from the database
rsDeleteEntry.Delete

'Reset server objects
rsDeleteEntry.Close
Set rsDeleteEntry = Nothing
Set adoCon = Nothing

'Return to the delete select page incase another record needs deleting
Response.Redirect "delete_select.asp"
%>


Den sletter fint den første man vælger med så begynder der at kommer problemer. Den skriver noget med at den række den forventede var der ikke kunne slettes da den ikke findes eller lign. Det er sikkert noget med den ID der er forkert. Kan nogle finde fejlen ??
Avatar billede krc_ Nybegynder
13. september 2003 - 01:40 #1
Microsoft OLE DB Provider for ODBC Drivers error '80004005'

Query-based delete failed because the row to delete could not be found.

/delete_entry.asp, line 30
Avatar billede thesurfer Nybegynder
13. september 2003 - 03:00 #2
hvis id'en ikke eksisterer kan den selvfølgeligt ikke slettes.. prøver du på at slette samme id 2 gange?
Avatar billede thesurfer Nybegynder
13. september 2003 - 03:22 #3
1) hvad er "testtabel." ?

2) mon det kan være denne linie der på en eller anden måde låser id'en?

'Set the lock type so that the record is locked by ADO when it is deleted
rsDeleteEntry.LockType = 3

prøv at kommentere linien, og afprøve scriptet igen:
'rsDeleteEntry.LockType = 3

3) hvad hedder filnavnene på fil1 og fil2? hvad indeholder filen "delete_select.asp"?


Jeg har lært om databaser fra www.html.dk/tutorials/asp (lektionerne 17-22).. lektion 21 er om sletning af data fra databasen.. kig lige på det..
Avatar billede krc_ Nybegynder
13. september 2003 - 07:21 #4
1) testtabel er navnet på min tabel i krcDb.mdb

2) Vil jeg lige prøve

3) fil 1 er delete_select.asp og fil 2 er delete_entry.asp
Avatar billede erikjacobsen Ekspert
13. september 2003 - 08:10 #5
Du kan evt

if not rsDeleteEntry.Eof then
  'Delete the record from the database
  rsDeleteEntry.Delete
end if
Avatar billede eagleeye Praktikant
13. september 2003 - 12:26 #6
Hvi du bruger en SQL sætning til det behøver du ingen recordset, og du behøver ikke tænke på om den findes. Du beholder bare din connection som du har og så en simple sql:

strSQL = "delete FROM testtabel WHERE ID_no=" & lngRecordNo
adoConn.Execute(strSQL)
Avatar billede thesurfer Nybegynder
13. september 2003 - 18:17 #7
hvad er det for en metode kry_ bruger?
jeg plejer altid at bruge metoden beskrevet på html.dk ..
hvad er forskellen? hvad er "bedst"?
Avatar billede krc_ Nybegynder
15. september 2003 - 10:41 #8
Nå ... det endte med at jeg fandt et helt andet eksempel på hvordan man sletter. Og det blev mere i stil med eagleeye's forslag. Så hvis du vil svare, så kan I dele point
Avatar billede eagleeye Praktikant
15. september 2003 - 17:05 #9
Ok ;) et svar fra mig så.
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

Seneste spørgsmål Seneste aktivitet
I går 21:00 Libre Office Impress Af Frank i Andre styresystemer
I går 11:47 VB script Af Jenshentze i Word
I går 11:21 Popup ved opstart Af mort1 i Windows
04/0918:50 Slet lokal konto Af ErikHg i Windows
04/0916:05 Ændre tal i en celle Af xvid i Excel