[英]MS Access SQL Select Statement Returns Correct Fields but No Data in the Rows
我有两个Microsoft Access数据库表。 它们分别命名为Historical_Stock_Prices
和Balance_Sheets
。 我需要合并每个表中的数据以创建一个名为Daily
的表。 我需要的字段Ticker
, [Date]
和[Close]
从Historical_Stock_Prices
,我需要采取实地Common_Stocks
从Balance_Sheets
。
不过,我不会从Historical_Stock_Prices
和Balance_Sheets
获取每一行。 我将只使用在名为dtpDateSelection
的DateTimePicker
选择的日期上或之前的行。
现在,我遇到的主要问题是, Historical_Stock_Prices
每天都包含一行。 而Balance_Sheets
每个季度Balance_Sheets
包含一行。 因此,对于四分之一天的每一天来说,来自Balance_Sheets
的数字都是相同的。
这是我到目前为止的代码:
Dim Date1 As Date = dtpDateSelection.Value
Try
Dim cmd As OleDbCommand = New OleDbCommand("CREATE PROC Daily AS SELECT [H].[Ticker], [H].[Date], [H].[Close], [B].[Common_Stocks] FROM [Historical_Stock_Prices] AS [H] INNER JOIN [Balance_Sheets] AS [B] ON Int(Year([H].[Date])) = Int([B].[Year]) AND Int(Format([H].[Date],'Q')) = Int([B].[Period]) AND CStr([H].[Ticker]) = CStr([B].[Ticker]) WHERE CDate([H].[Date]) = #" & CDate(Date1) & "#", con)
cmd.ExecuteNonQuery()
Catch ex As Exception
Finally
Dim cmda As OleDbCommand = New OleDbCommand("DROP PROCEDURE Daily", con)
cmda.ExecuteNonQuery()
Dim cmdb As OleDbCommand = New OleDbCommand("CREATE PROC Daily AS SELECT [H].[Ticker], [H].[Date], [H].[Close], [B].[Common_Stocks] FROM [Historical_Stock_Prices] AS [H] INNER JOIN [Balance_Sheets] AS [B] ON Int(Year([H].[Date])) = Int([B].[Year]) AND Int(Format([H].[Date],'Q')) = Int([B].[Period]) AND CStr([H].[Ticker]) = CStr([B].[Ticker]) WHERE CDate([H].[Date]) = #" & CDate(Date1) & "#", con)
cmdb.ExecuteNonQuery()
End Try
此代码创建表Daily
以及该表中的字段Ticker
, [Date]
, [Close]
和Common_Stocks
。 但是该代码不会将任何数据加载到表的行中。 任何想法为什么不呢?
我不确定您的代码是否执行了您需要执行的操作。 我看不到会创建所需表的CREATE TABLE
命令或将记录插入表中的INSERT INTO
命令。
看起来您正在创建一个存储过程,该存储过程实际上并没有在您提到的Daily
表中INSERT
任何数据。
您可能需要将CREATE PROC Daily AS
的第一部分更改为INSERT INTO dbo.Daily
。 这样,数据将被追加到表中。
您的代码尝试创建等效的View。 就其本身而言,它不返回任何数据。 您可以从SELECT语句返回数据。 不知道语法是否正确,但是您可以直接使用MS-Access尝试cmdText并验证结果
Dim cmdText = "SELECT [H].[Ticker], [H].[Date], [H].[Close], [B].[Common_Stocks] " & _
"FROM [Historical_Stock_Prices] AS [H] INNER JOIN [Balance_Sheets] AS [B] " & _
"ON Year([H].[Date]) = [B].[Year] AND " & _
"Format([H].[Date],'Q') = [B].[Period] AND " & _
"[H].[Ticker] = [B].[Ticker] "
"WHERE [H].[Date] = ?"
Using cmdb = New OleDbCommand(cmdText, con)
cmdb.Parameters.AddWithValue("@1", CDate(Date1))
Using da = new OleDbDataAdapter(cmdb)
Dim dt = new DataTable("Daily")
da.Fill(dt)
' now you have an IN MEMORY DataTable named Daiyly filled with the data '
' returned by the SELECT query '
End Using
End Using
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.