powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как задать дату в условии запроса?
22 сообщений из 22, страница 1 из 1
Как задать дату в условии запроса?
    #34102433
joe black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброй ночи всем... Чуствую, что туплю от усталости.

Надеюсь, что можа завтра кто-нить подскажет пральный ответ.

Проблема в следующем. Создаю ADO.Connection и ADO.RecordSet.
Настраиваюсь на каталог в котором лежат DBF-ки.
Мне необходимо в условии запроса ограничить получаемую инфу по дате (это одно из полей DBF-ки)

Задаю следующий запрос
Код: plaintext
1.
2.
3.
4.
TextSQL = "select ls.nbsnew,max(lc.dd), ls.pap, sum(lc.sl), lc.kodval as KodValLc " _
        & "from " & FileLS & " ls, " & FileLC & " lc " _
        & "where  ls.iskl is null and lc.dd <= """ & Format(DataF, "DD-MM-YYYY") & """  and lc.nls=ls.nls  " _
        & "group by ls.nbsnew, ls.pap, lc.kodval " _
        & "order by ls.nbsnew, lc.kodval"
Проблема в том, что я НИКАК не могу передать запросу дату. Это один из вариантов передачи, коих перепробывано немало.

Прошу руку помощи - как мне передать в запрос дату, чтобы он выполнялся...?

Спасибо!!!
...
Рейтинг: 0 / 0
Как задать дату в условии запроса?
    #34102435
joe black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для информации - в DBF-файле DD является колонкой формата DATA,8.
...
Рейтинг: 0 / 0
Как задать дату в условии запроса?
    #34102622
Фотография orunbek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот пример:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Private Sub Form_Load()
    Dim cnnDBF As New ADODB.Connection, rsTable As New ADODB.Recordset
    cnnDBF.ConnectionString = "DSN=Visual FoxPro Tables;SourceDB=C:\temp\dbf;SourceType=DBF"
    cnnDBF.Open
    rsTable.Open "SELECT * FROM Table WHERE DD={10/01/2006}", cnnDBF, adOpenKeyset, adLockReadOnly
    If Not rsTable.EOF Then
        rsTable.MoveLast
        MsgBox rsTable.RecordCount
    End If
End Sub
DD - Поле с датой
и ссылка где нашел решение этой проблемы:
http://www.kbalertz.com/kb_229854.aspx
...
Рейтинг: 0 / 0
Как задать дату в условии запроса?
    #34102931
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А передавайте дату в запрос как параметр. Тогда провайдер сам будет преобразовывать к нужному виду

примерно так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
    Dim rs As New ADODB.Recordset
    Dim cmd As New ADODB.Command
    Dim par As Parameter
    Dim strSQl As String
    
    strSQl = "select ls.nbsnew,max(lc.dd), ls.pap, sum(lc.sl), lc.kodval as KodValLc " _
            & "from " & FileLS & " ls, " & FileLC & " lc " _
            & "where  ls.iskl is null and lc.dd <= @date and lc.nls=ls.nls  " _
            & "group by ls.nbsnew, ls.pap, lc.kodval " _
            & "order by ls.nbsnew, lc.kodval"
    
    cmd.ActiveConnection = Connection
    cmd.CommandType = adCmdText
    cmd.CommandText = strSQl
    Set par = cmd.CreateParameter("@date", adDate, adParamInput)
    cmd.Parameters.Append par
    par.Value = Now()
    
    rs.Open cmd
I Have Nine Lives You Have One Only
THINK!
...
Рейтинг: 0 / 0
Как задать дату в условии запроса?
    #34102958
joe black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем доброго утра...

Щас попробую все предложенные варианты и отпишусь....
...
Рейтинг: 0 / 0
Как задать дату в условии запроса?
    #34103115
joe black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orunbek
Код: plaintext
1.
2.
3.
   ...
    rsTable.Open "SELECT * FROM Table WHERE DD={10/01/2006}", cnnDBF, 
   ...


Я свой запрос отредактировал так...

Код: plaintext
"lc.dd ={" + DataF + "}"

Не помогло... Говорит "неверно сформированный код GUID"
...
Рейтинг: 0 / 0
Как задать дату в условии запроса?
    #34103167
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хоть я и не силен в dbf, но меня смущает использование фигурных скобок с датой. Может все таки что-то другое?
...
Рейтинг: 0 / 0
Как задать дату в условии запроса?
    #34103198
joe black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyХоть я и не силен в dbf, но меня смущает использование фигурных скобок с датой. Может все таки что-то другое?

Я просто протестил предложенный вариант...
...
Рейтинг: 0 / 0
Как задать дату в условии запроса?
    #34103276
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HandKot предложил хороший вариант: Положиться на объект Parameter.
Поправочка: надо безымянные параметры в SQL объявить:
where lc.dd <= ?
...
Рейтинг: 0 / 0
Как задать дату в условии запроса?
    #34103314
joe black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WorobjoffHandKot предложил хороший вариант: Положиться на объект Parameter.
Поправочка: надо безымянные параметры в SQL объявить:
where lc.dd <= ?

Пардон за тупость... а как?
...
Рейтинг: 0 / 0
Как задать дату в условии запроса?
    #34103330
joe black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я пишу из под Excel на VBA и у меня по каким то неведомым причинам HELP выдаёт на любые F1 чистые страницы...
...
Рейтинг: 0 / 0
Как задать дату в условии запроса?
    #34103351
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Dim rs As New ADODB.Recordset
    Dim cmd As New ADODB.Command
    Dim par As Parameter
    Dim strSQl As String
    
    strSQl = "select ls.nbsnew,max(lc.dd), ls.pap, sum(lc.sl), lc.kodval as KodValLc " _
            & "from " & FileLS & " ls, " & FileLC & " lc " _
            & "where  ls.iskl is null and lc.dd <= ? and lc.nls=ls.nls  " _
            & "group by ls.nbsnew, ls.pap, lc.kodval " _
            & "order by ls.nbsnew, lc.kodval"
    
    cmd.ActiveConnection = Connection
    cmd.CommandType = adCmdText
    cmd.CommandText = strSQl
'    Set par = cmd.CreateParameter("@date", adDate, adParamInput)
'    cmd.Parameters.Append par
'    par.Value = Now()
   cmd.Parameters( 1 ).Value = now
    
    rs.Open cmd
...
Рейтинг: 0 / 0
Как задать дату в условии запроса?
    #34103408
joe black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Worobjoff
Код: plaintext
1.
2.
3.
   ...
  cmd.Parameters( 1 ).Value = now
  ...

а какую мне использовать строку подключения. Может моя неверна...?
Я пробывал две...
Код: plaintext
1.
2.
ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Path+ ";Extended Properties=dBASE III;User ID=Admin;Password="
ConnectionString = "Provider=MSDASQL.1;Persist Security Info=True; Data Source = файлы dBASE;Initial Catalog=" & Path

обе строки выдают характерные ошибки - не удаётся найти объект
...
Рейтинг: 0 / 0
Как задать дату в условии запроса?
    #34103436
joe black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для полного представления проблемы кидаю весь код (он не большой... пока)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
Dim NameLC, NameLS, NameARC, NameCU As String
Dim DataT, DataF, DataL As Date
Dim par As Parameter

Set TmpList = Worksheets("Temp")
Set ConnectionPRB = New ADODB.Connection    
Set RecordSetCU = New ADODB.Recordset        
Set RecordSetRL = New ADODB.Recordset        
Set CommandPRB = New ADODB.Command        

PathMod = "n:\prbank\mod\"
DataF = "01.09.06"
DataL = "02.09.06"

TipSh = ""
NumMounth = Hex(Mid(Date,  4 ,  2 ))
NameCU = "cu" + Mid(Date,  9 ,  2 ) + Trim(CStr(NumMounth)) + ".dbf"
NameRL = "rl" + Mid(Date,  9 ,  2 ) + Trim(CStr(NumMounth)) + Mid(Date,  1 ,  2 ) + ".dbf"
NameLC = "lc" + Mid(Date,  9 ,  2 ) + Trim(CStr(NumMounth)) + ".dbf"
NameLS = "ls" + Mid(Date,  9 ,  2 ) + ".dbf"
NameARC = "arc" + Mid(NameLC,  3 ,  3 )
FileLC = PathMod + NameARC + "\" + NameLC
FileRL = PathMod + NameARC + "\" + NameRL
FileLS = PathMod + NameLS

ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + PathMod + ";Extended Properties=dBASE III;User ID=Admin;Password="
'ConnectionString = "Provider=MSDASQL.1;Persist Security Info=True; Data Source = ôàéëû dBASE;Initial Catalog=" & PathMod
'ConnectionString = "DSN=Visual FoxPro Tables;SourceDB=" + PathMod + ";SourceType=DBF"

ConnectionPRB.Open ConnectionString

TextSQL = "select ls.nbsnew,max(lc.dd), ls.pap, sum(lc.sl), lc.kodval as KodValLc " _
        & "from " & FileLS & " ls, " & FileLC & " lc " _
        & "where  ls.iskl is null and lc.dd ={" + DataF + "} and lc.nls=ls.nls  " _
        & "group by ls.nbsnew, ls.pap, lc.kodval " _
        & "order by ls.nbsnew, lc.kodval"

RecordSetCU.Open TextSQL, ConnectionPRB

RecordSetCU.MoveFirst
While Not RecordSetCU.EOF
  RecordSetCU.MoveNext
Wend

TmpList.Range("A10").CopyFromRecordset RecordSetCU
...
Рейтинг: 0 / 0
Как задать дату в условии запроса?
    #34103453
joe black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если сможете - откорректируйте, плиз, исходники прЯма по тексту...
...
Рейтинг: 0 / 0
Как задать дату в условии запроса?
    #34103478
Фотография orunbek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
joe black orunbek
Код: plaintext
1.
2.
3.
   ...
    rsTable.Open "SELECT * FROM Table WHERE DD={10/01/2006}", cnnDBF, 
   ...


Я свой запрос отредактировал так...

Код: plaintext
"lc.dd ={" + DataF + "}"

Не помогло... Говорит "неверно сформированный код GUID"

"lc.dd ={" + Format(DataF,"mm/dd/yyyy") + "}"
а так?
...
Рейтинг: 0 / 0
Как задать дату в условии запроса?
    #34103515
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
Dim NameLC, NameLS, NameARC, NameCU As String
Dim DataT
Dim DataF as Date
Dim DataL As Date
Dim par As Parameter

Set TmpList = Worksheets("Temp")
Set ConnectionPRB = New ADODB.Connection    
Set RecordSetCU = New ADODB.Recordset        
Set RecordSetRL = New ADODB.Recordset        
Set CommandPRB = New ADODB.Command        

PathMod = "n:\prbank\mod\"
DataF = CDate("01.09.2006")
DataL = "02.09.06"

TipSh = ""
NumMounth = Hex(Mid(Date,  4 ,  2 ))
NameCU = "cu" + Mid(Date,  9 ,  2 ) + Trim(CStr(NumMounth)) + ".dbf"
NameRL = "rl" + Mid(Date,  9 ,  2 ) + Trim(CStr(NumMounth)) + Mid(Date,  1 ,  2 ) + ".dbf"
NameLC = "lc" + Mid(Date,  9 ,  2 ) + Trim(CStr(NumMounth)) + ".dbf"
NameLS = "ls" + Mid(Date,  9 ,  2 ) + ".dbf"
NameARC = "arc" + Mid(NameLC,  3 ,  3 )
FileLC = PathMod + NameARC + "\" + NameLC
FileRL = PathMod + NameARC + "\" + NameRL
FileLS = PathMod + NameLS

ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + PathMod + ";Extended Properties=dBASE III;User ID=Admin;Password="
'ConnectionString = "Provider=MSDASQL.1;Persist Security Info=True; Data Source = ôàéëû dBASE;Initial Catalog=" & PathMod
'ConnectionString = "DSN=Visual FoxPro Tables;SourceDB=" + PathMod + ";SourceType=DBF"

ConnectionPRB.Open ConnectionString

TextSQL = "select ls.nbsnew,max(lc.dd), ls.pap, sum(lc.sl), lc.kodval as KodValLc " _
        & "from " & FileLS & " ls, " & FileLC & " lc " _
        & "where  ls.iskl is null and lc.dd ={" + Format(DataF,"MM\/DD\/YYYY") + "} and lc.nls=ls.nls  " _
        & "group by ls.nbsnew, ls.pap, lc.kodval " _
        & "order by ls.nbsnew, lc.kodval"

RecordSetCU.Open TextSQL, ConnectionPRB


While Not RecordSetCU.EOF
  RecordSetCU.MoveNext
Wend

TmpList.Range("A10").CopyFromRecordset RecordSetCU
...
Рейтинг: 0 / 0
Как задать дату в условии запроса?
    #34103577
joe black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orunbek
"lc.dd ={" + Format(DataF,"mm/dd/yyyy") + "}"
а так?

неверно сформированый код GUID
...
Рейтинг: 0 / 0
Как задать дату в условии запроса?
    #34103616
joe black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TO Konst_One

Увидел изменения в следующих строках...
Konst_One
Код: plaintext
1.
2.
3.
4.
5.
6.
...
DataF = CDate("01.09.2006")
...
& "where  ls.iskl is null and lc.dd ={" + Format(DataF,"MM\/DD\/YYYY") + "} and 
lc.nls=ls.nls  " _
...


к сожалению, не помогло... Пишет "неверно сформированный код GUID"
Я ваяю на Excel 2003 VBA

А как туда параметр подать? Можа и впрямь через них попробывать?
Вот только конкретики хотелось бы...
...
Рейтинг: 0 / 0
Как задать дату в условии запроса?
    #34103639
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробуй вот это вариант:


Код: plaintext
lc.dd=#" & Format(DataF,"MM\/DD\/YYYY") & "# and 
...
Рейтинг: 0 / 0
Как задать дату в условии запроса?
    #34103695
joe black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Oneпопробуй вот это вариант:

Код: plaintext
lc.dd=#" & Format(DataF,"MM\/DD\/YYYY") & "# and 


УРААААААААААААА!!!!!!!!!!!!!!!!!!!!!!
РАБОТАТ!!!!!!!!!!!!!!!!!!!!!!!!

Мля, стока вариантов перепробывал... А про этот и не знал!!!

Спасибо ООООООгромное. У меня токма в этом месте затуп был...

Еду дальше.

Еще раз ВСЕМ СПАСИБО, особенно Konst_One!!!!

Всем удачи и поменьше камней предконвения в творческом процессе...
...
Рейтинг: 0 / 0
Как задать дату в условии запроса?
    #34105675
Blohin_Andrej
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я обращаюсь к mdb-файлу при помощи провайдера "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ИмяФайла & ";Persist Security Info=False". В запросе дата отделяется одиночными кавычками снаружи от двойных.
Пример: frmОперации.adoОперацииВсе.RecordSource = "SELECT ОперацииРасх.IDКонтрагента, ОперацииРасх.ID, ОперацииРасх.Дата, ОперацииРасх.Сумма As Расход, Контрагенты.Имя, ГруппыРасх.Наименование As Группа, НаименРасх.Наименование, ОперацииРасх.ЕдинИзмер, ОперацииРасх.Количество, ОперацииРасх.Цена, ОперацииРасх.Сумма FROM ОперацииРасх, Контрагенты, ГруппыРасх, НаименРасх WHERE ОперацииРасх.IDКонтрагента = Контрагенты.ID AND НаименРасх.ID = ОперацииРасх.IDНаименРасх AND НаименРасх.IDГруппы = ГруппыРасх.ID AND CDate(ОперацииРасх.Дата) = CDate('" & ДатаОперации & "') AND ГруппыРасх.ID <> 13 ORDER BY Дата, Имя, ГруппыРасх.Наименование, ОперацииРасх.Сумма DESC;"
И всё получается. Может я не о том?
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как задать дату в условии запроса?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]