none
请可以帮忙看看我为我program写的left join database 哪里出问题吗? RRS feed

  • 问题

  •  Private Sub loadTransactions(ByVal transactionid As Integer)
            Dim dt As New DataTable
            Using cnn As New OleDbConnection("Provider=Microsoft.Jet.Oledb.4.0; Data Source=mydataX.mdb;")
                Using cmd As New OleDbCommand("SELECT tbl_Info.cid, tbl_checker.CBCID" & _
                  "tbl_Info.CompanyName, tbl_Info.PONo" & _
                  "FROM tbl_Info" & _
                  "left join tbl_checker" & _
                  "on tbl_Info.cid=tbl_checker.cid WHERE tbl_Info.CBCID = @transactionID ORDER BY tbl_Info.cid", cnn)

                    这是我为我program写的另两个code

                  ("on tbl_Info.cid=tbl_checker.cid WHERE tbl_Info.CBCID = @transactionID ORDER BY tbl_Info.cid", cnn))

                  ("on tbl_checker.cid=tbl_Info.CBCID WHERE tbl_Info.CBCID = @transactionID ORDER BY tbl_Info.cid", cnn))

                    cmd.Parameters.Add("@transactionID", OleDbType.Integer).Value = transactionid
                    cnn.Open()
                    dt.Load(cmd.ExecuteReader)
                End Using
            End Using
            DataGridView1.DataSource = dt
        End Sub

    我在我code得到的error是Syntax error (missing operator) in query expression 'tbl_Info.PONoFROM tbl_Infoleft join tbl_checkeron tbl_Info.cid=tbl_checker.cid WHERE tbl_Info.CBCID = @transactionID ORDER BY tbl_Info.cid'.
    2019年12月6日 3:25

答案

  • Hi christing, 

    请确保你的查询语句之间要有适当的空格。

    我参照你的代码做了一个简单的测试。

    数据库中的两个表:

    TableTest:

    TableTest2:

    代码如下:

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            loadTransactions(1)
        End Sub
        Private Sub loadTransactions(ByVal transactionid As Integer)
            Dim dt = New DataTable
            Dim connString = "connect string"
            Dim cmdText = "SELECT TableTest.cid, TableTest2.cbcid, TableTest.Name, TableTest.Information FROM TableTest left join TableTest2 on TableTest.cid = TableTest2.cid WHERE TableTest.cbcid = @transactionID ORDER BY TableTest.cid"
    
            Using cnn = New OleDbConnection(connString)
                Using cmd = New OleDbCommand(cmdText, cnn)
                    cmd.Parameters.AddWithValue("@transactionID", transactionid)
                    cnn.Open
                    dt.Load(cmd.ExecuteReader)
                End Using
            End Using
            dataGridView1.DataSource = dt
        End Sub
    

    测试结果:

    希望可以帮到你。

    Best Regards,

    Xingyu Zhao



    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 christing 2019年12月11日 9:51
    2019年12月6日 6:57
    版主
  • Hi christing, 

    请确保你的数据源没有错误。

    对于如下的查询语句:

         SELECT TableTest.cid, TableTest2.cbcid, TableTest.Name, TableTest.Information FROM TableTest left join TableTest2 on TableTest.cid = TableTest2.cid WHERE TableTest.cbcid = @transactionID ORDER BY TableTest.cid

    当数据库中的’cbcid’无法找到与输入的’ transactionID’相同的值时, 会出现如下的结果:

    此时应确保输入的’ transactionID’的值在数据库中存在。

    如果’ transactionID’没有问题,当第二个表中的’cid’与主表中的’cid’全都不同时,会出现如下的结果:

    此时应该寻找两个表之间正确的连接方式。

    如果以上两个结果都没有出现,则问题有可能是由不正确的数据源引起的。

    Best Regards,

    Xingyu Zhao



    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 christing 2019年12月11日 9:51
    2019年12月6日 9:15
    版主

