Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как задать дату в условии запроса? / 22 сообщений из 22, страница 1 из 1
02.11.2006, 22:30
    #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
02.11.2006, 22:32
    #34102435
joe black
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать дату в условии запроса?
Для информации - в DBF-файле DD является колонкой формата DATA,8.
...
Рейтинг: 0 / 0
03.11.2006, 06:03
    #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
03.11.2006, 09:55
    #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
03.11.2006, 10:01
    #34102958
joe black
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать дату в условии запроса?
Всем доброго утра...

Щас попробую все предложенные варианты и отпишусь....
...
Рейтинг: 0 / 0
03.11.2006, 10:42
    #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
03.11.2006, 10:51
    #34103167
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать дату в условии запроса?
Хоть я и не силен в dbf, но меня смущает использование фигурных скобок с датой. Может все таки что-то другое?
...
Рейтинг: 0 / 0
03.11.2006, 10:56
    #34103198
joe black
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать дату в условии запроса?
AntonariyХоть я и не силен в dbf, но меня смущает использование фигурных скобок с датой. Может все таки что-то другое?

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

Пардон за тупость... а как?
...
Рейтинг: 0 / 0
03.11.2006, 11:16
    #34103330
joe black
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать дату в условии запроса?
Я пишу из под Excel на VBA и у меня по каким то неведомым причинам HELP выдаёт на любые F1 чистые страницы...
...
Рейтинг: 0 / 0
03.11.2006, 11:19
    #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
03.11.2006, 11:31
    #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
03.11.2006, 11:35
    #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
03.11.2006, 11:37
    #34103453
joe black
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать дату в условии запроса?
Если сможете - откорректируйте, плиз, исходники прЯма по тексту...
...
Рейтинг: 0 / 0
03.11.2006, 11:41
    #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
03.11.2006, 11:51
    #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
03.11.2006, 12:01
    #34103577
joe black
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать дату в условии запроса?
orunbek
"lc.dd ={" + Format(DataF,"mm/dd/yyyy") + "}"
а так?

неверно сформированый код GUID
...
Рейтинг: 0 / 0
03.11.2006, 12:10
    #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
03.11.2006, 12:15
    #34103639
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать дату в условии запроса?
попробуй вот это вариант:


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

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


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

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

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

Еду дальше.

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

Всем удачи и поменьше камней предконвения в творческом процессе...
...
Рейтинг: 0 / 0
04.11.2006, 15:16
    #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
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как задать дату в условии запроса? / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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