注册 登录
编程论坛 VB6论坛

数据库读取和写入的问题ACCESS

wxflw 发布于 2012-11-16 22:28, 498 次点击
表格如下:
        字段1          字段2          字段3            字段4            字段5
          A              B              C                D      
          A              B              C                D      
          A              B              C                D  
          A              B              C      
          A              B               
如上表格;
操作界面如下:  看附件     

我想在MSHFlexGrid1表格中只显示其中一个字段下的所有记录,比如字段4,字段1和其他的都不显示,这个好像问题不大
最让我伤脑筋的是,我想在字段4中增加一个单元格的值,比如增加一个D变成
        字段1          字段2          字段3            字段4            字段5
          A              B              C                D      
          A              B              C                D      
          A              B              C                D  
          A              B              C                D       <===========这个是我要的效果
          A              B               
这个怎么处理?我知道数据库在增加记录的时候是横向写入的,我只能做到下面这个效果
        字段1          字段2          字段3            字段4            字段5
          A              B              C                D      
          A              B              C                D      
          A              B              C                D  
          A              B              C               
          A              B               
                                                         D
可是这个不是我要的效果啊!我的字段是随时需要增加和减少的
这个怎么整?高手指点一下!有的话给几个代码看看!!先谢了啊!
5 回复
#2
Artless2012-11-17 13:00
以下是引用wxflw在2012-11-16 22:28:26的发言:

表格如下:
        字段1          字段2          字段3            字段4            字段5
          A              B              C                D      
          A              B              C                D      
          A              B              C                D  
          A              B              C      
          A              B               
这个怎么处理?我知道数据库在增加记录的时候是横向写入的,我只能做到下面这个效果
        字段1          字段2          字段3            字段4            字段5
          A              B              C                D      
          A              B              C                D      
          A              B              C                D  
          A              B              C               
          A              B               
                                                         D
可是这个不是我要的效果啊!我的字段是随时需要增加和减少的
这个怎么整?高手指点一下!有的话给几个代码看看!!先谢了啊!

这个效果是如何作的?
#3
wxflw2012-11-17 17:33
就是在数据库增加一条记录,数据库记录的方式是横的算一条,分别显示一条记录的各个分项
难道不是这样的吗?
比如我要记录:性别=男,年龄=20,姓名=李
在数据库中的记录如下:
性别   年龄     姓名
 男     20       李
 女     19       张
如果其中年龄没有是空值那么记录下来的结果是
性别   年龄     姓名
 男     20     李
 女            张
如果我的记录是只有一个姓名,增加记录后就变成
性别   年龄     姓名
 男     20       李
 女     19       张
                 曹
如果我想在第三条记录增加一个年龄变成   
性别   年龄     姓名
 男     20       李
 女     19       张
        12       曹    《==============我需要的效果
这个该怎么做,数据库的字段在程序运行后会改变(增加一个字段或减少一个字段)
比如如下变化
性别   年龄     姓名    成绩
怎么弄?


[ 本帖最后由 wxflw 于 2012-11-17 17:34 编辑 ]
#4
wxflw2012-11-18 19:38
没有哪位师傅有耗电的方法吗?我自己瞎弄了一个,帮看看有什么更好的方法,我的贴出来大家看看!
Private Sub Command3_Click()'这个是添加按钮
Dim A
Dim B
If Text1.Text = "" Then
     MsgBox "请输入名称!", 32, "系统"
     Text1.SetFocus
     Exit Sub
End If
    If cn.State = adStateOpen Then cn.Close
    If rs.State = adStateOpen Then rs.Close
    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = " & App.Path & "\fyxx.mdb;Jet OLEDB:Database Password=88 "
    sql = "select " & Combo1.Text & " from bk "
    rs.Open sql, cn, 3, 3
'=======================
'循环对比是否已有记录
         A = Combo1.Text
         B = Text1.Text
      Do While Not rs.EOF
         If Text1.Text = rs.Fields(A) & "" Then
            A = 1    '设置一个变量标记是否从循环退出
            MsgBox "已有记录!", , "系统提示"
            Exit Do
         End If
            rs.MoveNext
      Loop
      If A = 1 Then   '如果循环退出的
         GoTo XXX      '结束
      End If
'=======================
rs.MoveFirst
'循环到空值将空值改为添加的值
   Do While Not rs.EOF
      If rs.Fields(A) & "" = "" Then
             rs.Fields(A) = B
             rs.Update
             A = 1
             Exit Do
      End If
            rs.MoveNext
  Loop
     If A = 1 Then   '如果存循环退出的
         GoTo XXX     '结束
      End If
 '===============================
 rs.MoveFirst
 '再次循环,如果还没有记录就说明上面没有空值可以改变,那么直接新建
 Do While Not rs.EOF
       If Text1.Text = rs.Fields(A) & "" Then
            A = 1    '设置一个变量标记是否从循环退出
            MsgBox "已有记录!", , "系统提示"
            Exit Do
         End If
            rs.MoveNext
            If rs.EOF Then
               rs.AddNew
               rs.Fields(A) = B
               rs.Update
               A = 1
               MsgBox "添加成功!", , "系统提示"
               Exit Do
            End If
  Loop
     If A = 1 Then   '如果存循环退出的
         GoTo XXX     '结束
      End If
 '===============================
