[FoxPro] Error 80040e37, Share / Exclusive probleem?

Pagina: 1
Acties:
  • 175 views sinds 30-01-2008
  • Reageer

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Topicstarter
(overleden)
Wat ik probeer te doen:
Ik ben bezig met een programma (VB6) dat wat data uit een FoxPro database moet trekken. Die FoxPro database is van AccountView en an sich werkt alles prima... maar... :Y)

Ik gebruik een ADODB Connection Object om te verbinden met de FoxPro database. Dit is mijn connectiestring in de simpelste vorm:
code:
1
Provider=VFPOLEDB.1;Data Source=C:\Bla;Mode=Read;Password="""";Collating Sequence=MACHINE;

Nu kan ik met een query als "Select * from article" alle artikelen mooi ophalen. Het probleem is echter dat het programma als een soort service moet gaan draaien en dus om de zoveel tijd wat data uit Accountview moet trekken. Nu is bovenstaande query maar een voorbeeld, het gaat om het idee.

Mooi. Alles werkt dus. * RobIII proggelt vrolijk verder... Totdat ik opeens Accountview laat open staan en dan mijn programma weer run. *knal*... :? Wat krijgen we nou? :?

Foutcode: 80040e37 (of -2147217865 decimaal). Kan adm00rpd.dbc niet openen. Het lijkt me dus dat ik inderdaad niet erg netjes ben en de database waarschijnlijk Exclusief probeer te openen. :X Sorry! Dat gaan we fixen!

Wat heb ik gedaan?
• Ik heb geprobeerd de parameter "Exclusive=No" toe te voegen -> Zelfde foutmelding.
• "Mode=Read" en zelfs "Mode=Read|Share Deny None" toegevoegd -> Zelfde foutmelding.
• Geprobeerd "BackgroundFetch=No" toe te voegen (riep iemand op Google) -> Zelfde foutmelding
• Een combinatie van die drie, waardoor ik uit kwam op:
code:
1
Provider=VFPOLEDB.1;Data Source=C:\Bla;BackgroundFetch=No;Mode=Read|Share Deny None;Exclusive=No;Password="""";Collating Sequence=MACHINE;


Ik heb al vanalles gegoogled en bij die zoektocht kwam ik uit op Q175801 en Q197463 maar daar kan ik ook niks zinnigs in vinden, evenals op Google (Groups) zelf. Ik gebruik overigens de OLE DB Provider voor FoxPro.

Kort samengevat
Alles werkt prima, zolang Accountview niet geopend is. Open ik Accountview en ik run dan mijn programma dan krijg ik die foutmelding. Accountview zélf kan echter wél (op meerdere stations) tegelijkertijd met de database werken, dus het ligt aan mijn manier van openen van de connectie. Het is ook geen (NTFS) rechten probleem wat ik overal lees, want het werkt wél als ik Accountview sluit.

Wat doe ik verkeerd? Aan een read-only view heb ik genoeg, ik wil alleen een soort "export" maken van bepaalde data op bepaalde tijden, waarbij mijn programma wat dingetjes toevoegt aan de gegevens die uit Accountview (moeten) komen.

offtopic:
Ik weet dat Accountview een COM object beschikbaar heeft, en daar ben ik zelfs een dag voor op "cursus" geweest (waste of money, maar goed...) en dat ik daarmee ook de DB kan benaderen. Maar a) krijg ik dan niet de gewenste gegevens en b) is dat niet zo rap. Het is overigens verder prima toegestaan om Accountview via een ODBC te benaderen, dus ik vraag niks illegaals ofzo. Ik ga dit, mocht ik er hier niet uit komen met de support afdeling opnemen, maar die zijn a) nu niet open en b) nogal traag met reageren...

