搜索
您的当前位置:首页正文

机房收费系统之—组合查询

2023-11-18 来源:知库网

在敲组合查询的时候,我遇到了很多问题,比如说查询的语法怎么连接啊,怎么让控件中的文本信息也就是说字段名,组合关系对应数据库表中的字段哪? 也就是说我们要让卡号=Cardno,让姓名=StudentName ,这样我们在查询的时候才方便了,反成不能直接给Combox的

在敲组合查询的时候,我遇到了很多问题,比如说查询的语法怎么连接啊,怎么让控件中的文本信息也就是说字段名,组合关系对应数据库表中的字段哪?

也就是说我们要让卡号=Cardno,让姓名=StudentName ,这样我们在查询的时候才方便了,反成不能直接给Combox的text里面上英文的吧? 于是就定义个函数,让它实现这个功能,函数如下。

Public Function Field(i As String) As String Select Case i Case "卡号" Field = "cardno" Case "姓名" Field = "studentname" Case "上机日期" Field = "ondate" Case "上机时间" Field = "ontime" Case "下机日期" ....... End selectEnd Function
这样就行了。下面这组合查语法以及代码
Private Sub cmdInqurie_Click() Dim ctrl As Control Dim mrc As ADODB.Recordset Dim txtSQL As String Dim Msgtext As String '检查条件输入 If Trim(cmbfeild1.Text) = "" Or Trim(cmboperator1.Text) = "" Or Trim(txt1.Text) = "" Then MsgBox "请输入完整的查询条件", , "提示" Exit Sub End If Dim i, iCols As Integer '让所有列都居中显示文字 iCols = MSFlexGrid1.Cols For i = 0 To iCols - 1 MSFlexGrid1.ColAlignment(i) = flexAlignCenterCenter Next txtSQL = "select * from line_info where " txtSQL = txtSQL & Trim(Field(cmbfeild1.Text)) & Trim((cmboperator1.Text)) & "'" & Trim(txt1.Text) & "'" If Trim(cmbRelation1.Text <> "") Then '第一个组合关系存在 If Trim(cmbfeild2.Text) = "" Or Trim(cmboperator2.Text = "") Or Trim(txt2.Text = "") Then MsgBox "你已经选择了第一个组合关系,请输入第二行查询条件", , "提示" Exit Sub Else txtSQL = txtSQL & Field(Trim(cmbRelation1.Text)) & " " & Field(cmbfeild2.Text) & cmboperator2.Text & "'" & Trim(txt2.Text) & "'" End If End If If Trim(cmbRelation2.Text <> "") Then '第二个组合关系存在 If Trim(cmbfeild3.Text) = "" Or Trim(cmboperator3.Text) = "" Or Trim(txt3.Text) = "" Then MsgBox "你已经选择了第二个组合关系,请输入第三行查询条件", , "提示" Exit Sub Else txtSQL = txtSQL & Field(cmbRelation2.Text) & " " & Field(cmbfeild3.Text) & cmboperator3.Text & "'" & Trim(txt3.Text) & "'" End If End If On Error GoTo error1 '错误语句保护,当用户输入查询的格式不对时给出提示信息。 Set mrc = ExecuteSQL(txtSQL, Msgtext) If mrc.EOF = True Then '检查信息是否存在,如果不存在给出提示并清空所有文本框 MsgBox "没有查询到结果,可能会你输入的信息不存在,或者信息矛盾" For Each ctrl In Me.Controls If TypeOf ctrl Is TextBox Then '是否为文本框TextBox ctrl.Text = "" '清空所有文本框 End If Next For Each ctrl In Me.Controls If TypeOf ctrl Is ComboBox Then '是否为文本框TextBox ctrl.Text = "" End If Next Exit Sub End If With MSFlexGrid1 .Rows = 1 .TextMatrix(0, 0) = "卡号" .TextMatrix(0, 1) = "姓名" .TextMatrix(0, 2) = "上机日期" ........ Do While Not mrc.EOF .Rows = .Rows + 1 .TextMatrix(.Rows - 1, 0) = Trim(mrc!cardno) .TextMatrix(.Rows - 1, 1) = mrc!studentname .TextMatrix(.Rows - 1, 2) = mrc!ondate .TextMatrix(.Rows - 1, 3) = mrc!OnTime ........ mrc.MoveNext Loop End With mrc.Closeerror1: MsgBox "你输入的查询信息格式有误,请按标准格式输入。"End Sub
代码一大堆,这里面最终的的思想是怎样突破我们的固有思维,怎样创新,让我们的思想灌输进来。我们要用到以前所学的知识,达到学以致用的效果,其实还有比这些写更简便实用的代码等待我们开发,钻研。

