Just nu i M3-nätverket
Gå till innehåll

Åtgärdsproblem vid anslutning till SQL


Dieselmannen

Rekommendera Poster

Dieselmannen

Jag får detta meddelande när jag skall köra min SQL fråga.

Har gjort ett tidsbokningsystem.

------------

ADODB.Recordset (0x800A0E78)

Åtgärden är inte tillåten när objektet är stängt.

------------

Koppling till db finns, och jag har fler frågor ovan denna, och ja, alla är stängda, dvs alla ser likadana ut men bara denna som inte vill fungera.

 

Kör jag frågan i SQL managern, fungerar det fin fint.

Om jag kör en Conn.Open innan detta så vänder den på felmedelandet, och säger att det inte går när den är öppen.

 

 

Och jag har testat att skriva ut den och köra, det funkar också fin fint.

 


SQL = ""
SQL = SQL & " DECLARE @Today AS VARCHAR"
SQL = SQL & " SET DATEFIRST 1 "
SQL = SQL & " SET @Today = DATEPART(dw, getdate())"
SQL = SQL & " SELECT "
SQL = SQL & "         [iD_Contact],"
SQL = SQL & "         [iD_Customer],"
SQL = SQL & "         [startDate],"
SQL = SQL & "         [EndDate],"
SQL = SQL & "         [WeekDay],"
SQL = SQL & "         [starttime],"
SQL = SQL & "         [Endtime],"
SQL = SQL & "         [Notes],"
SQL = SQL & "         [Created],"
SQL = SQL & "         [Typ]"
SQL = SQL & " FROM ("
'Endast ett datum
SQL = SQL & " SELECT  *, 'En kontakt' AS Typ"
SQL = SQL & " FROM    dbo.Contacts CO"
SQL = SQL & " WHERE   ( CO.StartDate < GETDATE() AND (Startdate = Enddate) )"
SQL = SQL & "         AND Active = 1 "
SQL = SQL & "         AND Reconnected IS Null"
SQL = SQL & " UNION ALL"
'Löpande
SQL = SQL & " SELECT  *, 'Löpande kontakt' AS Typ"
SQL = SQL & " FROM    dbo.Contacts CO"
SQL = SQL & " WHERE    Enddate IS Null"
SQL = SQL & "         AND Active = 1 "
SQL = SQL & "         AND WeekDay LIKE '%'+@Today+'%'"
SQL = SQL & "         AND (Reconnected IS NULL OR '" & date() & "' > Reconnected  )"
SQL = SQL & " UNION ALL"
'En period
SQL = SQL & " SELECT  *, 'Periodisk kontakt' AS Typ"
SQL = SQL & " FROM    dbo.Contacts CO"
SQL = SQL & " WHERE    Active = 1 "
SQL = SQL & "         AND WeekDay LIKE '%'+@Today+'%'"
SQL = SQL & "         AND  '" & date() & "' < EndDate"
SQL = SQL & "         AND ('" & date() & "' > Reconnected OR Reconnected IS NULL)"
SQL = SQL & " ) AS Kontakt"
If ID_Customer <> "" Then SQL = SQL & " WHERE Kontakt.ID_Customer = " & ID_Customer
SQL = SQL & " ORDER BY Starttime DESC"

'Response.Write(SQL)
'Response.end

Set rs = Conn.execute(SQL)
If NOT rs.EOF Then
arr_contact = rs.GetRows()
End if
rs.Close


 

Tacksam för hjälp.

Länk till kommentar
Dela på andra webbplatser

På vilken rad (och vad står det där) får du felmeddelandet?

 

Det är mycket svårt att se utifrån det begränsade kodstycket du postat vad som kan vara fel.

Länk till kommentar
Dela på andra webbplatser

Dieselmannen

Det blir i detta fall.

If NOT rs.EOF Then

 

Det som är skumt är att denna fråga fungerar hur bra som helst om jag skriver ut den, men när jag kör den här så blir det fel.

