powered by simpleCommunicator - 2.0.39     © 2025 Programmizd 02
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Несоответствие типов данных.
30 сообщений из 30, показаны все 2 страниц
Несоответствие типов данных.
    #38708765
Maxim12345678
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброе утро, помогите, пожалуйста, разобраться с ошибкой.

Есть простенький цикл:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
k1 = a.Sheets(1).Cells(Rows.Count, "B").End(xlUp).Row
    For i = 6 To k1
     mv = a.Sheets(1).Cells(i, 2)
     pp = a.Sheets(1).Cells(i, 3)
     'MsgBox nn
     Set rst = New ADODB.Recordset 
     rst.Open ("SELECT SUM(Ïîðòôåëü.Ðàçìåð_êðåäèòà) From Ïîðòôåëü WHERE (Ïîðòôåëü.Ìåñÿö_âûäà÷è = '" & CStr(mv) & "') AND (Ïîðòôåëü.Ïîðòôåëü = '" & CDate(pp) & "')"), conn 
     a.Sheets(1).Cells(i, 4).CopyFromRecordset rst 
    Next i


mv as string, pp as date.
В общем вылезает ошибка "Несоответствие типов данных в выражении условия отбора" на Портфель.Портфель = '" & CDate(pp) & "'. Я так понимаю, что не понимает формат даты. Посмотрел много тем, но не могу разобраться. Если просто ставить Портфель.Портфель = '01.02.2011', то ошибка остается. Может сюда нужно как-то дописать формат типа: dd.mm.yyyy? Спасибо заранее за помощь.
...
Рейтинг: 0 / 0
Несоответствие типов данных.
    #38708775
Maxim12345678
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim12345678,

Код: sql
1.
SELECT SUM(Ïîðòôåëü.Ðàçìåð_êðåäèòà) From Ïîðòôåëü WHERE (Ïîðòôåëü.Ìåñÿö_âûäà÷è = '" & CStr(mv) & "') AND (Ïîðòôåëü.Ïîðòôåëü = '" & CDate(pp) & "')
...
Рейтинг: 0 / 0
Несоответствие типов данных.
    #38708777
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СУБД какая?

Если JET, то
Портфель.Портфель = #10/25/2004#

Если MSSQL, то
Портфель.Портфель = '2004-10-25'
...
Рейтинг: 0 / 0
Несоответствие типов данных.
    #38708778
Maxim12345678
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блин, фигня какая-то получилась :( Вроде нужные теги использовал...
...
Рейтинг: 0 / 0
Несоответствие типов данных.
    #38708780
Maxim12345678
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

Привет, спасибо. Код обращается к Access.
...
Рейтинг: 0 / 0
Несоответствие типов данных.
    #38708796
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проще использовать CDate() - а уж драйвер сам разберётся, как представить дату, чтобы правильно.
...
Рейтинг: 0 / 0
Несоответствие типов данных.
    #38708797
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В смысле использовать в самом тексте запроса, а не при его формировании.
...
Рейтинг: 0 / 0
Несоответствие типов данных.
    #38708805
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaПроще использовать CDate() - а уж драйвер сам разберётся, как представить дату, чтобы правильно.Akina, от тебя такого не ожидал, может у тебя логин с паролем украли?

Maxim12345678 - не следуй этому совету. CDate превращает аргумент в дату, здесь же нужна строка, причем определенного формата.
...
Рейтинг: 0 / 0
Несоответствие типов данных.
    #38708812
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaВ смысле использовать в самом тексте запроса, а не при его формировании.тем более категорически не следует этого делать. Недавно тут был топик, как у какого-то клиента день недели в формате даты стоял.
...
Рейтинг: 0 / 0
Несоответствие типов данных.
    #38708829
Maxim12345678
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

так тоже уже пробовал, не получается. Натыкался на каком-то из форумов на Ваш совет :)
...
Рейтинг: 0 / 0
Несоответствие типов данных.
    #38708832
Maxim12345678
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

что-то у меня вообще никак не получается :( 1 способом ищет, но ничего не находит... Может быть нужно формат данных поменять в таблице Access?
...
Рейтинг: 0 / 0
Несоответствие типов данных.
    #38708833
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код покажи

(попробуй в другом браузере вставлять код с русским текстом)
...
Рейтинг: 0 / 0
Несоответствие типов данных.
    #38708835
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim12345678Может быть нужно формат данных поменять в таблице Access?какого типа столбец в БД?
...
Рейтинг: 0 / 0
Несоответствие типов данных.
    #38708839
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim12345678Натыкался на каком-то из форумов на Ваш совет :)
о ужас! он этот совет еще и на других форумах распространяет! четвертовать через виселицу!
...
Рейтинг: 0 / 0
Несоответствие типов данных.
    #38708840
Maxim12345678
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

Код: vbnet
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.
47.
48.
Sub OpenDB()
'===
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
Application.DisplayStatusBar = False
Application.DisplayAlerts = False
'===

