标题:VB程序初始化ini文件时出错
只看楼主
DXLAB
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2018-1-12
结帖率:66.67%
已结贴  问题点数:20 回复次数:12 
VB程序初始化ini文件时出错
  我通过程序运行初始化时从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
搜索更多相关主题的帖子: 初始化 ini 文件 String ByVal 
2018-01-16 23:14
wds1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:49
帖 子:393
专家分:2025
注 册:2016-3-10
得分:0 
程序路径不对。
你打开程序时,目录为vb的安装目录。ini文件没在安装目录。
解决方法:
1、你打开程序后,把程序另存到你新建的程序目录,并且把ini文件放到此目录,之后重新执行。
2、你把程序编译,之后把ini文件执行程序放到同一目录,在执行编译的程序。

2018-01-17 08:12
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:0 
保存工程,然后从工程目录里,双击工程文件打开工程,
不要先运行 VB6 ,然后从 VB6 里使用打开命令打开工程。

凡使用了APP.path 的程序,都应该这样做。

授人于鱼,不如授人于渔
早已停用QQ了
2018-01-17 08:34
suzhanpeng
Rank: 4
等 级:业余侠客
威 望:7
帖 子:72
专家分:248
注 册:2016-9-28
得分:0 
你先试一下给n直接赋 数据库地址,看看能不能打开。
如果不能打开,说明数据库地址的字符串本身有问题。
如果能打开,说明你获取后的字符串存在问题,看看是不是字符串的前后存在空字符,可以用函数比较一下吗。
2018-01-17 08:40
xiangyue0510
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:86
帖 子:934
专家分:5244
注 册:2015-8-10
得分:0 
楼上几位正解,未保存的VB程序其默认路径还是在VB安装目录下。保存之后将ini放在项目目录下即可
2018-01-17 08:47
ZHRXJR
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:125
帖 子:1034
专家分:5519
注 册:2016-5-10
得分:0 
回复 楼主 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编辑过]


请不要选我!!!
2018-01-17 16:59
DXLAB
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2018-1-12
得分:0 
我的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”中存在问题或不适合!
2018-01-17 18:44
DXLAB
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2018-1-12
得分:0 
回复 6楼 ZHRXJR
还是有问题
2018-01-17 20:06
xiangyue0510
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:86
帖 子:934
专家分:5244
注 册:2015-8-10
得分:20 
回复 8楼 DXLAB
你的DBname是全局的么?自己不看一下运行到cnn.open的时候DBname赋值是否正确?
建议把最基本的理论复习一下
1. 全局变量和局部变量。
2. 如何设置和查看监视, 如何查错
2018-01-18 09:27
suzhanpeng
Rank: 4
等 级:业余侠客
威 望:7
帖 子:72
专家分:248
注 册:2016-9-28
得分:0 
xiangyue0510  正解,Dim DbName As String * 255 很明显是局部变量。
2018-01-18 10:31



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-484290-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.083241 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved