vb中如何把access数据库的内容赋值给二维数组
发布网友
发布时间:2022-04-07 23:58
我来回答
共4个回答
热心网友
时间:2022-04-08 01:28
利用sendmessage函数,查看一下api手册就可以啦,应该不是很难的
功能强大的SendMessage函数
Windows API(应用程序接口)是Windows系列软件为程序开发人员提供的火力强大的“武器库”,在这个武器库中,有很多极具威力的武器,SendMessage就是其中之一,它的功能非常丰富,灵活使用这个函数,会给编程工作带来很多便利。本文以Visual Basic为例,结合几个具体的例子介绍该函数的功能。
一、SendMeaasge函数简介
顾名思义,SendMessage函数的功能是“发送消息”,即将一条消息发送到指定对象(操作系统、窗口或控件等)上,以产生特定的动作(如滚屏、修改对象外观等)。
SendMessage函数在VB中的函数说明如下:
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (Byval hwnd As Long, Byval wMsg As Long,Byval wParam As Long,lParam As Any) As Long
其中四个自变量的含义和说明如下:
hWnd:对象的句柄。希望将消息传送给哪个对象,就把该对象的句柄作为实参传送,在VB中可以简单地用“对象.hWnd”获得某个对象的句柄,如Text1.hWnd和Form1.hWnd分别可以得到Text1和Form1的句柄。
wMsg:被发送的消息。根据具体需求和不同的对象,将不同的消息作为实参传送,以产生预期的动作。
wParam、lParam:附加的消息信息。这两个是可选的参数,用来提供关于wMsg消息更多的信息,不同的wMsg可能使用这两个参数中的0、1或2个,如果不需要哪个附加参数,则将实参赋为NULL(在VB中赋为0)。
在简单了解了SendMessage函数的格式和功能后,让我们以几个例子来看看它的威力。
二、SendMessage函数使用实例
例1 多行TextBox中的快速处理功能在处理多行TextBox时我们经常会碰到以下几种情况:
希望了解多行TextBox中目前共有多少行文字。
想快速返回第N行的文字。
对于上面的情况,如果用VB自身的语句或函数来实现的话,要写不短的代码,而且由于要采用顺序查找的办法来完成,因此代码的执行效率也很低。如果使用SendMessage函数则可以大大减少代码量,并大幅度的提高执行效率。
用SendMessage函数完成上面两个任务的方法非常简单,每个任务只需简单地发送一条消息给多行TextBox即可,两个消息分别为:EM_GETLINECOUNT、EM_GETLINE,其它参数和返回值见附表。
下面用一个简单的实例演示这两个功能:
新建工程,在Form1上添加三个TextBox(名称分别为Text1、txtLineCount、TxtString,将Text1的Multi
Line属性置为True)、三个标签和一个命令按钮。为工程添加一个模块Moudle1,在其中写如下声明(其中
SendMessage函数的声明可以从VB的“API浏览器”中复制): 消息常量名 消息值 wParam lParam 返回值
EM_GETLINECOUNT &HBA 未用 未用 行数
EM_GETLINE &HC4 要找的行号 存结果的字节串 结果字节串的字节数
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long,lParam As Any) As Long
Public Const EM_GETLINECOUNT=&HBA
Public Const EM_GETLINE=&HC4
在Form1的代码模块中写如下代码:
Private Sub Command1_Click()
Dim str(256) As Byte
str(1)=1 '最大允许存放256个字符
'获取总行数,结果显示在文本框txtLineCount中
txtlineCount=SendMessage(Text1.hwnd,EM_GETLINECOUNT,0,0)
'获取第3行的数据放在str中,转换为字符串后显示在文本框txtString中
SendMessage Text1.hwnd,EM_GETLINE,2,str(0)
txtString= StrConv(str,vbUnicode)
End Sub
之后,按F5运行程序,在多行文本框中随便键入几行文字,然后按下[确定]按钮,出现如图画面,说明程序正确统计出了总行数和第3行的文字。
两点补充说明:在调用SendMessage获取第N行字符串时,lParam需要说明为字节数组,在调用完成后,再将字节数组转换为字符串;另外,调用前必须在lParam的前两个字节指明允许存放的最大长度,其中第一个字节为低位,第二个字节为高位,本例将高位(即str(1))置1.说明最大允许存放256个字符。
例2 程序控制拉下或收起组合框的下拉列来
一般情况下,为了拉下或收起组合框的下拉列表,需要用键盘或鼠标进行操作,而有时我们希望程序运行的某个时刻自动拉出下拉列表(比如在一些演示程序中),为了实现这个目的,我们也只有借助于SendMessage函数,方法是发一个CB_SHOWDROPDOWN(&H14F)消息给组合框。
在发CB_SHOWDROPDOWN消息时,wParam参数决定了是拉下列表(=True时)还是收起列表(=False时),lParam无用(设为0)。
为说明具体的使用方法,下面提供简单的程序片段。首先在代码模块中做如下声明:
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long,ByVal wMsg As Long,ByVal wParam As Long,lParam As Any) As Long
Const CB_SHOWDROPDOWN=&H14F
当程序中某处需要拉下组合框Combol的列表时,写如下调用语句:
SendMessage Combol.hwnd,CB_SHOWDROPDOWN,True,0
当需要收起组合框Combol的列表时,写如下语句:
SendMessage Combol.hwnd,CB_SHOWDROPDOWNN,False,0
例3 在列表框中查找匹配的项目
在Win95风格的帮助系统中一般都有一个“索引”页,索引页含有一个文本框和一个列表框,当用户在文本框中输入文字时,下拉列表会动态地显示与文本框中文字最匹配的项目,为用户提供了最大的方便。这种效果在应用程序的帮助系统中很容易实现(只要按照Win95帮助系统的正常制作过程制作就可以实现),如果想在应用程序的其它地方实现这种特性就需费一番心思了。
而使用SendMessage函数实现上述特性则非常简单,甚至只需一条语句就足够了,那就是在文本框的Change事件中给列表框发一条LB_FINDSTRING(&H18F)消息,该消息告诉列表框在列表中查找匹配的项目。
在发LB_FINDSTRING消息时,wParam参数代表从列表框的哪一个项目后面开始查找,一般情况下该参数可定为-1,表示从List1(0)即第一项开始向后循环查找,lParam则传进欲搜索的字符串(必须采用值传递)。
具体的代码和运行画面与后面的例4合并在一起演示。
例4 为ListBox添加水平滚动条
在VB中,列表框控件仅提供垂直滚动条,没有设置水平滚动条的能力,当某些项目的文本宽度较长时,超出列表框宽度部分的文本就无法显示出来,因此,很有必要为ListBox添加一个水平滚动条来方便操作。
为添加水平滚动条,只需发一条LB_SETHORIZONTALEXTENT(&H194)消息给列表框即可。发送消息时,wParam为滚动条的长度(以像素为单位,可通过计算得出准确的长度,也可随便给一个大于最大文本宽度的数字,如本例的250),lParam无用。下面是例3和例4合并在一起的代码和运行画面
Declare Function SendMessage Lib "user32" Alias "SendMessageA"(ByVal hwnd As Long,ByVal wMsg As Long,ByVal wParam As Long,lParam As Any) As Long
Public Const LB_FINDSTRING=&H18F
Public Const LB_SETHORIZONTALEXTENT=&H194
Private Sub Form_Load()
List1.AddItem "软件"
List1.AddItem "电脑游戏"
List1.AddItem "电视机"
List1.AddItem "电视台"
List1.AddItem "电脑"
List1.AddItem "电脑游戏软件"
'下一句为列表框添加水平滚动条
SendMessage List1.hwnd,LB_SETHORIZONTALEXTENT,250,0
End Sub
Private Sub Text1_Change()
'注意!当lParam传入的是字符串时,必须用ByVal传递
List1.ListIndex = SendMessage(List1.hwnd,LB_FINDSTRING,-1,ByVal Text1.Text)
End Sub
通过上面几个例子,想必您已经对SendMessage函数的强大功能有了初步的了解。事实上利用该函数我们还可以完成更多更好的任务,如控制文本框的自动滚屏、实现文字编辑过程中的Undo功能、操纵应用程序的窗体控制菜单等等,感兴趣的读者请参阅有关Windows API的资料。
本文程序均用Visual Basic 5.0企业版编写,在Pwin95环境下运行正常。
参考资料:http://tips.9hao.com/srccode/20041027/ziyuan/w/api/%B9%A6%C4%DC%C7%BF%B4%F3%B5%C4SendMessage%BA%AF%CA%FD.txt
热心网友
时间:2022-04-08 02:46
本类包括 83个问题。
为了方便浏览和查询,我们将所有问题分成了若干个小类,如果您想了解分类的依据,请阅览分类标准。
本部分包括与SQL查询有关的内容。
阅读其它有关“Visual Basic”的问题
阅读其它有关“SQL查询”的问题
ADO对Access数据库的Like查询
用VB+ADO查询日期条件则无法返回正常结果
SQL语句中如何使用单引号
在VB中如何实现把当前库或表转换为另外一种数据库文件
含有自增标记字段id,使用INSERT INTO时出错。
如何在存储过程中使用变量代替表名
SQL的Select语句中可否使用VB变量
SQL server query analyzer为什么执行不了select into
如何通过SQL命令的方式,增加一个字段
如何删除一个表
在SQL Server 2000中要怎样实现一个层次性的查询
如何查询某个月的记录
如何在同一数据库所有数据表中查找某一记录
调用SQL进行模糊查询总是得不到预期得记录集
出现:incorrect syntax near the key word 'select'
this 指针是怎么一回事
能否对ADO 结果集中由SQL语句产生的虚拟字段进行赋值
在vb中调用oracle下的存储过程
如何在VB中调用SQL语句
如何用程序建立索引
如何从一个表中删除与另一个表相同的记录
能否定义一个通用过程建立查询
用VB ADO进行对MSSQL的查询进行嵌套查询
如果数据库中的记录中某项为空(NULL),则即使满足查询条件,该记录也不能显示
如何从三个库中按条件选择出记录
用ADO 访问ACCESS,可以实现两张表合为一张表吗
使用SELECT从多个表中读数据,得到的是所有记录排列组合
建立数据库时同时建立constraint
出现3061号错误:"缺少参数,期望是"
VB删除SQL纪录时,为什么没有删除掉选择的纪录
报错:标准表达式中数据库类型不匹配
如何使用SQL根据记录号查询记录
如何实现将EXCEL表中的数据自动存储进SQLSERVER数据库中
对满足多个条件的字段值进行操作和多个数据库的链接
使用SQL语句时,为什么说“缺少语句结束”和“缺少case ”
如何用SQL语句把多行文本框的内容写入数据库中
如何找到满足条件的记录
执行SQL命令时出错: 至少有一个参数没有被指定值
SQL Server中可否进行多库中的表查询
用SQL在多张表查到符合条件的数据,如何将修改的内容保存在源数据库中
如何将表中数据一次性清除
如何在SQL语句中进行日期比较
SQL查询加排序功能后为什么错了
怎样可以用SQL语句存入半角的双引号
如何查询字段中第0、1 bit为1的记录
怎样用SQL语句实现只列出符合条件记录的前(N)条
SQL进行数据合计的时候,精度不对
如何使用SQL语句提供的统计函数处理考试数据
FindFirst中数字型怎么可以和String类型相加呢
如何实现同部门同月份累加数据
在VB执行一段SQL文本文件
如何使返回的记录集中不出现NULL值
如何使用SQL语言显示数据库表中的某字段的不重复记录
如何转换ACCESS数据到SQL SERVER
如何更改Data控件的数据
如何备份ACCESS数据库文件
能否在一个记录集上重新构造另一个查询
能否跟踪查询的进度
如何用B表中的数据去更新A表中的数据
如何查询到字段值符合自定义函数的记录
如何才能加快存取和搜索Access速度
VB中如何查询SQL Sever中某表字段为空的记录
如何把满足条件的记录显示在DBGrid中
如何进行分类统计
如何在使用DATA控件时在SQL语句中表示表的名字
如何把两个结构不一样的表合并
如何使用INSERT INTO追加记录
VB中如何用SQL实现象求平均值、合计之类的运算
如何在SQL语句中使用密码
怎么样去实现由用户来生成查询条件的过程
如何实现从一个表中拷贝一任意指定的记录至另一个表中
怎样修改控件的Recordsource属性
把RECORDSET对象中的记录生成一个新的数据库
VB中如何实现自动递增的字段
怎样在数据库中检索一个时间段
找出相同结构两个table之间的不同的record
如何得到数据库中数据的最大值、最小值、平均值
如何将二个结构一样的数据库合并起来
如何选出为空的数据
使用Like查询不符合要求
如何复制一个数据库的库结构
如何在VB中实现对数据库字段的组合查询(用一个文本框进行输入)
怎样在VB5下实现对数据库按字段组合查询
热心网友
时间:2022-04-08 04:20
VB6.0可用ADO Data 控件访问和操作数据库,读取数据表的数据,通过嵌套循环将数据表内容赋值给一个二维数组。
ADO Data 控件,这是一种新的、OLEDB 识别的数据源控件,其功能与内部的 Data 控件和 Remote Data 控件十分相似,通过这种方式允许用户用最少的代码来创建数据库应用程序。在运行时,可以设置控件的RecordSource 属性来实现Sql结构化查询语句满足需要的查询条件。
结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统
For...Next 语句,以指定次数来重复执行一组语句。
可以将一个 For...Next 循环放置在另一个 For...Next
循环中,组成嵌套循环。
以下是具体代码实例:
Option Explicit
Dim zh_bm(11, 1500)
Dim zsl As Integer
Dim i As Integer
Dim j As Integer
Dim sqlStr As String
Private Sub Form_Load()
Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\DATA_REF\db1.mdb;Persist Security Info=False"
sqistr = "SELECT * FROM mdlk_sj where 销售='N' order by 码单号"
Adodc1.RecordSource = sqlStr
Adodc1.Refresh
zsl = Adodc1.Recordset.RecordCount '获取查询得到的数据记录总数
Adodc1.Recordset.MoveFirst '移动记录到首条记录
For i = 0 To zsl - 1
For j = 0 To 11
zh_bm(j, i) = Adodc1.Recordset(j) '将各字段值赋值给二维数组
Next j
Adodc1.Recordset.MoveNext
Next i
End Sub
热心网友
时间:2022-04-08 06:12
说说思路:
这个显然要用ADO
1、连接数据库,得到连接对象conn
2、用下面的select语句打开表,将数据读入RecordSet
set rs=conn.execute("select * from 表名")
3、用循环将数据读入二维数组arr
row=0
while not rs.eof
arr[row,0]=rs["id"]
arr[row,1]=rs["year"]
arr[row,2]=rs["mon"]
arr[row,3]=rs["1"]
arr[row,4]=rs["2"]
...
...
...
row=row+1
wend