Toon posts:

[VB] Database probleem i.c.m. resource file.

Pagina: 1
Acties:

Verwijderd

Topicstarter
Probleemomschrijving:
Ik wil een programma bouwen in VB waarin een read-only ms access database zit opgeslagen. Nu wilde ik dat doen via een resource file. Ik heb deze resource file gemaakt en dat werkt allemaal. Als ik nu probeer om de MS Access Database te openen krijg ik de melding: Resource with identifier CATMEL not found.

Layout resource.rc
code:
1
CATMEL mbd CATMEL.mdb

Uiterraard met rc gecompileerd naar een resource.res en deze toegevoegd aan het project.

Code om resource file te benaderen
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
Dim test As String

test = LoadResData("CATMEL", "mdb")
  
  Dim db As Connection
  Set db = New Connection
  db.CursorLocation = adUseClient
  db.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source= test;"

  Set adoPrimaryRS = New Recordset
  adoPrimaryRS.Open "select APPARAAT,BODYGUARD,BREEDTE,DIKTE,LENGTE,MERK,OPMERKING,PER_VA,REMOTENR,SOORT,UNIVERSAL from CATMEL", db, adOpenStatic, adLockOptimistic

  DataMembers.Add "Primary"

1. Zit ik nou op het verkeerde spoor?
2. Zijn er andere manieren om dit probleem op te lossen?

Alvast bedankt.

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 18:36

Crazy D

I think we should take a look.

Uhh ja behoorlijk :)
Ik weet niet precies wat je van plan bent, maar je kan best een mdb in een resourcefile stoppen, en deze ook met VB functies eruit halen en saven, dan kun je 'm (als het goed is, niet getest) gewoon queryen. Updaten kan volgens mij niet, en als het wel kan, alleen met win32 API functies. Iig is de db bijwerken en dan weer in je resource file stoppen niet mogelijk met standaart VB functies.

Exact expert nodig?


Verwijderd

Topicstarter
Bedankt voor je reactie.

Het is dus mogelijk om de MS Access database tijdelijk te saven in een temp directory en deze van daaruit te benaderen. Dat is mooi. Meer hoeft ook niet want updaten is niet noodzakelijk.

Kan iemand mij vertellen hoe ik een bestand uit zo`n resource file kan extracten, met vb-code dus. Of eventueel een site waar ik deze informatie zou kunnen vinden.

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 18:36

Crazy D

I think we should take a look.

Site met info? msdn.microsoft.com :)

Effe uit m'n hoofd zou 't iets zijn als
Dim b() As Byte
b = LoadResData(id_van_resource, "CUSTOM")
(id spreeks voor zich, "CUSTOM" is de 'folder' (VB resource add in, custom items komen in een soort foldertje 'custom').

En dan de inhoud van b naar file uitspugen, dat zou 't moeten zijn zo'n beetje.

Exact expert nodig?


Verwijderd

Topicstarter
Op woensdag 02 januari 2002 15:19 schreef CrazyD_at_work het volgende:
Site met info? msdn.microsoft.com :)
Natuurlijk stom van mij ;)

ik ga het gelijk even proberen.

Verwijderd

Topicstarter
hmmm als ik de file probeer weg te schrijven krijg ik alleen maar garbage.
code:
1
2
3
4
5
Dim b() As Byte

b = LoadResData(101, "custom")
Open "c:\TESTFILE.mdb" For Output As #1
Print #1, b

de database is 858Kb groot en de output file die hieruit komt is maar 429Kb groot. Dat is precies de helft :? geen idee of dat een hint is.

edit:
even kijken bij msdn.

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 18:36

Crazy D

I think we should take a look.

Hmmm zit er geen 64K limiet op?

Exact expert nodig?


Verwijderd

Topicstarter
Het lijkt er niet op want ik krijg nergens foutmeldingen.

Ligt het aan het gebruikte type? Byte? Ik zeg maar wat ben nogal newbie op dit gebied...

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 18:36

Crazy D

I think we should take a look.

Byte is in dit geval het meest logische datatype... het gaat nl om binaire data, dus.... :)
Kijk eens hoe groot de array is (Ubound van de byte-array dus), dit zou 858kb moeten zijn...

Exact expert nodig?


Verwijderd

Topicstarter
code:
1
MsgBox (UBound(b))

geeft: 878591 en dat klopt exact met de originele database.

Je zou toch zeggen dat die dat dan ook wegschrijft... maar niet dus.

edit:
wat ik niet snap is dat die precies de helft wegschrijft en er dan mee kapt. Erg vreemd.

Verwijderd

Misschien iets van:
code:
1
2
3
4
5
Dim aByte() As Byte

Open "c:\test.dat" For Binary As 1
Put #1, 1, aByte
Close 1

beetje opschonen natuurlijk (FreeFile() enzo), maar hopelijk werkt ie zo wel

Verwijderd

Topicstarter
Perfect.

Het werkt nu.

Bedankt voor de hulp. :)
Pagina: 1