Avatar billede it-manden.dk Nybegynder
08. september 2005 - 17:17 Der er 14 kommentarer og
3 løsninger

samling af felter

Jeg har eksporteret notat feltet fra en dos database,men desvære se der sådan ud

Kunde nr          notat
1            bjbjfdjalkjfkaddl
1            lknvdlkdnlbknfl
1            fblkblfnbfklnjk
2            kdkdkdkdk
3            jfddblfjlkdjfkdj
4            fbnlkfbnbnklk
4            nbldjflkblkbnblf
4            kn<lknfdkfb

Kender du en komando eller et lille stk vba som kan samle kunde 1 notat kunde 2 notat ?
Avatar billede mugs Novice
08. september 2005 - 17:21 #1
Lav en ny tabel med felterne Kundenr og Notat. Lav herefter en opdateringsforespørgsel, der opdaterer begge felter. I forespørgslen indsætter du kriteriet under kundenr.
Avatar billede mugs Novice
08. september 2005 - 17:23 #2
Du kan så ændre forespørgslens SQL sætning til en VBA-kommando således:

SQL = "Her kopierer du SQL fra forespørgslen på een linie og sletter ; i slutningen"
Do.Cmd.RunSql SQL
Avatar billede it-manden.dk Nybegynder
08. september 2005 - 19:18 #3
Det ser spændende ud, har du en ide til hvordan jeg definer kriterierne for at få den til at lægge alle kunde 1's notater sammen ?
Avatar billede mugs Novice
08. september 2005 - 19:23 #4
Hvis du ikke er vant til at skrive en SQL-sætning, er det nemmeste du kan gøre at lave en forespørgsel og skrive dit kriterie f.eks 1 på kriterielinien under kundenr. Så vil opdateringsforespørgslen kun medtage de poster hvor kundenr er = 1

Prøv først at få det til at fungere, så kan du senere eksperimentere med at kopiere din SQL ind i VBA.
Avatar billede mugs Novice
08. september 2005 - 19:31 #5
Jeg tror ike det er en holdbar løsning - Beklager, arbejder lidt videre.
Avatar billede terry Ekspert
08. september 2005 - 19:35 #6
Not quite sure I have understood the question correctly, but if I have then it will require that you do it in code. I think it will also be best to have another table to copy the new data into.

Just to make sure  what you want.

Kunde nr          notat

1            bjbjfdjalkjfkaddllknvdlkdnlbknflfblkblfnbfklnjk
2            kdkdkdkdk
3            jfddblfjlkdjfkdj
4            fbnlkfbnbnklknbldjflkblkbnblfkn<lknfdkfb
Avatar billede fynbohans Nybegynder
08. september 2005 - 19:53 #7
Der er en simpel mekanik i VBA, som altid kan bruges ved manipulationer med felter i
en furmular. Skelettet ser således ud:

Private Sub Form_Open(Cancel As Integer)
            Dim SidsteNr As Long

            DoCmd.GoToRecord , , acLast
            [ID] = SidsteNr
            DoCmd.GoToRecord , , acFirst
           
            Do
                 
                  ' felt-manipulationer her
           
           
                    If [ID] = SidsteNr Then Exit Do
                    DoCmd.GoToRecord , , acNext
            Loop
            DoCmd.Close
End Sub

1. Du laver en formular, som bygger på en tabel med alle de felter, du har brug for.
2. Der skal endvidere være et autonummereringsfelt med navnet ID.
3. Når du har lavet formularen vælger du VedÅbning og indsætter koden her.
4. Formularen lukker sig selv, når processen er færdig
Avatar billede terry Ekspert
08. september 2005 - 20:15 #8
Just in case I have understood your question

Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim rsTemp As ADODB.Recordset
Dim knr As Integer
   
       
    Set rs = New ADODB.Recordset
    Set rsTemp = New ADODB.Recordset
   
    Set rsTemp.ActiveConnection = CurrentProject.Connection
    rsTemp.Open "SELECT * FROM tblKundeTemp", , , adLockOptimistic
   
       
    With rs
   
        Set .ActiveConnection = CurrentProject.Connection
       
        .Open "SELECT * FROM tblKunde", , , adLockOptimistic
           
        knr = rs!KundeNr
   
        Do Until .EOF
       
            rsTemp.AddNew
           
            rsTemp!KundeNr = rs!KundeNr
            rsTemp!Notat = ""
           
            Do Until rs!KundeNr <> knr
       
                rsTemp!Notat = rsTemp!Notat & rs!Notat
                .MoveNext
               
                If .EOF Then GoTo EXIT_EOF
            Loop
