02. oktober 2007 - 12:22Der er
17 kommentarer og 2 løsninger
Kopi af record
Jeg skal bruge en funktion, der laver en kopi af en record og tilføjer den i databasen. Hvad gør jeg galt ?
Dim db As Database Dim rst As DAO.Recordset Dim r() As DAO.Field Dim i As Integer Dim iFieldsCount As Integer
Set db = CurrentDb Set rst = db.OpenRecordset("SELECT * FROM Personer")
rst.movefirst rst.move 5 'har blot tilføjet dette, som eksempel
ReDim Preserve r(1 To rst.Fields.Count) For i = 1 To iFieldsCount - 1 Set r(i) = rst.Fields(i) r(i).Value = rst.Fields(i).Value Next
rst.AddNew For i = 1 To iFieldsCount - 1 rst.Fields(i).Value = r(i).Value Next rst.Update
rst.Close
Felterne i r() arrayet bliver sat til null. Hvad gør jeg galt ? Jeg ved Esperten.dk har et eksempel med kopi af records, men det tager vidst kun kopien af den sidste recordet i recordsettet, og bruger som default-værdier
Lets say we have a table with a number of fields and one is an autonumber.
Make an append query where you append the records you want WITHOUT the ID, this gets generated automatically.
Add a paramater to the query by right clicking in the area where teh table is and choose parameters. Give it a name (ID) and choose longer integer as type.
Now you query will look something like this.
PARAMETERS ID Long; INSERT INTO tbl1 ( Dato, Lonnummer, afdeling ) SELECT tbl1.Dato, tbl1.Lonnummer, tbl1.afdeling FROM tbl1 WHERE (((tbl1.ID)=[ID]));
If you run th equery you will get prompted for the ID, but if you do it in code you can set the parameter to what ever you want.
EG:
PARAMETERS ID Long; INSERT INTO tbl1 ( Dato, Lonnummer, afdeling ) SELECT tbl1.Dato, tbl1.Lonnummer, tbl1.afdeling FROM tbl1 WHERE (((tbl1.ID)=[ID]));
schoesler: Det var næsten for nemt til at være sandt. Og det bar for nemt... umiddelbart. I den form der skal kopieres er der også et felt som skal udfyldes manuelt, men som ikke må indeholde dubletter.
I formen er der nogle subforms - der lader til at blive opdateret / relinked.
Og i nogle tilfælde får jeg også meddelelse om at poster vil blive lagt i tabellen "Indsætningsfejl".
Terry: Good work. But Schoesler's example moves the record-browser to the last record in the forms recordset. Further more, I tested your first tip, using docmd.runsql when click-event on a simple button. But Nothings happend. After having tested schoesler's hook, I found that your SQL maybee is the best. Plz remark that the form has some subforms, including som datasheets, but using SQL this may be a smaller prob. So: How navigate to the newest record using VBA and update a bound datasheet are the final issues.
Every day I get new features of Access.... :o) Now Terry, when I got the dmax-value, I want view the new record. How do I move the form to the new record ?
Set rs = [Forms]![Personer].Recordset.Clone rs.FindFirst "[Personkonto] = " & CStr(lPersonkonto) If Not rs.EOF Then [Forms]![Personer].Recordset.Bookmark = rs.Bookmark
All right, but could I use the docmd.gotorecord instead of setting a bookmark ?
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.