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 |
1 | ChDir (directory.Value) |
Met ChDrivequote: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?
Ok, bedankt voor de uitleg. Ik zal het straks proberen als ik op de andere computer zit.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
Ja maar doe eens mooi functietje ofzoquote:
Nou, het mooie functietjequote: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 )
1 2 | ChDrive myDir ChDir myDir |
Het wil nog niet helemaal lukken, ik heb het volgende gedaan.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
1 2 3 | Public FSO As FileSystemObject Dim bExists As Boolean bExists = FSO.FileExists("data.mdb") |
1 2 3 4 | Private Sub Form_Load() If bExists = False Then ... ... |
1. Referencequote: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 | Public FSO As FileSystemObject |
1 2 3 4 5 6 | Private Sub Form_Load() Dim bExists As Boolean bExists = FSO.FileExists("data.mdb") If bExists = False Then ... ... |
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.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?
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 |
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 |
1 | Public InBase as Collection |
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 |
1 | AddRecord "INSERT INTO worldinfo (worldstring) VALUES ('" & convertstring & "')" & "WHERE username = '" & tempUsername & "'" |
Echter, dit is gewoon een iets aangepaste query die al werkte..quote:Er ontbreekt een puntkomma (;) aan het einde van de SQL instructie
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.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?
De functie addrecord doet: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 =].
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 Set = nothing is overbodig; VB doet dat zelf.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
Zou kunnen; max 255 tekens ofzo?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?
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.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.
Wat op dat moment in mn variabele staat klopt volgens mij wel, nl: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.
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).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'
1 | Public Const sSep as string = "&" |
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.
http://www.pestforum.nl/webwar.exequote:Op donderdag 28 juli 2005 20:02 schreef Xsysstar het volgende:
Laat je't me weten wanneer die weer open gaat? Dank alvast.
Ik weet waarom het niet werkte. Je was New vergeten.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.
1 | Dim FSO As New FileSystemObject |
1 2 | Dim FSO As FileSystemObject Set FSO = New FileSystemObject |
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 |
1 | set test = GetAllFiles("c:\etcetcetcpath", "*.*", true) |
|
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |