gpt4 book ai didi

sql - 如何通过 OleDb 在 MS Access 上使用公用表表达式执行复杂的 SQL 查询

转载 作者:搜寻专家 更新时间:2023-10-30 19:55:17 26 4
gpt4 key购买 nike

我在使用 OledbDataAdapter 在 VB.NET 中执行复杂的 SQL 查询时遇到了问题。此 Sql 查询在 W3school 的 SQL Tryit 编辑器中运行良好。以下是我现有的 VB.NET 代码,是否有任何方法可以直接在 VB.NET 中执行这种 SQL 查询,或者任何人都可以更改此查询以使用 VB.NET 并获得相同的结果吗?

    Dim con As New OleDb.OleDbConnection
Dim dbProvider As String
Dim dbSource As String
Dim ds As New DataSet
Dim da As OleDb.OleDbDataAdapter
Dim sql As String

dbProvider = "PROVIDER=Microsoft.Jet.OLEDB.4.0;"
dbSource = "Data Source = C:\database.mdb"
con.ConnectionString = dbProvider & dbSource
con.Open()
sql = "With query1 as (SELECT Val,DateAndTime FROM [FloatTable] where TagIndex='0') " _
",Query2 as (SELECT Val,DateAndTime FROM [FloatTable] where TagIndex='1') " _
"select query1.val as 'TT348',Query2.val as 'TT358',Query2.DateAndTime as 'DateAndTime' " _
"From query1,Query2 "_
"where query1.DateAndTime=Query2.DateAndTime"
da = New OleDb.OleDbDataAdapter(sql, con)

da.Fill(ds, "Log")
con.Close()

DataGridView1.DataSource = ds

当我运行这段代码时,它给出了一个错误提示

Invalid SQL statement; expected 'DELETE', 'INSERT', 'PROCEDURE', 'SELECT', or 'UPDATE'.

非常感谢任何帮助,谢谢...

最佳答案

Peter 进一步指出 Access 中缺少 CTE 支持,因为引用的 CTE 都不使用递归等高级功能,您可以轻松地将 CTE 更改为具有相同别名的派生表,并保留原始流程询问。此外,使用 JOIN 连接表被认为是更好的做法,而不是 WHERE 子句。很简单:

SELECT query1.val as 'TT348',Query2.val as 'TT358',Query2.DateAndTime as 'DateAndTime' 
FROM
(SELECT Val,DateAndTime FROM [FloatTable] where TagIndex='0') AS query1
INNER JOIN
(SELECT Val,DateAndTime FROM [FloatTable] where TagIndex='1') AS Query2
ON query1.DateAndTime=Query2.DateAndTime;

关于sql - 如何通过 OleDb 在 MS Access 上使用公用表表达式执行复杂的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30142847/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com