Avatar billede hekla Nybegynder
19. april 2004 - 12:19 Der er 19 kommentarer og
1 løsning

Sammenlægning af poster

Først det simple:
Tabel1 har tre felter:
Felt1 NotatFelt
Felt2 Tekst
Felt3 AutoNumber (Primær nøgle) og sorteringsfelt

Så det svære:
I Felt2 har ca (men ikke præcis) hver 10. post 4 karakterer og resten 5 eller flere.

Jeg skal have lavet forespørgsel/tabel ud fra Tabel1, med 2 felter:
Felt1
Samlefelt

Der skal være en post for hver post i tabel1, hvor Felt2 har 4 karakterer.

Samlefelt skal sammensættes af:
"<b><big>" & [Felt1 fra posten med 4 karakterer] & [Felt2 fra posten med 4 karakterer] & "</big></b><br><br>" & [Felt1 fra næste post] & " " & [Felt2 fra næste post] & "<br><br> & [Felt1 fra tredie post] & " " & [Felt2 fra tredie post]...
Indtil næste post med 4 karakterer i Felt2.

Hvem kan lave denne forespørgsel/funktion?

Outputtet herfra skal sættes sammen med en header på 245 poster  (vha. en Union-forespørgsel) og bruges som input til en TomeRaider (PDA) fil.
Avatar billede terry Ekspert
19. april 2004 - 12:31 #1
Hi hekla!
are you going to use the result in ASP? If so, I think it will be bast if you make a function in ASP!
Avatar billede hekla Nybegynder
19. april 2004 - 12:33 #2
Outputtet herfra skal sættes sammen med en header på 245 poster  (vha. en Union-forespørgsel) og bruges som input til en TomeRaider (PDA) fil.
Avatar billede hekla Nybegynder
19. april 2004 - 12:39 #3
Dvs at det skal eksporteres til en tabulatorsepareret tekstfil, hvor hver linie efter headeren skal have formen:

Felt1[TAB]<b><big>[Felt1 fra posten med 4 karakterer][Felt2 fra posten med 4 karakterer]</big></b><br><br>[Felt1 fra næste post] [Felt2 fra næste post]<br><br>[Felt1 fra tredie post] [Felt2 fra tredie post]...
Avatar billede terry Ekspert
19. april 2004 - 13:05 #4
Not quite sure what it is you are trying to do, but as far as I can see, it is going to require a bit of work to make a function which loops through your records as I dont think it can be done in a query as you use more than one record to make up a single field in your Samlefelt!
Avatar billede hekla Nybegynder
19. april 2004 - 13:40 #5
Nej jeg tror nu heller ikke at det kan laves i en forespørgsel. Problemet at lave en funktion, som looper videre indtil næste post, hvor Mid([felt2];5;1) = "", og få den puttet ind i en forespørgsel. Så vidt jeg kan se, bliver det to loops inden i hinanden, hvis man kan det?
Avatar billede terry Ekspert
19. april 2004 - 13:47 #6
there is no problem making two loops within each other!
Avatar billede hekla Nybegynder
19. april 2004 - 22:44 #7
Jeg fik det til at fungere nogenlunde med dette modul, en ny tabel1 og tabellen dumpres_php som den tabel, jeg henter posterne fra, men der er dog et problem omkring afslutningen af modulet. Den tager ikke den sidste linie med og kommer med en fejl 3021: Enten er BOF eller EOF sand, eller den aktuelle post er blevet slettet. Den anmodede handling kræver en aktuel post, og Debuggeren stopper ved:    While Not (Mid(RS.Fields(1), 5, 1) = "" Or RS.EOF)

Den bruger ca et minut om at køre de 20000 poster igennem, så forslag til hastighedsforbedringer modtages med glæde.

Option Compare Database
    Public StrValue As String
    Public strListOfValues As String
    Public Function GetStrValue()
    GetStrValue = StrValue
    End Function
Public Function GetStrListofValues()
GetStrListofValues = strListOfValues
End Function
Public Function fCatchValues() As String
    Dim RS As New ADODB.Recordset
    Dim strSQL As String
       
    RS.Open "dumpres_php", CurrentProject.Connection
NyValue:
    StrValue = RS.Fields(0).Value
    strListOfValues = "<b>" & RS.Fields(0).Value & " " & RS.Fields(1).Value & "</b>"
    RS.MoveNext
    While Not (Mid(RS.Fields(1), 5, 1) = "" Or RS.EOF)
        strListOfValues = strListOfValues & "<br><br>" & RS.Fields(0).Value & " " & RS.Fields(1).Value
        RS.MoveNext
        Wend
        strSQL = "INSERT INTO Tabel1 ( Felt1, Felt2 )SELECT Dumpres_php.Felt1, getstrlistofvalues() AS Felt2 FROM Dumpres_php WHERE (((Dumpres_php.Felt1)=getstrvalue()))"
        DoCmd.RunSQL strSQL
        strListOfValues = ""
        StrValue = ""
    If Not RS.EOF Then
        GoTo NyValue
    Else
        Set RS = Nothing
    End If
End Function
Avatar billede hekla Nybegynder
19. april 2004 - 22:53 #8
Lidt småforbedringer, som ikke giver noget hastighedsmæssigt:

