Avatar billede riishoj Nybegynder
13. juni 2002 - 20:21 Der er 44 kommentarer og
1 løsning

Sorter data

Jeg har en Access-db, hvor en af kolonnerne indeholder sejlnumre. Jeg vil gerne have sorteret numrene stigende. Numrene indeholder både bogstaver og tal eks. DEN 1256. Hvis jeg bruger "Order By" sorteres åbenbart efter 1. ciffer i tallet. Det medfører jo så, at f.eks. DEN 1234 vil komme før DEN 23, og det er ikke meningen. Er der en som kan løse mit lille problem?
Her er mit script:

<%





' ADODB connection objektet
Set Conn = Server.CreateObject("ADODB.Connection")
' Husk at angive den rigtige sti til din database
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("/bilerpaavestfyn/riishojwebsoft.mdb")
' Åben databaseforbindelsen
Conn.Open DSN

' SQL forespørgsel
strSQL = "Select * From optiA Order by sejlnummer"
Set rs = Conn.Execute(strSQL)
If Not (rs.BOF Or rs.EOF) Then
    Response.Write "<h4 align=center><font face=Verdana>Følgende er tilmeldt Optimist A</font></h4><br>"
    Response.Write "<h4 align=center><font face=Verdana>These are the entries of Optimist A</font></h4><br>"

    Response.Write "<table border=0 cellpadding=3>"
   
    Response.Write "<tr bgcolor=#336699><th ><font color=white face=verdana size=2>Sejlnummer</font></th><th><font color=white face=verdana size=2>Navn</font></th><th><font color=white face=verdana size=2>Sejlklub</th></tr>"
  Do While Not rs.EOF
 
        Response.Write "<tr bgcolor=#000066><td><font color=white face=verdana size=2>" & rs("sejlnummer") & "</font></td>"
        Response.Write "<td><font color=white face=verdana size=2>" & rs("navn") & "</td>"
        Response.Write "<td align=center><font color=white face=verdana size=2>" & rs("sejlklub") & "</td>"
       

       
       
       


        rs.MoveNext
   
    Loop
End If

' Rydder op efter os
Conn.Close
Set Conn = Nothing
%>
Avatar billede k_s Nybegynder
13. juni 2002 - 20:33 #1
Står det altid "bogstaver" mellem rum "tal"  ??????
Avatar billede riishoj Nybegynder
13. juni 2002 - 20:35 #2
Ja der gør
Avatar billede k_s Nybegynder
13. juni 2002 - 20:41 #3
kan du så ikke dele det op så du henter bogstaver og tal fra 2 tabeller i mdb
Avatar billede riishoj Nybegynder
13. juni 2002 - 20:46 #4
Jo, det er selvfølgelig en mulighed, men jeg vil helst undgå det hvis det er muligt at løse problemet på en anden måde.
Avatar billede eagleeye Praktikant
13. juni 2002 - 21:10 #5
Hvis du altid har "DAN " altså 4 karakter så kan du prøv denne SQL:

"SELECT * FROM optiA ORDER BY MID(optiA.sejlnummer,4,LEN(optiA.sejlnummer)-4);"
Avatar billede eagleeye Praktikant
13. juni 2002 - 21:11 #6
men spørgsmål er så om den ikke stadig tolker det som tekst felt.. hmm jeg var måske lidt for hurtig.
Avatar billede riishoj Nybegynder
13. juni 2002 - 21:13 #7
Mener du ikke 3 karakterer. DEN = 3 bogstaver?
Avatar billede riishoj Nybegynder
13. juni 2002 - 21:16 #8
Nummeret vil altid have 3 bogstaver foran. F.eks. DEN 3478, GER 2356, SWE 6784 osv.
Avatar billede eagleeye Praktikant
13. juni 2002 - 21:17 #9
Er der mellemrum i ?  DEN 1256 eller uden mellemrum  DEN1256
Avatar billede eagleeye Praktikant
13. juni 2002 - 21:18 #10
Iden var at få klippe "DEN " væ´k så man kun havde tallet tilbage '1256' men hvis den beholder datatype som tekst så virker det ikke bedre.
Avatar billede pato Nybegynder
13. juni 2002 - 21:23 #11
så skal du bruge cint() som

