一个数据库查询与DataGrid控件的综合问题,请大家帮忙

lpy79330 2003-03-29 01:25:20
我现在在程序也想实现的是这样一个功能:
在窗体上我放了一个DataGrid控件,而且当我这个窗体一出现它就会自动显示数据库中的所有数据,而在DataGrid控件下面有三个按钮 <<修改数据>> <<保存新数据>> <<删除数据>>,<<修改数据>>的功能是让用户可以在DataGrid控件进行编辑就是将DataGrid控件的某些属性设置成真了,<<保存新数据>>是当在DataGrid控件里修改成功后进行保存,<<删除数据>>是当用户在DataGrid控件任选一行都可以删除,现在这些功能在窗体登陆后都可以正常的操作没有错误,但我在DataGrid控件上面还有三个查询条件,第一个是根据编号查询,第二个是姓名,第三个是 公司 ,如果数据库中的数据很多的话用户不可能在DataGrid控件中一个一个的找,,所以设置了查询以便用户快速找出要修改及删除的数据,并且将查找到的结果显示在DataGrid控件中进行操作。
而现在遇到的问题是:
通过查找的到的数据在DataGrid控件中无法实现上面想做的操作了。
就是说现在查询可以找到要修改及删除的数据并且能够显示在DataGrid控件中,但是这样以来当我在DataGrid控件中进行上面说的修改操作时,行不通了,无法将修改后的数据保存到数据库中,而通过查询得到的数据对它进行删除时删除掉的却是数据库中的第一条记录
这是为什么???我现在怀疑我的ADO用的有问题但是不知道解决的原因请大家帮我解决一下,这类问题已经捆饶我很久了,下面我会将我的那几个 按钮中的代码帖出来请大家帮我解决一下,谢谢大家了,分不够在加
<<搜索>>中的代码:
Private Sub cmd_cdok_Click()
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim sql As String
Set cn = New ADODB.Connection
cn.Open "Provider=MSDASQL.1;Persist Security Info=False;Data Source=CY"
If cd_opt_id.Value = False And cd_opt_name.Value = False And cd_opt_company.Value = False Then
MsgBox "你是不是玩我啊?什么不条件不选怎么得到数据啊,给点面子选一个,谢谢合作~!~", vbOKOnly + vbExclamation, "注意"
Exit Sub
End If
If cd_opt_id.Value = True Then
If Trim(cd_txt_id.Text) = "" Then
MsgBox "不写编号怎么查询啊,请写好编号~!~", vbOKOnly + vbExclamation, "注意"
cd_txt_id.SetFocus
Else
sql = "select*from Cinformation where 编号='" & cd_txt_id.Text & "'"
Set rs = New ADODB.Recordset
rs.Open sql, cn, adOpenKeyset, adLockOptimistic
If rs.EOF Then
MsgBox "对不起,很遗憾没有您要查询的数据~!~", vbOKOnly + vbExclamation, "注意"
cd_txt_id.Text = ""
cd_txt_id.SetFocus
Exit Sub
Else
Set DataGrid1.DataSource = rs
End If
End If
End If
End Sub

<<修改数据>>中的代码:
Private Sub cmd_cdchange_Click()
With DataGrid1
.AllowArrows = True
.AllowDelete = True
.AllowUpdate = True
End With
End Sub

<<保存新数据>>中的代码:
Private Sub cmd_cdsavenew_Click()
ado_information.Recordset.Update
ado_information.Refresh
With DataGrid1
.AllowArrows = False
.AllowDelete = False
.AllowRowSizing = True
.AllowUpdate = False
End With
End Sub

<<删除数据>>中的代码:
Private Sub cmd_seldel_go_Click()
Dim varBmk As Variant
For Each varBmk In frm_main.DataGrid1.SelBookmarks
frm_main.ado_information.Recordset.Bookmark = varBmk
frm_main.ado_information.Recordset.Delete
frm_main.ado_information.Refresh
Next
Me.Hide
End Sub



...全文
32 点赞 收藏 19
写回复
19 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
IwantFlay 2003-03-31
up!
回复
mouseanAnya 2003-03-31
SORRY! 我把datagrid控件的属性跟ADODC控件的属性弄混了! 抱歉!

DataGrid1控件没有 update这个属性.

现在问题应该解决了吧?! 好多高手都来了。 :)

