Avatar billede dsjk Novice
16. december 2005 - 14:22 Der er 3 kommentarer og
1 løsning

Hente data fra tabel 1 eller 2 - virker, men langsomt

Hej

Jeg har en tabel hvor der er læst en del adresser ind. (tabel 1)
Jeg har så en anden tabel som også har en masse adresser, mange af dem er de samme som i tabel 1.

Jeg skal så have læst adresserne ud i en fil.
Den løber så tabel 2 igennem (t_Adr_indsendt2) igennem og den skal så kigge i tabel 1 (t_adr_vask2) om adressen findes der i og om den har fået en kode i feltet "gruppe", men kun hvis der står MA i feltet "korrektionsflag" i t_adr_vask2

Står der så noget i "gruppe" skal den skrive adressen fra t_adr_indsendt2.
Står der MA i "korrektionsflag" og ingenting i "gruppe" skal den skrive adressen fra t_adr_vask.
Står der noget andet i "korrektionsflag" skal den skrive adressen fra "t_adr_indsendt2"

Alt dette her virker, men det kører mega langsomt :(
Så tænkte på om der var en hurtigere måde at gøre det på end jeg gør. Tror problemet ligger i at jeg bruger mange DLookup...

Her kommer den kode jeg bruger:
            Open "g:\POSTEN\UDDATA\" & sIdnummer & "_" & sBladnavn1 & "_" & sDato & ".POS" For Output As #1
   
            sLinie = "DS;;" & sIdnummer & ";" & sBladnavn & ";J;" & sDato & ";;1"
            Print #1, sLinie
       
            Dim rs As ADODB.Recordset
            Set rs = New ADODB.Recordset
       
            rs.Open "SELECT t_adr_indsendt2.Abonnent_nr, t_adr_indsendt2.Fornavn, t_adr_indsendt2.Efternavn, t_adr_indsendt2.Gadenavn, t_adr_indsendt2.Husnr, t_adr_indsendt2.Husbogstav, t_adr_indsendt2.Etage, t_adr_indsendt2.Placering, t_adr_indsendt2.Stednavn, t_adr_indsendt2.Postnr, t_adr_indsendt2.Postboksnr, t_adr_indsendt2.CO_navn, t_adr_indsendt2.adresseringsnavn, t_adr_indsendt2.Landekode, t_adr_indsendt2.fil_nr, t_adr_indsendt2.BYNAVN FROM t_adr_indsendt2 WHERE t_adr_indsendt2.fil_nr =" & Me.combobladnavn & " ORDER BY t_adr_indsendt2.Abonnent_nr;", CurrentProject.Connection, adOpenKeyset, adLockOptimistic

            Do Until rs.EOF
                'sStednavn = ""
                If (DLookup("[Korrektionsflag]", "t_adr_vask2", "[Abonnent_nr] ='" & rs("abonnent_nr") & "'") <> "") Then
                    ' Abonnenten er fundet i den vaskede fil fra PD
                    sKorrektionsflag = DLookup("[Korrektionsflag]", "t_adr_vask2", "[Abonnent_nr] ='" & rs("abonnent_nr") & "'")
                    If (sKorrektionsflag = "MA") Then
                        If (DLookup("[Gruppe]", "t_adr_vask2", "[Abonnent_nr] ='" & rs("abonnent_nr") & "'") <> "") Then
                            'Abonnenten er kommet retur selvom det var en MA fra PD
                            'Der vælges adressen der er konverteret og ikke den vaskede
                            sLinie = "UA;" & rs("abonnent_nr") & ";" & rs("Fornavn") & ";" & rs("efternavn")
                            sLinie = sLinie & ";;;" & rs("Gadenavn") & ";" & rs("husnr") & ";" & rs("Husbogstav")
                            sLinie = sLinie & ";" & rs("etage") & ";" & rs("placering") & ";" & rs("stednavn") & ";"
                            sLinie = sLinie & rs("postnr") & ";" & rs("postboksnr") & ";;" & rs("CO_Navn") & ";" & rs("Adresseringsnavn") & ";"
                        Else
                            Dim sAbon_nr As String
                            Dim sFornavn As String
                            Dim sEfternavn As String
                            Dim sGadenavn As String
                            Dim sHusnr As String
                            Dim sHusbogstav As String
                            Dim sEtage As String
                            Dim sPlacering As String
                            Dim sPostboks As String
                            Dim sConavn As String
                            Dim sAdresseringsnavn As String
                            Dim sStednavn As String
             
                            sAbon_nr = rs("abonnent_nr")
                            If (DLookup("[Fornavn]", "t_adr_vask2", "[Abonnent_nr] ='" & sAbon_nr & "'") <> "") Then
                                sFornavn = DLookup("[Fornavn]", "t_adr_vask2", "[Abonnent_nr] ='" & sAbon_nr & "'")
                            Else
                                sFornavn = ""
                            End If
                           
                            If (DLookup("[Efternavn]", "t_adr_vask2", "[Abonnent_nr] ='" & sAbon_nr & "'") <> "") Then
                                sEfternavn = DLookup("[Efternavn]", "t_adr_vask2", "[Abonnent_nr] ='" & sAbon_nr & "'")
                            Else
                                sEfternavn = ""
                            End If
                           
                            If (DLookup("[Gadenavn]", "t_adr_vask2", "[Abonnent_nr] ='" & sAbon_nr & "'") <> "") Then
                                sGadenavn = DLookup("[Gadenavn]", "t_adr_vask2", "[Abonnent_nr] ='" & sAbon_nr & "'")
                            Else
                                sGadenavn = ""
                            End If
                           
                            If (DLookup("[Husnr]", "t_adr_vask2", "[Abonnent_nr] ='" & sAbon_nr & "'") <> "") Then
                                sHusnr = DLookup("[Husnr]", "t_adr_vask2", "[Abonnent_nr] ='" & sAbon_nr & "'")
                            Else
                                sHusnr = ""
                            End If
               
                            If (DLookup("[Husbogstav]", "t_adr_vask2", "[Abonnent_nr] ='" & sAbon_nr & "'") <> "") Then
                                sHusbogstav = DLookup("[Husbogstav]", "t_adr_vask2", "[Abonnent_nr] ='" & sAbon_nr & "'")
                            Else
                                sHusbogstav = ""
                            End If
               
                            If (DLookup("[Etage]", "t_adr_vask2", "[Abonnent_nr] ='" & sAbon_nr & "'") <> "") Then
                                sEtage = DLookup("[Etage]", "t_adr_vask2", "[Abonnent_nr] ='" & sAbon_nr & "'")
                            Else
                                sEtage = ""
                            End If
               
                            If (DLookup("[Placering]", "t_adr_vask2", "[Abonnent_nr] ='" & sAbon_nr & "'") <> "") Then
                                sPlacering = DLookup("[Placering]", "t_adr_vask2", "[Abonnent_nr] ='" & sAbon_nr & "'")
                            Else
                                sPlacering = ""
                            End If
               
                            If (DLookup("[Stednavn]", "t_adr_vask2", "[Abonnent_nr] ='" & sAbon_nr & "'") <> "") Then
                                sStednavn = DLookup("[Stednavn]", "t_adr_vask2", "[Abonnent_nr] ='" & sAbon_nr & "'")
                            Else
                                sStednavn = ""
                            End If
               
                            If (DLookup("[Adresseringsnavn]", "t_adr_vask2", "[Abonnent_nr] ='" & sAbon_nr & "'") <> "") Then
                                sAdresseringsnavn = DLookup("[Adresseringsnavn]", "t_adr_vask2", "[Abonnent_nr] ='" & sAbon_nr & "'")
                            Else
                                sAdresseringsnavn = ""
                            End If
               
                            If (DLookup("[Postnr]", "t_adr_vask2", "[Abonnent_nr] ='" & sAbon_nr & "'") <> "") Then
                                sPostnr = DLookup("[Postnr]", "t_adr_vask2", "[Abonnent_nr] ='" & sAbon_nr & "'")
                            Else
                                sPostnr = ""
                            End If
               
                            If (DLookup("[Postboksnr]", "t_adr_vask2", "[Abonnent_nr] ='" & sAbon_nr & "'") <> "") Then
                                sPostboks = DLookup("[Postboksnr]", "t_adr_vask2", "[Abonnent_nr] ='" & sAbon_nr & "'")
                            Else
                                sPostboks = ""
                            End If
               
                            If (DLookup("[Co_navn]", "t_adr_vask2", "[Abonnent_nr] ='" & sAbon_nr & "'") <> "") Then
                                sConavn = DLookup("[Co_navn]", "t_adr_vask2", "[Abonnent_nr] ='" & sAbon_nr & "'")
                            Else
                                sConavn = ""
                            End If
               
                            sLinie = "UA;" & sAbon_nr & ";" & sFornavn & ";" & sEfternavn
                            sLinie = sLinie & ";;;" & sGadenavn & ";" & sHusnr & ";" & sHusbogstav
                            sLinie = sLinie & ";" & sEtage & ";" & sPlacering & ";" & sStednavn & ";"
                            sLinie = sLinie & sPostnr & ";" & sPostboks & ";;" & sConavn & ";" & sAdresseringsnavn & ";"
                        End If
                    Else
                        'Abonnenten er blevet vasket til MA
                        'Der vælges adressen der er konverteres og ikke den vaskede
                        sLinie = "UA;" & rs("abonnent_nr") & ";" & rs("Fornavn") & ";" & rs("efternavn")
                        sLinie = sLinie & ";;;" & rs("Gadenavn") & ";" & rs("husnr") & ";" & rs("Husbogstav")
                        sLinie = sLinie & ";" & rs("etage") & ";" & rs("placering") & ";" & rs("stednavn") & ";"
                        sLinie = sLinie & rs("postnr") & ";" & rs("postboksnr") & ";;" & rs("CO_Navn") & ";" & rs("Adresseringsnavn") & ";"
                    End If
                Else
                    'Abonnenten er ikke fundet i den vaskede fil og må derfor være ny
                    'Der bruges den tilsendte adresse
                    sLinie = "UA;" & rs("abonnent_nr") & ";" & rs("Fornavn") & ";" & rs("efternavn")
                    sLinie = sLinie & ";;;" & rs("Gadenavn") & ";" & rs("husnr") & ";" & rs("Husbogstav")
                    sLinie = sLinie & ";" & rs("etage") & ";" & rs("placering") & ";" & rs("stednavn") & ";"
                    sLinie = sLinie & rs("postnr") & ";" & rs("postboksnr") & ";;" & rs("CO_Navn") & ";" & rs("Adresseringsnavn") & ";"
                End If
           
                Print #1, sLinie
                iAntal = iAntal + 1
                rs.MoveNext
            Loop
     
            Print #1, "DU;" & iAntal
            Close #1


/dsjk
Avatar billede Slettet bruger
16. december 2005 - 15:01 #1
Lav en temp tabel og så ved hjælp af forespørgsler opbygge det rigtige "billede" i denne tabel og så brug denne tabel til din fil!~)
Avatar billede dsjk Novice
16. december 2005 - 15:07 #2
hmm, ok - havde tænkt lidt i den bane, men kan ikke lige overskue hvordan forespørgslerne skal bygges op...
Avatar billede Slettet bruger
16. december 2005 - 16:14 #3
Egentlig skal du vil bare:

1. køre en sletteforespørgsel på TEMP
2. lave en tilføjelsesforespørgsel, som skriver hele t_adr_indsendt ind
3. lave en opdateringsforespørgsel, der opdatere adressen med adressen fra t_adr_vask, den skal indeholde både "tabel1" og "tabel2" bindes sammen af abonnent_nr, så sætter du kriteriet for korrektionsflag til at være "MA"

Noget i den retning!~)
Avatar billede dsjk Novice
19. december 2005 - 13:23 #4
tjaa, værre var det så heller ikke :)

Takker
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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