小编还为您整理了以下内容,可能对您也有帮助:

谁知道sqlCommand几种方法的总结

此类不能被继承。我觉得这个类就是起到一个桥梁的作用。他连接.NETt和SQL Server;将我们在客户端设置的sql语句传递给sql;再将sql的值传递给客户端

这个类中定义了很多的方法和属性来帮助我们完成不同的sql语句;总结三种在机房收费系统中用到的方法

第一种方法:ExecuteScalar

作用: 执行查询返回值: 返回查询所返回的结果集中第一行的第一列。 忽略其他列或行。System.Object 结果集中第一行的第一列;如果结果集为空,则为空引用(在 Visual Basic 中为Nothing)适用情况: 使用ExecuteScalar 方法从数据库中检索单个值(例如一个聚合值)。与使用 ExecuteReader 方法,然后使用 SqlDataReader 返回的数据执行生成单个值所需的操作相比,此操作需要的代码较少。 示例代码:

在VB.NET中从数据库中取出单个值----使用从recharge求和的语句和

Imports System.Data ' 创建表类型的变量需要引用的空间 Imports System.Data.SqlClient '创建sql数据库连接需要引用的空间 Imports Entity Imports DateBaseHelper Public Class ConsumeInfoDAL '得到T_Recharge中全部的充值金额 Public Function GetBlance(ByVal strID As String, ByVal consumeCash As String) As String '设置传入sql中的T_SQL语句:获得充值的全部金额 Dim strRecharge As String = "SELECT SUM(cast(RechargeCash as int )) FROM T_RechargeInfo where CardID ='" + strID + "' " '打开数据库 执行上面的sql语句得到结果 关闭数据库 Dim con As New DBHelper Dim recharge As String con.Open() '需要处理如果表中没有记录那么返回的是false '如果返回false 充值为0 If con.ExecutesqlScalar(strRecharge) = False Then recharge = " 0" Else recharge = con.ExecutesqlScalar(strRecharge) End If con.Close() '返回结果 Return recharge End Function End Class DBHelper类,将对数据库的常用操作定义成了方法Imports System.Data Imports System.Data.SqlClient Imports System.Data.OleDb Imports System.Text Imports System.Configuration Imports Entity Public Class DBHelper Private myConnection As New SqlConnection '表示数据连接控件 Private CmdString As String '表示SQL语句命令 Private Cmd As New SqlCommand '表示SQL命令语句的执行 Private Reader As SqlDataReader '表示返回的DataReader对 '********************************************** ' <summary> ' 打开数据库 ' </summary> ' <returns> ' Boolean true:连接成功 false:连接失败 ' </returns> '********************************************** Public Function Open() As Boolean '通过读取app来获得连接字符串 Dim myConnectionString As String = ConfigurationManager.AppSettings("Connstr") '表示数据字符串 '传入连接字符串 myConnection.ConnectionString = myConnectionString Try myConnection.Open() Return True Catch ex As Exception Return False End Try End Function '********************************************** ' <summary> ' 关闭数据库 ' </summary> '********************************************** Public Sub Close() Cmd.Dispose() myConnection.Close() End Sub '********************************************** ' <summary> ' 执行传入的sql语句 ' </summary> ' <param name="strSQL"> 传入到数据库中的SQL语句</param> ' <returns> ' Integer 返回查询到的结果集的第一行第一列 ' </returns> '********************************************** Public Function ExecutesqlScalar(ByVal strSQL As String) As String Cmd.Connection = myConnection Cmd.CommandText = strSQL 'Dim flag As Object Try '返回查询到的第一行第一列的值,其他行和列忽略 Return Cmd.ExecuteScalar Catch e As Exception Return False End Try End Function End Class 第二种:ExecuteNonQuery

