vbnet与access连接的问题

wingtsc 2008-12-20 10:58:50
我们要做一个酒店管理系统,vbnet加access,我负责的是退房功能,现在窗体的设计是:左边用textbox列出六个项:姓名、入住日期、房价、房号、退订日期、总额,先用两个combobox列出查询条件,再用button查询一条记录出来,然后button删除该条记录,弹出“删除成功”对话框提示成功;然后右边有一个datagrid,可以列出房间表的所有项,当删除成功后,按下面的更新按钮,可以看到datagrid里少了一条记录。
我的数据库有两个表:房间表(房号、类型、房价、状态),客人信息表(姓名、性别、房号、类型、证件类型、证件号码、押金、人数、入住日期、退房日期、状态)。
数据绑定是用vs2005里的可视化方法绑定的,先拉一个oledbconnection,然后一个oledbdataadapt,生成数据集dataset1。。所以这些就不用在代码里写了。。
我写了很多次代码都不成功,目前逻辑非常混乱,而这个作业两天之后就要交了,所以在这里求助~~
之前我是用sql2005绑定数据的,已成功运行,但老师临时又说一定要用access。。。我就直接套用sql时的代码,只是将sql都改为oledb,但在这一段代码中:
Private Sub Form_roomexit_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
OleDbDataAdapter1.SelectCommand.CommandText = "SELECT 房号, 类型, 房价 FROM 房间表 where 状态 ='营业中' "
OleDbDataAdapter1.Fill(DataSet31, "房间表") '充填数据)
OleDbDataAdapter2.SelectCommand.CommandText = "SELECT 姓名, 入住日期 FROM 客人信息表 where 房号 ='" & Txtroomnumber.Text & "'"
OleDbDataAdapter2.Fill(DataSet31, "客人信息表")
End Sub
最后一句总是提示标准表达式中数据类型不匹配。。。但之前在sql里不会这样的啊,这是为什么呢?难道是oledb的dataset不能用两次吗?
在下面的回复里我将贴出我的完整代码,希望高手可以帮我修改一下,谢谢!
...全文
512 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
d18255105447 2011-11-24
  • 打赏
  • 举报
回复
你好!我也是从图书馆借了本书,做的夜视这个系统,出现了数据库与代码连接的问题?你能给我指导指导吗?
geryxiong 2009-01-04
  • 打赏
  • 举报
回复
看书就可以解决了,太多了。懒得看!
nijianchun 2009-01-02
  • 打赏
  • 举报
回复
UP
wzckr 2009-01-02
  • 打赏
  • 举报
回复
楼主这样试一下可不可以,先用DataTable来得到记录,再加到DataSet上面

Private Sub Form_roomexit_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim d_Table As DataTable
Table =new DataTable
OleDbDataAdapter1.SelectCommand.CommandText = "SELECT 房号, 类型, 房价 FROM 房间表 where 状态 ='营业中' "
OleDbDataAdapter1.Fill(Table, "房间表") '充填数据)
DataSet31.Tables.add(d_Table)

Table =new DataTable
OleDbDataAdapter2.SelectCommand.CommandText = "SELECT 姓名, 入住日期 FROM 客人信息表 where 房号 ='" & Txtroomnumber.Text & "'"
OleDbDataAdapter2.Fill(Table, "客人信息表")
DataSet31.Tables.add(d_Table)
End Sub
koutx 2008-12-22
  • 打赏
  • 举报
