webForumDet fria alternativet

Hur bred är en getRows?

ASP

13 svar · 213 visningar · startad av Eclipse

Medlem sedan juli 20003 825 inlägg
Frågan#1
for j = 0 to UBound(myGetRow, 2)

	FOR i = 1 to 10
		tmp = tmp & i & ":" & UCase(myGetRow(i, j)) & "<BR>" & vbCRLF
	NEXT
	tmp = tmp & "<A HREF=""" & myGetRow(2, j) & """ TARGET=""" & myGetRow(3, j) & """>"
	tmp = tmp & myGetRow(1, j)  & "</A>" & vbCRLF

	IF NOT j = UBound(myGetRow, 2) THEN tmp = tmp & "<BR>"
NEXT

FOR i = 1 to 10... Kan man byta 10 mot något mer dynamiskt!?

------------------
I sometimes wish I was famous.

Medlem sedan dec. 200012 464 inlägg
#2
for j = 0 to UBound(myGetRow, 2)
FOR i = 1 to UBound(myGetRow, 1)
tmp = tmp & i & ":" & UCase(myGetRow(i, j)) & "<BR>" & vbCRLF
NEXT
tmp = tmp & "<A HREF=""" & myGetRow(2, j) & """ TARGET=""" & myGetRow(3, j) & """>"
tmp = tmp & myGetRow(1, j) & "</A>" & vbCRLF

IF NOT j = UBound(myGetRow, 2) THEN tmp = tmp & "<BR>"
NEXT

------------------
essentitia preter non sans multiplicandum

Medlem sedan juli 20003 825 inlägg
#3
' ## LIST AGENDA
SQL = "SELECT * FROM [agenda_titles] LEFT JOIN [agenda_notes] ON agenda_notes.x_titleID = agenda_titles.x_ID" _
& " WHERE agenda_notes.x_date = #" & date() & "# AND agenda_titles.x_view = TRUE ORDER BY agenda_titles.x_sortfield;"
response.write sql & "<BR>"
set mySQL = Conn.Execute(SQL)
on error resume next
myGetRowxx = mySQL.GetRows()

---
 SELECT * FROM [agenda_titles] LEFT JOIN [agenda_notes] ON agenda_notes.x_titleID = agenda_titles.x_ID WHERE agenda_notes.x_date = #2001-07-12# AND agenda_titles.x_view = TRUE ORDER BY agenda_titles.x_sortfield;

Just nu skriver den bara ut de titlar (alltså klockslag eller vad man nu vill ha) som har ett värde. Finns det ett sätt att skriva ut alla agenda_titles.x_name även dom som inte har någon post kopplade till sig?

------------------
OLR WebAdmin

Medlem sedan dec. 200012 464 inlägg
#4
SQL = "SELECT * FROM [agenda_titles] LEFT JOIN [agenda_notes] ON agenda_notes.x_titleID = agenda_titles.x_ID" _
& " WHERE (agenda_notes.x_date = #" & date() & "# or agenda_notes.x_date is null) AND agenda_titles.x_view = TRUE ORDER BY agenda_titles.x_sortfield"

------------------
essentitia preter non sans multiplicandum

Medlem sedan juli 20003 825 inlägg
#5

FULL JOIN tror jag skulle vara mer lämpligt, men det verkar inte stödjas av så många.

Jag fick jättekonstiga svar från din kod samt lite modifieringar av den samma. Den visade bara sex av 15 poster i nån konsigt slumpartad manéer som gör det lite svårt att felsöka...

------------------
OLR WebAdmin

Medlem sedan juli 20003 825 inlägg
#6
SQL = "SELECT * FROM [agenda_titles] " _
& " LEFT JOIN [agenda_notes] ON agenda_notes.x_titleID = agenda_titles.x_ID" _
& " WHERE  agenda_titles.x_name <> '' AND  agenda_titles.x_view = TRUE " _
& " ORDER BY agenda_titles.x_sortfield;"

Det fungerar relativt bra, jag får tag i alla poster som över huvudtaget finns. Så snart jag lägger till en fråga om datumet blir det bara *just den* frågan.

Dessutom kommer jag få samma tid tvågånger och det vill jag inte... Hmm... det vet jag inte riktigt hur jag ska lösa. Nestlade GetRows kanske!?

------------------
OLR WebAdmin

Medlem sedan juli 20003 825 inlägg
#7

Jag tror det lutar mot en tre dimentionell variant på nå't sätt...

8:00
9:00 Jakob Möte Fredrik Tandläkaren
10:00
11:00
12:00
13:00 Erik Frissan
14:00

---
Menyn till vänster, klockslagen alltså, är redigerbar, därav den något krångliga frågeställningen.

Visa mig en tredimensionell variant med GetRows! Jag kollade manualen och getrows finns inte ens med... lite konstigt!

Skapa inte båda samtidigt utan den ena först och den andra sen, med hjälp av den första:

	' ## LIST AGENDA TITLES - AGENDA
	SQL = "SELECT * FROM [agenda_titles] WHERE [x_view] = TRUE ORDER BY [x_sortfield];"
	set mySQL = Conn.Execute(SQL)
	on error resume next
	session("listAgendaTitles") = mySQL.GetRows()

------------------
OLR WebAdmin

Medlem sedan dec. 19996 721 inlägg
#8

Visa mig en tredimensionell variant med GetRows! Jag kollade manualen och getrows finns inte ens med... lite konstigt!

Vilken manual? GetRows är en ADO-metod, så den finns inte med i VBScript-dokumentationen.

GetRows fixar bara två dimesioner. Vill du ha tre så får du ta till hierarkiska recordset med DataShaping. Dessa recordset kan man köra getrows på, men det funkar ändå inte.

Om man av någon anledning måste ha arrayer, och inte nöjer sig med ett disconnected recordset kan man använda nedanstånde funktion, som är en liten GetRows för hierarkiska recordset, som jag skrev för ett tag sedan. Men, det man får inte hastighetsfördelarna som man har med getrows.

function HGetRows(rs)
	ReDim tmparray(rs.fields.count-1,0)
	Dim i,j
	i=0
	do until rs.eof
		redim preserve tmparray(rs.fields.count-1,i)
		for j=0 to rs.fields.count - 1
			if typename(rs.fields(j).value)="Recordset" then
				tmparray(j,i)=HGetRows(rs.fields(j).value)
			else
				tmparray(j,i)=rs.fields(j).value
			end if
		next
		rs.movenext
		i=i+1
	loop
	HGetRows=tmparray
end function
Medlem sedan juli 20003 825 inlägg
#9

VisualBasic Scripting - et litet skitprogram på 200 k från MS men det innehåller allt man behöver. Utom GetRows då.

...Dessa recordset kan man köra getrows på, men det funkar ändå inte.

OK... Intressant resonemang. Inget för mig med andra ord.

Som jag ser det blir det en "halvstatisk" variant. Man kan ändra i menyn, men det sker inte "under drift" så att säga. I det fallet är menyn intakt, alltså statisk. SÅ menyn kan jag läsa in vid ett tillfälle.

Men alla anteckningar måste man läsa in en och en i nån slags nestlad loop. Det blir färre databasfrågor och det är en klar förbättring.

---
Tack för koden. Jag känner att mina kunskaper på området inte riktigt greppar allt. Men får jag bara sova på saken löser det sig nog!

Till sist undrar jag bara hur du får den fina indenteringen när du pejstar kod i forumet? Det kanske är forumledare förunnat! :-)

------------------
OLR WebAdmin

Medlem sedan juli 20003 825 inlägg
#10
' ## LOOP THROUGH AGENDA TITLES
FOR j = 0 to UBound(myGetRowMenu, 2)
	tmp = tmp & "<B>" & UCase(myGetRowMenu(1, j)) & "</B>" & vbCRLF
	' ## LOOP THRUOGH NOTES
	FOR i = 0 to UBound(myGetRowNotes, 2)
		' ## CHECK IF agenda_title.x_ID = agenda_notes.x_titleID
		IF myGetRowMenu(0, j) = myGetRowNotes(2, i) THEN
			tmp = tmp & "<B>" & UCase(myGetRowNotes(7, i)) & "</B> " & myGetRowNotes(4, i) & vbCRLF
		END IF
	NEXT
	IF NOT j = UBound(myGetRowMenu, 2) THEN tmp = tmp & "<BR>"
NEXT

Färdig! Kanske inte perfekt men klart mycket bättre än nestlade SQL satser i alla fall! :-)

------------------
OLR WebAdmin

Medlem sedan dec. 19996 721 inlägg
#11

VisualBasic Scripting - et litet skitprogram på 200 k från MS men det innehåller allt man behöver. Utom GetRows då.

Som sagt, GetRows har inte med VBScript att göra, så det är därför den inte finns med.

Till sist undrar jag bara hur du får den fina indenteringen när du pejstar kod i forumet? Det kanske är forumledare förunnat! :-)

Ja... :)

Nävars, det är red- och perl-taggen kombinerade.

Medlem sedan juli 20003 825 inlägg
#12

Du tror inte forumet kan uppdatera [kod] taggen att även hantera tabbar? Det låter inte direkt som en extremt avancerad åtgärd och jag tror många skulle uppskatta det.

Dom som skiter i indenterad kod indenterar den ju inte 'in the first place' i alla fall, så att säga...

---
Major problems found. Websidan är fortfarande seg som knäck och jag vet inte varför... Det är inte relaterat till den kod vi diskuterat här, det är nämligen ovanför dessa rader.

Jag har en sida med både "gammal" och "ny" kod på och det märks ingen skillnad...

"Det ser snyggare ut" men vem bryr sig...? Kommer tid kommer råd.

------------------
OLR WebAdmin

Medlem sedan juli 20003 825 inlägg
#13
		' ## PRINT NOTES
		IF myGetRowMenu(0, j) = myGetRowNotes(2, i) THEN
			tmp = tmp & "<A HREF=""index.asp?date=" & myDate & user & title & "=" & myGetRowNotes(0, i)  & """>"
			tmp = tmp & "<IMG SRC=""/admin/pics/icons/edit.gif"" WIDTH=""18"" HEIGHT=""13"" BORDER=""0"" " '<<-- [b]denna raden[/b]
			tmp = tmp & "ALT=""Redigera " & myGetRowNotes(7, i) & " " & myGetRowNotes(8, i) & """></A><B>"  
			tmp = tmp & UCase(myGetRowNotes(7, i)) & "</B> " & myGetRowNotes(4, i) & vbCRLF

			' ## LEAVE SOME SPACE BETWEEN POSTS
			IF NOT j = UBound(myGetRowNotes, 2) THEN tmp = tmp & "   "
		END IF

Det blir problem om man kommer till en dag då det inte finns några poster, alltså en "tom" dag. Då skrivs den markerade raden ut på varje loop.

Det uppstår när man valt kreterier som inte finns, alltså då det blir noll träffar. Typ lista alla poster en tisdag med en viss person. Det kanske inte finns poster med den personen.

Any clues!?

------------------
OLR WebAdmin

[Redigerat av Eclipse den 13 jul 2001]

Medlem sedan juli 20003 825 inlägg
#14

Ett ful-hack löste det hela.

			tmp = tmp & "<A HREF=""index.asp?date=" & myDate & user & title & "&edit=" & myGetRowNotes(0, i)  & """>" _
			& "<IMG SRC=""/admin/pics/icons/edit.gif"" WIDTH=""18"" HEIGHT=""13"" BORDER=""0"" " _
			& "ALT=""Redigera " & myGetRowNotes(7, i) & " " & myGetRowNotes(8, i) & """></A><B>" & vbCRLF _
			& UCase(myGetRowNotes(7, i)) & "</B> " & myGetRowNotes(4, i) & vbCRLF

------------------
OLR WebAdmin

265 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
139 ms — hämta tråd, inlägg och bilagor (db)
114 ms — ändringar (db)