| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 890 人关注过本帖, 2 人收藏
标题:关于VB操作数据库的问题,请高人解答一下
只看楼主 加入收藏
zhuluoliye
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2013-7-23
结帖率:66.67%
收藏(2)
已结贴  问题点数:10 回复次数:14 
关于VB操作数据库的问题,请高人解答一下
本人新人,初学VB,求高人指点一下,在操作数据库的时候遇到疑问


本人做一个登陆程序,
登录页面login.frm,跳转页面info.frm,info.frm中需要继续对数据库进行操作。
函数模块中有:打开数据库函数opencn(),关闭数据库函数clscn(),打开记录集openrs(),关闭记录集clsrs(),插入、更新、删除函数execsql()
我写的代码是这样的:
在login.frm中:opencn(),然后openrs()对用户名和密码进行核对,之后clsrs(),然后clscn(),unload login,show info.frm最后跳转到info.frm
跳转到info.frm后
在info.frm中:opencn(),接着openrs(),然后clsrs()进行信息的查询,然后execsql()进行数据库的插入或者删除操作,最后退出程序时clscn()。


我想搞明白的是,是不是我每查询一次就要关闭一次记录集,在一个需要操作数据库的页面都要先opencn(),unload时都要clscn()?跳转到另一个页面后都要先opencn(),unload时都要clscn()?
这些地方有些疑问,求人解答一下,谢谢了!!!
搜索更多相关主题的帖子: 用户名 数据库 记录 密码 
2013-08-14 16:24
zhuluoliye
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2013-7-23
收藏
得分:0 
有没有人帮忙解答一下啊

学习是个过程,贵在坚持
2013-08-15 13:06
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:5 
首先,一个程序里,一个数据库,只要使用全局对象,只打开一次,只关闭一次。
其次,记录集,需要每次查询都必须打开一个,用完就随手关闭。这个强烈不建议使用全局变量。
      使用 局部变量时,当你忘记关闭时,过程结束时,会自动关闭。

你这个程序结构应该是:
BAS 模块文件,定义
CONN ,
在 Main 函数中,调用 opencn() 连接好CONN 数据库连接来。
在显示 login.frm ,在 login.frm 只操作 记录集就是了,也就是只需要执行 openrs()。
    如果需要把记录集再提供给其他函数使用时,可以使用 按地址传递参数的方式进行调用。
每次验证结束后都需要执行 clsrs()

info.frm 也是同样,只需要执行 openrs()\execsql()\clsrs()

info.frm 退出时,表示程序也结束时,就再执行 clscn() 。

授人于鱼,不如授人于渔
早已停用QQ了
2013-08-15 16:32
zhuluoliye
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2013-7-23
收藏
得分:0 
首先很感谢您的解答,但是请恕我新手愚钝,对于main函数还不了解,能否给我详细解答一下,我把我做的一个示例上传,麻烦帮我改成使用main函数启动并加载数据库成不?我做的每次到数据查询、插入操作的时候总是反应很慢,麻烦帮我修改一下吧,谢谢了!
demo.rar (1.32 MB)

学习是个过程,贵在坚持
2013-08-16 08:38
zhuluoliye
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2013-7-23
收藏
得分:0 
回复 3楼 风吹过b
首先很感谢您的解答,但是请恕我新手愚钝,对于main函数还不了解,能否给我详细解答一下,我把我做的一个示例上传,麻烦帮我改成使用main函数启动并加载数据库成不?我做的每次到数据查询、插入操作的时候总是反应很慢,麻烦帮我修改一下吧,谢谢了!
demo.rar (1.32 MB)

学习是个过程,贵在坚持
2013-08-16 08:38
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
我现在没办法改这些程序里了。

在 WIN7 里,这个机子,不能装完全版的 VB6 ,很多东西都没办法看。
很多代码,我都是用记事本在看。

授人于鱼,不如授人于渔
早已停用QQ了
2013-08-16 11:21
zhuluoliye
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2013-7-23
收藏
得分:0 
回复 6楼 风吹过b
大哥,再一次感谢您的出现,可是您的回答有点让我失望,我在网上查了很久,都没有详细讲解main函数的用法的,我是真的很需要了解这方面的,对我操作数据库有很大的影响。我已经把所有的代码和界面上传,用记事本就能看,就再次麻烦您给我改一下吧,对我帮助很大的,谢谢了
demo1.rar (18.92 KB)

学习是个过程,贵在坚持
2013-08-16 13:30
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
main 函数。
在工程属性里,选择启动 为 哪个窗口 或 MAIN 函数。

大工程,一般就建议使用 MAIN 函数启动
小工程,一般就建议 使用 Form1 启动。

这个函数,就是相当于 Form1_Load 过程。但这个函数执行时,可以不加载窗体就直接执行。
适合系统初始化需要处理事务需要。

授人于鱼,不如授人于渔
早已停用QQ了
2013-08-16 15:01
zhuluoliye
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2013-7-23
收藏
得分:0 
选择启动这个我知道,但是是不是每个窗口在加载事件中都要添加main()?
但我感觉每次使用execsql函数添加数据的时候都好慢,都要等上几秒钟,而且在执行execsql函数之前必须添加opencn()打开数据库,这个是什么问题?

学习是个过程,贵在坚持
2013-08-16 15:52
lowxiong
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:27
帖 子:653
专家分:3402
注 册:2008-5-7
收藏
得分:5 
main函数只有一个,在模块里定义,你提供的代码我看了,函数写的很不科学。用函数和子程序的原则是1:功能单一,仅完成某一项功能即可 2:函数中不要使用全程变量,即使实际上使用了全程变量,也使用传值的方式单列开。我对你的程序修改后代码如下,我是用的sql2000,模拟你的资料,建了个usertable表,里面有个admin名和admin的记录,运行通过,代码如下:

'模块里代码
Public LoginSucceeded As Boolean        '登陆成功标记
Public conn As New ADODB.Connection

Public Function OpenCn(con As Connection) As Boolean       '连接数据库
  On Error Resume Next
  OpenCn = False
  If con.State = 1 Then
    '数据库连接已经打开,设置打开标志即退出,无需重复打开数据库
    OpenCn = True
    Exit Function
  End If
  con.ConnectionTimeout = 10
  SQL = "driver={sql server};server=(local);uid=sa;pwd=;Database=demo"
  con.ConnectionString = SQL
  con.Open
  If con.State = 1 Then OpenCn = True
End Function


Public Sub cloCn(con As Connection)     '关闭数据库
  On Error Resume Next
  If con.State <> adStateClosed Then con.Close
  Set con = Nothing
End Sub

Public Function openRs(ByVal strsql As String, rs As Recordset) As Boolean     '打开记录集
  On Error Resume Next
  openRs = False
  If rs.State = 1 Then rs.Close                                              '如果记录集是打开状态则先关闭
  With rs
    .ActiveConnection = conn
    .CursorLocation = adUseServer         '由于使用的是sql server,这里游标是adUseServer
    .CursorType = adOpenKeyset
    .LockType = adLockOptimistic
    .Open strsql
  End With
  If rs.State = 1 Then openRs = True
End Function

Public Sub cloRs(rs As Recordset)
  On Error Resume Next
  If rs.State <> adStateClosed Then rs.Close
  Set rs = Nothing
End Sub



'这是我写的main函数
Sub Main()
  If Not OpenCn(conn) Then
    MsgBox "数据库连接失败,请检查数据库", , "提示"
    End
  End If
  login.Show
End Sub

'login里代码,我没有写info代码,你自己琢磨下
Private Sub Command1_Click()
  Dim str As String, rs As New Recordset
  Dim str1 As String
  If Trim(Text1) = "" Or Trim(Text2) = "" Then
    MsgBox "用户名或密码不能为空", , "错误提示"
    Text1.SetFocus
  End If
  str = "select * from usertable where username='" & Trim(Text1) & "' and userpasswd='" & Trim(Text2) & "'"
  If Not openRs(str, rs) Then
    MsgBox "数据库记录不能打开,请检查数据库", , "错误提示"
    End
  End If
  If Not rs.EOF Then
    Info.Show
    cloRs rs
    Unload Me
  Else
    MsgBox "用户名或密码错误,请检查", , "错误提示"
    Text1.SetFocus
  End If
End Sub

连接sql数据库.rar (3.08 KB)


2013-08-16 17:07
快速回复:关于VB操作数据库的问题,请高人解答一下
数据加载中...
 
   



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

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