数据库技术讨论-------------------第一帖

tony_jian 2002-05-15 01:29:29
在学习数据库应用的过程里,很多问题其实不是真正的难题.只是缺少经验,有时甚至会因为这些小问题浪费很多时间和精力.希望大家能够把自己遇到的和解决的写出来.让别的程序员不用走那么多弯路.这张贴只是个开始.我会从最基本的开始.慢慢深入.

这张帖讨论的是:
ADO + ACCESS200 + DataGrid 的多条件查询操作.


实现功能:
在DataGrid里刷新显示查询结果.并支持直接对其中的数据进行编辑数据库即时更新.在打印按钮的Click事件里打印DataGrid中的数据.
...全文
52 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
孙小雄 2002-05-30
  • 打赏
  • 举报
回复
:)
WxmJun 2002-05-30
  • 打赏
  • 举报
回复
(上面言不达意.再来)
这里没有星级大将,但比星级大将气氛好多了.看来星级大将是有点架了的喔.

DATAGRID+ACCESS,或者说是ADODB.Recordset+ACCESS是有BUG的.
ACCESS数据源:
用ADODB.Recordset连接DATAGRID. (ADODB.Recordset取得数据后再赋于DATAGRID).当用ADODB.Connection删除了一些记录后,DATAGRID竟然不能实时反应,无论用ADODB.Recordset怎么Refresh,DATAGRIID依然存在这些记录.总要经过某操作(具体是什么也搞不懂,反正就是这里点一下或那里按一下)才会去掉.但如果在Refresh 前用了断点暂停.再Refresh .记录准会去掉.

用SQL SERVER数据源就不存在这些问题.
不知是不是ADODB.Recordset的BUG.
WxmJun 2002-05-30
  • 打赏
  • 举报
回复
这里没有星级大将,但比星级大将气氛好多了.

DATAGRID+ACCESS,或者说是ADODB.Recordset+ACCESS是有BUG的.
我试过用ACCESS数据源与SERVER数据源连接ADODB.Recordset,再用ADODB.Recordset连接DATAGRID. 当用ADODB.Connection删除了一些记录后,DATAGRID竟然不能实时反应,无论用ADODB.Recordset怎么Refresh,DATAGRIID就是存在这些记录.总要经过某操作(具体也搞不懂)才会去掉.但如果在Refresh 前用了断点暂停.再Refresh .记录准会去掉.
用SERVER就不存在这些问题.
不知是不是ADODB.Recordset的BUG.
胡楮智 2002-05-30
  • 打赏
  • 举报
回复
这张帖讨论的是:
ADO + ACCESS200 + DataGrid 的多条件查询操作.
呵呵,这里得毛病就出在 DataGrid上,
我想长时间使用vb做数据库得人一定不会再用DataGrid
一般会用flexgrid, 而且也应该比较痛恨帮定,
只有数据得非帮定才可以让人大展手脚。
嘿嘿,另外,帮定的处理占用资源也是大大的!!!!
孙小雄 2002-05-30
  • 打赏
  • 举报
回复
关于Access 路径问题 这个是建立系统的DSN

Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Private Const ODBC_ADD_SYS_DSN = 4
Private Declare Function SQLConfigDataSource Lib "odbccp32.dll" (ByVal hwndParent As Long, ByVal fRequest As Long, ByVal lpszDriver As String, ByVal lpszAttributes As String) As Long

Public Function LoadDbSource2(StrDriver, StrAttributes As String) As Boolean
LoadDbSource2 = SQLConfigDataSource(0&, ODBC_ADD_SYS_DSN, StrDriver, StrAttributes)
End Function


Private Sub Command1_Click()
Dim StrAttributes As String
StrAttributes = "DSN=Access数据测试" & Chr(0) & "Desciption=动态加载ODBC示例" & Chr(0)
StrAttributes = StrAttributes & "Dbq=" & App.Path & "\1.mdb" & Chr(0) & "FIL=MS Access;" & Chr(0)
StrAttributes = StrAttributes & "MaxBufferSize=2048" & Chr(0) & "PageTimeout=5" & Chr(0)
Call LoadDbSource2("Microsoft Access Driver (*.mdb)", StrAttributes)
'点完按纽 去控制面班 里看odbc 的系统dsn 就有了 呵呵:)
End Sub
Private Sub Command2_Click()
connit = "DSN=Access数据测试" 'Uid=sss;Pwd=ss
conn.Open connit
'你在 c:\1.mdb
Mytable = "select * from users"
rs.Open Mytable, conn, 2, 2
Do While Not rs.EOF
List1.AddItem rs("name")
rs.MoveNext
Loop
rs.Close
conn.Close
End Sub

zcsone 2002-05-16
  • 打赏
  • 举报
回复
如何将查询出来的数据实现按某一个字段进行分组打印呢?谢谢!
tony_jian 2002-05-16
  • 打赏
  • 举报
回复
程序员们都来团结互助,共同提高!

这张帖讨论的是:
ADO + ACCESS200 + DataGrid 的多条件查询操作.

实现功能:
在DataGrid里刷新显示查询结果.并支持直接对其中的数据进行编辑数据库即时更新.在打印按钮的Click事件里打印DataGrid中的数据.

给出自己的一个模糊查询的例子 (最好where和like的条件有三个)
谢谢大家的参与!
tony_jian 2002-05-16
  • 打赏
  • 举报
回复
为了中国的程序员们团结互助,共同提高!
欢迎大家积极讨论,并帖出代码.

这张帖讨论的是:
ADO + ACCESS2000 + DataGrid 的多条件查询操作.

实现功能:
在DataGrid里刷新显示查询结果.并支持直接对其中的数据进行编辑数据库即时更新.在打印按钮的Click事件里打印DataGrid中的数据.

请贴出你的一个模糊查询的例子 (最好where和like的条件有三个)
谢谢参与!
sanjianxia 2002-05-15
  • 打赏
  • 举报
回复
关于打印刷新的问题
' 数据环境初始化
Private Sub DataEnvironment_Initialize()
DataEnv.Cnc_Unit.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\unit1.mdb;Persist Security Info=False;Jet OLEDB:Encrypt Database=True"
DataEnv.Cnc_Unit.Open
DataEnv.Cnt_User.ConnectionString = "Provider=Microsoft.Jet.OLEDB.3.51;Persist Security Info=False;Data Source=" & App.Path & "\YH_user.mdb"
DataEnv.Cnt_User.Open
End Sub
'报表打印
Private Sub mnuFilePrintPreview_Click()
' 打印报表 < < 必须生成记录集> >
If DataEnv.rsCmd_unit.State = adStateOpen Then DataEnv.rsCmd_unit.Close
DataEnv.Commands("Cmd_unit").CommandText = "select " & TableName & ".* from " & TableName
DataEnv.Cmd_unit
DtaRpt_unit.Refresh
DtaRpt_unit.Show
end Sub


——————————

http://sanjianxia.myrice.com
--------------------------------------------------------------------------------
总发帖数: 158 | 来源: 重庆 | 注册日期: 2002-03-23 IP: 已记录


sanjianxia



本版版主 发表于 2002-05-15.09:58:19               
--------------------------------------------------------------------------------

DATAREPORT的DATASOURCE即可以是一个DataEnvironment,也可以是一个RECORDSET。
如果直接把它设为一个RECORDSET,报表控件中的DATAMEMBER就不用设置了,只要把DATAFIELD设成RECORDSET中相应的字段名称就可以了。
下面是我常用的方法,在DATAREPORT声明一个RECORDSET,建立一个RptPrin方法用于打印,它的输入参数包括一个STRING,该STRING就是报表的SQL语句,当然也可以输入其它报表中要用的变量,通过下面的方法对报表中的某一个控件进行写值
DataReport1.Sections("section2").Controls("label1").Caption=值(Textbox也可以),不过,在Section中是无法动态地增加或删除控件的。
记得在报表的Terminate事件中一定要关闭RECORDSET。
如果要做一个通用的报表,可以把DETAIL中的TEXTBOX的DATAFIELD统一设为FIELD1、FIELD2、FIELD3...,然后,在SQL语句中统一使用别名就可以了。

如:select id as field1,name as field2 ....
select cargo as field1,typr as field2...

具体代码如下:

Dim rsP As New ADODB.Recordset
Public Sub RptPrint(ByVal strSql As string,byval vsDate as date,byval veDate as Date)
On Error GoTo Handel
If rsP.State <> 0 Then rsP.Close
rsP.Open strSql, oConn, adOpenStatic, adLockOptimistic
Set Me.DataSource = rsP
Me.Sections("section2").Controls("lbldate").Caption = vsDate & "至" & veDate
Me.Show 1
Exit Sub
Handel:
If rsP.State <> adStateClosed Then rsP.Close
Set rsP = Nothing
MsgBox Err.Description
End Sub

Private Sub DataReport_Terminate()
If rsP.State <> adStateClosed Then rsP.Close
Set rsP = Nothing
End Sub


——————————

http://sanjianxia.myrice.com

simaomeiqiong 2002-05-15
  • 打赏
  • 举报
回复
我支持你,真是造福于民呀!

tony_jian 2002-05-15
  • 打赏
  • 举报
回复
to:naomi77(naomi77)
我上面贴出的例子可以回答你的两个问题
naomi77 2002-05-15
  • 打赏
  • 举报
回复
这儿人气很旺,我想问一个问题!
'引用microsoft activex data objects 2.5 library
'添加部件Microsoft Hierarhicial Flexgrid control 6.0
Dim cnn1 As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim cnnstr As String
Private Sub Command1_Click()
cnnstr = " provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\40db2.mdb;"
cnn1.Open cnnstr
With rst
.CursorType = adOpenKeyset
.LockType = adLockOptimistic
.Open "select * from 表1", cnnstr
End With
Set Form1.MSHFlexGrid1.DataSource = rst
rst.Close
cnn1.Close
End Sub
以上代码能显示数据库,但如果我把部件MSHFlexGrid1换成DataGrid1就不行,是怎么回事?另外,app.path怎么用?
tony_jian 2002-05-15
  • 打赏
  • 举报
回复
to:kofkim(小金)
你说的独到不是贬意词吧^v^呵呵.好像你也发过很多数据库的贴子,贴点经验出来大家共享吧.
kofkim 2002-05-15
  • 打赏
  • 举报
回复
呵呵~看来你确实有独到的一面~标记收藏
tony_jian 2002-05-15
  • 打赏
  • 举报
回复
各位能否给出自己的一个模糊查询的例子 (最好where和like的条件有三个)
golden24kcn 2002-05-15
  • 打赏
  • 举报
回复
其实对于常规的使用datagrid没有什么不好,而msflexgrid看起来外观不错,还可以加上图片,不过,要填充数据(500条以上)明显比datagrid的绑定使用慢很多,如果你用的是access数据库那么一次填充百条以上的数据定让你感觉十分不爽,不说也要秒钟,它们各有所长!
tony_jian 2002-05-15
  • 打赏
  • 举报
回复
to:hahahahahaha(哈,哈哈,哈哈哈...)
因为我们要讨论的是VB对数据库的操作
Hahahahahaha 2002-05-15
  • 打赏
  • 举报
回复
数据库技术讨论怎么不到数据库版??

哈,哈哈,哈哈哈......
yuanquana 2002-05-15
  • 打赏
  • 举报
回复
我才开始用VB时都是使用datagrid控件,但后来发现确实毛病太多,我发现多数程序员会使用MSflexgrid控件,这样加然没有了数据绑定功能,但其实格式上更加灵活。至于多条件查询,很容易实现。用datagrid绑定ADO控件以后,datagrid就可以看成是一个记录集对象,用recordset.open语句,只要加上不同的条件查询很容易实现。
tony_jian 2002-05-15
  • 打赏
  • 举报
回复
to:no_com(探花)
ADO+DataGrid是刚开始学的时候很多书都介绍的组合.
我个人认为动态的显示数据库比用ADODC绑定好.


to: lightninglu(小陆初学者)
我认为在触发查询操作的时候可以先清空DataGrid,打印当然是连表格一起打印.你那么处理的话更繁琐.

下面是一个显示数据库记录的例子:
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + App.Path + "\database\123.mdb;Jet OLEDB:Database Password=password;Persist Security Info=False"
With rs
If .State = adStateOpen Then
.Close
End If
.ActiveConnection = cn
.CursorLocation = adUseClient
.CursorType = adOpenDynamic
.LockType = adLockBatchOptimistic
.Source = "select 用户名,是否为管理员 from USER"
.Open
End With
Set DataGrid1.DataSource = rs

下面的处理可以用于显示Boolean型的值
DataGrid1.Columns("是否为管理员").NumberFormat = "否;是"

谢谢大家,请继续!(建议大家贴出的代码都是针对某一个功能的,怕人家看的眼花^v^)
加载更多回复(6)
第一章 需求分析 1.1 BBS的功能与应用需求 1.1.1论坛的功能 论坛是Internet上的一种电子信息服务系统。它提供一块公共电子白板,每个用户都 可以在上面书写,可发布信息或提出看法。它是一种交互性强,内容丰富而即使的电子 信息服务系统。用户在论坛站点上可以获得各种信息服务、发布信息、进行讨论、聊天 等等。像日常生活中的黑板报一样,论坛按不同的主题分为许多版块,版面的设立依据 是大多数拥护的要求和喜好,用户可以阅读别人关于某个主题的看法,也可以将自己的 想法毫无保留地到论坛中。 随着计算机网络技术的不断发展,论坛的功能越来越强大,目前论坛的主要功能有以 下几点: (1) 供用户自我选择阅读若干感兴趣的专业组和讨论组内的信息。 (2) 可随意检查是否有新消息发布并选择阅读。 (3) 用户可在站点内发布消息或文章供他人查阅。 (4) 用户可就站点内其他人的消息或文章进行评论。 (5) 同一站点内的用户互通电子邮件, 设定好友名单 1.1.2应用需求 现实生活中的交流存在时间和空间上的局限性,交流人群范围的狭小,以及间断的交 流,不能保证信息的准确性和可取性。因此,用户需要通过网上论坛也就是论坛的交流 扩大交流面,同时可以从多方面获得自己的及时需求。同时信息时代迫切要求信息传播 速度加快,局部范围的信息交流只会减缓前进的步伐。论坛系统的开发能为分散于五湖 四海的人提供一个共同交流、学习、倾吐心声的平台,实现来自不同地方用户的极强的 信息互动性,用户在获得自己所需要的信息的同时也可以广交朋友拓展自己的视野和扩 大自己的社交面。 1.3数据字典 BBS论坛系统的数据流程图如下 说明: ——访问信息, ——用户信息, ——发表子信息, 更新子信息, 搜索信息 ——获取子信息, 回复信息, 搜索用户, 更新用户信息, 获取用户资料 图2.6 数据流程图 概念结构设计 2.2实体E-R图 2.2.1用户E-R图 2.2.2主贴E-R图 2.2.3版块E-R图 2.2.4回E-R图 2.3实体总体E-R图 逻辑设计 数据模式 根据论坛的功能与应用需求的简要介绍,可以得出设计论坛系统所要的基本实体有BBSU ser(用户)、BBSSection(版块)、BBSTopic(主贴)、BBSReply(回复贴)。论坛又称BBS。 表1-3-1  BBSUsers 用户信息表 "表中列名 "数据类型 "可否为空 "说明 " "UID "Int "not null(主键) "用户编号 " "UName "char "not null "用户姓名 " "UPassword "char "not null "用户密码 " "UEmail "char "not null "用户Email " "UBirthday "datetime "not null "用户生日 " "USex "bit "not null "用户性别 " "UClass "Int "not null "用户等级 " "UStatement "varchar "not null "用户个人说明 " "URegDate "datetime "not null "用户注册时间 " "UState "tinyint "not null "用户状态 " "UPoint "in "not null "用户积分 " 表1-3-2  BBSTopic主贴信息表格 "表中列名 "数据类型 "可否为空 "说明 " "TID "Int "not null(主键) "主编号 " "TSID "Int "not null "主版块编号 " "Tuid "Int "not null "主用户编号 " "TReplyCount "Int "not null "主回复次数 " "TEmotion "Char(10) "not null "主表情 " "TTopic "Varchar "not null "主标题 " "TContents "Text "not null "主内容 " "TTime "Datetime "not null "发时间 " "TClickCount "Int "not null "主点击次数 " "TLastClickT "Datetime "not null "主最后点击时间" 表1-3-3  BBSSection板块信息 "表中列名 "数据类型 "可否为空 "说明 " "sid "Int "Not null(主键) "版块编号 " "SName "char "Not null "版块名称 " "SMasterID "Int "Not null "版主编号 " "SStatement "Varchar "Not null "版块说明 " "SClickCo
简介 Symphony([ˈsɪmfəni],n.交响乐)是一个现代化的社区平台,因为它: 实现了面向内容讨论的论坛 包含了面向用户分享、交友、游戏的社交网络 集成了聚合独立博客的能力,共建共享优质资源 并且 100% 开源 欢迎到 Sym 官方讨论区了解更多。另外,如果你需要搭建一个企业内网论坛,请使用 SymX。 动机 Sym 的诞生是有如下几点原因: (正版) 很多系统界面上仍然保持着老式风格,远远没有跟上时代发展的脚步,它们没有创新、好玩的特性,缺少现代化的交互元素和用户体验 大部分系统是从程序员的角度进行设计的,没有考虑实际的产品、运营需求,这类系统功能过于简陋、细节不够精致、缺乏长期维护 另外,我们正在探索新的社区模式,实现独奏(Solo)与协奏(Symphony)相结合的社区新体验 (野版) 万能的 GitHub 上连个能用的 Java 社区系统都找不到,Sym 填补了这个宇宙级空白 做最 NB 的开源社区系统,预计几年以后 82% 的社区都将是 Sym 搭建的 作者技痒,炫技之作,Ruby/Python/Node.js/(特别是)PHP 怎么能比得过 Java 案例 个人维护: 黑客派 宽客网 贵州IT 超级产品经理 Titandb 学习主站 呆萌狮 - Demo's 公司维护: 四方环视 如果你也搭建好了,欢迎通过 Pull Request 将你的站点加到这个列表中 :-p 功能特性 具体功能点细节可浏览 Sym 功能点脑图,下面列出了 Sym 的主要特性,说明 现代化 的由来。 好用的编辑器 Markdown:支持 GFM 语法以及一些扩展语法 格式调整:粗体、斜体、超链接、引用、列表等可以通过工具栏按钮,同时也支持快捷键 文件上传:支持复制粘贴或者拖拽上传图片;支持上传普通文件;对 MP3 会使用在线播放器进行渲染 剪贴板处理:自动将复制的内容转换为 Markdown 格式;外链的图片自动上传站内 @用户:根据用户名自动补全,支持快捷键 Emoji:支持大部分主流 Emoji 表情,快捷键自动补全 数学公式:支持 LaTex 数学公式渲染 数据暂存:支持本地浏览器暂存数据,避免意外情况导致编辑内容丢失 智能、灵活的信息架构 传统的节点式社区要求子必须 分类 到某一个节点下,信息架构方式属于自上而下。Sym 不是自上而下的节点式信息架构,子不需要固定分类,通过标签 聚合 到某个领域下。 标签:根据子内容智能抽取关键字进行标签自动补全,一篇子关联多个标签。标签和标签之间以带边权重的图结构进行描述,方便进行相关计算 领域:一个领域下包含了多个标签,通过标签将子自动聚合到具体领域,随时可以通过增减关联标签从而达到调整领域范围,最终聚合出适合的子列表 满足多样化的发需求 目前支持 4 中子类型,满足不同用户的偏好: 普通子:提问或分享对别人有帮助的经验与见解 思绪:写作过程的记录与重放,文字版的沙画表演 (?) 小黑屋:邀请好友在私密空间中进行交流 同城广播:发起你所在城市的招聘、Meetup 等 另外,所有子都可以设置 打赏区 ,打赏区可以放置一些“珍藏”内容,只有打赏后的用户才能浏览。打赏区编辑器同样支持 Markdown、Emoji 和文件上传等特性。打赏区支持内容更新,并可以随时调整打赏积分值。 对于测试,可以使用 Sandbox 机制:带有 Sandbox 标签的子将视为测试,不会显示在首页或是某领域内,只会展现在发者自己的子列表中。 人性化的回交互 实时呈现:回提交后其他浏览者可以不刷新页面就实时看到你的回 随时滚动:浮出式回编辑器方便回者随时滚动屏幕查看其他内容,不必担心焦点丢失 真正的回复:回复是针对回而言的,而 @ 是针对用户而言的,@ 是提及不是回复,很多系统都没有考虑到这一点。回复/引用可以在当前位置进行展开浏览,也可以跳转到回处,并支持跨分页跳转 智能机器人:回时可以让机器人也参与到讨论中来,活跃气氛的同时说不定机器人真的能解决一些问题呢 用户个性化设置 用户可以自己设置很多参数以满足个性化需求: 子列表浏览分页每页条目数 回浏览模式:传统(按发布时间升序,无实时推送刷新);实时(按发布时间降序,实时推送新回) 头像浏览模式:原图(支持 gif 动图);静态图 Chrome 通知/邮件订阅/键盘快捷键开关 设置常用 Emoji,方便发布内容时快速插入表情 除了功能个性化配置项,还有很多隐私项开关: 是否公开子/回列表 是否公开

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