this code doesn't work fully

B

Bob H

I am trying to create a login box for an Access 2007 database using some
VB8 code I found:

Private Sub CreateAcc_Click()
Dim username As String
username = Text23
If Text23 = "" Then
MsgBox "Enter a Username !"
Else
If Text25 = "" Then
MsgBox "Enter a Password !"
Else
Open app.Path & "\Accounts\Users\" + username + ".txt" For Output As #1
Print #1, Text23
Print #1, Text25
Close #1
End If
End If

End Sub

It runs up to the line 'Open app.path etc, then get a runtime error 424,
Object required.
What would that be, and what should the correct syntax be for Open app.path

Thanks
 
K

Ken Snell

Open CurrentProject.Path & "\Accounts\Users\" + username + ".txt" For
Output As #1
 
D

Douglas J. Steele

There is no App object in Access.

Private Sub CreateAcc_Click()
Dim intFile As Integer
Dim username As String

username = Me!Text23 & vbNullString
If Len(username) = 0 Then
MsgBox "Enter a Username !"
Else
If Len(Me!Text25 & vbNullString) = 0 Then
MsgBox "Enter a Password !"
Else
intFile = FreeFile()
Open CurrentProject.Path & "\Accounts\Users\" & username & ".txt" For
Output As #intFile
Print #intFile, Me!Text23
Print #intFile, Me!Text25
Close #intFile
End If
End If

End Sub
 
B

Bob H

Thanks for the coding but now I get runtime error 2465 at the line:
username = Me!Text23& vbNullString.

Thanks
 
B

Bob H

Try

username = Me!Text23& vbNullString

Have you setup your form to have a control name Text23 which has the user's
name?!

If you mean something like Text23.Username, then no I haven't.
But as I am attempting to create an account, the username could be anything.
Or should I have pre defined usernames and passwords.

Thanks
 
B

Bob H

To pull the path of your currently open database you'd use:

Application.CurrentProject.Path

Ok thanks, but where does this line fit in with the other lines.
Do I have to actually create the path first then put it in the line.

Thanks
 
B

Bob H

Ok thanks, but where does this line fit in with the other lines.
Do I have to actually create the path first then put it in the line.

Thanks

Update:
I have used this line to create a text file with given information:

Open "C:\Accounts\Users\" + username + ".txt" For Output As #1
Print #1, Text23
Print #1, Text25

But now on another cmd button I want access to read that said
information in that text file, and grant access.
With this line:

Open "C:\Accounts\Users\" + username + ".txt" For Output As #2
Input #2, openfile
If username.Text = openfile Then
Input #2, datafile

Access throws up a runtime error 54 'Bad File mode' at Input #2 ,
openfile openfile

Also the information in the previously created text file has been deleted.

Thanks
 
D

Douglas J. Steele

Bob H said:
Update:
I have used this line to create a text file with given information:

Open "C:\Accounts\Users\" + username + ".txt" For Output As #1
Print #1, Text23
Print #1, Text25

I guess I should have highlighted in my previous reply that you should never
refer to file handles by hard-coded numbers. While it may work fine for you,
if other applications are reading or writing to files at the same time, you
can run into problems. You should ALWAYS use the FreeFile function, even if
you're positive no other applications will ever be running concurrent with
yours.

Dim intFile As Integer

intFile = FreeFile()
Open "C:\Accounts\Users\" & username & ".txt" For Output As #intFile
Print #intFile, Text23
Print #intFile, Text25

You should also use & for concatenating text, not +.
But now on another cmd button I want access to read that said information
in that text file, and grant access.
With this line:

Open "C:\Accounts\Users\" + username + ".txt" For Output As #2
Input #2, openfile
If username.Text = openfile Then
Input #2, datafile

Try using

Open "C:\Accounts\Users\" & username & ".txt" For Output Shared As #2
Access throws up a runtime error 54 'Bad File mode' at Input #2 , openfile
openfile

Also the information in the previously created text file has been deleted.

As you've found, opening a file For Output deletes the previous file if it
exists. use For Append. That will create the file if it doesn't already
exist, and append to the file if it does.
 
D

Douglas J. Steele

Hold on, my one answer was inaccurate! If all you're doing on the second
command button is reading the data from the file, open it for Input, not
Output!

Open "C:\Accounts\Users\" & username & ".txt" For Input As #intFile

You'd use

Open "C:\Accounts\Users\" & username & ".txt" For Output Shared As #intFile

if you were doing both reads and writes in the same routine.


--
Doug Steele, Microsoft Access MVP
http://www.AccessMVP.com/djsteele
Co-author: "Access 2010 Solutions", published by Wiley
(no e-mails, please!)
 
D

Douglas J. Steele

Just for the sake of completeness, Daniel's reply is correct. Somehow the
required spaces didn't appear in the post.
username = Me!Text23 & vbNullString
If Len(username) = 0 Then
MsgBox "Enter a Username !"
Else
If Len(Me!Text25 & vbNullString) = 0 Then
 
B

Bob H

Hold on, my one answer was inaccurate! If all you're doing on the second
command button is reading the data from the file, open it for Input, not
Output!

Open "C:\Accounts\Users\" & username & ".txt" For Input As #intFile

You'd use

Open "C:\Accounts\Users\" & username & ".txt" For Output Shared As #intFile

if you were doing both reads and writes in the same routine.

Ok, this is the code I am using to login to an account, using account
creation files.
Basically I want Access 2007 to read a previously created file, which
has the username and password in it. Once it has been read, then access
is granted to the whatever.

Private Sub cmdLogin_Click()
Dim openfile As String
Dim datafile As String
Dim intFile As Integer
openfile = Text1
datafile = Text2

If Text1 = "" Then
MsgBox "Please Enter a Username"
Else
If Text2 = "" Then
MsgBox " Please Enter a password"
Else
intFile = FreeFile()
Open "C:\Accounts\Users\" & Text1 & ".txt" For Input As #intFile

Input #2, openfile <<< I am getting a runtime error here as before

If Text1 = openfile Then
Input #2, datafile
If Text2 = datafile Then
MsgBox "Granted Access"
Else
MsgBox "Denied Access"
End If
End If
Close #2
End If
End If
End Sub

I know there is something wrong with it at that line but I don't know
what else to change it to.

Thanks
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top