回复
数据绑定是用vs2005里的可视化方法绑定的,先拉一个oledbconnection,然后一个oledbdataadapt,生成数据集dataset1。
OleDbDataAdapter1.Fill(DataSet31, ......


检查一下Fill中的Dataset名、Adapter名与你拉设生成的窗体下方的Dataset名和Adapter名一样吗?另外,你可右键点你生成的Adaptert选预览数据看一下连接数据正常与否。
forever_zw 2008-12-22
  • 打赏
  • 举报
回复
同上
xiaojin0710 2008-12-22
  • 打赏
  • 举报
回复
请问下楼主:“房号”是不是设置的是整型啊,如果是的话,是不用加单引号的啊
ijwsoft 2008-12-22
  • 打赏
  • 举报
回复
去图书馆借对应的书,先看后操作,就连成功了的
害怕飞的鸟 2008-12-22
  • 打赏
  • 举报
回复
所谓的数据类型不匹配,一般情况肯定是SQL语句里数字类型的字段值上加上了单引号,或者字符类型的字段忘了单引号所导致的,检查一下你SQL 和数据库字段的类型。
yuchong1984 2008-12-22
  • 打赏
  • 举报
回复
up
mxmkeep 2008-12-21
  • 打赏
  • 举报
回复
看到楼主写的东西,就知道跟我一样,是个初学者。
但楼主贴的东西太多了,大部分人都没兴趣看完
建议楼主想清楚问题再简洁的贴下

vb.net链接access蛮简单的,楼主对着书做,肯定能弄出来
除法你上面有写错的地方,注意空格和标点符号
lemonzx2008 2008-12-21
  • 打赏
  • 举报
回复
重新连接了吗?要不就新建一个项目从头来试下了
wingtsc 2008-12-20
  • 打赏
  • 举报
回复
自己顶~我做得快崩溃了。。
wingtsc 2008-12-20
  • 打赏
  • 举报
回复
好,谢谢你啊!
主要是问OleDbDataAdapter2.Fill(DataSet31, "客人信息表")
这一句总是提示标准表达式中数据类型不匹配。。。
请问可以怎么修改?是oledb的dataset不能用两次吗?这连接sql时是不会有问题的啊。
floadcloud 2008-12-20
  • 打赏
  • 举报
回复
东西太多,建议问题写明了一点,帮你顶一下
wingtsc 2008-12-20
  • 打赏
  • 举报
回复
代码对应的窗体设计:左边用textbox列出六个项:姓名、入住日期、房价、房号、退订日期、总额,右边一个datagrid,显示房间表信息,下面button是退房结算。(很想传图的,但不知怎么传)
(这是我套用sql代码时的设计,上面说的用查询的方法删除是我想修改成的设计,但现在想想,还是用回我这个设计吧,要是问题可以排除的话)

Imports System.Data
Imports System.Data.SqlClient
Public Class Form1
Inherits System.Windows.Forms.Form
Private Sub account()
Try '判断是哪一种类型的房间
If DataSet31.房间表.Rows(DataGrid1.CurrentRowIndex).Item("类型") = "钟点房" Then
Dim i '如果是"钟点房"计算两个日期差,以小时为单位
i = Microsoft.VisualBasic.DateDiff(DateInterval.Hour, DataSet31.客人信息表.Rows(0).Item("入住日期"), Now())
TxtSum.Text = Val(TxtRent.Text) * i '计算金额
Else
Dim i '为其他类型的房间计算两个日期差,以天数为单位
i = Microsoft.VisualBasic.DateDiff(DateInterval.Day, DataSet31.客人信息表.Rows(0).Item("入住日期"), Now())
TxtSum.Text = Val(TxtRent.Text) * i '计算金额
End If
Catch
End Try
End Sub


Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
OleDbDataAdapter1.SelectCommand.CommandText = "SELECT 房号, 类型, 房价 FROM 房间表 where 状态 ='营业中' "
OleDbDataAdapter1.Fill(DataSet31, "房间表") '充填数据)
OleDbDataAdapter2.SelectCommand.CommandText = "SELECT 姓名, 入住日期 FROM 客人信息表 where 房号 ='" & Txtroomnumber.Text & "'"
OleDbDataAdapter2.Fill(DataSet31, "客人信息表") (问题所在)
Txtexitdate.Text = Now() '把当前的时间在用文本框显示
Me.account() '调用account()过程计算金额
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Try
If MsgBox("真的要退房吗?", MsgBoxStyle.YesNo) = MsgBoxResult.No Then
Exit Sub
End If
'把房间的状态改为"空闲"
Dim comstr1 As String = "update 房间表 set 状态 = '空闲' where 房号 = '" & DataSet31.房间表.Rows(DataGrid1.CurrentRowIndex).Item("房号") & "'"
'更新客人的信息状态
Dim comstr2 As String = "update 客人信息表 set 状态 = '退房',退房日期 = '" & Now() & "' where 入住日期 = '" & DataSet31.客人信息表.Rows(0).Item("入住日期") & "'"
Dim oledbcom1 '建立命令对外象
Dim oledbcom2
OleDbConnection1.Open()
oledbcom1.ExecuteNonQuery() '执行命令
oledbcom2.ExecuteNonQuery()
DataSet31.房间表.Rows(DataGrid1.CurrentRowIndex).Delete() '把退房的记录删除
Catch
Finally
OleDbConnection1.Close()
End Try
End Sub

Private Sub DataGrid1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles DataGrid1.MouseUp
DataSet31.客人信息表.Clear() '清空数据表的数据,以便选择房间时同时把住在此房间的客人信息查出来
OleDbDataAdapter2.SelectCommand.CommandText = "SELECT 姓名, 入住日期 FROM 客人信息表 where 房号 ='" & Txtroomnumber.Text & "'"
'OleDbDataAdapter2.Fill(DataSet31, "客人信息表")
Me.account() '调用account()过程计算金额
End Sub
End Class
wingtsc 2008-12-20
  • 打赏
  • 举报
回复
标准表达式中数据类型不匹配 这个问题连access时原来是很常见的,刚刚百度了下,很多人都有这个问题,不过还是没什么可行解决办法。。。
"SELECT 姓名, 入住日期 FROM 客人信息表 where 房号 ='" & Txtroomnumber.Text & "'" ,试过将中间的单引号去掉,是不会提示错误了,但是这句话在运行时完全失去了作用,textbox中对应的姓名和入住日期是空的,这更要命。。
很多在sql里不会出现的问题,在access里就出现了,天啊!!我们老师干嘛要我们一定要连接access啊,要是sql一个星期前就搞定了。。。
wingtsc 2008-12-20
  • 打赏
  • 举报
回复
对的啊,连接sql时是没问题的~
_NET2004 2008-12-20
  • 打赏
  • 举报
回复
"SELECT 姓名, 入住日期 FROM 客人信息表 where 房号 ='" & Txtroomnumber.Text & "'"

看一下你的这个SQL语句是否正确?

16,556

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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