abonnement Unibet Coolblue Bitvavo
  woensdag 27 juli 2005 @ 14:17:47 #1
123792 JanMichiel
Melk, de witte motor!
pi_29169942
Voor alle Visual Basic 6 vragen.

Is Dir de beste methode om te checken of een bestand aanwezig is in de folder en zo niet het bestand aan te maken? Ik heb het volgende gemaakt (voor het bestand 'data.mdb'):

1
2
3
4
5
6
7
8
9
Private Sub CheckFile()
If LCase(Dir("data.mdb") = "data.mdb" Then
   'the file is present
   Exit Sub
Else
   'the file is not present
   'code to create file here
End If
End Sub
pi_29170595
Nee, u moet het FileSystemObject gebruiken dat geleverd wordt bij het Microsoft Scripting Runtime (Reference zetten).

Public FSO as FileSystemObject

Module:
dim bExists as boolean
bExists = fso.FileExists("data.mdb")
enz.

Aanmaken van een database bestand kan, geloof ik, met Microsoft DAO (= niet ADO, heeft wel raakvlak). Let erop dat als u zowel ADO als DAO gebruikt, u al uw definities volledig defineert, vanwege de dubbele klassenamen.
dim db as ADO.Database
en niet:
dim db as Database

[ Bericht 36% gewijzigd door Xsysstar op 27-07-2005 14:40:36 (Aanvulling) ]
pi_29170665
ha, ik heb ook een mooie vraag

ik heb (VBA, overigens) een input boxje waar je een dir in kan vullen.

Met
1ChDir (directory.Value)
switch ik naar de ingevulde directory, echter, dit houdt geen rekening met eventuele schijfwisseling... Weet iemand hoe ik dit beter kan doen?
Trotse poster van het 37000000ste bericht ^O^
pi_29170702
quote:
Op woensdag 27 juli 2005 14:40 schreef daReaper het volgende:
ha, ik heb ook een mooie vraag

ik heb (VBA, overigens) een input boxje waar je een dir in kan vullen.

Met
[ code verwijderd ]

switch ik naar de ingevulde directory, echter, dit houdt geen rekening met eventuele schijfwisseling... Weet iemand hoe ik dit beter kan doen?
Met ChDrive .
  woensdag 27 juli 2005 @ 15:08:11 #5
123792 JanMichiel
Melk, de witte motor!
pi_29171442
quote:
Op woensdag 27 juli 2005 14:38 schreef Xsysstar het volgende:
Nee, u moet het FileSystemObject gebruiken dat geleverd wordt bij het Microsoft Scripting Runtime (Reference zetten).

Public FSO as FileSystemObject

Module:
dim bExists as boolean
bExists = fso.FileExists("data.mdb")
enz.

Aanmaken van een database bestand kan, geloof ik, met Microsoft DAO (= niet ADO, heeft wel raakvlak). Let erop dat als u zowel ADO als DAO gebruikt, u al uw definities volledig defineert, vanwege de dubbele klassenamen.
dim db as ADO.Database
en niet:
dim db as Database
Ok, bedankt voor de uitleg. Ik zal het straks proberen als ik op de andere computer zit.
pi_29172012
quote:
Op woensdag 27 juli 2005 14:42 schreef Xsysstar het volgende:

[..]

Met ChDrive .
Ja maar doe eens mooi functietje ofzo

En hoe dit dat met netwerk directory's? ( //share/bla )
Trotse poster van het 37000000ste bericht ^O^
pi_29172496
quote:
Op woensdag 27 juli 2005 15:29 schreef daReaper het volgende:

[..]

Ja maar doe eens mooi functietje ofzo

En hoe dit dat met netwerk directory's? ( //share/bla )
Nou, het mooie functietje :
1
2
ChDrive myDir
ChDir myDir


Netwerk kan niet; helaas .
  donderdag 28 juli 2005 @ 11:40:53 #8
123792 JanMichiel
Melk, de witte motor!
pi_29196366
quote:
Op woensdag 27 juli 2005 14:38 schreef Xsysstar het volgende:
Nee, u moet het FileSystemObject gebruiken dat geleverd wordt bij het Microsoft Scripting Runtime (Reference zetten).

Public FSO as FileSystemObject

Module:
dim bExists as boolean
bExists = fso.FileExists("data.mdb")
enz.

Aanmaken van een database bestand kan, geloof ik, met Microsoft DAO (= niet ADO, heeft wel raakvlak). Let erop dat als u zowel ADO als DAO gebruikt, u al uw definities volledig defineert, vanwege de dubbele klassenamen.
dim db as ADO.Database
en niet:
dim db as Database
Het wil nog niet helemaal lukken, ik heb het volgende gedaan.

Een reference geplaatst naar Microsoft Scripting Runtime.
Een module gemaakt met de volgende code:

1
2
3
Public FSO As FileSystemObject
Dim bExists As Boolean
bExists = FSO.FileExists("data.mdb")


En dan de variabele bExists in een sub testen, bijvoorbeeld:

1
2
3
4
Private Sub Form_Load()
If bExists = False Then
...
...


Wanneer ik de code wil uitvoeren (F5) geeft Visual Basic op het "data.mdb" gedeelte de foutmelding: Invalid Outside Procedure. Wat doe ik nu verkeerd?
pi_29196418
Dat is mijn fout; ik haal module en sub door elkaar. Spijt me.

De FileSystemObject-definitie moet in de kop van de module (dat was goed).
In een sub kunt u met dat FSO-object vele functies aanroepen, waaronder FileExists. Oftewel: de bExists-definitie en het vullen ervan moet ook in Form_load.
  donderdag 28 juli 2005 @ 11:49:59 #10
123792 JanMichiel
Melk, de witte motor!
pi_29196605
quote:
Op donderdag 28 juli 2005 11:43 schreef Xsysstar het volgende:
Dat is mijn fout; ik haal module en sub door elkaar. Spijt me.

De FileSystemObject-definitie moet in de kop van de module (dat was goed).
In een sub kunt u met dat FSO-object vele functies aanroepen, waaronder FileExists. Oftewel: de bExists-definitie en het vullen ervan moet ook in Form_load.
1. Reference
2. Module:

1Public FSO As FileSystemObject


3. Sub:

1
2
3
4
5
6
Private Sub Form_Load()
Dim bExists As Boolean
bExists = FSO.FileExists("data.mdb")
If bExists = False Then
...
...


Correct? Ik dacht dat ik dit al geprobeerd had (zonder veel succes), maar zal het straks nog eens proberen.

Is het overigens noodzakelijk om de reference (object?) in een module te declareren? Of kan dat ook gewoon in een form?
pi_29196940
quote:
Op donderdag 28 juli 2005 11:49 schreef JanMichiel het volgende:
Is het overigens noodzakelijk om de reference (object?) in een module te declareren? Of kan dat ook gewoon in een form?
Dat kan in principe overal (het FileSystemObject kan ook in een gewone sub gedeclareerd worden), maar afhankelijk van het soort referentie kan het verstandig zijn om één enkele instantie te maken van die referentie.

Een FileSystemObject is onveranderlijk en hetzelfde object kan dus door het hele programma door gebruikt worden. Indien u veel met dit object wil doen, kan het handig zijn het object eenmalig in een module (Public) te declareren. Mocht u het maar nodig hebben in één sub of functie, dan kan het gewoon in de desbetreffende sub of functie gedeclareerd worden (Dim).
pi_29201349
Ik ben een online game aan het maken, werkt opzich al redelijk loop tegen iets kleins aan:

Bij het versturen van de info van de wereld (welke gebouwtjes er gebouwd zijn) maak ik 1 lange regel die op de server in een database wordt gezet. Deze regel is alsvolgt opgebouwd:

base#(insert X coordinaat hier)#(insert Y coordinaat hier)#(welk nr. gebouw hier)#(insert X coordinaat hier)#(insert Y coordinaat hier)#(welk nr. gebouw hier)# etc etc.

Nu staan die gegevens in het programma in inbase(500,500)

Ik wil dat de gegevens op de server up2date blijven. Dus ik verstuur bij het bouwen van een gebouw die info over. Probleem daarbij is om de X en de Y gegevens, en het bijhorende gebouw in 1 regel te krijgen. Ik doe dat als volgt:

1
2
3
4
5
6
7
8
9
10
SendString = ""
For i = 0 To 500

 For a = 0 To 500
 SendString = SendString & inBase(i, a) & "#"
 Next a

Next i

frmConnection.wnsdata.SendData "base#" & SendString



Maar daar wordt mn spelletje ERG traag van

(lees: Hij bevriest voor een minuut of 5). En dat komt uiteraard de gameplay niet ten goede


Dus beste medemensjes, hoe dit op te lossen?
La derecha oprime, la izquierda libera
pi_29201755
U kunt het beste klassen gebruiken. Indien u niet gewerkt hebt met klassen en verzamelingen (collecties), zegt u het dan even? Dan leg ik het wat verder uit.

[Class: clsBuilding]
1
2
3
4
5
6
7
8
Public Enum eBuildingType
     ebtHeadquarters = 0
     ebtTaxOffice = 1
End enum  'De nummers mogen weggelaten worden (de '=' moet dan ook weg)

Public BuildingType as eBuildingType
Public X as integer
Public Y as integer


[Module]
1Public InBase as Collection

In deze module:
1
2
+Sub Init+
Set InBase = new Collection


1
2
3
4
5
6
7
8
9
+Function GiveBuildings+
dim b as clsBuilding, s as string
s = "#"
for each b in InBase
    s = cstr(b.BuildingType) & "#" & cstr(b.X) & "#" & cstr(b.Y) & "#"
next

'Hier kunt u nu doen wat u wilt; ik doe even debug.print s.
debug.print s
pi_29201973
De gebouwen zijn ook genummerd 0 voor huis, 2 voor barracks etc etc.

Dit gebeurt in een aparte module..

Alleen je For-next lus snap ik niet echt, en Collection? (het gaat om een (Veels te groot, ik ga hem ook verkleinen) veld van 500x500 gebouwtjes, dus 250 000 gebouwtjes)
La derecha oprime, la izquierda libera
pi_29202531
Het nummeren van sóórten gebouwen doe ik met Enum (dat is gewoon een lijst met cijfers die een naampje krijgen).

Mocht dat niet genoeg zijn (dat zal snel het geval zijn), dan kunt u in plaats van een Enum, wéér een andere klasse maken (bijv. clsBuildingType) en nóg collection (bijv. Public Buildingtypes as Collection) in een module. In elk zo'n klasse (clsBuildingType) kunt u eigenschappen van het desbetreffende gebouw opgeven (BuildingName, DeltaStonePerTurn, BuildCostStone, enz).

+++
Ja, in de for-lus staat foutje; 'k zag het net
moet zijn: s = s & ....
("cstr" wordt gebruikt om integers e.d. om te zetten in een string.)

Met deze functie worden nu gewoon alle gebouwen uit de collectie gepakt en hun gegevens (x,y, type) achter elkaar geplakt.

Collections:
Een collection kan (i.t.t. een array) Objecten bevatten, elk met een unieke Key. Alle Toolbars (toolbar.buttons), Listviews (listview.listitem), treeviews (treeview.nodes) hebben een (of meerdere) collectie(s) waarin objecten (werkbalkknop, listviewpictogram, treeviewvertakking) geplaatst worden. Zelfgemaakte objecten (=klassen) kunt u hier ook in plaatsen.

Dat is wat ik hier ook heb gedaan:
Public colCollection as collection 'Collectie defineren=geheugenplaats vrijmaken

Sub init
set colCollection = new collection 'Setten=geheugenplaats vullen met een nieuwe collectie (want u zou ook een kopie van een bestaande collectie kunnen maken (set colCollection = colOld)
'Aangezien een collectie ook een object is, moet het geset worden; alle objecten die u in de programmacode maakt en wilt gebruiken, moeten geset worden.

dim c as clsNieuweKlasse 'Geheugenplaats vrijmaken
set c = new clsNieuweKlasse 'Nieuwe maken

debug.print "In de klasse zitten " & c.count & " objecten." 'Geen=0 objecten
colCollection.add tb, "Nieuwe klasse" 'Hiermee wordt "c" aan de collectie toegevoegd met de sleutel "Nieuwe klasse".
debug.print "In de klasse zit " & c.count & "object" 'Eén object.

If colCollection(1) is colCollection("Nieuwe klasse") then debug.print "Men kan een object in een collectie op twee manieren aanroepen: als getal (index) of als naam (key)"
if colCollection(1) is c then debug.print "Object 'c' is inderdaad gelijk aan colCollection(1)
end sub

Let u wel op dat bij een vergelijking (if-statement) objecten altijd met "is" (en niet =) worden vergeleken. Het setten van objecten gaat wel gewoon met het =-teken, maar i.t.t. strings en integers moet er dan het commando "set" voor, zoals u hebt kunnen zien.

Hopelijk is het duidelijk .
pi_29204311
Jup thnx overigens het probleem wel al op een andere manier opgelost: Simpelweg de maps kleiner maken. 250.000 gebouwtjes was wat te veel van het goede Nu gaat het overdragen snel genoeg. Echter, de volgende opdracht (Die een query uit laat voeren) geeft een foutmelding:

1AddRecord "INSERT INTO worldinfo (worldstring) VALUES ('" & convertstring & "')" & "WHERE username = '" & tempUsername & "'"
quote:
Er ontbreekt een puntkomma (;) aan het einde van de SQL instructie
Echter, dit is gewoon een iets aangepaste query die al werkte..
La derecha oprime, la izquierda libera
pi_29204470
Hmm, dat lijkt SQL. Ik weet niet hoe de functie AddRecord werkt, maar ik denk dat de oplossing wel weet: achteraan het commando (vóór het laatste aanhalingsteken: AddRecord "Commando(Hier)" ) moet u de puntkomma plaatsen.
Als dit inderdaad niet werkt, misschien moet u een spatie plaatsen tussen het aanhalingsteken en WHERE in het deel [& "WHERE username =].
  donderdag 28 juli 2005 @ 16:22:38 #18
123792 JanMichiel
Melk, de witte motor!
pi_29205327
quote:
Op donderdag 28 juli 2005 11:49 schreef JanMichiel het volgende:

[..]

1. Reference
2. Module:
[ code verwijderd ]

3. Sub:
[ code verwijderd ]

Correct? Ik dacht dat ik dit al geprobeerd had (zonder veel succes), maar zal het straks nog eens proberen.

Is het overigens noodzakelijk om de reference (object?) in een module te declareren? Of kan dat ook gewoon in een form?
Volgens mij moet er ook nog iets met het Set command gebeuren in mijn code. Ik ben nog een beetje aan het inlezen over objects, maar elke hulp is meegenomen.
pi_29205370
Ik heb niet zoëven iets gezien in uw code waar een Set commando gebruikt moet worden maar mocht u ergens met zitten (te twijfelen), dan zegt u het maar .
pi_29205435
quote:
Op donderdag 28 juli 2005 15:54 schreef Xsysstar het volgende:
Hmm, dat lijkt SQL. Ik weet niet hoe de functie AddRecord werkt, maar ik denk dat de oplossing wel weet: achteraan het commando (vóór het laatste aanhalingsteken: AddRecord "Commando(Hier)" ) moet u de puntkomma plaatsen.
Als dit inderdaad niet werkt, misschien moet u een spatie plaatsen tussen het aanhalingsteken en WHERE in het deel [& "WHERE username =].
De functie addrecord doet:

1
2
3
4
5
Public Sub AddRecord(query)
Dim AdoRec As ADODB.Recordset
Set AdoRec = AdoCon.Execute(query)
Set AdoRec = Nothing
End Sub


Dat met die puntkomma neerzetten heb ik geprobeerd, werkte helaas niet
La derecha oprime, la izquierda libera
  donderdag 28 juli 2005 @ 16:27:37 #21
123792 JanMichiel
Melk, de witte motor!
pi_29205445
Ik krijg bij het uitvoeren error code #91. Je kan het wel nalezen in de VB help index waarschijnlijk. Het helpdocument spreekt voor het gebruik van een object over het declareren van het object (gedaan) en het Set command. Maar ik heb momenteel te weinig kennis van objects om te weten het het Set command te gebruiken.
pi_29205525
Spatie was het ook niet.. zou het kunnen dat de query die ik doorgeef, te lang is?
La derecha oprime, la izquierda libera
pi_29205532
quote:
Op donderdag 28 juli 2005 16:27 schreef LeeHarveyOswald het volgende:

[..]

De functie addrecord doet:
[ code verwijderd ]

Dat met die puntkomma neerzetten heb ik geprobeerd, werkte helaas niet
Dat Set = nothing is overbodig; VB doet dat zelf.
Het probleem zal hem wel in adocon liggen. Goede RecordType ofzo (Unknown, Table, enz, Command) gekozen?
Probeer anders eens een debug.print van de Query; misschien ziet u het dan ineens.
pi_29205546
quote:
Op donderdag 28 juli 2005 16:30 schreef LeeHarveyOswald het volgende:
Spatie was het ook niet.. zou het kunnen dat de query die ik doorgeef, te lang is?
Zou kunnen; max 255 tekens ofzo?
pi_29205588
quote:
Op donderdag 28 juli 2005 16:27 schreef JanMichiel het volgende:
Ik krijg bij het uitvoeren error code #91. Je kan het wel nalezen in de VB help index waarschijnlijk. Het helpdocument spreekt voor het gebruik van een object over het declareren van het object (gedaan) en het Set command. Maar ik heb momenteel te weinig kennis van objects om te weten het het Set command te gebruiken.
In LeeHarveyOswalds code kunt u zien hoe het met Dim en Set werkt. Kijkt u anders eens op Google of http://www.vbgroup.nl/Default.aspx?tabid=41. Er zijn vast wel minicursi te vinden.
pi_29205829
quote:
Op donderdag 28 juli 2005 16:30 schreef Xsysstar het volgende:

[..]

Dat Set = nothing is overbodig; VB doet dat zelf.
Het probleem zal hem wel in adocon liggen. Goede RecordType ofzo (Unknown, Table, enz, Command) gekozen?
Probeer anders eens een debug.print van de Query; misschien ziet u het dan ineens.
Wat op dat moment in mn variabele staat klopt volgens mij wel, nl:

INSERT INTO worldinfo (worldstring) VALUES ('base#0#0#0#0#<knip>0#0#') WHERE username = 'Jeroen'
La derecha oprime, la izquierda libera
pi_29206293
quote:
Op donderdag 28 juli 2005 16:42 schreef LeeHarveyOswald het volgende:

[..]

Wat op dat moment in mn variabele staat klopt volgens mij wel, nl:

INSERT INTO worldinfo (worldstring) VALUES ('base#0#0#0#0#<knip>0#0#') WHERE username = 'Jeroen'
De heer des huizes kwam even langs en zei dat het aan de hekjes zou kunnen liggen. Volgens mij moet je voor het hekje, de bijbehorende HTML-code gebruiken (bijv.). Natuurlijk kunt u ook gewoon een ander teken gebruiken (of een gewone letter).
pi_29206363
hmmm maar dan zou er dus een aparte VB code moeten zijn voor een hekje?
La derecha oprime, la izquierda libera
pi_29206510
Nee, dat maakt niet uit. Het gaat erom dat u waarschijnlijk een teken gebruikt dat niet wordt toegestaan. Probeert u eens het En-teken & i.p.v. het hekje.

Tip! Defineer in uw hoofdmodule (elk programma zou er één moeten hebben; meestal modMain genoemd) een constante voor dat scheidingsteken:
1Public Const sSep as string = "&"

Als u overal waar u nu het hekje gebruikt verwijst naar sSep, is er minder kans op typfouten en kunt u sneller veranderingen doorvoeren.

P.S. Ik ben benieuwd naar waarvoor dit alles dient. Wat voor soort spel moet het worden? En wat is al klaar? Ik heb namelijk zelf wel eens wat geprobeerd, maar als ik dan naga hoeveel er gebeuren moet, ben ik vrij snel genezen .
pi_29206585
quote:
Op donderdag 28 juli 2005 17:06 schreef Xsysstar het volgende:
Nee, dat maakt niet uit. Het gaat erom dat u waarschijnlijk een teken gebruikt dat niet wordt toegestaan. Probeert u eens het En-teken & i.p.v. het hekje.

Tip! Defineer in uw hoofdmodule (elk programma zou er één moeten hebben; meestal modMain genoemd) een constante voor dat scheidingsteken:
[ code verwijderd ]

Als u overal waar u nu het hekje gebruikt verwijst naar sSep, is er minder kans op typfouten en kunt u sneller veranderingen doorvoeren.

P.S. Ik ben benieuwd naar waarvoor dit alles dient. Wat voor soort spel moet het worden? En wat is al klaar? Ik heb namelijk zelf wel eens wat geprobeerd, maar als ik dan naga hoeveel er gebeuren moet, ben ik vrij snel genezen .
kent u het online spel nukezone? Zoiets maar dan iets grafischer...
La derecha oprime, la izquierda libera
pi_29206624
Ik ga even alle #jes zowel in de server als in de client vervangen met en tekens, daarna zet ik de exec. wel even online
La derecha oprime, la izquierda libera
pi_29206675
zelfde foutmelding met & ipv. #
La derecha oprime, la izquierda libera
pi_29206773
Jammer; ik zal zo eens kijken naar nukezone. Eerst even wat nuttigen . afk tot 6:30 (hooguit)
pi_29206889
Smakelijk
La derecha oprime, la izquierda libera
pi_29208691
Dank en daar ben ik weer. Ik heb even gekeken op http://www.nukezone.info/, aannemende dat het over het spel gaat waarnaar u verwees. Jammer dat er geen screenshots zijn.

Kent u trouwens DarkGalaxy? Ook al is er nu een beta, (is het offline) voor versie 5 en valt er vrij weinig te doen (www.darkgalaxy.com), als u van ruimte strategie (vooral strategie) spellen houdt, met allianties en veroveringscampagnes voeren dan kan dat best een leuk spel zijn.
pi_29209159
Ik bedoelde http://www.nukezone.nu/

Dat is een text based spel. Mijn spel is niet tekstbased: er is wel een Grafisch gebeuren, maar voor de rest lijkt het er wel op..
La derecha oprime, la izquierda libera
pi_29209237
Ja, ik klikte op Manual en toen kwam ik op de .info-site. Ik ben bang dat ik me niet ga aanmelden (ik ben even uit het ontdekken van nieuwe spellen), maar ik ben wel benieuwd naar de eerste build van uw grafische versie.
Succes alvast .
pi_29209967
http://pestforum.nl/webwar.exe

Het uitvoeren van die query, waar hij dus op vast loopt, heb ik even uitgeschakeld. Server die standaard genoemd wordt ist, zelf even een user maken en aanmelden
La derecha oprime, la izquierda libera
pi_29210050
Hmm, ik ben bang dat het pestforum gepest wordt door de "De pagina kan niet worden weergegeven"-foutmelding....
pi_29211267
jup.. server down
La derecha oprime, la izquierda libera
pi_29211323
Laat je't me weten wanneer die weer open gaat? Dank alvast .
pi_29211556
quote:
Op donderdag 28 juli 2005 20:02 schreef Xsysstar het volgende:
Laat je't me weten wanneer die weer open gaat? Dank alvast .
http://www.pestforum.nl/webwar.exe

Server is 62.251.120.197

Edit: Server is weer online.

[ Bericht 12% gewijzigd door LeeHarveyOswald op 28-07-2005 20:18:12 ]
La derecha oprime, la izquierda libera
pi_29211648
Uhm... Lycos doet wat moeilijk .

Stuur het anders naar -----@-------; per MSN (=idem) mag ook.

[ Bericht 11% gewijzigd door Xsysstar op 28-07-2005 20:19:22 ]
pi_29211895
Ik zie dat het inloggen gelukt is ik kan evt. ook wat gebouwtjes handmatig in de database prakken, om te laten zien dat het uitlezen wel werkt
La derecha oprime, la izquierda libera
pi_29211975
Hehe; doe rustig aan. Ontwikkeling haasten is zelden goed .
  vrijdag 29 juli 2005 @ 15:42:55 #46
123792 JanMichiel
Melk, de witte motor!
pi_29237150
quote:
Op donderdag 28 juli 2005 16:24 schreef Xsysstar het volgende:
Ik heb niet zoëven iets gezien in uw code waar een Set commando gebruikt moet worden maar mocht u ergens met zitten (te twijfelen), dan zegt u het maar .
Ik weet waarom het niet werkte. Je was New vergeten.

Er zijn twee opties.

1:
1Dim FSO As New FileSystemObject


2:
1
2
Dim FSO As FileSystemObject
Set FSO = New FileSystemObject
pi_29237862
Ach ja, natuurlijk. Onbewust weggelaten, waarschijnlijk vanzelfsprekendheid .
Laatste is sneller, veel sneller. Indien u een Publieke definitie wilt maken (Public FSO as FileSystemObject; in de header, zoals ik deed), kunt u het beste in de Form_Initialize (of Class_Initialize, enz) het Set-commando gebruiken. In modulen bestaat er niet zo'n voorgemaakte sub "Initialize", dus die moet u zelf even maken.
pi_29320149
Weet iemand hoe je kan werken met een collection?

ik heb een functie gevonden waarmee ik een tree kan uitlezen maar nu wil ik weten hoe ik de gegereneerde collection kan benutten..

iemand een idee

Tnx
The people who lost my respect will never get a capital letter for their name again.
Like trump...
pi_29320218
Ik zou graag willen helpen, maar ik weet niet echt wat u bedoelt.

Als u het treeview control bedoelt, de "Nodes" eigenschap is al een collection, dus hoeft niet apart uitgelezen te worden in een nieuwe collection.
pi_29325044
Ik heb de volgende functie (sub)

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
Function GetAllFiles(ByVal path As String, ByVal filespec As String, _
    Optional RecurseDirs As Boolean) As Collection
    Dim spec As Variant
    Dim file As Variant
    Dim subdir As Variant
    Dim subdirs As New Collection
    Dim specs() As String
    
    ' initialize the result
    Set GetAllFiles = New Collection
    
    ' ensure that path has a trailing backslash
    If Right$(path, 1) <> "\" Then path = path & "\"
    
    ' get the list of provided file specifications
    specs() = Split(filespec, ";")
    
    ' this is necessary to ignore duplicates in result
    ' caused by overlapping file specifications
    On Error Resume Next
                
    ' at each iteration search for a different filespec
    For Each spec In specs
        ' start the search
        file = Dir$(path & spec)
        Do While Len(file)
            ' we've found a new file
            file = path & file
            GetAllFiles.Add file, file
            ' get ready for the next iteration
            file = Dir$
        Loop
    Next
    
    ' first, build the list of subdirectories to be searched
    If RecurseDirs Then
        ' get the collection of subdirectories
        ' start the search
        file = Dir$(path & "*.*", vbDirectory)
        Do While Len(file)
            ' we've found a new directory
            If file = "." Or file = ".." Then
                ' exclude the "." and ".." entries
            ElseIf (GetAttr(path & file) And vbDirectory) = 0 Then
                ' ignore regular files
            Else
                ' this is a directory, include the path in the collection
                file = path & file
                subdirs.Add file, file
            End If
            ' get next directory
            file = Dir$
        Loop
        
        ' parse each subdirectory
        For Each subdir In subdirs
            ' use GetAllFiles recursively
            For Each file In GetAllFiles(subdir, filespec, True)
                GetAllFiles.Add file, file
            Next
        Next
    End If
    
End Function


nu kan ik deze functie uitlezen door

1set test = GetAllFiles("c:\etcetcetcpath", "*.*", true)


maar wat kan ik dan doen met test?
The people who lost my respect will never get a capital letter for their name again.
Like trump...
abonnement Unibet Coolblue Bitvavo
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')