Jag undrar vad det kan vara för fel på min kod när den gör så att min access-databas får följande symptom.
Jag laddar först ner den från webhotellet till min dator för att inspektera den.
Går in i tabellen users och scrollar till fältet relationer där det på vissa poster nu står #Fel. Då får jag upp en varningsruta där det står:
"Microsft Jet-databasmotorn avbröt uppdateringen eftersom du försökte att ändra data samtidigt som en annan användare"
Jag tar Databasverktyg -> Komprimera och reparera databas.
Nu har det skapats en ny tabell som heter MSysCompactError. När jag går in på den är där en massa poster (4 kolumner) ex:
ErrorCode|ErrorDescription|ErrorRecid|ErrorTable
-1661|Det går inte att hitta fältet 'Description'||users
Går in och kollar i users på relationer och istället för #Fel står där nu bara ##########
Vad är detta för knepigt fel och hur fixar jag det?
Det har ju något med min ASP-kod att göra.
Detta: "Microsft Jet-databasmotorn avbröt uppdateringen eftersom du försökte att ändra data samtidigt som en annan användare"
Brukar bero på att du har access öppet samtidigt som du försöker göra andra grejjor, du måste stänga ner det först.
Det andra har jag ingen aning om.
tror inte det hjälper men visst. Tror man måste utgå från felen i Access.
Men jag håller tummarna. Här kommer koden för när jag lagrar information i kolumnen relationer (där det står #Fel och ####### ibland)
VarDammit = "SELECT bjuden FROM fester WHERE festhos = " & Request.QueryString("ID")
RecSet.Open VarDammit, Connect, 3, 3
Dim Festfolk, Relationer
Festfolk = RecSet.GetRows()
RecSet.Close
For i = 0 To UBound(Festfolk, 2) ' Loopar från 0 till antal festfolk
VarDammit = "SELECT relationer FROM users WHERE ID = " & FestFolk(0, i)
RecSet.Open VarDammit, Connect, 3, 3
If Not RecSet.EOF Then
If isNull(RecSet("relationer")) Then
Relationer = ""
Else
Relationer = RecSet("relationer")
End If
RecSet.Close
If Instr(Relationer, Session("userID") & ",") = 0 And cInt(FestFolk(0, i)) <> cInt(Session("userID")) Or Relationer = "" And cInt(FestFolk(0, i)) <> cInt(Session("userID")) Then 'Om inte redan känner
VarDammit = "UPDATE users SET relationer = relationer & '" & Session("userID") & ",' WHERE ID = " & FestFolk(0, i)
Connect.Execute VarDammit,,128
VarDammit = "UPDATE users SET relationer = relationer & '" & FestFolk(0, i) & ",' WHERE ID = " & Session("userID")
Connect.Execute VarDammit,,128
End If
Else
RecSet.Close
End If
Next
Hrm. Det har väl blivit något korrupt i din databas.
1. Exportera hela databasen (alla tabeller var för sig) till textfiler.
2. Kolla i textfilerna ifall det är nåt konstigt i dem.
3. Skapa en nya access-databas.
4. Importera den gamla datan.
5. Testa.
jag har fått lite mer information. Tydligen kan detta ha med saken att göra:
"Error Description = The Microsoft Jet Database engine stopped the process
because you and another user are attempting to change the same data at the
same time"
Det är väl ganska vanligt om man använder ASP att flera användare försöker ändra data samtidigt. Det borde väl inte generera fel....
finns det något sätt att hindra det med vbscript/sql ?
Det är den som skriver till krångelfältet (relalationer) i huvudsak. Skulle vara evigt tacksam om någon kom på någon simpel lösning till mitt problem.
Men när man inte fått någon bra lösning på flera veckor börjar man tänka på mindre bra lösning och om felet då beror på att många skriver och ändrar till databasen samtidigt borde väl flera databaser hjälpa? Det verkar logiskt :)
Att skapa flera databaser till samma data är inte ett alternativ som inte får yttras högt i detta forum. ;)
1. Du kan inte göra JOIN:s mellan tabeller.
2. Du måste öppna flera connection-objekt. Prestandaförlust.
3. Du kommer få ett jädrans strul om du skall jämföra, iterera eller ändra data som ligger i separerade databaser.
4. Det är programmeringsmässigt sett fel.
Finns det någon .ldb-fil i samma mapp som databasen? Vilka användare har rätt att läsa/ändra databasen? Vilken drivrutin använder du när du öppnar en koppling mot databasen, hur ser din connection-sträng ut?
Hrm. Funderade lite på hur det skulle påverka om du öppnar databasen exklusivt, alltså en användare åt gången. Du får nog ett par rejäla väntetider för användare som placeras i kö, men det kan fungera..
en ldb-fil ser jag ibland men den försvinner lika fort när jag sen uppdaterar vyn.
Rätt att läsa/ändra databasen, huh? databasen ligger på loopia webhotell är det enda jag vet.