Jag sitter och funerar lite på hur man skulle kunna gå tillväga för att hämta en vald del ur en post i en access databas.
En av posterna i min databas lagrar information så här: artist - skivtitel
Jag vet att jag borde ha separerat "artist" och "skivtitel" från början, men nu är det så och jag har över 500 poster i databasen, så jag vill inte ändra på det nu.
För att skriva ut ur databasen på min sida så har jag denna kod: <%=RecSet("Album")%>
Och då skrivs "artist - skivtitel" ut så klart.
Men, jag skulle vilja kunna skriva ut endast "artist", går det ?
Altså, alla tecken efter artist hoppas över liksom... även mellanrummet direkt efter "artist" skall bort...
Men jag vill fortfarande att informationen lagras i databasen så som det är nu, för jag skriver ju även ut både "artist" och "skivtitel" på ett ställe på min sida, och jag vill endast ha "artist" på ett annat ställe.
Eftersom det alltid är olika antal tecken i artistens namn, så kan jag ju inte göra så här: <%=left(RS("Album"),12)%>
Dim mySplit, artist, skivtitel
mySplit=split(RecSet("Album"),"-")
artist = trim(mySplit(0))
skivtitel = trim(mySplit(1))
Response.write artist
Response.write skivtitel
Har du nu detta konsekvent i hela kolumen i databasen så skall detta funka.
Men det funkar bara om du har ett bindestreck.
Jag vet inte om det kan ställa till det hela, men säg att en artist har ett namn med ett eller flera mellanrum i, jag vill ju fortfarande skriva ut hela namnet, men jag vill ta bort mellanrummet som är precis innan tecknet "-" och allt där efter...
Jag tycker det verkar som om du har en grymt dålig databasdesign i dagsläget. ;)
Det finns inget sätt i hela världen för dig att skriva någon kod som med ren logik kan reda ut det där eftersom både albumnamn kan innehålla mellanslag (ett eller flera), streck (även här ett eller kanske tillochmed flera) och andra tecken och stavningar som enbart en människa kan skilja på och göra en resonlig bedömning på vad som är artist och album. Precis som JesperT skriver måse det finnas någon slags konsekvens i datat, vilket det uppenbarligen inte gör idagsläget. Det är nog den manuella vägen som gäller.
Varför ser det ut så överhuvudtaget?
RED. Du skulle ju visserligen kunna kolla efter " - " (mellanslag + streck + mellanslag) för att separera datat. Dock, det förutsätter ju att det alltid ser ut så mellan artist och album, samt att det inte finns mer än en förekomst.
Jag håller på och lär mig, skall försöka göra ett register med CD skivor. Blev så klart glad när jag fick till det så att det fungerade, matade in info om ca 500 CD´s, sen kom jag på att det vore kul om man kunnde skriva ut enbart artistens namn på ett ställe...
Personligen hade jag lagt lite tid på att göra det manuellt nu, när du ändå inte har mer än 500 rader i databasen. Det hade varit värre ifall det var t.ex. 5000 poster. ;)
För att "fuska".
Hämta dina poster ifrån databasen(hur du nu gör det) och fyll variabeln artist/skivtitel och skriv ut den som vanligt.
Response.write artist
För att göra om detta ifrån början:
Skapa två stycken nya kolumner i databasen
a_exekutor - text
a_album - text
Se till att alla poster i den nuvarande kolumnen "album" har ett(1 inte 0 eller fler) bindestreck i sig. Och skapa en sida som du kör (en gång!)
Set Conn = Server.CreateObject("Adodb.Connection")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = Din_databas.mdb"
SQL = "Select album From din_tabell"
Set RS = Conn.execute(SQL)
Do Until RS.EOF
mySplit=split(RS("Album"),"-")
Conn.execute("INSERT INTO din_tabell (a_exekutor,a_album) VALUES('"& mySplit(0) &"','"& mySplit(1) &"')"),,128
RS.MoveNext
Loop
RS.close : Set RS=nothing
Response.write "Kopiering klar"