webForumDet fria alternativet

Hantera fler än 1 post

.NET

7 svar · 465 visningar · startad av devotion

Medlem sedan jan. 20013 582 inlägg
Frågan#1

Hej! :)

Jag har följande funktion:

Function GetVismaOrderNo(sTaskNr, lOwnerId)

	dim sSQL, Conn, Rs
	
	GetVismaOrderNo = False
	
	'Öppna databasen
	Set Conn=CreateObject("ADODB.Connection")
	Conn.Open Application.sDbConnectionString
	Set Rs=CreateObject("ADODB.Recordset")
	
	sSQL = "SELECT [OrdNo] FROM [F0001].dbo.[Ord] WHERE [WebPg] = '" & sTaskNr & "'"
	Rs.Open sSQL, Conn
	
	If not Rs.EOF then GetVismaOrderNo = Application.SetFieldValue(10040, lOwnerId, Rs("OrdNo")) 

	Rs.Close
	Set Rs=Nothing
	Set Conn=Nothing
		
End function

Hur gör jag smartast för att kontrollera om det finns fler än 1 post i recordsetet?

Dvs är det bara 1 post då ska det göras saker. Är det fler än 1 post, så ska det göras andra saker..

Mvh
Henrik

Medlem sedan jan. 20023 327 inlägg
#2

Du borde kunna göra något i stil med:

If Rs.RecordCount > 0 Then
    ...
End If
Medlem sedan jan. 20013 582 inlägg
#3

Compusa skrev:

Du borde kunna göra något i stil med:

If Rs.RecordCount > 0 Then
    ...
End If

Kan man alltid lita på recordcount?

Jag har hört att det inte alltid är tillförlitligt... :)

Medlem sedan juni 200032 967 inlägg
#4

Om du öppnar recordsetet på rätt så är det klart att du kan lita på recordcount. Om recordcount är -1 har du inte öppnat recordsetet med rätt parametrar.

Medlem sedan jan. 20023 327 inlägg
#5

En alternativ lösning är att ställa en SQL-fråga och kontrollera att värdet på 'Count' är större än 0:

Select @@ROWCOUNT as 'count', * from TABELL

Men får du det att fungera med RecordCount så tycker jag att du ska använda den.

Medlem sedan jan. 20013 582 inlägg
#6

@nders skrev:

Om du öppnar recordsetet på rätt så är det klart att du kan lita på recordcount. Om recordcount är -1 har du inte öppnat recordsetet med rätt parametrar.

Här fanns lite info om det:
http://sql-server-performance.com/Community/forums/p/18295/105819.aspx#105819

Så, då borde man ju använda: adOpenStatic

:)

Medlem sedan jan. 20013 582 inlägg
#7

Så här nånting, kanske?

Function GetVismaOrderNo(sTaskNr, lOwnerId)

	dim sSQL, Conn, Rs
	
	GetVismaOrderNo = False
	
	'Öppna databasen
	Set Conn=CreateObject("ADODB.Connection")
	Conn.Open Application.sDbConnectionString
	Set Rs=CreateObject("ADODB.Recordset")
	Rs.CursorType=adOpenStatic
	
	sSQL = "SELECT [OrdNo] FROM [F0001].dbo.[Ord] WHERE [WebPg] = '" & sTaskNr & "'"
	Rs.Open sSQL, Conn
	
	If not Rs.EOF then
		If Rs.RecordCount>1 then
			'Det finns fler än en order med aktuellt uppdragsnummer
			'Skriv till systemloggen
			'Skicka larmsignal
			'Märk uppdraget
		Else
			GetVismaOrderNo = Application.SetFieldValue(10040, lOwnerId, Rs("OrdNo"))
		End If
	End if

	Rs.Close
	Set Rs=Nothing
	Set Conn=Nothing
		
End function

:)

Medlem sedan juni 200032 967 inlägg
#8

Alltså: ja, någonting sånt kan absolut fjungera. :)

edit: never mind - läste fel :)

248 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)