Dim conn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim a As Workbook
Dim k As Long, k1 As Long, i As Long, mv As String, pp As Date
    Set a = ThisWorkbook
    k = a.Sheets(1).Cells(Rows.Count, "D").End(xlUp).Row 
    a.Sheets(1).Range("D6:D" & CStr(k) & "").ClearContents     
    '===
    
    Set conn = New ADODB.Connection 
    conn = "Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=D:\Винтажи.accdb;Uid=Admin;Pwd=;"
    conn.Open
    
    '===
    
    'If conn.State = 1 Then
    'MsgBox "Åñòü êîíòàêò!"
    'Else
    'MsgBox "Áåäà :("
    'End If
    
    '===
    k1 = a.Sheets(1).Cells(Rows.Count, "B").End(xlUp).Row
    For i = 6 To k1
     mv = a.Sheets(1).Cells(i, 2)
     pp = a.Sheets(1).Cells(i, 3)
     'MsgBox nn
     Set rst = New ADODB.Recordset 
     rst.Open ("SELECT SUM(Ïîðòôåëü.Ðàçìåð_êðåäèòà) From Ïîðòôåëü WHERE (Ïîðòôåëü.Ìåñÿö_âûäà÷è = '" & CStr(mv) & "') AND (Ïîðòôåëü.Ïîðòôåëü = '" & CDate(pp) & "')"), conn 
     a.Sheets(1).Cells(i, 4).CopyFromRecordset rst 
    Next i
'===
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
Application.DisplayStatusBar = True
Application.DisplayAlerts = True
'===
End Sub
...
Рейтинг: 0 / 0
Несоответствие типов данных.
    #38708844
Maxim12345678
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

формат стоит Дата/Время, dd.mm.yy
...
Рейтинг: 0 / 0
Несоответствие типов данных.
    #38708846
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и что изменилось? Как у тебя стояло CDate, так и стоит
...
Рейтинг: 0 / 0
Несоответствие типов данных.
    #38708853
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и в скобки зачем параметр взял? Ты же только что в другом топике натыкался на эти грабли и опять...
в данном случае, конечно, ни на что не влияет, но все-таки
...
Рейтинг: 0 / 0
Несоответствие типов данных.
    #38708854
Maxim12345678
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

Кусок не тот скинул.

Вот так работает, но результатов нет...
rst.Open ("SELECT SUM(Ïîðòôåëü.Ðàçìåð_êðåäèòà) From Ïîðòôåëü WHERE (Ïîðòôåëü.Ìåñÿö_âûäà÷è = '" & CStr(mv) & "') AND (Ïîðòôåëü.Ïîðòôåëü = #01/02/11#)"), conn
...
Рейтинг: 0 / 0
Несоответствие типов данных.
    #38708859
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ты месяц с днем местами не перепутал? сначала месяц, потом день, потом год

э-хе-хе, опять самому делать

Код: vbnet
1.
rst.Open "SELECT ... WHERE Портфель.Портфель = " & Format$(pp, "\#mm\/dd\/yyyy\#") , conn 
...
Рейтинг: 0 / 0
Несоответствие типов данных.
    #38708886
Maxim12345678
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

Портфель.Портфель = '&Format$(pp, '\#mm\/dd\/yyyy\#')'

Синтаксическая ошибка. У меня двойные кавычки вообще не воспринимает.
...
Рейтинг: 0 / 0
Несоответствие типов данных.
    #38708891
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Откуда у тебя взялись одинарные кавычки?
...
Рейтинг: 0 / 0
Несоответствие типов данных.
    #38708894
Maxim12345678
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

да это я пытался исправлять сам :(

Вот так работает: Портфель.Портфель = #02/01/2011#
...
Рейтинг: 0 / 0
Несоответствие типов данных.
    #38708912
Maxim12345678
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

спасибо за помощь. Так заработало:

Код: vbnet
1.
Портфель.Портфель = #" & Format(pp, "mm-dd-yyyy") & "#
...
Рейтинг: 0 / 0
Несоответствие типов данных.
    #38708950
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proтем более категорически не следует этого делать. Недавно тут был топик, как у какого-то клиента день недели в формате даты стоял.
Ну если у кого рукопопие - то он ССЗБ. А если строковый литерал даты передаётся на формирование текста запроса правильный - не вижу причины не использовать функцию, которая распознаётся Jet-ом...

Но в данном случае я и правда невнимательно посмотрел - у него дата берётся из переменной типа дата-время, тут без форматирования никуда, неявное преобразование в стринг сработает не так, как надо.
...
Рейтинг: 0 / 0
Несоответствие типов данных.
    #38708959
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaА если строковый литерал даты передаётся на формирование текста запроса правильныйНу не городи ерунды. Это ЕСЛИ будет адекватно работать только если формат даты ANSI (год впереди). Иначе вот:
Код: vbnet
1.
2.
3.
4.
?Format$(cdate("5-10-2001"),"mmm")
May
?Format$(cdate("5-10-2001"),"mmm")
окт

я всего лишь переключил регион в панели управления
...
Рейтинг: 0 / 0
Несоответствие типов данных.
    #38708966
Maxim12345678
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В итоге получается, что код отрабатывает, когда pp и String и Date. подскажите, как правильнее?
...
Рейтинг: 0 / 0
Несоответствие типов данных.
    #38708975
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильно - приводить значение к Date, потом насильно форматировать в нужный формат.
...
Рейтинг: 0 / 0
Несоответствие типов данных.
    #38708981
Maxim12345678
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

благодарю.
...
Рейтинг: 0 / 0
Несоответствие типов данных.
    #38708988
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, совет Акины плох еще тем, что в отборе на стороне сервера используется выражение вместо константы, то есть это может привести к сканированию таблицы вместо использования индекса.

Конкретно CDate по идее является детерминированной и теоретически этого не должно произойти, но фиг его знает, как поведет себя Jet, особенно в менее простых случаях. Всегда надо по возможности в отбор и сортировку нужно выносить константу вместо выражения.
...
Рейтинг: 0 / 0
30 сообщений из 30, показаны все 2 страниц
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Несоответствие типов данных.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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