I lang tid har samarbejdsbranchen fokuseret på at forbedre enhedsfunktioner – bedre kameraer, klarere lyd og smartere software. Men den virkelige forvandling handler ikke om funktioner.
Ja det burde nok kunne lave sig goere via kode idet du jo kender felt-vaerdien i tabel 1 som er relateret til tabel 2 osv.
List svaert at formulere praecist unde mere info, men du kan bruge et SQL udtryk i stil med: INSERT INTO TBL2 SELECT * FROM TBL2 WHERE TBL2.Relationsfelt = vaerdien fra TBL1
Jeg har lavet en DB med de beskrevne tabeller, et modul indeholdende koden, en formular med en knap der starter koden. Det virker ikke.... Jeg har forsøgt at sætte lngOrgID = "1" ....
Den kommer til Set recOrgNew = db.OpenRecordset("tblOrganisationer")hvorefter den springer til fejl.
Du skal have en reference til DAO. Denne sætter du ved at gå i VBA-editoren og vælge menuen Tools->References. Her finder du "Microsoft DAO 3.x Object Library" på listen.
Vil du mod passende point kommentere de afsnit af koden hvor der arbejdes med recordset. Det er ikke helt logisk for mig :-) fra linie: If Not recOrgOld.EOF Then
Jeg skal prøve....:o) I bund og grund er det et spørgsmål om at holde tungen lige i munden. Princippet er, at den gennemløber 3 recordset i 3 loops/løkker - startende 'oppefra'. Dvs fra øverste niveau i strukturen (Organisation):
Den starter med at finde 1. post i tblOrganisationer (f.eks. OrganisationsID = 1). Herefter finder den alle kontaktpersoner, som er knyttet til OrganisationsID = 1. Herefter gennemløbes alle disse kontakter (startende med f.eks. KontaktpersonID = 1) og tilhørende aktiviteter findes. Først når alle aktiviteter er fundet (og kopieret) hopper RecKonOld (kontaktpersoner) videre til næste kontaktpersonID. Osv osv.
... ... '->Hvis ikke recordsettet er tomt (dvs hvis ikke recordsettet står på EndOfFile) starter det hele If Not recOrgOld.EOF Then '->Hop til første post - denne linie er kun relevant, hvis man ønsker at gennemløbe flere organisationer. Ellers vil et nyt recordset altid stå på første liinie recOrgOld.MoveFirst '->I vores parallelle recordset opretter vi en ny post recOrgNew.AddNew '->Alle felter kopieres undtagen OrganisationsID, som er autonummereret For Each fld In recOrgOld.Fields If Not IsNull(fld.Value) And Not IsEmpty(fld.Value) And fld.Name <> "OrganisationsID" Then recOrgNew.Fields(fld.Name).Value = fld.Value End If Next fld '->Den nye organisation gemmes (hvorved OrganisationsID også bliver oprettet) recOrgNew.update '->Hop til den nyoprettet post igen (ved .Update flyttes cursoren væk fra den aktuelle post) recOrgNew.MoveLast
'->Der oprettes et recordset med de kontaktpersoner, som hører til organisationen Set recKonOld = db.OpenRecordset("SELECT * FROM tblKontaktpersoner WHERE OrganisationsID = " & lngOrgID) '->Hvis ikke recordsettet er tomt (dvs hvis ikke recordsettet står på EndOfFile) fortsættes... If Not recKonOld.EOF Then recKonOld.MoveFirst Do While Not recKonOld.EOF recKonNew.AddNew '->Alle felter i tblKontakpersoner kopieres (undtagen KontaktpersonID, som er autonummereret) For Each fld In recKonOld.Fields If Not IsNull(fld.Value) And Not IsEmpty(fld.Value) And fld.Name <> "KontaktpersonID" Then recKonNew.Fields(fld.Name).Value = fld.Value End If Next fld '->I den nye kontaktperson, står nu det gamle OrganisationsID. Dette rettes til det OrganisationsID, som befinder sig i recKonNew recKonNew.Fields("OrganisationsID").Value = recOrgNew.Fields("OrganisationsID").Value '->Kontaktpersonen gemmes og KontaktpersonID genereres recKonNew.update '->Hop til den nyoprettet kontaktperson igen recKonNew.MoveLast ... ... '-> og så fremdeles...
Du skal lave lidt om på koden, hvis du skal benytte string. F.eks. skal denne linie: Set recKonOld = db.OpenRecordset("SELECT * FROM tblKontaktpersoner WHERE OrganisationsID = " & lngOrgID)
laves om til: Set recKonOld = db.OpenRecordset("SELECT * FROM tblKontaktpersoner WHERE OrganisationsID = '" & lngOrgID & "'")
Jeg har stadig lidt knas med at forstå følgende: Hvilket formål tjener at sætte "copyorg = true" Kan man "slæbe" 3 variable med i Function'en eller er det bedre at pege ud på formularen og flyde de to sidste variable herfra?
CopyOrg er blot for at returnere, at processen er gennemført (uden fejl), således at den kode som kaldte CopyOrg ved hvordan den skal forholde sig
Du kan sagtens parameteroverfører (næsten) lige så mange variable, som du vil. Det er pænere at bruge parametre end at referere direkte til formularen.
Det var så lidt (jeg går ud fra, at du vil oprette et spm med point, som du skrev? :o)
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.