[vb6] database in exe *

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

  • Rusky
  • Registratie: December 2000
  • Laatst online: 04-05 08:51
ik wil een programma schrijven die automatisch berekeningen van balklagen berekent en die netjes uitprint. Nu bestaat er een houtschuifmaat om snel te kijken wat je ongeveer nodig hebt. kwa afstand en balk maat. Deze wil ik in een database maken en die bij mijn programma erin zetten. Dus in principe maak je die database 1 maal, en wijzigt nooit meer.
Maar ik wil uiteindelijk maar 1 exe bestand krijgen, dus mijn vraag is waar moet ik dat in maken? access / excel or whatever....

mijn pc


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Wat is er mis met een globaal gedefinieerd array? :?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Rusky
  • Registratie: December 2000
  • Laatst online: 04-05 08:51
niks ... maar het gaat om een rij of 200 met 6 gegevens ... dusik dacht dat een database makkelijker was...

mijn pc


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Als het toch niet kan veranderen en je wil het meecompileren in de exe, dan lijkt het me nogal overkill om een database te nemen. Misschien dat je op de een of andere manier een CSV als resource kan opnemen dan, want een array is idd misschien wat veel werk. :P

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

gewoon een groot statisch record / array gebruiken misschien een optie?

[dubbelpost]

[ Voor 11% gewijzigd door Verwijderd op 22-04-2005 12:29 ]


  • Daos
  • Registratie: Oktober 2004
  • Niet online
Je kan met een apart programma een stuk code genereren dat het array vult.

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Even tussendoor...over welke VB hebben we het? VB.NET? VB6? VBA? VBS?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 01-05 19:09

pjvandesande

GC.Collect(head);

Je kunt toch ook gewoon een RecordSet aanmaken?

  • Rusky
  • Registratie: December 2000
  • Laatst online: 04-05 08:51
-NMe- schreef op vrijdag 22 april 2005 @ 12:53:
Even tussendoor...over welke VB hebben we het? VB.NET? VB6? VBA? VBS?
vb6

mijn pc


  • Rusky
  • Registratie: December 2000
  • Laatst online: 04-05 08:51
Daos schreef op vrijdag 22 april 2005 @ 12:40:
Je kan met een apart programma een stuk code genereren dat het array vult.
wat is de snelste manier om een array te vullen dan ???
ik doe het altijd zo:

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
Private Type PersoonsRecord
   Naam As String*20
   Geslacht As String*1
   Leeftijd As Byte
End Type

Dim recP1 As PersoonsRecord
Dim recP2 As PersoonsRecord
Dim recP3 As PersoonsRecord

with recP1
   .Naam = "Piet"
   .Geslacht = "M"
   .Leeftijd = 23
End With
with recP2
   .Naam = "Jan"
   .Geslacht = "M"
   .Leeftijd = 34
End With
with recP3
   .Naam = "Truus"
   .Geslacht = "V"
   .Leeftijd = 18
End With

[ Voor 58% gewijzigd door Rusky op 22-04-2005 13:42 ]

mijn pc


  • BertS
  • Registratie: September 2004
  • Laatst online: 13-02 08:33
Waarom zou een array wat veel zijn? Je moet die data anders in de database inkloppen...

Als je het bijv als csv beschikbaar hebt ofzo, kun je het wellicht ook in een string-constante plaatsen (en die evt middels een procedure naar een array laten schrijven in runtime).

Moet je persé meecompilen? Je kunt het anders ook eenmalig in een ADO-recordset wegschrijven en die persistent opslaan als xml.

  • Daos
  • Registratie: Oktober 2004
  • Niet online
Rusky schreef op vrijdag 22 april 2005 @ 13:28:
[...]


wat is de snelste manier om een array te vullen dan ???
ik doe het altijd zo:

code:
1
...
Ik bedoelde dat je die code laat genereren door een ander programma. Ander programma doet zoiets:
Visual Basic:
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
    Open "array.bas" For Output As #1
    
    Print #1, "Type PersoonsRecord"
    Print #1, "  Naam As String * 20"
    Print #1, "End Type"
    Print #1, ""
    Print #1, "Dim recP(10) As PersoonsRecord" 'TODO: aantal invullen
    Print #1, ""
    Print #1, "Sub fillArray()"
    
    i = 0
    While (True) ' iets met not eof of een for-loop
    
      'Haal iets op uit een excel-tabel of database
      Naam = "Piet"
        
      Print #1, "  With recP(" & i & ")"
      Print #1, "    .Naam = " & Chr(34) & Naam & Chr(34)
      Print #1, "  End With"
    
      i = i + 1
    Wend

    Print #1, "End Sub"

    Close #1

  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 01-05 19:09

pjvandesande

GC.Collect(head);

