19. april 2004 - 12:19Der 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.
Hos Computerworld it-jobbank er vi stolte af at fortsætte det gode partnerskab med folkene bag IT-DAY – efter vores mening Danmarks bedste karrieremesse for unge og erfarne it-kandidater.
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]...
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!
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?
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
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
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)
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
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.