jag vill använda replace eller något liknande för att leta reda på vissa nummer. men istället för att ersätta numret med en text jag anger så ska den hitta numret i databasen där numret finns och sedan ersättas med ett annat fält från databasen.
dessutom kanske det kan bli problem i och med att nummer 100 kommer bli ersatt av nummer 1... så man måste se till att man börjar med högsta.
hur kan jag lösa detta?
jag antar att jag kan använda replace på något sätt i en funktion.. men jag vet inte hur jag ska göra det... :q
vet inte om man kanske kan använda find? har aldrig använt den...
men det jag simpelt vill göra är att om man hittar ett nummer som finns med i ett fält i databasen så ska det ersättas av ett annat fält från databasen...
exempel.
txt = Replace(txt, "1", "greggan")
då ligger 1 i fältet userid och greggan i fältet nickname... men hur använder jag en sqlsats tillsammans med detta?får inte ihop det...
nej det är inte riktigt vad jag vill göra...
tänk dig att istället för att skriva en lång replace med alla användare som finns så kan jag på nåt sätt utnyttja att allt redan finns i databasen.
om jag ska behöva skriva alla 850 användare så kommer det ta evigheter + att jag måste lägga till nya hela tiden...
hur kan jag göra så att den letar efter nummer i texten.. om numret i texten finns med i kolumnen userid så byter den ut numret i texten inte i kolumnen mot användarnamnet som finns på samma rad.
typ
txt = Replace(txt, platser där den hittar nåt nummer från userid, nickname på samma rad i databasen)
Förstår du nu?
Det måste ju gå på något sätt... :l
Menar du att du har en lång text och i den så finns det siffror instoppade. Nu vill du byta ut de siffrorna mot motsvarande namn i databasen?
Då låter det som att du borde använda Regular Expressions och sedan försöka matcha mot alla användare utlästa i en Array eller sökbar collection.
Antingen det eller så får du parsa texten ett tecken i taget och när du kommer till en siffra får du antingen anropa databasen eller matcha mot en Array eller sökbar collection.
ja.. hela texten står med i... men jag vill helst inte göra så.. för jag skulle egentligen lika gärna kunna lägga in greggan redan när det läggs till i databasen, men jag vill hellre fixa det när det kommer ut.
började fila på en grej fast åt andra hållet...
om jag skriver <user>greggan</user> så ska länken bli userprofile.aspx?userid=1 plus att namnet ska bytas ut mot ett fält i databasen där det står <img src="greggan.gif">
detta är i princip samma sak som det jag behöver hjälp med ovanför, fast åt andra hållet.
såhär långt kommer jag:
Function makelink(ByVal y As String) As String
if not y = "" then
Dim mDelimit As String
Dim re As Regex
mDelimit = Chr(0)
re = New Regex("(\<user\>)((\S)(\S+))(\<\/user\>)", RegexOptions.IgnoreCase)
y = re.Replace(y, ntou("$2"))
makelink = Replace(y, mDelimit, "")
end if
End Function
function ntou(txt)
try
'sql som hämtar userid och bild where nick = txt
ntou = "<a href='userprofile.aspx?userid=" & hämtat från databas &"'>" & hämta bild från databas & "</a>"
catch
ntou = txt
end try
end function
grejjen är bara den att det funkar inte. jag får alltid så att den kör catchen. Och det är ännu skummare.. då får jag ut greggan.. det som $2 står för, men det går inte att använda den i sqlen..
Har även testat med att köra en if sats där jag frågar om txt = greggan (som jag testar med) och i så fall ska den skriva något annars något annat. Men det blir fel även där.
Det känns som att jag är nära lösningen, men jag är inte någon stjärna på regexp så jag vet inte om det kanske ligger något fel där, plus att jag har ingen aning om det ska vara public shared function. Den functionen kopierade jag från något tidigare inlägg här om jag inte minns fel och gjorde sedan om den lite.
Kan detta vara nära en lösning och isåfall vad är fel? Eller är jag helt ute och cyklar? :q
function ntou(txt)
dim cn as new oledbconnection("PROVIDER=MICROSOFT.JET.OLEDB.4.0;DATA SOURCE=E:\Inetpub\Databaser\tihi.mdb;")
dim cmd as new oledbcommand("select * from users where nickname='" & txt & "'" ,cn)
dim dr as oledbdatareader
dim userid as integer
dim bild as string
cn.open()
dr = cmd.ExecuteReader()
dr.read()
userid = dr("userid")
bild = dr("syns")
dr.close()
cn.close()
ntou = "<a href='userprofile.aspx?userid=" & userid & "'>" & bild & "</a>"
end function
när jag kör funktionen på det där så är det fortfarande $2 och inte texten den samlat in... så då försöker den hitta $2 i databasen, vilket genererar felmeddelandet, kanske för att man inte kan leta efter $ i databasen?
nu är vi nära lösningen... bytte ut txt i SQLsatsen mot greggan och då matade den ut rätt saker. Problemet är ju bara det att om regexpen är rätt så ska txt innehålla texten greggan, vilket den bevisade att den gjorde när jag körde med trysatsen. Finns det några regler för att köra en funktion i en regexp??