SELECT * FROM optiA ORDER BY CInt(Mid(optiA.sejlnummer;4;Len(optiA.sejlnummer)-4))
Avatar billede eagleeye Praktikant
13. juni 2002 - 21:25 #12
Sådan her.. Ja Int eller Cint virker sikkert også

Men 4 skal være 5 hvis du har DAN + mellemrum for så begynder taller jo på karakter nummer 5 som er hvad man angiver i MID:

"SELECT * FROM optiA ORDER BY Int(MID(optiA.sejlnummer,5,LEN(optiA.sejlnummer)-4));"
Avatar billede riishoj Nybegynder
13. juni 2002 - 21:31 #13
Uha. Jeg kan ikke helt vide, hvordan sejlerne indtaster deres sejlnumre i formularen, men jeg kan jo skrive at det skal indtastes uden mellemrum.
Avatar billede riishoj Nybegynder
13. juni 2002 - 21:31 #14
Prøver lige dit forslag!
Avatar billede pato Nybegynder
13. juni 2002 - 21:32 #15
eller
SELECT * FROM optiA ORDER BY CInt(Trim((Right(optiA.sejlnummer;Len(optiA.sejlnummer)-3))))

HVIS det altid er 3 bogstaver...her trimmes den tomme plads væk samtidig
Avatar billede eagleeye Praktikant
13. juni 2002 - 21:33 #16
Ja du må sikre enten med eller uden mellemrum.
Avatar billede pato Nybegynder
13. juni 2002 - 21:35 #17
som sagt kan du bare trimme
SELECT * FROM optiA ORDER BY CInt(Trim((Right(optiA.sejlnummer;Len(optiA.sejlnummer)-3))))
Avatar billede eagleeye Praktikant
13. juni 2002 - 21:36 #18
Når ja pato ... riishoj prøv den sidste fra pato bare ret ; til , i Right
Avatar billede riishoj Nybegynder
13. juni 2002 - 21:48 #19
Jeg får en fejl som siger at procedurekaldet er ugyldigt!
Avatar billede eagleeye Praktikant
13. juni 2002 - 21:57 #20
hvordan ser den ud? har du ændre ; til ,?
Avatar billede pato Nybegynder
13. juni 2002 - 22:00 #21
er det kode du skriver eller en rigtig forespørgsel?

for så skal du skifte ; ud med ,
Avatar billede riishoj Nybegynder
13. juni 2002 - 22:02 #22
Ja, jeg har ændret. Fejlmeddelelsen ser sådan ud

Microsoft OLE DB Provider for ODBC Drivers fejl '80040e07'

[Microsoft][ODBC Microsoft Access-driver] Procedurekaldet er ugyldigt

/bilerpaavestfyn/deltagere_optia.asp, linje 62
Avatar billede riishoj Nybegynder
13. juni 2002 - 22:05 #23
Jeg går ud fra at forespørgslen skal i anførselstegn "Select..."
Avatar billede eagleeye Praktikant
13. juni 2002 - 22:11 #24
jeps sådan her:

strSQL = "SELECT * FROM optiA ORDER BY CInt(Trim((Right(optiA.sejlnummer,Len(optiA.sejlnummer)-3))));"
set rs = conn.Execute(strSQL)
Avatar billede pato Nybegynder
13. juni 2002 - 22:12 #25
Hvilken access bruger du

ja det virker hos mig

Set Conn = server.createobject("ADODB.Connection")
Set Rs = server.createobject("ADODB.Recordset")
Conn.open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="& server.mappath(databaseName)


strSQL="SELECT  * FROM Tabel3 ORDER BY CInt(Trim((Right([nr],Len([nr])-3))));"


