Hej, MAn kan ju inte skriva en service i VB. Antar att du använder EasyCallSrv.exe för att köra ditt program som en service. Tyder inte felet på att det är just den som ballar ur? Tack för ditt svar, Har du läst:ADO - Connection och Recordset
Har en VB6 applikation som går som en Service och ger följande fel i Event Loggen efter ca 20 dagar:
2003-02-07 19:51:36 COM+ Error Executive 4199 N/A GOLDENEYE The COM+ Services DLL (comsvcs.dll) was unable to load because allocation of thread local storage failed. Process Name: EasyCallSrv.exeError Code = 0x80070008 : Not enough storage is available to process this command.COM+ Services Internals Information:File: .\comsvcs.cpp, Line: 289
Error-hantering gör att programmet inte kraschar, men databasen(access) går ej att öppna. Om tjänsten startas om fungerar det i ca 20 dagar igen. Felet fanns ej på NT4-tiden, utan började i och med win2k. Felet visar sig dock bara på vissa datorer.
En google-sökning på "thread local storage failed" ger länkar till flera med samma problem.
Jag har ca 20 tabeller i databasen. I genomsnitt öppnar jag någon tabell ca var 5:te minut. Jag kör konsekvent med följande databas kod:
(Provider i DbConnString = Microsoft.Jet.OLEDB.4.0)
Dim ad As ADODB.Connection
Dim ar As ADODB.Recordset
Set ad = New ADODB.Connection
Let ad.ConnectionString = DbConnString
ad.Open
Set ar = New ADODB.Recordset
ar.CursorType = adOpenStatic
ar.LockType = adLockReadOnly ' or adLockOptimistic
ar.Open "SLM_ExcPerm", ad, , , adCmdTable
.....
ar.Close
ad.Close
Set ar=Nothing
Set ad=Nothing
Nu till min fråga:
Skulle det vara bättre att skapa connection samt recordset 1 gång i en global modul, och sedan bara göra open resp. close i de olika procedurerna.
Det finns även en console-applikation som ibland behöver arbeta mot databasen.
mvh,
LeifSv: ADO - Connection och Recordset
Du bör bara ha öppe anslutningen medans du använder den. Så du bör inte hålla anslutningen öppen.Sv: ADO - Connection och Recordset
Intressant påstående ang. att det inte går att skriva en service i VB. Jag har själv använt ntsvc.ocx från MS i flera år i diverse program utan problem. Nu för tiden använder jag en köpt service-komponent från Dart Communication. Men det är fler som påstår samma som dig...
Hur som helst så verkar de övriga som har COM+ problemet mest diskutera hur databasen öppnas. T ex följande länk:
http://www.tek-tips.com/gviewthread.cfm/lev2/4/lev3/30/pid/787/qid/150767
Beträffande anslutningen öppen så avser jag givetvis att göra ar.close och ad.close, men min fråga var ifall det är dumt att göra Set ad = New ADODB.Connection i varje procedur.
mvh,
LeifSv: ADO - Connection och Recordset
http://support.microsoft.com/default.aspx?scid=kb;EN-US;175948
SUMMARY
Microsoft does not currently recommend, and does not support, running Visual Basic applications as Microsoft Windows NT, Windows 2000 and Windows XP Services because the applications may exhibit unstable behavior when installed and run as Microsoft Windows Services.
Workaround
The Microsoft Technical Article, "NT Service: An OLE Control for Creating Windows NT Services in Visual Basic," describes an OLE Control that enables developers to create Visual Basic applications that function as Microsoft Windows NT services. With the NTService control, you can install a service, log events, and respond to start, stop, pause, and continue events. You can find this article at the following Web site:
http://msdn.microsoft.com/library/techart/msdn_ntsrvocx.htm
NOTE: Microsoft does not recommend, and does not support, running Visual Basic applications as Microsoft Windows NT, Windows 2000 and Windows XP Services, even when you use Ntsrv.ocx.
Other Technologies
Developers can expect difficulties with efforts to employ Microsoft technologies such as ODBC, DCOM, OLE Automation, and DAO in a Microsoft Windows Service written in Microsoft Visual Basic. For this reason, and for those reasons already noted, Microsoft advises developers to avoid using these technologies in a Microsoft Windows NT Service written in Microsoft Visual Basic.
Så frågan är om du kan få en tillräckligt stabil service i VB6. Du kan skriva en service i VB.NET. Kan ju vara ett alternativ.