Dvs jag har liknande frågor på sidan, och har kollat att alla anropas likadant.

 

Så fort jag anropar rs, då blir det knas.

Länk till kommentar
Dela på andra webbplatser

Dieselmannen

Ja, och jag har flera likadana anslutningar på sidan.

Stänger efter varje mm.

 

Börjar fundera om det finns nån gräns för hur många anslutningar man får ha, fast det borde ju vara hur många som helst bara man stänger dom.

Länk till kommentar
Dela på andra webbplatser

Tömmer du ditt recordset-objekt (om du återanvänder det) mellan varje databasfråga?

set rs = Nothing

Du har inga andra konstiga IF-satser som kan stänga kopplingar / tömma object på ett (för dig) oväntat sätt vid körning?

 

Som sagt så är det inte lätt att felsöka med så pass begränsad del av koden.

Om du bryter ut denna fråga till en separat fil och bara kör den, funkar det då som förväntat?

Om inte så kan du ju posta hela den koden så kan vi titta på den.

Länk till kommentar
Dela på andra webbplatser

Dieselmannen

Tack, jag skall testa med det, vilket jag inte gjort, knasigt nog.

Och nej, jag tömmer inte recordsetet förrän sist på sidan, jag stänger bara den.

 

Har granskat koden flera gånger efter nåt ställe där jag stänger eller gör nåt, men inte det.

 

Jag har även efter denna kodsnutt fler recordset.

 

Men, jag skall testa ditt tips, och sedan klistrar jag in hela sidan om det inte fungerar.

Länk till kommentar
Dela på andra webbplatser

Dieselmannen

Nope fungerar inte.

Nu har jag bara den på sidan.

I DB kopplingen

 

Dim rs,Conn
Set Conn = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.Connection")
ConnStr = "Driver={SQL Server};Server=Minserver;Database=Mindatabas;UID=test;PWD=test"

Conn.Open = ConnStr

 

Längst ner på sidan

 

Set rs = Nothing
Conn.Close
Set Conn = Nothing

 

+ Att jag skriver inte ens ut den, gör bara kopplingen nu.

Samma fel på denna rad "If NOT rs.EOF Then"

Länk till kommentar
Dela på andra webbplatser

Testa:

<%
strSQLSrvAdr = "myServer"
strDBName = "myDatabase"
strDBUserName = "myUsername"
strDBPassword = "myPassword"

SET objCon = Server.CreateObject("ADODB.Connection")
objCon.open "DRIVER=SQL Server; SERVER="&strSQLSrvAdr&"; DATABASE="&strDBName&"; UID="&strDBUserName&"; PWD="&strDBPassword&";"

strSQL = ""&_
" DECLARE @Today AS VARCHAR "&_
" SET DATEFIRST 1 "&_
" SET @Today = DATEPART(dw, getdate()) "&_
" SELECT "&_
" 	[iD_Contact], "&_
" 	[iD_Customer], "&_
" 	[startDate], "&_
" 	[EndDate], "&_
" 	[WeekDay], "&_
" 	[starttime], "&_
" 	[Endtime], "&_
" 	[Notes], "&_
" 	[Created], "&_
" 	[Typ] "&_
" FROM ( "&_
" SELECT *, 'En kontakt' AS Typ "&_
" FROM	dbo.Contacts CO "&_
" WHERE ( CO.StartDate < GETDATE() AND (Startdate = Enddate) ) "&_
" 	AND Active = 1 "&_
" 	AND Reconnected IS Null "&_
"	UNION ALL "&_
"	SELECT *, 'Löpande kontakt' AS Typ "&_
"	FROM	dbo.Contacts CO "&_
"	WHERE	Enddate IS Null "&_
" 	AND Active = 1 "&_
" 	AND WeekDay LIKE '%'+@Today+'%' "&_
" 	AND (Reconnected IS NULL OR '" & date() & "' > Reconnected ) "&_
"	UNION ALL "&_
"	SELECT *, 'Periodisk kontakt' AS Typ "&_
"	FROM	dbo.Contacts CO "&_
"	WHERE	Active = 1 "&_
" 	AND WeekDay LIKE '%'+@Today+'%' "&_
" 	AND '" & date() & "' < EndDate "&_
" 	AND ('" & date() & "' > Reconnected OR Reconnected IS NULL) "&_
" ) AS Kontakt "
IF ID_Customer <> "" THEN 
	strSQL = strSQL & " WHERE Kontakt.ID_Customer = " & ID_Customer
END IF
strSQL = strSQL & " ORDER BY Starttime DESC"

SET objRS = objCon.execute(strSQL)
IF NOT objRS.EOF THEN
arr_contact = objRS.GetRows()
END IF
SET objRS=nothing

objCon.close
SET objCon = Nothing
%>

Länk till kommentar
Dela på andra webbplatser

Dieselmannen

Ännu en gång, så fungerar det inte.

Jag har sett att det är fler än jag som upplevt detta.

 

Tack för alla insatser så här långt, jag skall fortsätta att testa!

Länk till kommentar
Dela på andra webbplatser

Prova att skippa @Today:

strSQL = ""&_
" SELECT "&_
" 	[iD_Contact], "&_
" 	[iD_Customer], "&_
" 	[startDate], "&_
" 	[EndDate], "&_
" 	[WeekDay], "&_
" 	[starttime], "&_
" 	[Endtime], "&_
" 	[Notes], "&_
" 	[Created], "&_
" 	[Typ] "&_
" FROM ( "&_
"	SELECT *, 'En kontakt' AS Typ "&_
"	FROM dbo.Contacts CO "&_
"	WHERE ( CO.StartDate < GETDATE() AND (Startdate = Enddate) ) "&_
" 	AND Active = 1 "&_
" 	AND Reconnected IS Null "&_
"	UNION ALL "&_
"	SELECT *, 'Löpande kontakt' AS Typ "&_
"	FROM	dbo.Contacts CO "&_
"	WHERE Enddate IS Null "&_
" 	AND Active = 1 "&_
" 	AND WeekDay LIKE '%'+DATEPART(dw, getdate())+'%' "&_
" 	AND (Reconnected IS NULL OR '" & date() & "' > Reconnected ) "&_
"	UNION ALL "&_
"	SELECT *, 'Periodisk kontakt' AS Typ "&_
"	FROM	dbo.Contacts CO "&_
"	WHERE Active = 1 "&_
" 	AND WeekDay LIKE '%'+DATEPART(dw, getdate())+'%' "&_
" 	AND '" & date() & "' < EndDate "&_
" 	AND ('" & date() & "' > Reconnected OR Reconnected IS NULL) "&_
" ) AS Kontakt "
IF ID_Customer <> "" THEN 
	strSQL = strSQL & " WHERE Kontakt.ID_Customer = " & ID_Customer
END IF
strSQL = strSQL & " ORDER BY Starttime DESC"

 

Testa även att köra varje subfråga var för sig och se om det är i någon av dem som det spårar ur.

 

Det är väl f.ö. lite märkligt med LIKE-operatorn för att jämföra dagar?

Länk till kommentar
Dela på andra webbplatser

Dieselmannen

Nja inte ännu, skall dela upp frågan och testa av bit för bit.

Jo Today, är alltså dagens nummer dvs 1 = måndag, 2 = tisdag osv, och står det i det fältet vilka dagar denna fråga gäller.

 

Ex, Om du kommer in på en måndag och det finns en 1:a i fältet, då är det i dag.

Länk till kommentar
Dela på andra webbplatser

Dieselmannen

Hmm verkar som om felet är i @Today, man kan tydligen inte använda tabell i ena villkoret och en deklarerad variabel i det andra.

Har testat alla möjliga varianter.

 

Tack för all hjälp!

Cluster, jag postar lösningen om jag fixar det, nu har jag ersatt @today med idag = weekday(date()) och satt in det i stället.

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...