Valhalla Legends Forums Archive | Visual Basic Programming | Overflow

AuthorMessageTime
Forged
#Edit it no longer overflows, but now it stops saving after it gets to 3, and it skips 2.
[code]
Public Sub Save()
Dim cat As String
Dim l As Integer
Dim j As String

cat = "Information"

l = 1

j = ReadPro("Name(" & l & ")")

Do While j <> ""
j = ReadPro("Name(" & l & ")")
l = l + 1

Loop

With Form1

WritePro "Name(" & l & ")", .txtName.Text
WritePro "Home Phone(" & l & ")", .txtHome.Text
WritePro "Cell Phone(" & l & ")", .txtCell.Text
WritePro "E-mail(" & l & ")", .txtEmail.Text
WritePro "Apt/House Number(" & l & ")", .txtApt.Text
WritePro "Street Name(" & l & ")", .txtStreet.Text
WritePro "City(" & l & ")", .txtCity.Text
WritePro "State(" & l & ")", .txtST.Text
WritePro "Area Code(" & l & ")", .txtCode.Text

End With

End Sub
[/code]
June 20, 2005, 6:44 AM
DDA-TriCk-E
What are you trying to do...

Shouldn't the With Form1....etc be inside the Loop?
June 20, 2005, 12:48 PM
Forged
I want it to check and see if an entry exist, and if not I want it to create said entry.  So no with form1 does not need to be in the loop.
June 20, 2005, 5:46 PM
Ringo
What type of file are you trying to read/write from/to?
And is there any chance you could post your ReadPro function?

[edit]
oops i think i miss read the question, sorry.
Are you trying to carry on checking entrys after you have wrote  to an empty one?
(Sorry if im still miss reading it)
June 20, 2005, 5:58 PM
Forged
I'll try to explain it better since my explination is kind of shitty.

I am making an address book, when I add an entry  I want it to add as Username(#) =
this way everytime they add a new entry it doesn't overwrite the origional entry.  So I created a loop that checks to see if username(#) exist before writing to it.  however when I run my save function this is all that happens

[quote]
Name(1)=a
Home Phone(1)=fdg
Cell Phone(1)=dfg
E-mail(1)=fdg
Apt/House Number(1)=dfg
Street Name(1)=fdg
City(1)=fdg
State(1)=fdg
Area Code(1)=dfg

Name(3)=b
Home Phone(3)=fdg
Cell Phone(3)=dfg
E-mail(3)=fdg
Apt/House Number(3)=dfg
Street Name(3)=fdg
City(3)=fdg
State(3)=fdg
Area Code(3)=dfg
[/quote]

#Edit
You asked for the readpro function
[code]
Public Function ReadPro(key As String) As String
Dim g As Long
Dim sdefault As String
Dim sdir As String
Dim sUser As String
Dim sname As String

sname = "Information"
sUser = Space$(128)
sdir = App.Path & "\users.ini"
lSize = Len(sUser)
   
sdefault = ""

g = GetPrivateProfileString(sname, key, sdefault, sUser, lSize, sdir)

sUser = Mid(sUser, 1, InStr(sUser, Chr(0)) - 1)
ReadPro = sUser
End Function
[/code]
June 20, 2005, 7:04 PM
NicoQwertyu
[quote author=Forged link=topic=11901.msg116606#msg116606 date=1119249871]
l = 1

j = ReadPro("Name(" & l & ")")

Do While j <> ""
j = ReadPro("Name(" & l & ")")
l = l + 1

Loop

...


WritePro "Name(" & l & ")", .txtName.Text

[/quote]

Your problem is the l = l + 1.

Enters function: l is 1.
Enters while loop: l is 1.
Continues loop: l is 2.
2 doesn't exist, j is NULL.
Finishes loop: l is 3.
Exits loop with l being 3.

This explains why it keeps stopping on 3, also.  Because 2 never exists, it will always exit the loop with l equaling 3.

Edit:  On a side note, this could have been solved quickly and simply with some simple debugging skills.  Place a breakpoint on the While loop and watch the way L (eww at using l >:() increments.  See if you can spot the problem.
June 20, 2005, 7:40 PM
Ringo
Hmm, i think that method for storeing phone book infomation in a ini file would lead to alot of debugging later on.
You could always base a loop on the number of people you have stored in your phone book, wiping out the problem your having at the moment all together.
Somthing abit like this:
[code]
Public Function Save(Byval CheckName as string)
Dim Pages as Integer, i as Integer, Checking as String, WroteStuff as Boolean
Pages = ReadPro("Book Size", "TotalPages")

for i = 1 to Pages
Checking = ReadPro("Book Page " & i, "Name")
    if Checking = CheckName then
        'rewrite this persions info?
        'WroteStuff = true?
    else
        if Checking = "" then 'This space is empty
            'save persions info
            WroteStuff = true
        end if
    end if
next i
if WroteStuff = false then
    'add persion to existing list
    Dim NewWrite as string: NewWrite = "Book Page " & pages + 1

    'Add 1 to totalpages for the new entry being added
    WritePro "Book Size", "TotalPages", pages + 1
   
    WritePro NewWrite, "Name", Object.text
    WritePro NewWrite, "Home Phone", Object.text
    '....
End if
end Function
[/code]

Then in your ini it would be layed out somthing like this:
[code]
[Book Size]
TotalPages=5

[Book Page 1]
Name=PersionsName1
Home Phone=fdg
Cell Phone=dfg
E-mail=fdg
Apt/House Number=dfg
Street Name=fdg
City=fdg
State=fdg
Area Code=dfg

[Book Page 2]
Name=PersionsName2
Home Phone=fdg
Cell Phone=dfg
E-mail=fdg
Apt/House Number=dfg
Street Name=fdg
City=fdg
State=fdg
Area Code=dfg

[Book Page 3]
Name=PersionsName3
Home Phone=fdg
Cell Phone=dfg
E-mail=fdg
Apt/House Number=dfg
Street Name=fdg
City=fdg
State=fdg
Area Code=dfg

[Book Page 4]
Name=PersionsName4
Home Phone=fdg
Cell Phone=dfg
E-mail=fdg
Apt/House Number=dfg
Street Name=fdg
City=fdg
State=fdg
Area Code=dfg

[Book Page 5]
Name=PersionsName5
Home Phone=fdg
Cell Phone=dfg
E-mail=fdg
Apt/House Number=dfg
Street Name=fdg
City=fdg
State=fdg
Area Code=dfg
[/code]
I Expect that would also make it easyer when it comes to removing somone and refreshing the asigned page numbers, or listing them alphbeticly etc.
I typed the above code up in this post, so i havent tested it, it was just to give u an idea of another possible method, altho your current method would probly best sute a txt file.
June 20, 2005, 8:32 PM
Forged
Thanks a lot both of you.
June 21, 2005, 4:05 AM

Search