?
Solved

WritePrivateProfileString Function

Posted on 2001-08-11
10
Medium Priority
?
302 Views
Last Modified: 2008-01-16
I am attempting to update the initialization file that I use for my ACCESS database application.  I identify it in the shortcut and use the SystemDB= line to strip off the location of the back-end database.mdb so that a ReAttach routine knows where to refresh the links to.  This is done routinely whenever a new front-end is sent out.

As a result of new servers being installed and the systems engineers renaming the servers with a slighly different naming convention I just test for the ability to read a file at the old location and if unsuccessful then update the .ini file on the PC c:\winnt location with the new naming convention and trigger the reattachment routine.

Problem is I am having a hard time getting the Declaration and call to the function correct.  I need a little help.

app.ini file

[Options]
SystemDB=\\GH9010_1\data\system.mdw

I want to change the underscore to a hyphen: -

What I have done so far:

General Declarations
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpAppName, ByVal lpKeyName, ByVal lpString, ByVal lpFileName) As Long


Dim xReturnedIniWriteValue As Long

xReturnedIniWriteValue = WritePrivateProfileString("[Options]", "SystemDB", "\\GH9010-1\data\system.mdw", "app.ini")

After executing the above statement I get a Dr. Watson error and system crashes.

Anyone awake out there.

Bob Scriver


0
Comment
Question by:Bob Scriver
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 5
  • 2
  • 2
  • +1
10 Comments
 
LVL 2

Expert Comment

by:BozzoCage
ID: 6377011
didn't checked, but I'm quite sure you shouldn't use backslash with API's. Replace each \ with \\
...SystemDB", "\\\\GH9010-1\\data\\system.mdw", ...


0
 
LVL 3

Author Comment

by:Bob Scriver
ID: 6377142
I don't understand how that could be.  The parameter is just a string represenation of exactly what I want to be placed behind the SystemDB= in the [Options] section of the app.ini.  To put double backslashes will just place exactly that in the app.ini.

Does the API call analyze the string going to be written before it writes it? What is the final product of the write call.  four backslashes or two?   It must be two to represent the network representation of where the system.mdw file is located.

Bob Scirver
0
 
LVL 3

Author Comment

by:Bob Scriver
ID: 6377171
I have solved my own problem.  Amazing what 5 hours of sleep will do for one's logic.  

The declaration statement was not appropriate for 32-bit NT.  
16-bit:


32-bit:
Declare Function apiWritePrivateProfileString Lib _
         "kernel32" Alias "WritePrivateProfileStringA"
         (ByVal lpApplicationName As String, ByVal         lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
0
Back Up Your Microsoft Windows Server®

Back up all your Microsoft Windows Server – on-premises, in remote locations, in private and hybrid clouds. Your entire Windows Server will be backed up in one easy step with patented, block-level disk imaging. We achieve RTOs (recovery time objectives) as low as 15 seconds.

 
LVL 3

Author Comment

by:Bob Scriver
ID: 6377172
I have solved my own problem.  Amazing what 5 hours of sleep will do for one's logic.  

The declaration statement was not appropriate for 32-bit NT.  
16-bit:


32-bit:
Declare Function apiWritePrivateProfileString Lib _
         "kernel32" Alias "WritePrivateProfileStringA"
         (ByVal lpApplicationName As String, ByVal         lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
0
 
LVL 3

Author Comment

by:Bob Scriver
ID: 6377181
Sorry I wasn't done with the explaination.  Fatfingered the enter key by mistake.

There is a difference between the 16-bit and 32-bit API Declaration statements. The following link to MSKB will list the common calls and their appropriate conversions.

http://support.microsoft.com/support/kb/articles/Q147/7/81.asp?LN=EN-US&SD=gn&FR=0&qry=writeprivateprofilestring&rnk=1&src=DHCS_MSPSS_gn_SRCH&SPR=ACC97 

See WritePrivateProfileString near the bottom.

After updating my Declaration statement with the changes it all worked correctly.  I will leave this question posted for a while so others may benefit from what I have found but then I will be deleting it.  

BozzoCage:  Thanks for the comeback but that was not the answer.  As I stated earlier the \\ were just string characters and shouldn't have been analyzed by the API  call.

Bob Scriver  



0
 
LVL 2

Expert Comment

by:BozzoCage
ID: 6377190
You'r right. \\ shouldn't be analyzed by APIs. I do remember that somewhere it is... I read about this, so I blindly guessed here with no real testing of your example.

I'm glad you figured this out yourself :-)

Best wishes,
  BozzoCage
0
 
LVL 7

Expert Comment

by:Nosterdamus
ID: 6377616
Hi scriverb,

I posted this http://www.experts-exchange.com/jsp/qManageQuestion.jsp?ta=commspt&qid=20167228 request at CS TA to PAQ this question and return the question point back to you.

Congrats for solving the problem by your self.

Nostedamus
0
 
LVL 3

Author Comment

by:Bob Scriver
ID: 6377633
Nostedamus:
Thanks for the assistance.  I didn't want to delete the question because I felt that it might be helpful to others.  Thanks again.

Bob Scriver
0
 
LVL 7

Expert Comment

by:Nosterdamus
ID: 6377634
;-)
0
 
LVL 1

Accepted Solution

by:
Moondancer earned 0 total points
ID: 6378031
Thank you all.  Rather than deleting this, I will refund points and move this to our PAQ so others can find the excellent help within this question.
Moondancer
Community Support Moderator @ Experts Exchange
0

Featured Post

What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

In Part II of this series, I will discuss how to identify all open instances of Excel and enumerate the workbooks, spreadsheets, and named ranges within each of those instances.
Did you know that more than 4 billion data records have been recorded as lost or stolen since 2013? It was a staggering number brought to our attention during last week’s ManageEngine webinar, where attendees received a comprehensive look at the ma…
Do you want to know how to make a graph with Microsoft Access? First, create a query with the data for the chart. Then make a blank form and add a chart control. This video also shows how to change what data is displayed on the graph as well as form…
Visualize your data even better in Access queries. Given a date and a value, this lesson shows how to compare that value with the previous value, calculate the difference, and display a circle if the value is the same, an up triangle if it increased…

719 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question