【问题标题】:Import specific row from access database从访问数据库导入特定行
【发布时间】:2014-03-24 10:10:27
【问题描述】:

目前我有 5 个文本框,我希望从 Access 数据库中一列的前 5 行填充它们。

我尝试了几个不同的 SQL 查询,但都没有成功。

这是我第一个盒子的工作代码:

Try
    Dim con As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Test\Response.mdb;")
    Dim cmd As New OleDbCommand
    con.Open()
    cmd.Connection = con
    cmd.CommandText = "SELECT * FROM question"
    cmd.Prepare()
    Dim Trace = cmd.ExecuteReader
    With Trace
        .Read()
        q1txt.Text = .Item("questiontext")
        .Close()
    End With
Catch
End Try

该代码工作得很好,但是当我尝试对此进行扩展以包含下 4 个时,我无法让它工作或找到任何可以帮助我的信息。

我尝试编写一个不同的查询来使用

填充每个框
select * from question limit n-1, 1

select top 1 field from question

在所有抛出一个或另一个异常的其他几十个中。

有谁知道改变我的代码的方法,以便我可以有效地告诉它:

SELECT TOP 5 FROM question
q1txt.Text = .item("ROW1")
q2txt.Text = .item("ROW2")
q3txt.Text = .item("ROW3")
q4txt.Text = .item("ROW4")
q5txt.Text = .item("ROW5")

感谢史蒂夫帮助我解决这个问题!我现在使用的代码在这里:

Dim boxes = {q1txt, q2txt, q3txt, q4txt, q5txt}
Dim index As Integer = 0
Using con = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Test\Response.mdb;")
    Using cmd = New OleDbCommand("SELECT TOP 5 * FROM question", con)
        con.Open()
        Using Trace = cmd.ExecuteReader
            For Each item In boxes
                With Trace
                    .Read()
                    boxes(index).Text = .Item("questiontext")
                    index += 1
                End With
            Next
        End Using
    End Using
End Using

【问题讨论】:

    标签: sql vb.net visual-studio-2010 textbox


    【解决方案1】:

    Access 没有像 MySql 那样的 LIMIT 关键字。您可以在某些列上 ORDER BY 并获取 TOP 5 列。我不知道您是否有任何类型的列可以排序,所以我显示的代码没有 ORDER BY 子句,而是按照数据库给它们的顺序获取前 5 条记录

    Dim boxes = new TextBox() {q1Text, q2Text, q3Text, q4Text, q5Text }
    
    Dim index As Integer = 0
    Using con = New OleDbConnection(".....")
    Using cmd = New OleDbCommand("SELECT TOP 5 * FROM question", con)
        con.Open()
        Using Trace = cmd.ExecuteReader
           While Trace.Read()
             boxes(index).Text = Trace.Item("questiontext")
             index += 1
           End While
        End Using
    End Using
    End Using
    

    在每次读取时,您都有不同的记录放置在不同的文本框中,因此我构建了一个文本框数组并使用索引来填充正确的框

    另请注意,我在一次性物品周围添加了使用声明,以确保它们正确关闭和处置

    【讨论】:

    • 谢谢!我不知道你能做到这一点。但是它没有用......它只填充第一个框。我已经通过在 .Read() 之后添加“For Each item in boxes”来编辑代码,但这会用顶部字段填充所有 5 个。
    • 啊,成功了!再次感谢你。将在上面发布工作代码。
    • 已修复,忘记循环阅读器
    • 该代码现在完美运行,谢谢。我可以删除我的 For Each。非常感谢!
    • 好吧,我应该警告你,这段代码确实被锁定在要检索的控件数和行数上。 (如果更改 TOP X 值,请不要忘记向数组添加新控件)。如果您需要更改,我建议使用更合适的控件,例如 DataGridView
    猜你喜欢
    • 2016-09-05
    • 1970-01-01
    • 1970-01-01
    • 2012-06-16
    • 1970-01-01
    • 2013-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多