Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Databas, VB

Postades av 2003-03-24 09:19:59 - Mikael Gustavsson, i forum visual basic - allmänt, Tråden har 9 Kommentarer och lästs av 511 personer

Jag har ett program skrivet i VB6, DAO med koppling till en SQL2000 via ODBC.
Programmet måste snurra 24 timmar, 365 dagar.
En gång varje minut kollas bland annat poster i en tabell.
Vid ett ev nätverksfel/odbc-fel måste programmet snurra vidare.
Nästa minut skall det på nytt koppla sig mot DB:n.
Hur gör jag en 100%-ig felhanterare.

Ser just nu ut så här:

tabell.close
db.close
set db=nothing

set db=workspaces(0).Opendatabese(dbnamn,dbdrivernoprompt,false,"ODBC;Database=123;UID=456;PWD=789;DSN=1234)

set tabell=db.openrecordset(tabellnamn,dbopendynaset,dbseechanges)

Detta fungerar inte.
Om jag startar om programmet, funkar det igen.
Dvs, hur jag jag en korrekt/komplett omstart av databaskopplingen mha kod.

Tacksam för snabbt svar.

/ Mikael


Svara

Sv: Databas, VB

Postades av 2003-03-24 12:09:37 - Andreas Hillqvist

Jag föreslår att du inte låter recordsetet ligga öppet. Utan öpnnar när du gör en koll:
<code>
Private Sub Timer1_Timer()
Dim db As DAO.Database
Dim tabell As DAO.Recordset
On Error GoTo Timer1_Timer_Err

Set db = OpenDatabase(dbnamn, dbDriverNoPrompt, False, "ODBC;Database=123;UID=456;PWD=789;DSN=1234")

Set tabell = db.OpenRecordset(tabellnamn, dbOpenDynaset, dbSeeChanges)

tabell.Close
db.Close

Set db = Nothing

Exit Sub

Timer1_Timer_Err:
Debug.Print Err.Number & ": " & Err.Description

End Sub
</code>


Svara

Sv: Databas, VB

Postades av 2003-03-24 12:19:49 - Johan Microsoft

Hej Mikael!

Man kan inte alltid vara säker på att minnet frigörs med en gång. Ta en titt på den här sidan för lite mer information:
http://msdn.microsoft.com/library/en-us/vbcon98/html/vbconvisualbasiccomponentshutdownrules.asp?frame=true

Om det krisar rejält tidsmässigt och du vill ha en (mycket ful) workaround tills dess du löst problemet kan du ju bara göra på följande vis:
<code>
Shell("Applikationen.exe")
End
</code>
Det vill säga öppna en ny instans av applikationen och stänga den befintliga. Men som sagt var... Snyggt är det inte. :)


Svara

Sv: Databas, VB

Postades av 2003-03-24 12:43:46 - Mikael Gustavsson

Hjälper inte.

Jag får ändå 'ODBC anrop misslyckades' när jag nästa gång kör set tabell=...

Nu stänger jag alla rs och db inom varje sub.
Jag har även tagit bort de globala rs och db, och ersatt dem med rs och db i varja sub.

/ Mikael


Svara

Sv: Databas, VB

Postades av 2003-03-24 13:00:09 - Johan Microsoft

Av koden att döma sätter du aldrig Tabell = Nothing.
Har du provat det?


Svara

Sv: Databas, VB

Postades av 2003-03-24 13:03:38 - Mikael Gustavsson

Ta en titt på vilken sida....
(Saknades nog en länk..)
/ Mikael


Svara

Sv: Databas, VB

Postades av 2003-03-24 13:11:43 - Mikael Gustavsson

Kör även nothing på tabellen.
Samma resultat.

/ Mikael


Svara

Sv: Databas, VB

Postades av 2003-03-24 21:24:45 - Mikael Gustavsson

Koden ser ju nu så här, fungerar ej.
Vad göra??

<code>
sub skicka()
on error goto fel:

dim db as dao.database, rs1 as dao.recodset, rs2 as dao.recordset

set db=workspaces(0).opendatabase("123",drivernoprompt,false,"ODBC;database=12;UID=34;PWD=56;DSN=78")
set rs1=db.openrecordset("select...",dbopendynaset,dbseechanges)
set rs2=db.openrecordset("select...",dbopendynaset,dbseechanges)

if rs1.bof=false then
...
...
...
end if

ut:
on error resume next
rs1.close
rs2.close
set rs1=Nothing
set rs2=Nothing
db.close
set db=Nothing

exit sub

fel:
resume ut:

end sub
</code>


Svara

Sv: Databas, VB

Postades av 2003-03-24 22:34:55 - Andreas Hillqvist

Jag tycker din kod ser okej ut.
Du kan ju testa med att lägga anslutningskoden i en separat funktion:
<code>
Private Function CurrentDB() As DAO.Database
On Error Resume Next
Set CurrentDB = WorkSpaces(0).OpenDatabase("123",drivernoprompt,false,"ODBC;database=12;UID=34;PWD=56;DSN=78")


End Function

sub skicka()
on error goto fel:
Dim db As DAO.Database
Dim rs1 As DAO.Recodset
Dim rs2 As DAO.Recordset

Set db = CurrentDB
If db Is Nothing Then
Debug.Print "Error while connecting..."
Else
Set rs1=db.openrecordset("select...",dbopendynaset,dbseechanges)
Set rs2=db.openrecordset("select...",dbopendynaset,dbseechanges)

If rs1.bof=false then
'...
End If
End If

ut:
On Error Resume Next
If Not rs1 Is Nothing Then
rs1.Close
Set rs1=Nothing
End If
If Not rs1 Is Nothing Then
rs2.Close
set rs2=Nothing
End If
db.close
Set db = Nothing
exit sub

fel:
resume ut:

end sub
</code>


Svara

Sv: Databas, VB

Postades av 2003-03-27 13:29:15 - Johan Microsoft

url-taggen funkade inte på länken. Den var kanske för lång...
Har rättat till det, men här kommer den igen:

http://msdn.microsoft.com/library/en-us/vbcon98/html/vbconvisualbasiccomponentshutdownrules.asp?frame=true


Svara

Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 167
27 952
271 704
781
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies