Kunne du ikke splitte feltet op, så du har et felt til navn, og et til efternavn
Hvis du har mange records i databasen i forvejen. Kunne du evt lige skrive alle record ud i en txt fil, og derefter indsætte dem igen, når tabellen er korrekt.
Lyder det som en acceptabel løsning.
Det kan også ordnet med en array metod, men det gør det langsom, da du skal køre arrayet igennem flere gange for at sortere det. Det bliver langsomt. Så den mest fremtidssikrede metod er helt sikkert at lave tabellen om.....
Nu har du så skrevet den rigtige SQL ud til at opdatere til den nye tabel
Når du har dræbt den gamle table, cut'n'paster du simpelhen duskriften og indsætter den i SQL vinduet i Access, og vupti så kommer de gamle record ind i den nye tabel.
HUSK dog at tage backup af den gamle DB inden............
hmmm så ikke din sidste kommentar --> vender tilbage efter frokost. Men jog holder stadig på at du bør lave tabellen om...Selv om det kræver en masse besvær....
Før i tiden løste man paradoxer som dette problem er (blæse og have mel i munden samtidig) ved at indføre et ekstra felt i DB'en til brug som en "sorteringsnøgle". I nogle tilfælde havde vi endda mere end et af sådanne felter i db'en.
Ved at udfylde dette felt med f.eks. efternavn kunne man sagtens udtrække navnene (der som hos dig var indsat med "fornavn mellemnavn(e) efternavn") efter efternavnet ved at bruge:
select navn from tabel order by sorterfelt
Det fylder selvfølgeligt lidt i databasen, men med den pris harddiske har i dag betyder det jo ikke noget !
Det nemmeste du kan gøre (og formentlig også det bedste) er at lade Access gøre atbejdet for dig...
Opret et modul i Access-databasen og paste flg. kode ind i modulet....
Function HentEfternavn(FuldeNavn As String) As String While InStr(FuldeNavn, " ") > 0 FuldeNavn = Mid$(FuldeNavn, InStr(FuldeNavn, " ") + 1) Wend HentEfternavn = FuldeNavn End Function
Nu tilføjer du bare en sorteringsorden i den query der skal aflevere data til din asp-side...
fx.
SELECT MinTabel.Navn, HentEfternavn([NytNavn]) AS x FROM MinTabel ORDER BY HentEfternavn([Navn]);
Så er du i hus, functionen HentEfternavn afleverer det sidste Ord i navn: Ved "Peter Anders Hansen", afleveres "Hansen" Ved "Mogens Jensen", afleveres "Jensen"
Her er et par genbrugelige rutiner der løser problemet. Vi starter der hvor du har åbnet dit recordset:
Const NAMECOLUMN=2 '<--- Ret til dit navnefelts kolonne nummer (1=første felt) Dim fld Dim gArray Dim gRow
'*** Load data into array *** gArray = MakeArrayFromRS(rs)
'*** Transform name column *** For gRow = 1 to UBound(gArray,2) gArray(NAMECOLUMN,gRow) = revNavn(gArray(NAMECOLUMN,gRow)) Next
'*** Sort it *** BubbleSortArray gArray, NAMECOLUMN
'*** Display it *** DisplayArray gArray
Function MakeArrayFromRS(rs) Dim Arr() Dim ArrRow Dim ArrColumn
'*** Make room for data *** ReDim Arr(rs.Fields.Count,rs.RecordCount)
'*** Insert data into array *** ArrRow = 1 Do Until rs.EOF ArrColumn = 1 For each fld in rs.Fields Arr(ArrColumn,ArrRow) = fld ArrColumn = ArrColumn + 1 Next ArrRow = ArrRow + 1 rs.MoveNext Loop
MakeArrayFromRS = Arr End Function
Sub BubbleSortArray(Arr,SortColumn) Dim Column Dim Row Dim Sorted Dim Temp
Do Sorted = True For Row = 1 to UBound(Arr,2)-1 If StrComp(Arr(SortColumn,Row),Arr(SortColumn,Row+1),vbTextCompare) > 0 Then For Column = 1 to UBound(Arr,1) Temp = Arr(Column,Row+1) Arr(Column,Row+1) = Arr(Column,Row) Arr(Column,Row) = Temp Next Sorted = False End If Next Loop Until Sorted = True End Sub
Sub DisplayArray(Arr) Dim Column Dim Row
Response.Write "<table border=1>" & vbLf For Row = 1 to UBound(Arr,2) Response.Write " <tr>" For Column = 1 to UBound(Arr,1) Response.Write "<td>" & Arr(Column,Row) & "</td>" Next Response.Write "</tr>" & vbLf Next Response.Write "</table>" & vbLf End Sub
Det var også min første indskydelse, men resultatet skal vist bruges fra ASP, og ADO tillader ikke kald til brugerdefinerede rutiner. Jeg kan i hvert fald ikke få det til at virke.
Tror du jeg er født igår. Det var jo netop det jeg sagde jeg havde testet. Og bare for at være helt sikker lagde jeg en funktion BÅDE i Access & på ASP siden, i håb om at den ville finde den bare en af stederne. Men nej... Jeg får under alle omstændigheder fejlen: Unknown function <funktionsnavn>. Og jeg skal lige indskyde at det virker inde fra Access. Jeg ved fra tidligere at man ikke kunne kalde forespørgsler via ODBC hvis de indeholdt brugerdefinerede funktioner, men at det virkede igennem automation.
Nu vil jeg ikke sige at det er umuligt at det kan komme til at virke. Jeg har testet det med Access 97, så det er muligt at det virker imod en 2000 database (har jeg pt. ikke installeret).
Men jeg er da bestemt ikke uinteresseret hvis der er nogen der kan få det til at virke, for det er VIRKELIG noget jeg har savnet i min ASP udvkling.
Nej jeg tror ikke du er født igår..., men jeg misforstod din "ADO tillader ikke kald til brugerdefinerede rutiner" besked, hvilket jeg selvfølgelig undskylder :-)
Jeg er heller ikke sikker på at det virker, jeg har nemlig p.t. ingen mulighed for at teste det, så hvis du siger det...
Jeg vil når tiden tillader det forske lidt i spørgsmålet!
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.