各位大侠救急!关于数据库显示相关问题!

KKman 2003-10-15 04:37:35
有两个控件List1和DataGrid1,List1里显示的是多个表的名称,当双击List1里的表名时DataGrid1对应显示表的内容!(已经实现)问题:每次双击表名的时候DataGrid1里的数据都会刷新并添加新的内容,我不想覆盖原有的内容,而是要在原来的数据后面追加,应该怎么做?
很急,请懂的人高抬贵手打几个字帮帮忙!
...全文
44 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
amongwang 2003-10-29
  • 打赏
  • 举报
回复
如果每个表要显示的列数相同的话,可用UNOIN ALL 连接
sword281 2003-10-29
  • 打赏
  • 举报
回复
你需要在数据库中新建一个表名叫temp的表,它的结构与你要选择的表的结构相同
建相同结构用select * into 建表名 from 相同结构表名 where 1=2
dim existtable as boolean
existable=false
dim rstemp as new adodb.recordset
set rstemp=cn.openschema(adschematable)

do until rstemp.eof
if rstemp!table_name ="temp" then
existtable=true
exit do
endif
rstemp.movenext
loop
if existtable=false then
sql="select * into temp from " & List1.List(List2.ListIndex) & "where 1=2"
cnn1.execut sql
endif

将以上代码加在Set rscourse = New ADODB.Recordset 上面即可



KKman 2003-10-22
  • 打赏
  • 举报
回复
Set cnn1 = New ADODB.Connection
cnn1.Open "Provider=Microsoft.Jet.OLEDB.3.51;Data Source=" & App.Path & "\gsm2.mdb;"
Set rscourse = New ADODB.Recordset
If rscourse.State = adStateOpen Then rs.Close
If List1.List(List2.ListIndex) <> "" Then
Dim sql As String
sql = "insert into temp select * from " & List1.List(List2.ListIndex)
cnn1.Execute sql
rscourse.Open "temp", cnn1, adOpenDynamic, adLockPessimistic, adCmdTable
Set DataGrid1.DataSource = rs
DataGrid1.Refresh
End If
出错:找不到输出表 'temp'
请帮忙看看
sword281 2003-10-21
  • 打赏
  • 举报
回复
可用union all
只要你的所有表名的域名相同
union all 是连接所有的表
用第一种同样能实现

Private Sub List1_DblClick()
If rs.State = adStateOpen Then rs.Close
If List1.List(List1.ListIndex) <> "" Then
Dim sql As String
sql = "insert into temp select * from " & List1.List(List1.ListIndex)
cn.Execute sql
rs.Open "temp", cn, adOpenDynamic, adLockPessimistic, adCmdTable
Set DataGrid1.DataSource = rs
DataGrid1.Refresh

End If


其中temp为一空表它的结构和你选择表的结构一样
第二种已通过测试
KKman 2003-10-21
  • 打赏
  • 举报
回复
谢谢sword281() 回答
第一种方法不能用,应为Union只适用于2个表的记录集数目相等的情况!第二种方法能不能写的具体点,insert into temp select * from aaa在可视化数据管理器里编译出错!
sword281 2003-10-20
  • 打赏
  • 举报
回复
要用一变量rs,
用union all连接你所有选择的表名
第一种方法temp union all 选择的表名

第二种方法在list1_dbclick事件中用sql语句insert into temp select * from 选择的表名
其中temp为一表名(在数据库中的空表),用rs.open方式打开,赋给
datagrid1.datasource

sword281 2003-10-20
  • 打赏
  • 举报
回复
在这条语句Set DataGrid1.DataSource = rscourse下加一条
datagrid1.refresh
KKman 2003-10-19
  • 打赏
  • 举报
回复
谢谢不甜,请问这个函数能用在DataGrid1上面吗?我写打印程序是用DataGrid1的,如果用flexgrid的话打印要重写!还有我想请教一个问题,VB里不是有个曲线图控件吗?但我觉得不太好用,数据多了以后X轴上显示的字都看不见了,这个控件的打印属性是什么,我比较笨MSDN没查到!或者您能推荐几个做曲线图的外部控件吗?谢谢!
KKman 2003-10-17
  • 打赏
  • 举报
