Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 疯狂随机MS访问查询_Vb.net - Fatal编程技术网

Vb.net 疯狂随机MS访问查询

Vb.net 疯狂随机MS访问查询,vb.net,Vb.net,我真的累坏了。我有这个查询,它在我的Sql server数据库中非常有效,但是当我把它放在我的MS Access数据库中时,我有一个错误(索引(零基)必须大于或等于零,并且小于参数列表的大小)。 Sql server查询: Dim sql As String = String.Format(" SELECT TOP {0} ID1,Team1,Team2,Team3 FROM (SELECT ROW_NUMBER() OVER(ORDER BY newid() ASC) AS F1, ID1,

我真的累坏了。我有这个查询,它在我的Sql server数据库中非常有效,但是当我把它放在我的MS Access数据库中时,我有一个错误(索引(零基)必须大于或等于零,并且小于参数列表的大小)。 Sql server查询:

Dim sql As String = String.Format(" SELECT TOP {0} ID1,Team1,Team2,Team3 FROM (SELECT ROW_NUMBER() OVER(ORDER BY newid() ASC) AS F1, ID1, Team1, Team2 FROM Table1 ) as t1 INNER JOIN (SELECT ROW_NUMBER() OVER(ORDER BY newid() ASC) AS F1,Team3 FROM Table2 )  as t2 on t1.f1 = t2.f1", rows)
MS访问查询:

Dim sql As String = String.Format(" SELECT TOP (0) ID1,Team1,Team2,Team3 FROM (SELECT ROW_NUMBER() OVER(ORDER BY {" & Guid.NewGuid().ToString & "} ASC) AS F1,ID1,Team1,Team2 from Table1) as t1 INNER JOIN (SELECT ROW_NUMBER() OVER(ORDER BY {" & Guid.NewGuid().ToString & "} ASC) AS F1, Team3 FROM Table2 ) as t2 on t1.f1 = t2.f1 ", rows)
我的Form1加载代码:

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Conn_Randomize()
    InfoCommand = New OleDbCommand("SELECT * FROM Table1 ORDER BY Team2", Conn_Randomize)
    InfoAdapter = New OleDbDataAdapter()
    InfoAdapter.SelectCommand = InfoCommand
    InfoTable = New DataTable()
    InfoAdapter.Fill(InfoTable)
    DataGridView1.DataSource = InfoTable
End Sub
我要在DataGridView2中使用NumericupDown1和2显示并随机化的输入行数和列数的代码

    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    Conn_Randomize()
    Dim rows As Integer
    If Not Integer.TryParse(NumericUpDown1.Value, rows) Then
        MsgBox("NUMBER NOT AVAILABLE", MsgBoxStyle.Critical + MsgBoxStyle.OkOnly, "Error")
        NumericUpDown1.Value = ""
        NumericUpDown1.Focus()
        Exit Sub
    End If
    If NumericUpDown2.Value = 2 Then
        Dim sql As String = String.Format("SELECT Top {0} ID1, Team1, Team2 FROM Table1  ORDER BY RND(-(100000*ID1)*Time())", rows)
        InfoCommand = New OleDbCommand(sql, Conn_Randomize)
        InfoAdapter = New OleDbDataAdapter()
        InfoAdapter.SelectCommand = InfoCommand
        InfoTable = New DataTable()
        InfoAdapter.Fill(InfoTable)
        DataGridView2.DataSource = InfoTable
    End If
    If NumericUpDown2.Value = 3 Then
        Dim sql As String = String.Format(" SELECT TOP {0} ID1,Team1,Team2,Team3 FROM (SELECT ROW_NUMBER() OVER(ORDER BY {" & Guid.NewGuid().ToString & "} ASC) AS F1,ID1,Team1,Team2 from Table1) as t1 INNER JOIN (SELECT ROW_NUMBER() OVER(ORDER BY {" & Guid.NewGuid().ToString & "} ASC) AS F1, Team3 FROM Table2 ) as t2 on t1.f1 = t2.f1 ", rows)
        InfoCommand = New OleDbCommand(sql, Conn_Randomize)
        InfoAdapter = New OleDbDataAdapter()
        InfoAdapter.SelectCommand = InfoCommand
        InfoTable = New DataTable()
        InfoAdapter.Fill(InfoTable)
        DataGridView2.DataSource = InfoTable
    End If
End Sub

在执行第二个代码段后,您是否确实查看了
sql
包含的内容?这有意义吗

第一个代码段使用的是
newid
,这是一个T-SQL函数,这意味着数据库将为每一行生成一个新的
uniqueidentifier
,并使用它们对数据进行排序。第二个代码段是如何做到这一点的?它只在VB代码中调用一次
NewGuid
,并将结果连接到SQL代码中。幸运的是,这甚至是有效的语法,但结果不会是每个记录都有不同的排序值

您需要数据库为每个记录生成一个值,该值可用作排序键,在Access SQL中生成随机数的方法是使用
Rnd
。我以为你几天前就已经在用了


另外,虽然我还没有检查,但我不确定Access中是否支持
行号
。很久以前,它还没有添加到SQL Server中。

在执行第二个代码片段之后,您是否确实查看了
SQL
包含的内容?这有意义吗

第一个代码段使用的是
newid
,这是一个T-SQL函数,这意味着数据库将为每一行生成一个新的
uniqueidentifier
,并使用它们对数据进行排序。第二个代码段是如何做到这一点的?它只在VB代码中调用一次
NewGuid
,并将结果连接到SQL代码中。幸运的是,这甚至是有效的语法,但结果不会是每个记录都有不同的排序值

您需要数据库为每个记录生成一个值,该值可用作排序键,在Access SQL中生成随机数的方法是使用
Rnd
。我以为你几天前就已经在用了


另外,虽然我还没有检查,但我不确定Access中是否支持
行号
。很久以前它还没有被添加到SQL Server中。

是的,我认为行数不能适应MS Access。。如何用MS Access query解决这个问题请注意,您实际上还没有解释您要做什么,我们无法从一些SQL代码中解出它。你可以编辑这个问题,也可以发布一个新的问题,并提供一个完整而清晰的解释,说明你想要达到的目标。其次,如果Access中没有与
ROW_NUMBER
等效的数据(我不知道有,但你应该检查文档以确定),那么你必须以完全不同的方式访问它,例如,分别查询两个表并在应用程序中组合数据。我有一个表1,其中有3个字段(ID1-Team1-Team2)…我还有另外一个带有2个字段的表2(ID2-Team3)。。我想随机化这4个字段(ID1-Team1-Team2-Team3),但不是(ID2)。。并在DataGridView1中显示它们..我将编辑我的问题是的,我认为行数不能适应MS Access..如何使用MS Access查询解决此问题请注意,您尚未实际解释您试图执行的操作,我们无法从一些SQL代码中解决此问题。你可以编辑这个问题,也可以发布一个新的问题,并提供一个完整而清晰的解释,说明你想要达到的目标。其次,如果Access中没有与
ROW_NUMBER
等效的数据(我不知道有,但你应该检查文档以确定),那么你必须以完全不同的方式访问它,例如,分别查询两个表并在应用程序中组合数据。我有一个表1,其中有3个字段(ID1-Team1-Team2)…我还有另外一个带有2个字段的表2(ID2-Team3)。。我想随机化这4个字段(ID1-Team1-Team2-Team3),但不是(ID2)。。并在DataGridView1中显示它们。我将编辑我的问题请记住
Guid.NewGuid()
生成的是
Guid
而不是随机值。guid保证是唯一的。它们不能保证是随机的。您确实应该从数据库加载数据,然后使用适当的RNG在内存中随机化结果。请记住
Guid.NewGuid()
生成的是
Guid
,而不是随机值。guid保证是唯一的。它们不能保证是随机的。您确实应该从数据库加载数据,然后使用适当的RNG在内存中随机化结果。