Als je een RecordSet vult dan werkt het toch? Een record set kun je ook weer opslaan en openen vanuit een bestand.

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Rusky schreef op vrijdag 22 april 2005 @ 13:28:
[...]


wat is de snelste manier om een array te vullen dan ???
ik doe het altijd zo:

<knip>
Dat is geen array, maar zijn "losse" 3 UDT variabelen (User Defined Types).
Wil je er een Array van maken dan doe je dat als volgt:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Private Type PersoonsRecord
   Naam As String * 20
   Geslacht As String * 1
   Leeftijd As Byte
End Type

    Dim recP(200) As PersoonsRecord
    
    With recP(1)
       .Naam = "Piet"
       .Geslacht = "M"
       .Leeftijd = 23
    End With
    With recP(2)
       .Naam = "Jan"
       .Geslacht = "M"
       .Leeftijd = 34
    End With
    With recP(3)
       .Naam = "Truus"
       .Geslacht = "V"
       .Leeftijd = 18
    End With

Zou je nu gebruik maken van een CSV, XML of een willekeurig ander type bestand (sla je UDT op in een fixed-length-record bestand of in je eigen bestandsformaat) en je slaat dat op in een Resource File dan is het nog veel makkelijker en kun je met een for, while of andere lus gewoon het hele spul in je array inlezen. Je krijgt dan iets als:
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
Private Type PersoonsRecord
   Naam As String * 20
   Geslacht As String * 1
   Leeftijd As Byte
End Type

    Dim oMyXML as object
    Dim T as long
    Dim arrPersons() as PersoonsRecord
    Dim oNodes as object

    set oMyXML = CreateObject("MSXML.DomDocument")
    oMyXML.LoadXML LoadResString(12345)
    Set oMyXML.SelectNodes("persoon")
    Redim arrPersons(oNodes.Length)
    T=0
    For each oNode in 
         With arrPersons(T)
            ...
            ...
            ...
         End With
         T=T+1
    Next

* Effe uit de losse pols en meer pseudo code dan echte code, maar you get my drift...

Persoonlijk, maar wie ben ik O-) , zou ik gaan voor een XML in een Resource file. Heb je toch nog enige vorm van structuur, makkelijk aan te passen en uit te breiden enz. En je zou er in de toekomst voor kunnen opteren het bestand "los" bij te leveren zodat de gebruiker er eventueel nog andere programma's aan kan koppelen ofzo. Wil je gaan voor "geheim" (ik neem aan dat je het daarom in je .exe wil bakken) dan kun je het natuurlijk simpel encrypten of er een vette 256bit encryptie op los laten. Het is allemaal vrij aan jou, de programmeur. En daar ben je dan ook tevens programmeur voor: Los het op hoe het volgens jou en voor de klant het best is.

offtopic:
Als die werkelijk de UDT is die je wil gebruiken om op te slaan in je .exe (ik hoop van niet :X ) dan ga je natuurlijk in de knoop komen met .Leeftijd , maar dat had je zelf natuurlijk ook al bedacht :Y) Sla liever .GeboorteDatum op; anders moet je Huidige_datum - Datum_exefile + .Leeftijd gaan doen om de huidige leeftijd (enigszins) te kunnen benaderen, laat staan om exact te bepalen.

[ Voor 89% gewijzigd door RobIII op 23-04-2005 03:08 ]

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


  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 04-05 13:09
Rusky schreef op vrijdag 22 april 2005 @ 12:18:
ik wil een programma schrijven die automatisch berekeningen van balklagen berekent en die netjes uitprint. Nu bestaat er een houtschuifmaat om snel te kijken wat je ongeveer nodig hebt. kwa afstand en balk maat. Deze wil ik in een database maken en die bij mijn programma erin zetten. Dus in principe maak je die database 1 maal, en wijzigt nooit meer.
Maar ik wil uiteindelijk maar 1 exe bestand krijgen, dus mijn vraag is waar moet ik dat in maken? access / excel or whatever....
Ten eerste: een rij van 200 elementen met 6 gegevens is natuurlijk minimaal in het geheugen.

Ten tweede: kan je geen formule bedenken zodat je wat parameters invoert, formule eroverheen haalt en je berekening eruit krijgt?

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack


  • Boss
  • Registratie: September 1999
  • Laatst online: 14:01

Boss

+1 Overgewaardeerd

Als je nu een schuifmaat hebt waar die gegevens op staan, dan is er waarschijnlijk een lineair verband tussen de gegevens? Kan je dan niet veel beter de achterliggende formules opslaan? Dan ben je ook niet beperkt tot de punten die op de schuifmaat staan...

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


  • MrBucket
  • Registratie: Juli 2003
  • Laatst online: 29-10-2022
Maare TS, wat is er mis met een data-bestand? Gewoon een Comma-Separated-Value (CSV) lijstje, of een xml-bestand, of, dare I say it, een custom binair bestand?