回复
以下是我出现问题的代码!
Private Sub Form_Load()
Dim con As ADODB.Connection
Dim rs As ADODB.Recordset
Set con = New ADODB.Connection
con.Provider = "Microsoft.Jet.OLEDB.3.51"
con.Open App.Path & "\gsm2.mdb"
Set rs = New ADODB.Recordset
rs.Open "SELECT mobile FROM user", con, adOpenKeyset, adLockPessimistic
Do While rs.EOF = False
If rs.Fields("mobile") Like "###########" <> True Then
rs.MoveNext
Else
List1.AddItem rs.Fields("mobile")
rs.MoveNext
End If
Loop
End Sub

Private Sub List1_DblClick()
Set cnn1 = New ADODB.Connection
cnn1.Open "Provider=Microsoft.Jet.OLEDB.3.51;Data Source=" & App.Path & "\gsm2.mdb;"
Set rscourse = New ADODB.Recordset
If List1.List(List1.ListIndex) <> "" Then
SQL = "SELECT * FROM " & List1.List(List1.ListIndex)
End If

rscourse.Open SQL, cnn1, adOpenStatic, adLockOptimistic
Set DataGrid1.DataSource = rscourse
End Sub
我已经用代码连接数据库了,问题还是没解决,不知道问题出在哪里?
我是个初学者,请大家不要见笑!谢谢各位帮忙!
golden24kcn 2003-10-17
  • 打赏
  • 举报
回复
还没有搞定吗?呵呵

Public Sub FillGrid(FormatString As String, SQL As String, Grid As MSFlexGrid, GridCol As Integer)

Dim Rst As ADODB.Recordset
Dim I As Integer, J As Integer

On Error GoTo er
Set Rst = New ADODB.Recordset
Rst.CursorLocation = adUseClient
Rst.Open SQL, Conn, adOpenKeyset, adLockReadOnly, adCmdText

''''Grid.Clear 我本来是写这个函数,这句是打开的
'''' 不过你想让前一结果不清除,那么它就没有用了
Grid.Rows = 1
Grid.Cols = GridCol
Grid.FormatString = FormatString
For I = 1 To Rst.RecordCount
Grid.Rows = Grid.Rows + 1
For J = 1 To GridCol
Grid.TextMatrix(Grid.Rows - 1, J - 1) = Rst.Fields(J - 1) & ""
Next
Rst.MoveNext
Next

Rst.Close
Set Rst = Nothing
SQL = ""
If Grid.Rows = 1 Then MsgBox "您所指定的查询结果为空!", 64
Exit Sub

呵呵,想通了吗?用flexGrid吧,比datagrid强多了,据我所知,很多人flexgrid都不喜欢用了,都用vsflexgrid了,呵呵,我也落伍了
KKman 2003-10-17
  • 打赏
  • 举报
回复
有用过DataGrid1的吗?应为我以前做过打印现在用在这个程序上,如果改成其他控件要重写打印很烦!谢谢帮忙!
liaorui 2003-10-17
  • 打赏
  • 举报
回复
DATAGRID我没做过,不过LISTVIEW我做过。

每次都动态的去添加列,然后把得到的记录集的内容添加到LISTVIEW后面就可以了
KKman 2003-10-17
  • 打赏
  • 举报
回复
楼上大哥,怎么追加啊?因该写什么代码?Set DataGrid1.DataSource = rscourse这句不写数据不会显示的啊!
yoki 2003-10-17
  • 打赏
  • 举报
回复
Set DataGrid1.DataSource = rscourse
这样肯定不行啊
必须在后面追加

xz1980 2003-10-15
  • 打赏
  • 举报
回复
使用DataGrid1.Columns.Item
j4sxw 2003-10-15
  • 打赏
  • 举报
回复
用代码实现
j4sxw 2003-10-15
  • 打赏
  • 举报
回复
我用贯了msflexgrid,觉得不错。方便
haipingma 2003-10-15
  • 打赏
  • 举报
回复
綁定除非用union all
用MSHFlexgrid來循環賦值
golden24kcn 2003-10-15
  • 打赏
  • 举报
回复
那么就不要用datagrid了,用flexgrid什么的吧
守城小轩 2003-10-15
  • 打赏
  • 举报
回复
编程实现,不可以用绑定
加载更多回复(1)

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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