作用: 对连接执行 Transact-SQL 语句并返回受影响的行数。返回值: 类型:System.Int32 受影响的行数。对于 UPDATE、INSERT 和 DELETE 语句,返回值为该命令所影响的行数。 如果正在执行插入或更新操作的表上存在触发器,则返回值包括受插入或更新操作影响的行数以及受一个或多个触发器影响的行数。 对于其他所有类型的语句,返回值为 -1。 如果发生回滚,则返回值也是 -1。 适用情况:

1.使用 ExecuteNonQuery 来执行目录操作(例如查询数据库的结构或创建诸如表等的数据库对象),或通过执行 UPDATE、INSERT 或 DELETE 语句;ExecuteNonQuery 不返回任何行,但映射到参数的任何输出参数或返回值都会用数据进行填充。

2.ExecuteNonQuery也会返回后运行查询影响的记录数。但是,ExecuteNonQuery不返回任何行或列中的存储过程。如果您只需要知道更改行数,则使用插入、 更新或删除语句时最有用的ExecuteNonQuery方法。在存储过程中使用 SELECT 语句,您收到-1,因为查询不会影响任何行。

示例代码:修改密码--执行存储过程;在存储过程中使用 Update 语句,您收到影响的行数。存储过程代码:create proc PROC_Modify @UserID char(20),@UserPwd char(20) as update T_UserInfo set UserPwd =@UserPwd where UserID =@UserID go VB.NET代码 :

Imports System.Data ' 创建表类型的变量需要引用的空间 Imports System.Data.SqlClient '创建sql数据库连接需要引用的空间 Imports Entity Imports DateBaseHelper Public Class UserInfoDAL '********************************************** ' <summary> ' 修改密码 ' </summary> ' <param name="< enUser >"><userinfo对象,通过ui层给userid和userpwd赋值></param> ' <returns> ' <boolean> true:代表修改密码成功 false:代表修改密码失败 ' </returns> '********************************************** Public Function AlterPwd(ByVal enUser As UserInfoEntity) As Boolean Implements IUserinfo.AlterPwd Dim flag As Boolean '设置存储过程参数 Dim strProc As String = "PROC_Modify" Dim sqlParameter() As SqlParameter = { New SqlParameter("UserID", enUser.T_UserID), New SqlParameter("UserPwd", enUser.T_UserPWD)} '实例化con 打开数据库 调用执行存储过程函数 关闭数据库 Dim con As New DBHelper con.Open() flag = con.ExecuteProcBool(strProc, sqlParameter) con.Close() Return flag End Function End Class DBHelper中相对应的方法:

Imports System.Data Imports System.Data.SqlClient Imports System.Data.OleDb Imports System.Text Imports System.Configuration Imports Entity Public Class DBHelper Private myConnection As New SqlConnection '表示数据连接控件 Private CmdString As String '表示SQL语句命令 Private Cmd As New SqlCommand '表示SQL命令语句的执行 Private Reader As SqlDataReader '表示返回的DataReader对 '********************************************** ' <summary> ' 执行有参数的存储过程 ' </summary> ' <param name="strProc"> 存储过程名字</param> '<param name="sqlParameter">存储过程需要的参数</param> ' <returns> ' Boolean true:代表成功执行了存储过程 false:代表没有成功执行 ' </returns> '********************************************** Public Function ExecuteProcBool(ByVal strProc As String, ByVal sqlParameter As SqlParameter()) As Boolean '连接数据库将存储名称和参数传递给cmd Cmd.Connection = myConnection '指明为存储过程 Cmd.CommandType = CommandType.StoredProcere Cmd.CommandText = strProc Cmd.Parameters.AddRange(SqlParameter) Try '执行存储过程中的语句返回boolean Cmd.ExecuteNonQuery() Return True Catch e As Exception Return False End Try End Function End Class 第三种方法:ExecuteReader

作用: 将CommandText 发送到 Connection 并生成一个 SqlDataReader。 解释1:将SQL语句发送到指定连接 生成一个SqlDataReader对象

解释2:当ExecuteReader()执行后返回一个SqlDataReader对象

两种解释实际上都在说明些方法就是给SqlDataReader对象一个可以访问查询到的结果的渠道。

返回值: 类型:System.Data.SqlClient.SqlDataReader SqlDataReader 对象。 SqlDataReader的Read方法可以使SqlDataReader前进到下一条记录,同样返回bool值,当下一条无记录返回false,则表示记录读取完毕;当下一条有数据时为true,将读取到的数据(当前的一条记录)暂存在SqlDataReader中。