全部回复

  • Hi christing, 

    请确保你的查询语句之间要有适当的空格。

    我参照你的代码做了一个简单的测试。

    数据库中的两个表:

    TableTest:

    TableTest2:

    代码如下:

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            loadTransactions(1)
        End Sub
        Private Sub loadTransactions(ByVal transactionid As Integer)
            Dim dt = New DataTable
            Dim connString = "connect string"
            Dim cmdText = "SELECT TableTest.cid, TableTest2.cbcid, TableTest.Name, TableTest.Information FROM TableTest left join TableTest2 on TableTest.cid = TableTest2.cid WHERE TableTest.cbcid = @transactionID ORDER BY TableTest.cid"
    
            Using cnn = New OleDbConnection(connString)
                Using cmd = New OleDbCommand(cmdText, cnn)
                    cmd.Parameters.AddWithValue("@transactionID", transactionid)
                    cnn.Open
                    dt.Load(cmd.ExecuteReader)
                End Using
            End Using
            dataGridView1.DataSource = dt
        End Sub
    

    测试结果:

    希望可以帮到你。

    Best Regards,

    Xingyu Zhao



    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 christing 2019年12月11日 9:51
    2019年12月6日 6:57
    版主
  • 感谢你的留言@Xingyu Zhao 我纳闷的是read不到data。

    我的code 是

     Private Sub loadTransactions(ByVal transactionid As Integer)
            Dim dt = New DataTable
            Dim connString = "Provider=Microsoft.Jet.Oledb.4.0; Data Source=mydataX.mdb;"
            Dim cmdText = "SELECT tbl_Info.cid, tbl_checker.CBCID, tbl_Info.LineNo, tbl_Info.Status FROM tbl_Info left join tbl_checker on tbl_Info.cid=tbl_checker.cid WHERE tbl_Info.CBCID = @transactionID ORDER BY tbl_Info.cid"

            Using cnn = New OleDbConnection(connString)
                Using cmd = New OleDbCommand(cmdText, cnn)
                    cmd.Parameters.AddWithValue("@transactionID", transactionid)
                    cnn.Open()
                    dt.Load(cmd.ExecuteReader)
                End Using
            End Using
            DataGridView1.DataSource = dt
        End Sub


    会不会我的local host 出问题呢!

    2019年12月6日 7:39
  • Hi christing, 

    如果代码没有出错,原因很可能是没有从你的数据库中找到相应的数据。

    你能提供一些你数据库中的有关数据的信息吗?或者你能说明一下想要从数据库中查询出怎样的数据吗?

    更多的信息将有利于我们分析你的问题并进行测试。

    我们期待你的更新。

    Best Regards,

    Xingyu Zhao


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2019年12月6日 8:07
    版主
  •  @Xingyu Zhao

    我有两个database 1个命名为 tbl_checker, 一个命名为 tbl_Info

    这是tbl_checker

    这是tbl_info

    我想将我tbl_info 的data join去tbl_checker我只想要join到tbl_checker的CBCID而已

    when data show 时只有 tbl_checker的CBCID 其他的都是tbl_info的data

    我想做到的结果是和你一样的。只是不明白为什么没有data pop up

     


    2019年12月6日 8:43
  • Hi christing, 

    请确保你的数据源没有错误。

    对于如下的查询语句:

         SELECT TableTest.cid, TableTest2.cbcid, TableTest.Name, TableTest.Information FROM TableTest left join TableTest2 on TableTest.cid = TableTest2.cid WHERE TableTest.cbcid = @transactionID ORDER BY TableTest.cid

    当数据库中的’cbcid’无法找到与输入的’ transactionID’相同的值时, 会出现如下的结果:

    此时应确保输入的’ transactionID’的值在数据库中存在。

    如果’ transactionID’没有问题,当第二个表中的’cid’与主表中的’cid’全都不同时,会出现如下的结果:

    此时应该寻找两个表之间正确的连接方式。

    如果以上两个结果都没有出现,则问题有可能是由不正确的数据源引起的。

    Best Regards,

    Xingyu Zhao



    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 christing 2019年12月11日 9:51
    2019年12月6日 9:15
    版主
  • @Xingyu Zhao

    我在我transactionID 中找到这个资料2147483647 与我要读到的data很大出入。不知Xingyu Zhao可以发我你的sample project吗?

    2019年12月6日 9:50
  • Hi christing,

    我使用的是Access数据库,数据库结构和代码上面已经给出。

    这是我的连接字符串:

         Dim connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\Db1.accdb;Persist Security Info=False;Jet OLEDB:Database Password=;"

    另外,也许你需要以下链接:

    Difference between Microsoft.Jet.OleDb and Microsoft.Ace.OleDb

    希望这能对你解决问题有帮助。

    Best Regards,

    Xingyu Zhao


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2019年12月6日 10:04
    版主
  • HI XINGYU ZHAO

    我 tbl_Info 的CBCID 与  tbl_checker 的CBCID 一样。我是不是出问题在这里。

    Dim cmdText = "SELECT tbl_Info.cid, tbl_Info.LineNo, tbl_checker.CheckerName, tbl_Info.Status FROM tbl_Info left join tbl_checker ON tbl_Info.CBCID = tbl_checker.CBCID WHERE tbl_Info.CBCID = @transactionID ORDER BY tbl_Info.CBCID"

    但是,我还是有问题。
    2019年12月6日 10:11
  • Hi christing, 

    感谢你的更新。

    >> tbl_Info CBCID  tbl_checker CBCID 一样。我是不是出问题在这里。

    问题应该不是出在这里。

    你方便提供一些你数据库中的数据吗?这将有利于我重现你的问题并用你数据库中的数据以及查询语句去进行测试。

    期待你的更新。

    Best Regards,

    Xingyu Zhao


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2019年12月9日 7:20
    版主
  • @Xingyu Zhao

    我现在遇到一个状况就是我的delete 出现这个error (Data type mismatch in criteria expression.)

     If Me.DataGridView1.Rows.Count > 0 Then
                If Me.DataGridView1.SelectedRows.Count > 0 Then
                    Dim intcID As Integer = Me.DataGridView1.SelectedRows(0).Cells("CheckerID").Value
                    Select Case MsgBox("Did you sure you want to delete this data", MsgBoxStyle.YesNo, "Message Confirmation")
                        Case MsgBoxResult.Yes
                            MessageBox.Show("Your data have been deleted", "Message")
                        Case MsgBoxResult.No
                            MessageBox.Show("Your data have been keep", "Message")
                            Exit Sub
                    End Select
                    'open connection
                    If Not cnn.State = ConnectionState.Open Then
                        cnn.Open()
                    End If
                    'delete data
                    Dim cmd As New OleDb.OleDbCommand
                    cmd.Connection = cnn
                    cmd.CommandText = "DELETE FROM tbl_Info WHERE cid=" & intcID
                    cmd.ExecuteNonQuery()
                    Me.RefreshData1()
                    'close connection
                    cnn.Close()
                End If
            End If

    2019年12月9日 8:45
  • @Xingyu Zhao

    这个是我的数据库

    2019年12月9日 8:47
  • Hi christing,

    我注意到你创建了一个新帖和你最新的问题相关,所以我会在那个帖子下面进行回复。

    另外,这个帖子的最开始的问题得到解决了吗?如果解决的话,请将正确的回答标记为答案,或者你也可以分享你的解决方案并将它作标记成答案, 这有助于帮助其他人在遇到类似问题时迅速找到解决方案。

    Best Regards,

    Xingyu Zhao


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 christing 2019年12月11日 8:58
    • 取消答案标记 christing 2019年12月11日 9:50
    2019年12月10日 10:18
    版主