vb复合查询
发布网友
发布时间:2022-04-26 13:25
我来回答
共6个回答
热心网友
时间:2022-06-28 14:52
已完成
=================
1 当会议编号为空时,查询所有会议内容信息
2 当输入会议编号时,计算符合会议编号的信息
3 DATAGRID显示的是同时符合状态标志和会议编号的信息
4 应到人数、未到人数和签到率计算的是符合会议编号的信息
5 输入会议编号敲回车键或状态值选定,所有数据自动计算
热心网友
时间:2022-06-28 14:53
其实这是一个SQL查询问题,条件是从两个TEXT中得到。
假设会议编码从txtNo中输入,签到状态从txtStatus中输入
查询按钮cmdSearch
数据库:TEST 表:tmpTB 字段:会议编码,签到状态,员工工号,……
工程-引用-"Microsoft ActiveX Data Objects 2.x"
Private Sub cmdSearch_Click()
dim rs as adodb.recordset
dim tSql as string
dim ydID as integer '应到人数
dim sdID as integer '实到人数
dim cql as single '出勤率
set rs=new adodb.recordset
rs.activeconnetion="Driver={SQL Server};Server=.;Database=Test;Uid=sa;Pwd=" '------------数据库连接,根据自己的数据做相应改动
'统计选中会议编码的应到人数
tsql="select Count(员工工号) from tmpTB where 会议编码='"+txtNo.Text+"'"
rs.open tSql,,adOpenStatic, adLockOptimistic
ydID=rs.fields(0).value
rs.close
'统计选中会议编码的实到人数
tsql="select Count(员工工号) from tmpTB where 会议编码='"+txtNo.text+"' and 签到状态='%"+txtStatus.Text+"%'"
rs.open tSql,,adOpenStatic, adLockOptimistic
ydID=rs.fields(0).value
rs.close
cql=sdID/ydID
set rs=nothing
End Sub
热心网友
时间:2022-06-28 14:53
有下面几个步骤:
一、链接数据库:
首先新建一个模块,在工程的属性窗口右击Form1,选择【添加】-【添加模块】
注意:必须添加下面是引用:
Microsoft DAO 3.6 Object Librarv
Microsoft ActiveX Data Object 2.7 Librarv
1、如果是Access数据库,在Mole1模块中添加下面的链接数据库代码:
a、有密码的Access数据库链接代码:
Sub SJK(db)
'连接数据库
Dim dbP As String
dbP = App.Path & "\数据库名.dbm"
GSL = "ms access;pwd=密码"
Set WorkDefault = DBEngine.Workspaces(0)
Set db = DBEngine.Workspaces(0).OpenDatabase(dbP, False, False, GSL)
End Sub
b、无密码的Access数据库链接代码:
Public Sub SJK(db)
db.ConnectionString = "DRIVER=Microsoft Access Driver (*.mdb);DBQ=" & App.Path & "\数据库名.mdb"
db.Open
End Sub
2、如果是SQL 2000数据库,在Mole1模块中添加下面的链接数据库代码:
只提供sa用户带密码的数据库链接代码:
Sub SJK(db)
'连接数据库
db.ConnectionTimeout = 10
db.CursorLocation = adUseServer
db.ConnectionString = "driver={SQL Server};server=服务器名;uid=sa;pwd=密码;database=数据库名"
db.Open
End Sub
二、创建查询窗体:
首先在菜单中点击【工程】-【部件】,在对话框将Microsoft FlexGrid Control 6.0 (SP6)勾选
将窗体大小调整为8470*6440
在窗体中添加二个TextBox控件,一个Command控件,一个MSFlexGrid控件,三个Label控件。
三、编写代码:
Dim db As New ADODB.Command
Dim RS As New ADODB.Recordset
----------------------------------------
Private Sub Command1_Click()
Dim JL As Integer
JL = RS.RecordCount
If Text2.Text <> "" Then
Call SJK(db)
If Text1.Text <> "" Then
strSQL = "select * from 会议统计表 Where 会议编码='" & Text1.Text & "' and 签到状态='" & Text2.Text & "' Order By ID"
Else
strSQL = "select * from 会议统计表 Where 签到状态='" & Text2.Text & "' Order By ID"
End If
RS.Open strSQL, db, 3, 3
With MSFlexGrid1
.Cols = 2
.Rows = JL + 1
.TextMatrix(0, 0) = ""
.TextMatrix(0, 1) = "姓名"
.ColWidth(0) = 0
.ColWidth(1) = 1200
For I = 1 To JL
.TextMatrix(I, 0) = RS("ID")
.TextMatrix(I, 1) = RS("姓名")
TJRS = TJRS + 1
SDRS = SDRS + RS("实到人数")
CQL = CQL + RS("出勤率")
CQL1 = (CQL / TJRS) * 100
RS.MoveNext
Next I
End With
Label3.Caption = "统计人数:" & TJRS & "人; 实到人数:" & SDRS & "人; 出勤率:" & CQL1 & "%"
Else
Label3.Caption = "没有查询到记录!"
End If
End Sub
------------------------------------------------
Private Sub Form_Load()
Label1.BackStyle = 0
Label1.Caption = "会议编码:"
Label1.Alignment = 1
Label2.BackStyle = 0
Label2.Caption = "签到状态:"
Label2.Alignment = 1
Label3.BackStyle = 0
Label3.Caption = ""
Label3.Alignment = 1
MSFlexGrid1.Appearance = flexFlat
MSFlexGrid1.BackColorBkg = &HFAE6E6
MSFlexGrid1.BackColorFixed = &H11CFCF
Me.BackColor = &HFAE6E6
Me.Caption = "会议查询模块"
Text1.Text = ""
Text2.Text = ""
Command1.Caption = "查询"
End Sub
至于控件的摆放位置你自己进行调整即可。
热心网友
时间:2022-06-28 14:54
定义一个字符串变量str,用来存储SQL语句,然后就根据各个text的输入情况选择性的改变str的值,最后rs.open str
比如
dim str as string
str = "select * from table1 where huiyi_id=" & text1
if text2 <> "" then
str = str & "and member=" & text2
end if
仅是举个例子说明意思,希望你能明白
热心网友
时间:2022-06-28 14:55
看来这200分都想要啊。
查询语句其实很简单的
关键要看你的数据库中表是如何设计的了。
而数据库中的表的设计又关系到“会议”这个业务的流程是怎么样的了。
这个就不是一句两句能说清楚的了,您觉得呢。
所以啊,您最好还是说说您要写的这个业务的流程和数据库中相关的表的设计,咱们这些勇夫也好对症下药嘛。
热心网友
时间:2022-06-28 14:55
是数据库的吧?
我可以帮你写。
你可以HI 我
或者Q我
已经HI你