示例代码:执行一个Select语句返回的结果是Bool类型;查看表中是否已经存在记录Imports System.Data ' 创建表类型的变量需要引用的空间 Imports System.Data.SqlClient '创建sql数据库连接需要引用的空间 Imports Entity Imports DateBaseHelper Public Class CardInfoDAL Public Function CheckStudentID(ByVal enStudent As Entity.StudentInfoEntity) As Boolean Implements ICardInfo.CheckStudentID Dim flag As Boolean '判断输入的stuID是否已经存在 Dim strSQL As String = "select * from T_StudentInfo where StuID='" + enStudent.T_StuID + "' " Dim con As New DBHelper con.Open() flag = con.ExecutesqlBool(strSQL) con.Close() Return flag End Function End ClassDBHelper相对应的方法:Imports System.Data Imports System.Data.SqlClient Imports System.Data.OleDb Imports System.Text Imports System.Configuration Imports Entity Public Class DBHelper Private myConnection As New SqlConnection '表示数据连接控件 Private CmdString As String '表示SQL语句命令 Private Cmd As New SqlCommand '表示SQL命令语句的执行 Private Reader As SqlDataReader '表示返回的DataReader对 '********************************************** ' <summary> ' 执行传入的sql语句 ' </summary> ' <param name="strSQL"> 传入到数据库中的SQL语句</param> ' <returns> ' Boolean true:代表成功执行了strSQL false:代表没有成功执行 ' </returns> '********************************************** Public Function ExecutesqlBool(ByVal strSQL As String) As Boolean Cmd.Connection = myConnection Cmd.CommandText = strSQL Dim flag As Boolean Try '返回是否查询到结果 Reader = Cmd.ExecuteReader() flag = Reader.Read() Reader.Close() Return flag Catch e As Exception Return False End Try End Function End Class

如何解决对dllregisterserver的调用失败的问题

本文操作环境:Windows10系统、Dell G3电脑。

解决win10 “ .dll(或.ocx)控件已加载,但对DllregisterServer的调用失败,错误代码为0x80007005”

重构机房的过程参考用VB生成的“机房收费系统.exe”可执行 ,安装后有一些涉及到控件的窗体会报错,提示“运行错误’399’ 部件‘***.ocx’或其附件之一不能正确注册:一个文件丢失或无效”。这个问题是因为所需要的控件没有正确注册所导致的,用win+R打开运行窗口输入“cmd” 命令中输入“regsvr32 + 路径 + 控件名称”才可以使用。