Option Compare Database
Option Explicit
Public StrValue As String
Public strListOfValues As String

Public Function GetStrValue()
    GetStrValue = StrValue
End Function

Public Function GetStrListofValues()
    GetStrListofValues = strListOfValues
End Function

Public Function fCatchValues() As String
    Dim RS As New ADODB.Recordset
    Dim strSQL As String
       
    RS.Open "dumpres_php", CurrentProject.Connection

NyValue:
    StrValue = RS.Fields(0).Value
    strListOfValues = "<b>" & RS.Fields(0).Value & " " & RS.Fields(1).Value & "</b>"
    RS.MoveNext
    While Not (Mid(RS.Fields(1), 5, 1) = "" Or RS.EOF)
        strListOfValues = strListOfValues & "<br><br>" & RS.Fields(0).Value & " " & RS.Fields(1).Value
        RS.MoveNext
        Wend
        strSQL = "INSERT INTO Tabel1 ( Felt1, Felt2 )SELECT Dumpres_php.Felt1, getstrlistofvalues() AS Felt2 FROM Dumpres_php WHERE (((Dumpres_php.Felt1)=getstrvalue()))"
        DoCmd.RunSQL strSQL
   
    If Not RS.EOF Then
        GoTo NyValue
    Else
        strListOfValues = ""
        StrValue = ""
        Set RS = Nothing
    End If

End Function
Avatar billede terry Ekspert
20. april 2004 - 17:34 #9
If you have many records you have to INSERT into Tabel1 then it may be faster to use a recordset instead of DoCmd.RunSQL
Avatar billede hekla Nybegynder
20. april 2004 - 18:41 #10
Jeg har ændret modulet og bruger et recordset som vist nedenfor, så nu tager det kun et sekund!

Der er fortsat et problem omkring afslutningen af modulet. Den indsætter ikke den sidste post og kommer med en fejl 3021: Enten er BOF eller EOF sand, eller den aktuelle post er blevet slettet. Den anmodede handling kræver en aktuel post, og Debuggeren stopper ved:    While Not (Mid(RS.Fields(1), 5, 1) = "" Or RS.EOF)

Option Compare Database
Option Explicit

Public Function fCatchValues() As String
    Dim RS As New ADODB.Recordset
    Dim Rst As New ADODB.Recordset
    Dim StrValue As String
    Dim strListOfValues As String
   
    RS.Open "dumpres_php", CurrentProject.Connection
    Rst.Open "tabel1", CurrentProject.Connection, adOpenDynamic, adLockOptimistic

NyValue:
    StrValue = RS.Fields(0).Value
    strListOfValues = "<b>" & RS.Fields(0).Value & " " & RS.Fields(1).Value & "</b>"
    RS.MoveNext
    While Not Mid(RS.Fields(1), 5, 1) = "" And Not RS.BOF
        strListOfValues = strListOfValues & "<br><br>" & RS.Fields(0).Value & " " & RS.Fields(1).Value
        RS.MoveNext
        Wend
    With Rst
        .AddNew
        !felt1 = StrValue
        !felt2 = strListOfValues
        .Update
    End With
   
    If Not RS.EOF Then
        GoTo NyValue
    Else
        strListOfValues = ""
        StrValue = ""
        Set RS = Nothing
    End If

End Function
Avatar billede hekla Nybegynder
20. april 2004 - 18:44 #11
UPS, jeg havde rettet i den kritiske linie, men det ændrede ikke noget. Jeg har prøvet:
    While Not Mid(RS.Fields(1), 5, 1) = "" And Not RS.BOF
    While Not Mid(RS.Fields(1), 5, 1) = "" And Not RS.EOF
    While Not (Mid(RS.Fields(1), 5, 1) = "" Or RS.EOF)
Avatar billede terry Ekspert
20. april 2004 - 19:31 #12
is it working now?
Avatar billede hekla Nybegynder
20. april 2004 - 20:01 #13
Selve funktionen virker fint, men der er problemer med at få den sluttet ordentligt af, som beskrevet 20/04-2004 18:41:31
Avatar billede terry Ekspert
20. april 2004 - 20:14 #14
Is it possible for you to send your dB, its easier if I can debug! eksperten@NOSPAMsanthell.dk

remove NOSPAM
Avatar billede hekla Nybegynder
20. april 2004 - 20:25 #15
Db sendt
Avatar billede terry Ekspert
20. april 2004 - 20:38 #16
OK, back soon
Avatar billede terry Ekspert
20. april 2004 - 21:18 #17
I've sent your dB, hope it helps
Avatar billede terry Ekspert
20. april 2004 - 21:19 #18
and dont worry about the points, you made most of the code yourself :o)
Avatar billede hekla Nybegynder
20. april 2004 - 23:10 #19
terry tilføjede en errorhandler, så fejlen blev skjult, og jeg tilføjede en post til dumpres_php-tabellen, som opfyldte Mid(RS.Fields(1), 5, 1) = "" og problemerne var løst.
Tak for hjælpen terry
Avatar billede terry Ekspert
21. april 2004 - 18:50 #20
your welcome
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