XXX:
    If cn.State = adStateOpen Then cn.Close
    If rs.State = adStateOpen Then rs.Close
    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = " & App.Path & "\fyxx.mdb;Jet OLEDB:Database Password=88 "
    sql = "select " & Combo1.Text & " from bk "
    rs.Open sql, cn, 3, 3
    If rs.RecordCount > 0 Then
       Set MSHFlexGrid1.DataSource = rs
    End If
Text1.Text = ""
Text1.SetFocus
----------------------------------------------------------------------
End SubPrivate Sub Command4_Click()’这个是删除
If Text1.Text = "" Then
  MsgBox "无此记录!", , "系统提示"
  Text1.SetFocus
  Exit Sub
End If
If Text1.Text <> "" Then
    If cn.State = adStateOpen Then cn.Close
    If rs.State = adStateOpen Then rs.Close
    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = " & App.Path & "\fyxx.mdb;Jet OLEDB:Database Password=88 "
    sql = "select " & Combo1.Text & " from bk "
    rs.Open sql, cn, 3, 3
    '=============================
    A = Combo1.Text
    B = Text1.Text
      Do While Not rs.EOF
         If Text1.Text = rs.Fields(A) & "" Then
               myval = MsgBox("确定删除此记录吗?", vbYesNo, "系统")
            If myval = vbYes Then
                 rs.Fields(A) = ""'不直接删除,只是把值变为空,删除的话,一行中的所有记录就会全部删除,因为我只操作单个单元格。
                 rs.Update
            End If
              A = 1 '设置一个变量标记是否从循环退出
              MsgBox "删除成功!", , "系统提示"
            Exit Do
         End If
            rs.MoveNext
            If rs.EOF Then
            A = 1
               MsgBox "没有这条记录!", , "系统提示"
               Exit Do
            End If
      Loop
      If A = 1 Then   '如果存循环退出的
         GoTo XXX      '结束
      End If
    '=============================
   
XXX:
   
    If cn.State = adStateOpen Then cn.Close
    If rs.State = adStateOpen Then rs.Close
    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = " & App.Path & "\fyxx.mdb;Jet OLEDB:Database Password=88 "
    sql = "select " & Combo1.Text & " from bk "
    rs.Open sql, cn, 3, 3
    If rs.RecordCount > 0 Then
       Set MSHFlexGrid1.DataSource = rs
    End If
    Text1.Text = ""
    Text1.SetFocus
End If
End Sub
------------------------------------------
’今天发现个以前没有找到的答案,自己想到了
'循环查询记录集一列中的所有记录加载到combo1中
    If cn.State = adStateOpen Then cn.Close
    If rs.State = adStateOpen Then rs.Close
    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = " & App.Path & "\fyxx.mdb;Jet OLEDB:Database Password=88 "
    sql = "select 区域 from qy "
    rs.Open sql, cn, adOpenForwardOnly, adLockBatchOptimistic
    Do While Not rs.EOF
     If rs.Fields(Combo1.Text) <> "" Then  '刚想到的!刚才在数据库中把值变成空值的时候想到的,以前加载的时候连空格都加载了,
                                           '难看死了,现在加了个判断的空值就不加载了。
         Combo1.AddItem rs.Fields("区域") & ""
     end  if
    rs.MoveNext
    Loop
有好的建议请告诉我以啊!谢谢了
#5
Artless2012-11-18 21:42
以下是引用wxflw在2012-11-18 19:38:16的发言:

没有哪位师傅有耗电的方法吗?我自己瞎弄了一个,帮看看有什么更好的方法,我的贴出来大家看看!
Private Sub Command3_Click()'这个是添加按钮
Dim A
Dim B
If Text1.Text = "" Then
     MsgBox "请输入名称!", 32, "系统"
     Text1.SetFocus
     Exit Sub
End If
    If cn.State = adStateOpen Then cn.Close
    If rs.State = adStateOpen Then rs.Close
    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = " & App.Path & "\fyxx.mdb;Jet OLEDB:Database Password=88 "
    sql = "select " & Combo1.Text & " from bk "
    rs.Open sql, cn, 3, 3