但回车后提示却显示“ ***.dll(或.ocx控件已加载但对DllRegisterServer的调用失败,错误代码0x8002801c(或其他其他类似错误代码)”。出现这个错误一般是和权限问题有关,命令提示符需要以管理员权限运行才可以注册成功。

最简单的解决方法就是:

在开始菜单右击—>命令提示符(管理员)(A)

在管理员:命令提示符中输入”regsvr32 “路径 \控件名称” “

回车 , 然后提示注册成功。

亲测有效,非常好用!

机房收费管理系统用C语言怎么写~~~~哪位大虾帮忙必有重谢!!!

机房收费管理系统 (1)输入功能:输入30名学生的学号、班级、姓名、上机起始时间。 (2)计算功能:计算每个下机学生的上机费用,每小时1元。 (上机费用=上机时间* 1.0/h ,不足一小时按一小时计算) (3)查询功能:按条件(班级、学号、姓名)显示学生的上机时间。 (4)机器使用情况的显示(显示方式不限但要一目了然) #include<stdio.h> #include<math.h> #include<malloc.h> #define NULL 0 #define LEN sizeof(struct student) struct student { long num; long class; char name[15]; int hour1; int min1; int hour2; int min2; struct student *next; }; int n; #include"file1.h" #include"insert.c" #include"creat.c" #include"time.c" #include"del.c" #include"save.c" #include"copy.c" #include"print.c" #include"swit.c" void main() {char c; int flag,k; struct student *head,*stu; printf(" one hour 1.0 yun !\n"); printf(" Infed information---------->1\n"); printf(" Search expense------------->2\n"); printf(" delet the information------>3\n"); printf(" =============================================\n"); printf(" !!!Example!!!\n"); //例子示范// printf(" ###*************Infed information**********##\n"); printf(" number class name 12:30-14:21\n"); //注意号输入// head=creat(); //使head=调用返回“头指针”// for(flag=1;flag;) //flag为真,操作// { printf(" Will you ? : "); //输入相应的数值,做相应的操作// scanf("%d",&k); swit(head,stu,k); printf("go on ? y/n: "); getchar(); c=getchar(); if(c=='N'||c=='n') flag=0; //如果输入'n'or'N'则退出使用本软件,否则继续相应操作// } } void swit(struct student *head,struct student *stu,int k) { long dele,number; struct student *p1; switch(k) { case 1: { printf(" !!!Example!!!\n"); //例子示范// printf("##*********Infed information**********##\n"); printf("number class name 12:30-14:21\n");//注意号输入 printf(" =>:"); stu=(struct student *)malloc(LEN); //添加信息时必须开 scanf("%ld%ld%s%d:%d-%d:%d",&stu->num,&stu->class,stu->name,&stu->hour1,&stu->min1,&stu->hour2,&stu->min2); while(stu->num!=0) //作用为多次输入后,多次开辟空间// { head=insert(head,stu); printf(" =>:"); stu=(struct student *)malloc(LEN); //添加信息时必须开辟空间// scanf("%ld%ld%s%d:%d-%d:%d",&stu->num,&stu->class,stu->name,&stu->hour1,&stu->min1,&stu->hour2,&stu->min2); } copy(head); print(head); }break; case 2: { printf("##*************Search.expense*************##\n"); printf(" search number :"); //输入要找的号码“number->num”// scanf("%ld",&number); while(number!=0) //输入0,则结束擦找// { time(head,number); printf(" search number :"); scanf("%ld",&number); } }break; case 3: {printf("##**********delet.the.information*********##\n"); printf(" input the deleted number:"); //输入删除号码// scanf("%ld",&dele); while(dele!=0) ////输入0,则结删除// { head=del(head,dele); print(head); copy(head); printf(" input the deleted number:"); scanf("%ld",&dele); } }break; } } struct student *creat(void) //1 {struct student *head; struct student *p1,*p2; n=0; p1=p2=(struct student *)malloc(LEN); //创建空间为"LEN",强转换为结构型,第一次输入// printf(" =>:"); scanf("%ld%ld%s%d:%d-%d:%d",&p1->num,&p1->class,p1->name,&p1->hour1,&p1->min1,&p1->hour2,&p1->min2); head=NULL; while(p1->num!=0) //号码不为0,可继续输入// { n=n+1; //输入一个,节点加一// if(n==1) head=p1; //有一个用户// else p2->next=p1; //多个用户,p1将指向下一个节点// p2=p1; p1=(struct student *)malloc(LEN); //将创建下一个空间,创建下一个空间后,输入信息// printf(" =>:"); scanf("%ld%ld%s%d:%d-%d:%d",&p1->num,&p1->class,p1->name,&p1->hour1,&p1->min1,&p1->hour2,&p1->min2); } p2->next=NULL; //表尾// return(head); } struct student * insert(struct student * head,struct student * stud) //stud是添加的用户// {struct student *p0,*p1,*p2; p1=head; p0=stud; if(head==NULL) //如果没有任何用户,添加为第一// {head=p0;p0->next=NULL;} else {while((p0->num>p1->num)&&(p1->next!=NULL)) //按号码小到大排列,并寻找添加节点// {p2=p1;p1=p1->next;} //p1将指向下一个节点// if(p0->num<=p1->num) {if(head==p1) head=p0; //恰好最小// else p2->next=p0; //在中间// p0->next=p1;} else {p1->next=p0;p0->next=NULL;} //在末尾// } n=n+1; //添加后接点数// return(head); } struct student *del(struct student *head,long num) { struct student *p1,*p2; if(head==NULL) {printf("NO list!\n");} //如果没有任何用户,不商除// p1=head; while(num!=p1->num && p1->next!=NULL) //寻找符合节点// {p2=p1;p1=p1->next;} //p1将指向下一个节点// if(num==p1->num) {if(p1==head) head=p1->next; //恰好最小// else p2->next=p1->next; //在中间,便指向尾接点// printf("delete %ld success !\n",num); //输出商除用户 n=n-1; //商除后接点数// } else printf("%ld not been found !\n",num);//当找不到时// return(head); } void print(struct student * head) {struct student *p; printf("Now %d person!!!\n",n); //当前用户// p=head; if(head!=NULL) //要有用户// do { printf("%ld%ld%s%d:%d-%d:%d\n",p->num,p->class,p->name,p->hour1,p->min1,p->hour2,p->min2); time(p,p->num); p=p->next; //指向下一个节点// }while(p!=NULL); else printf("NO one ! \n"); } void time(struct student *head,long number) {struct student *p=head; int i,a,b; float c; if(p==NULL) {printf("NO list!\n");} else { for(i=0;i<n;i++) { if(p->num==number) break; else p=p->next; } a=(p->hour2)-(p->hour1); b=fabs((p->min2)-(p->min1)); c=(a+b/60.0)*1.0; printf(" %ld Money is :%f\n",number,c); } } void copy(struct student *head) { save(head); } void save(struct student *head) { struct student *p; FILE *fp; int i; p=head; if((fp=fopen("list.c","w"))==NULL) { printf("cannot open list.c\n"); return; } do { if(fwrite(p,sizeof(struct student),1,fp)!=1) printf("list write error\n"); p=p->next; }while(p!=NULL); fclose(fp); }

本文如未解决您的问题请添加抖音号:51dongshi(抖音搜索懂视),直接咨询即可。

上一篇:小孩名字叫什么好

下一篇:

热门图文

  • 设置网页记住用户名密码

    可以在浏览器的设置中将记住账号密码功能打开,这里以谷歌浏览器为例。1、打开浏览器,点击浏览器右上角的更多图标,在展开的菜单中点击“设置”按钮进入设置界面:2、进入设置后,找到“自动填充”分类下的“密码”选项,点击“密码”按钮进入密码界面:3、将“提示保存密码”这一项选中,这时在网站中输入账号密码时浏览器会提示是否记住密码,点击保存即可保存账号密码:

  • Jquery中巧用Ajax的beforeSend方法_jquery

    这次给大家带来beforeSend怎么提高用户体验,beforeSend提高用户体验的注意事项有哪些,下面就是实战案例,一起来看一下。jQuery是经常使用的一个开源js框架,其中的$.ajax请求中有一个beforeSend方法,用于在向服务器发送请求前执行一些动作。$.ajax({ beforeSend:function(){ // handle the beforeSend event }, complete:function(){// handle the complete event

  • js采用concat和sort将N个数组拼接起来的方法_javascript技巧

    一、概述 join( ) ————————数组转字符串 split( ) ———————–字符串转数组 push( ) ———————-将数据添加到数组尾部 pop( ) ———————–数组末尾移除最后一项 shift( ) ———————–删除原数组第一项 unshift( ) ——————–将数据添加到数组头部 sort( ) ————————按升序排列数组项 reverse( ) ——————–反转数组项的顺序 concat( ) ——————–多个数

  • 如何设置窗口颜色和外观

    1.在Windows 搜索框输入[颜色设置]①,然后点选[打开]②。2.在颜色中,您可以选择窗口颜色为浅色、深色或自定义③。您也可以开启或关闭透明效果④。3.在窗口辅色中,您可以选择让Windows自动从我的背景选择辅色⑤,或是自行发挥色彩创意⑥。4.向下滚动后,您可以再选择要显示辅色早宽的区域⑦。(开始菜单、任务茄李栏与控制中心的辅色仅有在色彩设陆纳亮定为深色时才可做勾选)

  • 三星指纹锁如何修改密码

      三星智能锁更换密码步骤如下:x0dx0a  1、按(设定)键(从室内)。x0dx0a  2、短按设定按钮(REG),听到提示音 DING DONG。x0dx0a  3、输入管理员密码(从室外)。x0dx0a  4、按键板亮灯后输入密码并按 * 号按键。x0dx0a  5、输入新密码(从室外) 4-12位,然后按 * 键。x0dx0a  6、再次输入新密码(从室外) 然后按 * 键 完成新密码保存成功。x0dx0a  以上设定只针对三星智能锁正规行货有效,对高仿假货或者水货走私货不能保证有效,

Top