如果还需要帮助,请发短消息给我!
回复
_131_ 2003-03-31
没有收到,重新发!
新地址发短信给你了!
回复
_131_ 2003-03-31
看来楼主喜欢到处发短信啊!
呵呵!
只有,看了一下你的描述,好像是datagrid的修改、删除、插入无法实现了!
1、ado_information.CursorLocation =adUseClient
2、确定datagrid的相应的权限已经打开(allowdelete/allowupdate/allownew)
3、如果可能把你的这一部分的程序发到偶的邮箱来,偶看看到底怎么回事情。(源代码、数据库)
最好带个简单的说明
zixikan@21cn.com
回复
lxcc 2003-03-31
up
回复
ganzhiruogy 2003-03-31
不好意思,才看到你的求助短消息,来晚了,希望你的问题已经解决!
回复
chenyu5188 2003-03-31
Set cd_txt_id.DataSource = ado_information
cd_txt_id.DataField = "编号"
nsql$ = "select * from Cinformation where 编号='" & trim(cd_txt_id.Text) & "'"
nsql$ = nsql$ & "= '" & trim(cd_txt_id.Text) & "'"
ado_information.RecordSource = nsql$
ado_information.refresh
Set DataGrid1.DataSource = ado_information
DataGrid1.Refresh
End If

改过了,你再试试。
回复
chenyu5188 2003-03-31
Set cd_txt_id.DataSource = ado_information
cd_txt_id.DataField = "编号"
nsql$ = "select * from Cinformation where 编号='" & trim(cd_txt_id.Text) & "'"
nsql$ = nsql$ & "= '" & trim(cd_txt_id.Text) & "'"'这一句多余了,不要
ado_information.RecordSource = nsql$
ado_information.refresh
Set DataGrid1.DataSource = ado_information
DataGrid1.Refresh
End If
回复
lpy79330 2003-03-30
Set cd_txt_id.DataSource = ado_information
cd_txt_id.DataField = "编号"
nsql$ = "select*from Cinformation where 编号='" & cd_txt_id.Text & "'"
nsql$ = nsql$ + "= '" + cd_txt_id.Text + "'"
ado_information.RecordSource = nsql$
Set DataGrid1.DataSource = ado_information
DataGrid1.Refresh
ado_information.Refresh 《------最后的错误指向这里
End If
这是我修改后的<<搜索>>中的代码,我把文本框绑定到ADO(ado_information)
但为什么提示我:
[Microsoft][0DBC SQL Server Driver][SQL Server]在关键字'select'附近由语法错误
当我点确定后提示的是:
对象 'Refresh' 的方法 'IAdodc' 失败
回复
dragon525 2003-03-30
不好意思,才看到你的求助短消息,来晚了。

你代码中的
ado_information是什么?是个ADODC控件吧?
可是你又定义一个数据集rs干嘛呢?
绑定表格控件的是rs。(你代码中的这句Set DataGrid1.DataSource = rs)
而在添加,修改,删除,中操作的确是ado_information(Adodc控件)
你这不是自己给自己添麻烦吗?
你要么用adodc控件,设置好数据源和记录集帮定表格DataGrid
要么定义rs,具体代码可参考 gxhwq(blueboy) 所写!

最后,祝你好运!
回复
czjw 2003-03-30
楼上的我也要一个
czjw@china.com
回复
ziping 2003-03-30
楼上的我要一个
ziping-1112@163.com
回复
guofengx 2003-03-30
程序已发到你邮箱
回复
dragon525 2003-03-30
同意楼上!
回复
donglw 2003-03-30
在ado_information.RecordSource = nsql$处设个断点,看下nsql$的值是否正确
至少看起来select * from 那没空格似的

回复
donglw 2003-03-29
你的ado_information是什么?看起来像是个adodc控件吧,但在你的代码里没定义也没看到关联性,
但如果你的DATAGRID原来是联在这个ADODC上的话,现在你用Set DataGrid1.DataSource = rs
改变了数据源,但在添加等过程中还在调用ado_information?

看的不全,猜的
回复
gxhwq 2003-03-29
我帮你解决:
1、把以下两问作为全窗体的声明:
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset

2、查询。。。。。。。
 Set DataGrid1.DataSource = rs

3、<<修改数据>> :
With DataGrid1
  .AllowArrows = True
  .AllowDelete = True
  .AllowUpdate = True
End With

4、<<保存新数据>>:
  rs.Update
  
  With DataGrid1
    .AllowArrows = False
    .AllowDelete = False
    .AllowRowSizing = True
    .AllowUpdate = False
  End With
  DataGrid1.Refresh


5、<<删除数据>>、
rs.movefirst
  do while not rs.eof
rs.delete
rs.movenext
loop
rs.requery

6、你试试吧,我只是凭空写的。

回复
mouseanAnya 2003-03-29
<<修改数据>>中的代码:
Private Sub cmd_cdchange_Click()
With DataGrid1
.AllowArrows = True
.AllowDelete = True
.AllowUpdate = True
.update '既然允许UPDATE了,就要进行UPDATE,才能把数据更新到库中。
End With
End Sub
回复
mouseanAnya 2003-03-29
描述的可真够长的,简单说来就是,窗体初始化时显示所有数据,之后用户查询则显示符合条件的记录,对吧?!

那么,你两次显示的数据是不是格式都是一样的?
回复
相关推荐
发帖

1187

社区成员

VB 数据库(包含打印,安装,报表)
申请成为版主
帖子事件
创建了帖子
2003-03-29 01:25
社区公告
暂无公告