gregganMedlem sedan jan. 2004601 inlägg
Hej
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
gregganMedlem sedan jan. 2004601 inlägg
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...
fredrikMedlem sedan dec. 19991 082 inlägg
...är inte riktigt med på vad du vill åt?
Vill du alltså byta ut "1" (som ligger i kolumnen userID) till "Greggan" (som ligger i kolumnen NickName)?
Det låter som en ganska konstig (och dum?) idé? Varför? :)
Hur som helst kan du använda REPLACE-metoden i SQL:
SELECT REPLACE(COL_TO_SEARCH_IN, '1', NickName)
...men jag förstår ändå inte nyttan med det....du borde även får problem med typblandningsfel.
gregganMedlem sedan jan. 2004601 inlägg
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.
txt = Replace(txt, "1", "greggan")
txt = Replace(txt, "2", "putte")
txt = Replace(txt, "3", "jonte")
osv.
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
PDahlenMedlem sedan apr. 2004784 inlägg
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.
gregganMedlem sedan jan. 2004601 inlägg
okej.. jo men det låter som det jag vill komma åt..
har du lite kod typ hur jag skulle kunna göra det?
fredrikMedlem sedan dec. 19991 082 inlägg
Alltså typ:
"ABC här kommer en text av 1, osv" --> "ABC här kommer en text av Greggan, osv"
Har du själva texten i databasen med? För iså fall bör du kunna använda REPLACE i SQL ändå.
gregganMedlem sedan jan. 2004601 inlägg
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.
gregganMedlem sedan jan. 2004601 inlägg
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
PDahlenMedlem sedan apr. 2004784 inlägg
Ta bort try-catchblocket så du får ut felet.
gregganMedlem sedan jan. 2004601 inlägg
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
felet: Row handle is invalid
PDahlenMedlem sedan apr. 2004784 inlägg
Och på vilken rad får du felet?
Tips inför framtiden: Ange felmeddelande och vilken rad felet uppkommer på så blir det enklare att felsöka.
gregganMedlem sedan jan. 2004601 inlägg
oj sorry... det är på dom raderna där jag kör dr("userid") och dr("syns")
PDahlenMedlem sedan apr. 2004784 inlägg
Du kan börja med att prova byta ut * mot kolumnnamnen. Jag vet inte om det hjälper men det är i alla fall en början.
gregganMedlem sedan jan. 2004601 inlägg
nej det hjälpte inte.
men jag får känslan av att felet ligger här:
y = re.Replace(y, ntou("$2"))
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?
gregganMedlem sedan jan. 2004601 inlägg
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??
gregganMedlem sedan jan. 2004601 inlägg
ingen som vet eller har någon idé?
gregganMedlem sedan jan. 2004601 inlägg
Mamma mia, jag har inte löst detta ännu, och nu börjar jag få svårt att sova om nätterna när jag försöker tänka ut ett sätt att lösa det på. :l