注册 登录
编程论坛 VB6论坛

VB程序初始化ini文件时出错

DXLAB 发布于 2018-01-16 23:14, 4800 次点击
只有本站会员才能查看附件,请 登录
  我通过程序运行初始化时从INI文件中获取数据库地址,然后进行打开等操作,文件出现如图上的错误是什么原因??我用Msgbox试过了API函数GetPrivateprofilestring获取的地址没有问题!!

Public Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
'声明API函数
Public inifilename As String '声明变量


Public Sub Main()  '主函数
Dim n As Integer
Dim DbName As String * 255
inifilename = App.Path & "\DB_GCYF.ini"  '将初始化ini文件赋值给变量
n = GetPrivateProfileString("数据库", "namepath", "", DbName, Len(DbName), inifilename) '获取ini文件中的数据库地址赋予变量
DbName = Left(DbName, n)
frm_strat.Show '显示登陆主窗体

End Sub
Public Function cnn() As ADODB.Connection      '在模块中声明一个接连函数cnn 类型为ADODB连接类型
Set cnn = New ADODB.Connection
cnn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=DbName;Persist Security Info=False"   '建立连接
cnn.Open  '打开数据库连接
End Function
12 回复
#2
wds12018-01-17 08:12
程序路径不对。
你打开程序时,目录为vb的安装目录。ini文件没在安装目录。
解决方法:
1、你打开程序后,把程序另存到你新建的程序目录,并且把ini文件放到此目录,之后重新执行。
2、你把程序编译,之后把ini文件执行程序放到同一目录,在执行编译的程序。

#3
风吹过b2018-01-17 08:34
保存工程,然后从工程目录里,双击工程文件打开工程,
不要先运行 VB6 ,然后从 VB6 里使用打开命令打开工程。

凡使用了APP.path 的程序,都应该这样做。
#4
suzhanpeng2018-01-17 08:40
你先试一下给n直接赋 数据库地址,看看能不能打开。
如果不能打开,说明数据库地址的字符串本身有问题。
如果能打开,说明你获取后的字符串存在问题,看看是不是字符串的前后存在空字符,可以用函数比较一下吗。
#5
xiangyue05102018-01-17 08:47
楼上几位正解,未保存的VB程序其默认路径还是在VB安装目录下。保存之后将ini放在项目目录下即可
#6
ZHRXJR2018-01-17 16:59
回复 楼主 DXLAB
“我用Msgbox试过了API函数GetPrivateprofilestring获取的地址没有问题!!”
但从对话框可以看出,程序是在VB的安装目录找,肯定不对,我估计你获取的好像没有路径。
另外这个语句
cnn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=DbName;Persist Security Info=False"   '建立连接
好像也有问题,因为DbName是变量,这里直接这样引用,程序认为是名称,是不是应该修改为:
cnn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & DbName & ";Persist Security Info=False"

[此贴子已经被作者于2018-1-17 17:05编辑过]

#7
DXLAB2018-01-17 18:44
我的VB 是安装在C盘,但我建的工程是保存在D盘的VB文件夹中的,而且INI文件也是放在D盘VB文件夹中的.另外我使用以程序检查时是能将INI文件保存的地址显示出来的:
Public Sub Main()  '主函数
Dim n As Integer
Dim DbName As String * 255
inifilename = App.Path & "\DB_GCYF.ini"  '将初始化ini文件赋值给变量
n = GetPrivateProfileString("数据库", "namepath", "", DbName, Len(DbName), inifilename) '获取ini文件中的数据库地址赋予变量
DbName = Left(DbName, n)
msgbox DbName
弹出的消息框能显示保存在INI文件中的数据库文件地址!! 可能是我下面的连接函数“Public Function cnn() As ADODB.Connection”中存在问题或不适合!
#8
DXLAB2018-01-17 20:06
回复 6楼 ZHRXJR
只有本站会员才能查看附件,请 登录
还是有问题
#9
xiangyue05102018-01-18 09:27
回复 8楼 DXLAB
你的DBname是全局的么?自己不看一下运行到cnn.open的时候DBname赋值是否正确?
建议把最基本的理论复习一下
1. 全局变量和局部变量。
2. 如何设置和查看监视, 如何查错
#10
suzhanpeng2018-01-18 10:31
xiangyue0510  正解,Dim DbName As String * 255 很明显是局部变量。
#11
ZHRXJR2018-01-18 11:40
回复 8楼 DXLAB
Dim DbName As String * 255   '不能在其他过程使用另一个过程中声明的变量!!!
这个变量是过程级变量,必须设置为全局变量。
另外,不清楚这个变量是否包含路径,如果没有路径,也会出错的。
#12
dsxktop2018-01-18 11:45
多谢各位,虽然不太懂,但多少学到了一些
#13
DXLAB2018-01-18 13:14
回复 9楼 xiangyue0510
正解,谢谢,我把声明变更了一下,现在OK了
1