Ik snap dat het veel data is, en dat je geen complete database wilt gebruiken, maar als je de eis laat vallen dat de data in de .exe moet komen te zitten, dan heb je nog genoeg alternatieven.

Waarom wil de data per se in de .exe hebben?

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
MrBucket schreef op zaterdag 23 april 2005 @ 13:09:
Maare TS, wat is er mis met een data-bestand? Gewoon een Comma-Separated-Value (CSV) lijstje, of een xml-bestand, of, dare I say it, een custom binair bestand?

Ik snap dat het veel data is, en dat je geen complete database wilt gebruiken, maar als je de eis laat vallen dat de data in de .exe moet komen te zitten, dan heb je nog genoeg alternatieven.

Waarom wil de data per se in de .exe hebben?
En waarom zou je de CSV, XML of whatever niet gewoon in een resourcefile kunnen meebakken in de .exe :?
Of het nuttig is, of zelfs wenselijk is een tweede. En als je later bij die data wil is dat ook niet meer zo 1 2 3 aan te passen zonder te klooien met die resource file enzo. Maar ik zie niet waarom hij die eis zou moeten laten vallen als hij dat niet wil.

[ Voor 18% gewijzigd door RobIII op 23-04-2005 15:17 ]

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


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 07-05 10:04
Je kunt in VB6 ook een array binair naar een bestand dumpen. ( 'K dacht met Put/Get ).

Btw, het in VB6 niet mogelijk om een statisch array te maken en 'em direct te initialiseren ( 8)7 ). Dus ik ben bang dat jouw manier de enige is om een array te initialiseren.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • Daos
  • Registratie: Oktober 2004
  • Niet online
In QuickBasic (en elke andere Basic) kon je dit doen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
DATA 1, 5, 3
DATA 2, 6, 10

DIM x(6)

FOR i = 1 TO 6
    READ x(i)
NEXT

FOR i = 1 TO 6
    PRINT "x("; i; ") = "; x(i)
NEXT


Ik heb hier geen VB6, maar in VBA werkt dit niet meer. In de DOS-versie van VB1 zat het wel nog.

  • Rusky
  • Registratie: December 2000
  • Laatst online: 04-05 08:51
als je een xls bestand kan meebakkenin de exe is dat natuurlijk geweldig. e die gegevens op de houtschuif zijn niet echt lineair maar meer een praktijk ervaring. Dit word gebruikt als eerste snelle berekening van welke hout maat je nodig hebt. Daarna komt er wel een berekening (een controle berekening) die dat programmaatje ook moet doen, die is dus wel standaard, daarom wil ik nu gewoon mijn programmeer kennis opwaarderen. Die heb ik nog niet veel in vb6. En dit programma leek mij heel erg handig voor mij.

Dan hoef ik alleen de gegevens invullen.. uitprinten, en heb weer wat geld verdient.

mijn pc


  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 04-05 13:09
Is dat niet een beetje dubbelop dan? Bedoel: voor je programmaatje is het natuurlijk piece-of-cake om direct de uiteindelijke berekening te doen. Of heb je daarvoor extra gegevens nodig die je bij de eerste snelle berekening/schatting nog niet bij de hand hebt?

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Rusky schreef op maandag 25 april 2005 @ 10:36:
als je een xls bestand kan meebakkenin de exe is dat natuurlijk geweldig. e die gegevens op de houtschuif zijn niet echt lineair maar meer een praktijk ervaring. Dit word gebruikt als eerste snelle berekening van welke hout maat je nodig hebt. Daarna komt er wel een berekening (een controle berekening) die dat programmaatje ook moet doen, die is dus wel standaard, daarom wil ik nu gewoon mijn programmeer kennis opwaarderen. Die heb ik nog niet veel in vb6. En dit programma leek mij heel erg handig voor mij.

Dan hoef ik alleen de gegevens invullen.. uitprinten, en heb weer wat geld verdient.
En bedenk dat als je Excel wil gebruiken dat je rekening houdt met distributierechten en licenties e.d. Waarom ben je nou zo eigenwijs en gebruik je niet gewoon XML, CSV of een ander formaat voor die "paar" recordjes? Als het nou vele duizenden waren allee, maar dan nog zou ik niet voor Excel gaan...

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


  • Devion
  • Registratie: Januari 2000
  • Laatst online: 08-01 16:02

Devion

Space for rent ;-)

Ik zelf zou hierbij ook voor XML of als je het echt zelf wil inbakken is CSV nog een optie; Die zou je dan als een string in je code kunnen duwen en tijdens runtime 'uitpakken' naar een UDT array.

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 07-05 10:04
Rusky schreef op maandag 25 april 2005 @ 10:36:
.... en heb weer wat geld verdient.
:/

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.

Pagina: 1