EXIT_EOF:
            rsTemp.Update
            If Not rs.EOF Then knr = rs!KundeNr
        Loop
       
    End With
   
    rs.Close
    rsTemp.Close
   
    Set rs = Nothing
    Set rsTemp = Nothing
   
    Set con = Nothing
Avatar billede kjulius Novice
08. september 2005 - 21:08 #9
Tja, så kom terry først, for så vidt jeg kan se gør hans rutine det samme som:

Sub Kopier()
Dim rs1 As Recordset
Dim rs2 As Recordset
Dim Test As Variant
Set rs1 = CurrentDb.OpenRecordset("SELECT Kundenr, Notat FROM Tabel1 ORDER BY Kundenr")
Set rs2 = CurrentDb.OpenRecordset("Tabel2")
If Not rs1.EOF Then
  rs1.MoveFirst
  Do
    If rs1!Kundenr <> Test Then
      If Not IsEmpty(Test) Then
        rs2.Update
      End If
      Test = rs1!Kundenr
      rs2.AddNew
      rs2!Kundenr = rs1!Kundenr
      rs2!Notat = rs1!Notat
    Else
      rs2!Notat = rs2!Notat & rs1!Notat
    End If
    rs1.MoveNext
  Loop Until rs1.EOF
  If Not IsEmpty(Test) Then
    rs2.Update
  End If
End If
rs1.Close
rs2.Close
Set rs1 = Nothing
Set rs2 = Nothing
End Sub
Avatar billede terry Ekspert
08. september 2005 - 21:14 #10
I'de better make a small alteration so as to make sure we get the kundenr together

rsTemp.Open "SELECT * FROM tblKund ORDER BY kundenr", , , adLockOptimistic

:o)
Avatar billede terry Ekspert
08. september 2005 - 21:15 #11
and I'm sure the code could be optimized, but if its a one off then who cares
Avatar billede fynbohans Nybegynder
08. september 2005 - 22:00 #12
Den færdigr kode kan f.eks.se sådan ud:

Private Sub Form_Open(Cancel As Integer)
            Dim SidsteNr As Long
            Dim AktuelKunde as Variant
            Dim Kunde AS Variant
            Dim Notat AS String
           

            DoCmd.GoToRecord , , acLast
            [ID] = SidsteNr
            DoCmd.GoToRecord , , acFirst
         
            AktuelKunde =1
            Notat = ""
            Do
                  Kunde = [KundeNr]
                  IF Kunde =AktuelKunde THEN
                      Notat =Notat  & [Notat]
                  ELSE
                      AktuelKunde = Kunde
                      IF Kunde>1 THEN
                        DoCmd.GoToRecord , , acPrevious
                        [Nyt_Notat] = Notat
                        DoCmd.GoToRecord , , acNext
                        Notat = [Notat]
                      END IF                         
                  END IF
           
                    If [ID] = SidsteNr Then Exit Do
                    DoCmd.GoToRecord , , acNext
            Loop

            DoCmd.Close
End Sub

Forespørgslen bag formularen skal være sorteret efter Kunde Nr.
Til slut fjerner du de blanke felter med en Tabeloprettelses-forespørgsel.
Avatar billede claesdamlund Nybegynder
09. september 2005 - 01:01 #13
Mangler du ikke et nøglefelt eller sorteringsfelt for dine notater? Hvordan vil du ellers sikre dig at notaterne bliver konkateneret i den rigtige rækkefølge - eller er det lige meget?

I øvrigt kan du udbygge Terrys eksempel (og de andres) med VbLf (linieskift), så notaterne kommer på hver sin linie, og så er rækkefølgen måske lidt mere ligegyldig:

...
Do Until rs!KundeNr <> knr
       
    rsTemp!Notat = rsTemp!Notat & VbLf & rs!Notat
    .MoveNext
               
    If .EOF Then GoTo EXIT_EOF
Loop
...
Avatar billede terry Ekspert
10. september 2005 - 09:37 #14
it-manden.dk> Its easier for use to help if you also give some input
Avatar billede it-manden.dk Nybegynder
18. september 2005 - 19:48 #15
takker
Avatar billede terry Ekspert
18. september 2005 - 19:56 #16
selv tak, håber du fik noget til at virk?
Avatar billede it-manden.dk Nybegynder
18. september 2005 - 20:01 #17
jeps, både din og fynbohans's svar fik jeg til at virke,
tak til clausdamlund for godt indput - super
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