'=======================
'循环对比是否已有记录
         A = Combo1.Text
         B = Text1.Text
      Do While Not rs.EOF
         If Text1.Text = rs.Fields(A) & "" Then
            A = 1    '设置一个变量标记是否从循环退出
            MsgBox "已有记录!", , "系统提示"
            Exit Do
         End If
            rs.MoveNext
      Loop
      If A = 1 Then   '如果循环退出的
         GoTo XXX      '结束
      End If
'=======================
rs.MoveFirst
'循环到空值将空值改为添加的值
   Do While Not rs.EOF
      If rs.Fields(A) & "" = "" Then
             rs.Fields(A) = B
             rs.Update
             A = 1
             Exit Do
      End If
            rs.MoveNext
  Loop
     If A = 1 Then   '如果存循环退出的
         GoTo XXX     '结束
      End If
 '===============================
 rs.MoveFirst
 '再次循环,如果还没有记录就说明上面没有空值可以改变,那么直接新建
 Do While Not rs.EOF
       If Text1.Text = rs.Fields(A) & "" Then
            A = 1    '设置一个变量标记是否从循环退出
            MsgBox "已有记录!", , "系统提示"
            Exit Do
         End If
            rs.MoveNext
            If rs.EOF Then
               rs.AddNew
               rs.Fields(A) = B
               rs.Update
               A = 1
               MsgBox "添加成功!", , "系统提示"
               Exit Do
            End If
  Loop
     If A = 1 Then   '如果存循环退出的
         GoTo XXX     '结束
      End If
 '===============================
XXX:
    If cn.State = adStateOpen Then cn.Close
    If rs.State = adStateOpen Then rs.Close
    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = " & App.Path & "\fyxx.mdb;Jet OLEDB:Database Password=88 "
    sql = "select " & Combo1.Text & " from bk "
    rs.Open sql, cn, 3, 3
    If rs.RecordCount > 0 Then
       Set MSHFlexGrid1.DataSource = rs
    End If
Text1.Text = ""
Text1.SetFocus
----------------------------------------------------------------------
End SubPrivate Sub Command4_Click()’这个是删除
If Text1.Text = "" Then
  MsgBox "无此记录!", , "系统提示"
  Text1.SetFocus
  Exit Sub
End If
If Text1.Text <> "" Then
    If cn.State = adStateOpen Then cn.Close
    If rs.State = adStateOpen Then rs.Close
    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = " & App.Path & "\fyxx.mdb;Jet OLEDB:Database Password=88 "
    sql = "select " & Combo1.Text & " from bk "
    rs.Open sql, cn, 3, 3
    '=============================
    A = Combo1.Text
    B = Text1.Text
      Do While Not rs.EOF
         If Text1.Text = rs.Fields(A) & "" Then
               myval = MsgBox("确定删除此记录吗?", vbYesNo, "系统")
            If myval = vbYes Then
                 rs.Fields(A) = ""'不直接删除,只是把值变为空,删除的话,一行中的所有记录就会全部删除,因为我只操作单个单元格。
                 rs.Update
            End If
              A = 1 '设置一个变量标记是否从循环退出
              MsgBox "删除成功!", , "系统提示"
            Exit Do
         End If
            rs.MoveNext
            If rs.EOF Then
            A = 1
               MsgBox "没有这条记录!", , "系统提示"
               Exit Do
            End If
      Loop
      If A = 1 Then   '如果存循环退出的
         GoTo XXX      '结束
      End If
    '=============================
   
XXX:
   
    If cn.State = adStateOpen Then cn.Close
    If rs.State = adStateOpen Then rs.Close
    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = " & App.Path & "\fyxx.mdb;Jet OLEDB:Database Password=88 "
    sql = "select " & Combo1.Text & " from bk "
    rs.Open sql, cn, 3, 3
    If rs.RecordCount > 0 Then
       Set MSHFlexGrid1.DataSource = rs
    End If
    Text1.Text = ""
    Text1.SetFocus
End If
End Sub
------------------------------------------
’今天发现个以前没有找到的答案,自己想到了
'循环查询记录集一列中的所有记录加载到combo1中
    If cn.State = adStateOpen Then cn.Close
    If rs.State = adStateOpen Then rs.Close
    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = " & App.Path & "\fyxx.mdb;Jet OLEDB:Database Password=88 "
    sql = "select 区域 from qy "
    rs.Open sql, cn, adOpenForwardOnly, adLockBatchOptimistic
    Do While Not rs.EOF
     If rs.Fields(Combo1.Text) <> "" Then  '刚想到的!刚才在数据库中把值变成空值的时候想到的,以前加载的时候连空格都加载了,
                                           '难看死了,现在加了个判断的空值就不加载了。
         Combo1.AddItem rs.Fields("区域") & ""
     end  if
    rs.MoveNext
    Loop
有好的建议请告诉我以啊!谢谢了

这代码完成你想要的吗?
#6
wxflw2012-11-19 07:14
是啊!可以满足我的需要了!有同类的好点的代码吗?持续关注啊!
1