[ Voor 4% gewijzigd door RobIII op 20-04-2005 21:35 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Scoutertje
  • Registratie: Juli 2004
  • Laatst online: 23:34
Hoi,

M'n eerste reactie is: ik zie geen probleem...
Dus neem een kijkje op:

www.universalthread.com
www.foxite.com
http://msdn.microsoft.com/newsgroups danwel
news://msnews.microsoft.c...c.fox.programmer.exchange

Dit zijn de drie thuisbases voor de fox....

Succes!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Topicstarter
(overleden)
Scoutertje schreef op donderdag 21 april 2005 @ 19:01:
Hoi,

M'n eerste reactie is: ik zie geen probleem...
:?
Ik zeg toch duidelijk wat het probleem is? Als Accountview open staat (en dat is zo, omdat er de hele dag 3 mensen in zitten) kan mijn programma niet bij de data die om de zoveel tijd eruit getrokken dient te worden. Ik kan toch slecht tegen iedereen zeggen dat ze er om de 20 minuten uit moeten :?
Ik ga daar wel eens kijken, maar wat gerichtere hulp is nog altijd erg welkom...

/Edit:

Mijn resultaten so far:
www.universalthread.com -> Kan ik niks specifieks op vinden, en niet eens een search :?
www.foxite.com -> Niks, en erg onduidelijke site overigens IMHO
http://msdn.microsoft.com/newsgroups -> Niks, en alles dat ik vind gaat over hele andere dingen.
news://msnews.microsoft.com/microsoft.public.fox.programmer.exchange ben ik aan 't doorkijken ook niks zinnigs.

Heb je wat specifiekere url's voor me voor een oplossing, of een mogelijke hint naar een oplossing, van mijn probleem?

[ Voor 53% gewijzigd door RobIII op 21-04-2005 20:52 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Sh0ckTr00per
  • Registratie: Oktober 2003
  • Laatst online: 21:23
Waar 'm volgens mij het probleem in zit is dat je met jouw connect string de data als 'free table directory' benadert. FoxPro is zo dat als je een tabel uit een database pakt, hij de database dan vrolijk gaat openen op een manier die hem geschikt lijkt.

Een andere manier is om de DBC te openen, met een connect string als deze:

code:
1
ConnStr= "Driver=Microsoft Visual Foxpro Driver; UID=;SourceType=DBC;SourceDB=C:\VFP\Samples\Tastrade\Data\Tastrade.dbc"

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Topicstarter
(overleden)
Sh0ckTr00per schreef op vrijdag 22 april 2005 @ 08:21:
Waar 'm volgens mij het probleem in zit is dat je met jouw connect string de data als 'free table directory' benadert. FoxPro is zo dat als je een tabel uit een database pakt, hij de database dan vrolijk gaat openen op een manier die hem geschikt lijkt.

Een andere manier is om de DBC te openen, met een connect string als deze:

code:
1
ConnStr= "Driver=Microsoft Visual Foxpro Driver; UID=;SourceType=DBC;SourceDB=C:\VFP\Samples\Tastrade\Data\Tastrade.dbc"
^@#$*@#*!%@#@
Afbeeldingslocatie: http://www.tweakers.net/ext/f/57335/full.gif
Die doet het helemaal niet :?

Nja, ik heb ik ieder geval weet iets om op te googlen ;)


Ah, .CursorLocation = adUseClient moet .CursorLocation = adUseServer worden ... |:( Maar dan krijg ik wéér een vage error (80040e21) als ik de recordset probeer te persisten met .Save strFileName, adPersistXML :(
Gebruik ik adPersistADTG dan werkt het wel. Maar dat wil ik niet...Ik puzzel nog wel effe. Komt goed :P

Vlug in elkaar geflanste Testcase:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Option Explicit

Private oConn As Object

Private Sub Form_Load()
    
    Set oConn = CreateObject("ADODB.Connection")
    oConn.Connectionstring = "Driver=Microsoft Visual Foxpro Driver;SourceType=DBC;SourceDB=C:\Program Files\AccountView\RD\ADMBSJRR.DBC"
    oConn.Open
    
    ExportTable "Select * from article where (cng_date>date(2004,1,1))", "C:\Article.xml"
    ExportTable "Select * from art_grp", "C:\art_grp.xml"
    
    oConn.Close
    Set oConn = Nothing
End Sub

Private Sub ExportTable(sQry As String, sFile As String)
    Dim rsRes As Object
    
    If Len(Dir(sFile)) > 0 Then Kill sFile
    
    Set rsRes = CreateObject("ADODB.RecordSet")
    Set rsRes = oConn.Execute(sQry)
    'While Not rsRes.EOF
    '    Debug.Print rsRes.fields("art_code").Value
    '    rsRes.movenext
    'Wend
    rsRes.Save sFile, 1
    Set rsRes = Nothing
End Sub

Hij klapt er dus uit op "rsRes.Save sFile,1" terwijl alle records prima in de recordset zitten (terwijl ik Accountview open heb staan _/-\o_ )

/Edit:
Wat wel werkt is éérst de recordset saven met adPersistADTG en dan weer openen en saven met adPersistXML 8)7
code:
1
2
3
4
5
6
    Dim rsTest
    Set rsTest = CreateObject("ADODB.RecordSet")
    rsTest.Open "C:\Article.dat"
    Debug.Print rsTest.recordcount
    rsTest.Save "C:\Article.xml", 1
    rsTest.Close

Maar da's natuurlijk uber-ranzig. Ik wil rechtstreeks naar XML kunnen saven...

Doe mij maar MSSQL Server :Y)

[ Voor 107% gewijzigd door RobIII op 23-04-2005 18:39 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Scoutertje
  • Registratie: Juli 2004
  • Laatst online: 23:34
> Ik zeg toch duidelijk wat het probleem is?

@ RobIII
Sorry... ik was niet duidelijk.

Ik begreep jouw probleem wel. Ik zag alleen geen probleem in
je connectiestring, vandaar dat ik met die paar internetadressen kwam
voor meer info.

Groeten.
Pagina: 1