Я хочу сделать запрос между двумя датами в sqlite с двумя текстовыми полями (textbox4.text и textbox5.text = variable) в форме - PullRequest
0 голосов
/ 26 мая 2018

Dim query As String = "select * from mytable где strftime ('% Y-% m-% d', tarih) между 'TextBox4.text' и 'TextBox5.text' "

Не можете назначить переменную запроса?Результат обзора данных = пусто

информация: формат даты просмотра данных = 2018-01-01 17: 42: 24

    Dim btarihyil As String
    btarihyil = DateTimePicker2.Value.ToString.Substring(6, 4)
    Dim btarihay As String
    btarihay = DateTimePicker2.Value.ToString.Substring(3, 2)
    Dim btarihgun As String
    btarihgun = DateTimePicker2.Value.ToString.Substring(0, 2)
    TextBox4.Text = btarihyil & "-" & btarihay & "-" & btarihgun

    Dim bttarihyil As String
    bttarihyil = DateTimePicker3.Value.ToString.Substring(6, 4)
    Dim bttarihay As String
    bttarihay = DateTimePicker3.Value.ToString.Substring(3, 2)
    Dim bttarihgun As String
    bttarihgun = DateTimePicker3.Value.ToString.Substring(0, 2)

    TextBox4.Text = btarihyil & "-" & btarihay & "-" & btarihgun
    TextBox5.Text = bttarihyil & "-" & bttarihay & "-" & bttarihgun

    Dim Yol As String = "Data Source=database1.s3db;version=3;new=False"
    Using MyConn As New SQLiteConnection(Yol)
        If (MyConn.State = ConnectionState.Closed) Then
            MyConn.Open()
        End If
        Dim Sorgu As String = "select * from mytable where strftime('%Y-%m-%d',tarih) between 'TextBox4.text' and 'TextBox5.text' "
        Using MyCmd As New SQLiteCommand(Sorgu, MyConn)
            Dim Da As New SQLiteDataAdapter(MyCmd)
            Dim Ds As New DataSet
            Dim Dt As New DataTable
            Ds.Reset()
            Da.Fill(Ds)
            Dt = Ds.Tables(0)

            Dim Bs As New BindingSource With {.DataSource = Dt}
            DataGridView1.DataSource = Bs
            Bs.MoveLast()

            MyConn.Close()
            MyCmd.Dispose()
            MyConn.Dispose()
        End Using
    End Using


End Sub

1 Ответ

0 голосов
/ 26 мая 2018

Вы используете "TextBox4.Text" и "TextBox5.Text" буквально в запросе.Это не будет передавать значения textboxes в запрос.Так что это приведет к ошибке.

Также вам нужно использовать параметризованный запрос, чтобы избежать синтаксических ошибок.Также я не уверен, почему вы используете функцию strftime.Эта функция используется только для форматирования.

Следуя коду, который я переписал, используя подход с параметризованным запросом.

Dim Yol As String = "Data Source=database1.s3db;version=3;new=False"
Using MyConn As New SQLiteConnection(Yol)
    If (MyConn.State = ConnectionState.Closed) Then
        MyConn.Open()
    End If
    Dim Sorgu As String = "select * from mytable where tarih between @startDate and @endDate "
    Using MyCmd As New SQLiteCommand(Sorgu, MyConn)
        Dim startDate as new SQLiteParameter("@startDate")
        startDate.Value = DateTimePicker2.Value
        Dim endDate as new SQLiteParameter("@endDate")
        endDate.Value = DateTimePicker3.Value
        MyCmd.Parameters.Add(startDate)
        MyCmd.Parameters.Add(endDate)

        Dim Da As New SQLiteDataAdapter(MyCmd)
        Dim Ds As New DataSet
        Dim Dt As New DataTable
        Ds.Reset()
        Da.Fill(Ds)
        Dt = Ds.Tables(0)

        Dim Bs As New BindingSource With {.DataSource = Dt}
        DataGridView1.DataSource = Bs
        Bs.MoveLast()

        MyConn.Close()
        MyCmd.Dispose()
        MyConn.Dispose()
    End Using
End Using

Это должно помочь вам решить вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...