set Rs = Conn.execute(strSQL)

Response.Write("Access Data<br>")
while not Rs.EOF
    Response.Write("Value: " & RS("nr"))
    Response.Write("<BR>")
    Response.Write("<BR>")
    Rs.MoveNext
wend
Rs.Close
Avatar billede riishoj Nybegynder
13. juni 2002 - 22:21 #26
Bruger Access 2000
Avatar billede pato Nybegynder
13. juni 2002 - 22:25 #27
Hvis du skriver sådan sorteres de først efter land og så nummer d.v.s. alle fra DEN bliver samlet og sorteret efter nummer.
dette kan du også benytte senere til at opdele resultater og tider efter land og nummer


strSQL = "SELECT * FROM optiA ORDER BY Left(optiA.sejlnummer,3),CInt(Trim((Right(optiA.sejlnummer,Len(optiA.sejlnummer)-3))));"
Avatar billede riishoj Nybegynder
13. juni 2002 - 22:26 #28
Det prøver jeg lige
Avatar billede pato Nybegynder
13. juni 2002 - 22:31 #29
det virker både i 97 og access2000
Avatar billede riishoj Nybegynder
13. juni 2002 - 22:42 #30
Jeg kan ikke få det til at virke. Tester på PWS, har det nogen betydning. Paster lige hele scriptet, da man jo somme tider kan stirre sig blind på en fejl.

<%





' ADODB connection objektet
Set Conn = Server.CreateObject("ADODB.Connection")
' Husk at angive den rigtige sti til din database
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("/bilerpaavestfyn/riishojwebsoft.mdb")
' Åben databaseforbindelsen
Conn.Open DSN

' SQL forespørgsel
strSQL = "SELECT * FROM optiA ORDER BY Left(optiA.sejlnummer,3),CInt(Trim((Right(optiA.sejlnummer,Len(optiA.sejlnummer)-3))));"
Set rs = Conn.Execute(strSQL)
If Not (rs.BOF Or rs.EOF) Then
    Response.Write "<h4 align=center><font face=Verdana>Følgende er tilmeldt Optimist A</font></h4><br>"
    Response.Write "<h4 align=center><font face=Verdana>These are the entries of Optimist A</font></h4><br>"

    Response.Write "<table border=0 cellpadding=3>"
   
    Response.Write "<tr bgcolor=#336699><th ><font color=white face=verdana size=2>Sejlnummer</font></th><th><font color=white face=verdana size=2>Navn</font></th><th><font color=white face=verdana size=2>Sejlklub</th></tr>"
  Do While Not rs.EOF
 
        Response.Write "<tr bgcolor=#000066><td><font color=white face=verdana size=2>" & rs("sejlnummer") & "</font></td>"
        Response.Write "<td><font color=white face=verdana size=2>" & rs("navn") & "</td>"
        Response.Write "<td align=center><font color=white face=verdana size=2>" & rs("sejlklub") & "</td>"
       

       
       
       


        rs.MoveNext
   
    Loop
End If

' Rydder op efter os
Conn.Close
Set Conn = Nothing
%>
Avatar billede riishoj Nybegynder
13. juni 2002 - 22:43 #31
NB. Forespørgslen skrives naturligvis i én linie.
Avatar billede pato Nybegynder
13. juni 2002 - 22:46 #32
har du en
Set Rs = server.createobject("ADODB.Recordset")
Avatar billede riishoj Nybegynder
13. juni 2002 - 22:47 #33
Databaseforbindelsen skulle være ok. Har brugt den til andre tabeller i den samme db.
Avatar billede riishoj Nybegynder
13. juni 2002 - 22:48 #34
Fejlmeddelelsen er stadig at procedurekaldet er ugyldigt!
Avatar billede pato Nybegynder
13. juni 2002 - 22:51 #35
hvad står der på linje 62 hvor fejlen er?
Avatar billede riishoj Nybegynder
13. juni 2002 - 22:53 #36
Der står..... Set rs = Con.Execute(strSQL)
Avatar billede pato Nybegynder
13. juni 2002 - 22:58 #37
du  har data som ikke kan opfylde converteringen poster som ikke har sejlnummer eller måske som "DEN "
Avatar billede riishoj Nybegynder
13. juni 2002 - 23:02 #38
Ja, det er vist rigtigt. Kigger ligge i db'en og sletter evt. nogle poster.
Avatar billede pato Nybegynder
13. juni 2002 - 23:06 #39
prøv

