webForumDet fria alternativet

replace med databas

17 svar · 593 visningar · startad av greggan

gregganMedlem sedan jan. 2004601 inlägg
#1

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
#2

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
#3

...ä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
#4

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
#5

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
#6

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
#7

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
#8

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
#9

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
#10

Ta bort try-catchblocket så du får ut felet.

gregganMedlem sedan jan. 2004601 inlägg
#11
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
#12

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
#13

oj sorry... det är på dom raderna där jag kör dr("userid") och dr("syns")

PDahlenMedlem sedan apr. 2004784 inlägg
#14

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
#15

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
#16

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
#17

ingen som vet eller har någon idé?

gregganMedlem sedan jan. 2004601 inlägg
#18

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

Genererad på 359 ms · cache AV · v20260730165559-full.f96bc7eb