Jag har en tabell med kolumnerna partner1 och partner2 (se nedan). Nu vill jag lägga in ett värde i partner2 men under förutsättning att partner2=0 annars skall det värde som finns i partner2 letas upp i partner1 (finns även där då) och se om partner2 där =0 annars gå vidare .....Någon form av loop alltså! Du kan ha rätt, men själva uppdateringen i tabellen görs endast vid inlägg i ett formulär från en användare. Man kan uttrycka det med att "koppla" partner2 till partner1. Får man fråga vad det är som representeras av databasen? Kanske kan man hitta en bättre struktur. Databasen representerar självklart fler fält än dessa 2, men strukturen är följande: Så det du säger är att det är trådade poster? Exempelvis post 3,4,7,11 hör till 13 (self join) ? När man har trådade inlägg i ett forum har man normalt en trädstruktur; ett inlägg kan ha flera svar som i sin tur kan ha flera svar. Som jag förstår det har man i det här fallet bara en mängd av linjära strukturer. Ojdå nu är vi "över min nivå" (-förmodligen därför jag behöver lite hjälp..) I ovanstående exempel så ligger 5:an under 3:an som ligger under 2:an, dessa kommer att ligga i en kedja (ev flera), Men du kan alltså inte ha grenade strukturer? Både 8 och 9 kan inte ligga direkt under 7? Huvudet på spiken, helt riktigt det kan dom inte, När ett nytt element skall läggas in, skall man kunna utgå från vilket element som helst i kedjan och hitta slutet, eller utgår du alltid från första elementet? Man skall kunna utgå från vilket element som helst - det är förmodligen där jag har "mitt lilla problem" Så här tycker jag att det borde bli (observera pseudokoden; är inte så haj på ASP): Får inte det hela att fungera riktigt får Vad skall detta föreställa? - Hjärnsläpp! Borde väl se ut så här: Får felkoden: SQL-satsen körs fortfarande inte... Jepp, skall förmodligen vara enligt nedan, men något i koden är fel eftersom den försöker att hämta den senaste registrerade partner's partnerv: Vilken är startpartnern där du vill börja söka i en kedja? Startpartnern är partnerid, partner skall läggas in i partnerv där partnerid=0 Tack Per, FROM-del saknades i SQL-satsen: Satt just och tittade på denna sträng och såg att det inte stämde. tyvärr saknar den parameter enligt nedan..... Och partnerid har angivits i formuläret? Pröva att lägga in litet avlusningsutskrifter: Dessa utskrifter visas inte utan felmeddelande visas: Jag förstår inte varför första utskriften inte visas när den ligger före anropet av conn.execute(). Det är inte någon tidigare sats med conn som misslyckas (t.ex. conn.open)? Blir det fel så visas inte resultatet fram till felet.. Tackar för detta! -Det hjälpte -nu får jag varje "avdelning" för sig. Följande utskrift efter första response.write: Är det anropet conn.execute(sql) som skall ha en parameter till på något vis? Har testkört scriptet fram och tillbaka och jag hamnar på precis som du säger,Någon som kan lösa en klurig loop i ett recordset?
Att min kod nedan inte fungerar behöver jag väl ej säga....Exempel:
'Om Request.Form("partner1") = 2 skall den hitta värdet fem i partner1 och sätta in värdet där i partner2.
2 3
3 5
5 0
6 7
7 0
Set conn=Server.createObject("ADODB.Connection")
conn.Open "mydsn","",""
sql="SELECT partner2 WHERE partner1=" & Request.Form("partner1")&""
'Hämtar värdet i partner2
If (rs("partner2"))>"0" Then 'Om värdet inte är 0 så gå vidare
sql="SELECT partner2 WHERE partner1=(rs("partner2"))
' hämtar nästa värde
fortsatt med Loop istället?
Else
sql="Update tabellen SET partner2 ="&partner2 &" WHERE partner1="
har partner2 som =0""
conn.execute(sql) 'sätt in värdet i tabellen när partner2=0 enligt ovan
conn.close
End IF
Sv: Någon som kan lösa en klurig loop i ett recordset?
Du behöver inte hämta ut datat, du kan göra allting i en sql-sats istället. Men som jag ser det så försöker du uppdatera data i samma tabell, måste du verkligen det. Kan du inte bara plocka ut det du behöver vid tillfälle?
I annat fall måste du ju köra denna uppdatering ofta för att inte få fel, eller?Sv:Någon som kan lösa en klurig loop i ett recordset?
Är partner1 = 2, 3, 5 enligt ovan skall värdet in i 5 partner2. (hoppas du förstår)
Alternativet att plocka ut det i en sql-sats (om man kan få till någon sådan) ger ju ingen uppdatering
dock kan man ju plocka ut värdet först lägga det som ett objekt och sedan lägga in det i två olika
sql-satser?Sv: Någon som kan lösa en klurig loop i ett recordset?
Att lagra kedjorna som 2,3,5 och 6,7 är inget alternativ?Sv:Någon som kan lösa en klurig loop i ett recordset?
se resp siffror som en kedja, Under två:an ligger 3:an, under tre:an ligger 5:an sen inga fler här, under 6:an ligger sjuan sen inga fler här osv. Ingen begränsning får alltså finnas.Sv: Någon som kan lösa en klurig loop i ett recordset?
Sv:Någon som kan lösa en klurig loop i ett recordset?
Sv:Någon som kan lösa en klurig loop i ett recordset?
de som kommer till kommer sedan under - tex är min 6:a och 7:a ett annat "led" det kan finnas fler "led" men mitt problem blir just att hitta "första nollan" i tex led 2 eller led 6 som båda är första "pappan" i leden.Sv: Någon som kan lösa en klurig loop i ett recordset?
7 8
7 9Sv:Någon som kan lösa en klurig loop i ett recordset?
7 8
nu kan ingen ligga under 7:an däremot kan id 7 lägga
ett annat id under 8:an dvs formuläret vet att det är session 7
men det gäller att hitta första 0:a som i detta fall kanske är just 8.
7 8
8 0
Då den hittar första 0:a på 7:an lägger den 9:an där.
7 8
8 9
9 0
Nu är första 0:a för 7, 8 och 9 just 9!Sv: Någon som kan lösa en klurig loop i ett recordset?
Sv:Någon som kan lösa en klurig loop i ett recordset?
det element som du nämner får jag genom session eller formulär och kan ju vara vad som helst.Sv: Någon som kan lösa en klurig loop i ett recordset?
Set conn=Server.createObject("ADODB.Connection")
conn.Open "mydsn","",""
partner = Request.Form("partner1")
Do
sql = "SELECT partner2 WHERE partner1=" & partner
' PSEUDOKOD:
rs = resultatet av SQL-satsen
owner = partner
partner = rs("partner2")
Loop While partner > 0
sql = "Update tabellen SET partner2 =" & partner & " WHERE partner1=" & owner
conn.execute(sql) 'sätt in värdet i tabellen när partner2=0 enligt ovan
conn.close
Sv:Någon som kan lösa en klurig loop i ett recordset?
Feltyp:
Körningsfel i Microsoft VBScript (0x800A000D)
Inkompatibla typer: 'rs'
/webb/Worldkeys 2005/partreg4.asp, line 20
Droppade IF satser nedan fungerar men bara om första partnerv resp partnerh =0
koden är följande:
<%
<%
dim regdatum
regdatum=date()
partner=Request.Form("partner") 'Partnerid:et på den nyregistrerade
sponsorid=Request.Form("sponsorid") 'Den som sponsrar
sponsornamn=Request.Form("sponsornamn")
partnernamn=Request.Form("partnernamn")
partnerid=Request.Form("partnerid") 'Placeras under detta partnerid
pbc=Request.Form("pbc") 'Businesscenter på ovanstående partnerid
ben=Request.Form("ben")
If ben="vanster" Then
Set conn=Server.createObject("ADODB.Connection")
conn.Open "worldkey","",""
Do
sql = "SELECT partnerv WHERE partner=" & partner
' PSEUDOKOD:
rs = ("partnerv") 'resultatet av SQL-satsen
owner = partner
partner = (rs("partnerv"))
Loop While partner > 0
sql = "Update partner SET partnerv =" & partner & " WHERE partner=" & owner
conn.execute(sql) 'sätt in värdet i tabellen när partnerv=0 enligt ovan
conn.close
End IF
'
'
'Set conn=Server.createObject("ADODB.Connection")
'conn.Open "worldkey","",""
'sql="Update partner SET partnerv='"&partner&"', sponsoridv="&sponsorid&", regdatumv='"®datum&"', " & _
' "vbc="&pbc&" WHERE partnerid=" & Request.Form("partnerid")&""
'Response.Write(sql)
'conn.execute(sql)
'conn.close
'ELSE 'nothing to do
'End IF
'if ben="hoger" Then
'Set conn=Server.createObject("ADODB.Connection")
'conn.Open "worldkey","",""
'sql="Update partner SET partnerh='"&partner&"', sponsoridh="&sponsorid&", regdatumh='"®datum&"', " & _
' "hbc="&pbc&" WHERE partnerid=" & Request.Form("partnerid")&""
'Response.Write(sql)
'conn.execute(sql)
'conn.close
'ELSE 'nothing to do
'End IF
%>
Sv: Någon som kan lösa en klurig loop i ett recordset?
<b>rs = ("partnerv") </b>
Du måste ju köra SQL-satsen...Sv:Någon som kan lösa en klurig loop i ett recordset?
Bytte till nedan men det hjälpte inte - fick syntaxfel - funderar ........
rs = '"("SELECT partnerv WHERE partner=" & partner)"'
Sv: Någon som kan lösa en klurig loop i ett recordset?
<CODE>
rs = "SELECT partnerv WHERE partner=" & partner
</CODE>Sv:Någon som kan lösa en klurig loop i ett recordset?
Feltyp:
Körningsfel i Microsoft VBScript (0x800A000D)
Inkompatibla typer: 'rs'
/webb/Worldkeys 2005/partreg4.asp, line 21Sv: Någon som kan lösa en klurig loop i ett recordset?
Det borde vara något i stil med
Set rs = conn.execute sqlSv:Någon som kan lösa en klurig loop i ett recordset?
<%
dim regdatum
regdatum=date()
partner=Request.Form("partner") 'Partnerid:et på den nyregistrerade
sponsorid=Request.Form("sponsorid") 'Den som sponsrar
sponsornamn=Request.Form("sponsornamn")
partnernamn=Request.Form("partnernamn")
partnerid=Request.Form("partnerid") 'Placeras under detta partnerid
pbc=Request.Form("pbc") 'Businesscenter på ovanstående partnerid
ben=Request.Form("ben")
If ben="vanster" Then
Set conn=Server.createObject("ADODB.Connection")
conn.Open "worldkey","",""
Do
sql = "SELECT partnerv WHERE partner=" & partner
' PSEUDOKOD:
Set rs = conn.execute(sql) 'resultatet av SQL-satsen
owner = partner
partner = (rs("partnerv"))
Loop While partnerv > 0
sql = "Update partner SET partnerv =" & partner & " WHERE partner=" & owner
conn.execute(sql) 'sätt in värdet i tabellen när partnerv=0 enligt ovan
Rs.Close
conn.Close
set rs = nothing
set conn = nothing
End IF
'
%>
Sv: Någon som kan lösa en klurig loop i ett recordset?
partner=Request.Form("partner") 'Partnerid:et på den nyregistrerade
sponsorid=Request.Form("sponsorid") 'Den som sponsrar
partnerid=Request.Form("partnerid") 'Placeras under detta partnerid
Sv:Någon som kan lösa en klurig loop i ett recordset?
partnerid partnerv
7 8
8 9
9 0
om tex partnerid är 7, 8 eller 9 så skall partner läggas i partnerv=0.Sv: Någon som kan lösa en klurig loop i ett recordset?
<%
dim regdatum
regdatum=date()
partner=Request.Form("partner") 'Partnerid:et på den nyregistrerade
sponsorid=Request.Form("sponsorid") 'Den som sponsrar
sponsornamn=Request.Form("sponsornamn")
partnernamn=Request.Form("partnernamn")
partnerid=Request.Form("partnerid") 'Placeras under detta partnerid
pbc=Request.Form("pbc") 'Businesscenter på ovanstående partnerid
ben=Request.Form("ben")
If ben="vanster" Then
Set conn=Server.createObject("ADODB.Connection")
conn.Open "worldkey","",""
aktuellpartner = partnerid
Do
sql = "SELECT partnerv WHERE partner=" & aktuellpartner
Set rs = conn.execute(sql) 'resultatet av SQL-satsen
forpartner = aktuellpartner
aktuellpartner = rs("partnerv")
Loop While aktuellpartner > 0
sql = "Update partner SET partnerv =" & partner & " WHERE partner=" & forpartner
conn.execute(sql) 'sätt in värdet i tabellen när partnerv=0 enligt ovan
Rs.Close
conn.Close
set rs = nothing
set conn = nothing
End IF
%>
Sv:Någon som kan lösa en klurig loop i ett recordset?
tyvärr får jag felmeddelande:
Feltyp:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][Drivrutin för ODBC Microsoft Access] Syntaxfel (operator saknas) i frågeuttrycket 'partnerv WHERE partner=10'.
/webb/Worldkeys 2005/partreg4.asp, line 18
Partner 10 var den jag skickade in i partnerid.....Sv: Någon som kan lösa en klurig loop i ett recordset?
Do
sql = "SELECT partnerv FROM partner WHERE partner=" & aktuellpartner
Set rs = conn.execute(sql) 'resultatet av SQL-satsen
Sv:Någon som kan lösa en klurig loop i ett recordset?
Feltyp:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E10)
[Microsoft][Drivrutin för ODBC Microsoft Access] För få parametrar angavs. 1 förväntades.
/webb/Worldkeys 2005/partreg4.asp, line 18Sv: Någon som kan lösa en klurig loop i ett recordset?
Sv: Någon som kan lösa en klurig loop i ett recordset?
sql = "SELECT partnerv WHERE partner=" & aktuellpartner
response.write sql & "<br>"
sql = "Update partner SET partnerv =" & partner & " WHERE partner=" & forpartner
response.write sql & "<br>"
Sv:Någon som kan lösa en klurig loop i ett recordset?
Feltyp:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E10)
[Microsoft][Drivrutin för ODBC Microsoft Access] För få parametrar angavs. 1 förväntades.
/webb/Worldkeys 2005/partreg4.asp, line 19
Postsättningen till sidan är:
POST Data:
sponsorid=10&sponsornamn=&partner=39&partnerid=10&partnernamn=&pbc=1&ben=vanster&Koll.x=33&Koll.y=1 osv.
Där partnerid=10 -verkar vara knepigt detta......Sv: Någon som kan lösa en klurig loop i ett recordset?
Vi får nog hoppas på någon som är mer hemma på hur Microsoft Access ODBC fungerar och dess felmeddelanden...Sv:Någon som kan lösa en klurig loop i ett recordset?
Lägg in:
<code>
response.end
</code>
efter du kört response.write (sql)..
/FSv: Någon som kan lösa en klurig loop i ett recordset?
SELECT partnerv FROM[partner] WHERE partner=10 ' denna verkar helt ok!
Nästa avdelning får jag inte då jag får felmeddelandet:
För få parametrar angavs. 1 förväntades.
/webb/Worldkeys 2005/partreg4.asp, line 21 ' För säkerhets skull bifogas koden här nedan:
<%
partner=Request.Form("partner") 'Partnerid:et på den nyregistrerade
sponsorid=Request.Form("sponsorid") 'Den som sponsrar
sponsornamn=Request.Form("sponsornamn")
partnernamn=Request.Form("partnernamn")
partnerid=Request.Form("partnerid") 'Placeras under detta partnerid
pbc=Request.Form("pbc") 'Businesscenter på ovanstående partnerid
ben=Request.Form("ben")
If ben="vanster" Then
Set conn=Server.createObject("ADODB.Connection")
conn.Open "worldkey","",""
aktuellpartner = partnerid
Do
sql = "SELECT partnerv FROM[partner] WHERE partner=" & aktuellpartner
'response.write sql & "<br>"
'response.end
Set rs = conn.execute(sql) 'resultatet av SQL-satsen
forpartner = aktuellpartner
aktuellpartner = rs("partnerv")
Loop While aktuellpartner > 0
sql = "Update partner SET partnerv =" & partner & " WHERE partner=" & forpartner
response.write sql & "<br>"
response.end
conn.execute(sql) 'sätt in värdet i tabellen när partnerv=0 enligt ovan
Rs.Close
conn.Close
set rs = nothing
set conn = nothing
End IF
%>
Sv:Någon som kan lösa en klurig loop i ett recordset?
Sv: Någon som kan lösa en klurig loop i ett recordset?
på Set rs = conn.execute(sql) Det är något här som tydligen inte stämmer.
Har följande konklusion:
<%
Set rs = conn.execute(sql) 'resultatet av SQL-satsen, efter denna kan jag inte få ut
'någon responseWrite...
'verkar vara fel här på något sätt?
forpartner = aktuellpartner 'forpartner= 10
aktuellpartner = rs("partnerv") ' aktuellpartner får nytt värde här
Loop While aktuellpartner > 0 ' kör loop så länge partnerv >0 - verkar ok!
%>