strSQL="SELECT  * FROM Tabel3  where not isnull(nr) and isnumeric(Trim((Right([nr],Len([nr])-3)))) and len(nr)>3  ORDER BY left(nr,3),CInt(Trim((Right([nr],Len([nr])-3))));"
Avatar billede pato Nybegynder
13. juni 2002 - 23:08 #40
selvfølge med dine felter og tabel..


den tager kun dem med hvor der er et sejlnummer og hvor sejlnummeret er længere end 3 og hvor resten kan blive converteret til et tal
Avatar billede riishoj Nybegynder
13. juni 2002 - 23:11 #41
Det var løsningen. Havde 4 tomme poster i db'en. Efter de er slettet virker det fint. Tusind tak. Er 15p ikke lidt fedtet efter alt det bøvl?
Avatar billede pato Nybegynder
13. juni 2002 - 23:16 #42
jo men hvis du vil have løsningen for også at grupperer dem....en linie imellem hvert land så kommer den her 2.sec.
Avatar billede pato Nybegynder
13. juni 2002 - 23:23 #43
dette kan du lige klippe ind


dim concode

strSQL="SELECT  *,left(optiA.sejlnummer,3) as Countrycode FROM optiA  where not isnull(optiA.sejlnummer) and isnumeric(Trim((Right([optiA.sejlnummer],Len([optiA.sejlnummer])-3)))) and len(optiA.sejlnummer)>3  ORDER BY left(optiA.sejlnummer,3),CInt(Trim((Right([optiA.sejlnummer],Len([optiA.sejlnummer])-3))));"
set Rs = Conn.execute(strSQL)
If Not (rs.BOF Or rs.EOF) Then
    Response.Write "<h4 align=center><font face=Verdana>Følgende er tilmeldt Optimist A</font></h4><br>"
    Response.Write "<h4 align=center><font face=Verdana>These are the entries of Optimist A</font></h4><br>"
    Response.Write "<table border=0 cellpadding=3>"
    Response.Write "<tr bgcolor=#336699><th ><font color=white face=verdana size=2>Sejlnummer</font></th><th><font color=white face=verdana size=2>Navn</font></th><th><font color=white face=verdana size=2>Sejlklub</th></tr>"
    concode=""
    While Not rs.EOF
        if concode<>rs("Countrycode") then
        Response.Write "<tr bgcolor=white><td colspan=3 align=center><font color=#000066 face=verdana size=2>" & rs("Countrycode") & "</font></td></tr>"
       
        end if
        Response.Write "<tr bgcolor=#000066><td><font color=white face=verdana size=2>" & rs("sejlnummer") & "</font></td>"
        Response.Write "<td><font color=white face=verdana size=2>" & rs("navn") & "</td>"
        Response.Write "<td align=center><font color=white face=verdana size=2>" & rs("sejlklub") & "</td>"
        concode=rs("Countrycode")
    rs.MoveNext
    wend
End If

' Rydder op efter os
Conn.Close
Set Conn = Nothing
%>
Avatar billede riishoj Nybegynder
13. juni 2002 - 23:36 #44
Alle tiders. Jeg bliver nødt til at vente til i morgen med at teste det sidste. Vender tilbage med point (flere end 15)
Avatar billede pato Nybegynder
13. juni 2002 - 23:43 #45
ok hej ses :-)
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
Kurser inden for grundlæggende programmering

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