05. marts 2005 - 12:10Der er
12 kommentarer og 1 løsning
Historik ved sletning
Jeg har en noget data der kommer fra en forespørgsel. NÅr noget af dette data slettes vil jeg gerne gemme det i en anden tabel(Min historik). Problemet er at jeg ikke kan pege på det i min subform, da det kommer fra en forespørgsel og fange den eller de slettede rækker. Jeg har så fundet ud af at jeg kan gemme en delmængde af dataen i et recordset, og så sammenligne med et andet recordset efter sletningen er blevet effektueret. Jeg kan bare ikke lige gennemskue om jeg bruger de rigtige recordsets(adodb), for det virker som om det bare peger på databasen og ikke bliver gemt i det recordset jeg har oprettet i et modul. Når jeg så vil sammenligne, har begge recordsets det samme indhold, og så er det jo ligesom ligemeget... Desuden ved jeg ikke hvordan eller rettere hvornår sletningen er fundet sted i access. Er det Ondelete eller afterdelconfirm på formularen?
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
In a sub form you can delete more than one record at a time. So it could maybe be an idea to make your own delete procedure so that you can only delete the selected record. Then you should be able to insert the date into a historik table before the record actually gets deleted, for example in the BeforeDelConfirm event
Private Sub Form_BeforeDelConfirm(Cancel As Integer, _ Response As Integer) ' Suppress default Delete Confirm dialog box. Response = acDataErrContinue ' Display custom dialog box. If MsgBox("Delete this record?", vbOKCancel) = vbCancel Then Cancel = True else '''>>>>>Insert into your historik table here End If End Sub
You can remove the record selectors in form properties.
Thomas> Jeg har kigget lidt på dit eksempel, men stod af da der stod noget om det kune skulle være i en form baseret på tabeller og ikke forespørgsler, er det ikke rigtigt? Jeg skal kode rimeligt meget om, hvis jeg skal ændre det til at være baseret på tabeller, så jeg ville egentligt helst gøre det som beskrevet i toppen, hvis altså det kan lade sig gøre.
Terry> Hvis jeg har to løkker hvor jeg gennemløber og sammenligner de to recordsets, vil det vel ikke være et problem at have flere sletninger ad gangen?
Jeg forstår stadig ikke hvorfor jeg ikke kan gemme et recordset før jeg sletter og så sammenligne med et andet efter sletningen uden at de første bliver opdateret og dermed magne til det andet. Skal det monstro gemes i et array, og hvordan gøres det så? Jeg tænker at recordset er gemt som pointere og ikke fysisk, det er sgu så længe siden jeg har beskæftiget mig med dette, så jeg kan ikke huske hvordan det er med pointere og det...
In the form load I initilalize the recordset which is declared at the top of the form (Dim rs As ADODB.Recordset) It needs to be opened with the same record source which you have in the form.
Now when I deleted records I compare a recordset which is a copy of the forms record set against the recordset I made when I opened the form.
I have placed the code in the BeforeDelConfirm event but it should maybe be moved to the AFTER delete event.
You will also need to refresh the recordset (rs) so that it is up to date.
Jeg tror jeg er ved at have den, selvom jeg synes at access opfører sig ulogisk. Ind i mellem får jeg at vide at noget af mit første recordset er blevet slettet, men det er kun i de felter der er tomme, hmm!
Terry> Det er stort set det samme som du foreslår, jeg har gjort. Jeg opretter det første recordset under beforedelconfirm og det andet ved afterdelconfirm, og det funger, bortset fra førnævnte lille detalje, men en anden ting der undrer mig, er at jeg ikke kan se den opdaterede record i min historiktabel, før der er gået noget tid, nogen gange op til en halv time efter! Jeg har delt databasen, så der er vel en forsinkelse på, men SÅ meget når tabellerne ligger på samme maskine som jeg arbejder på??!!
The records you write to the historik table should be visible as soon as they are written. Íf you have a recordset open on the historik table then you maybe need to refresh it.
The recordset which is to hold the original data should be opened as early as possible I think
It looks fine to me. I'm sure there are other ways to do this and some may be a little faster. But when we are only talking of a limited number of records I think this way is fine.
and thanks for the points
Synes godt om
Ny brugerNybegynder
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.