powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Несоответствие типов
8 сообщений из 8, страница 1 из 1
Несоответствие типов
    #39484225
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте!

Во вложенном файле присутствует excel-ий файл с макросом. Там присутствует SQL-запрос к excel-ому листу.
SQL-запрос
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
SELECT
	Т1.`Город`,
	Т1.`Мера Март 2017`,
	Т1.`Мера Апрель 2017`,
	Т1.`Мера Май 2017`,
	Т1.`Обработанная мера Март 2017`,
	Т1.`Обработанная мера Апрель 2017`,
	Т1.`Обработанная мера Май 2017`,
	IIF(Т1.`Обработанная мера Май 2017` > 0, Т1.`Обработанная мера Май 2017` ,
		IIF(Т1.`Обработанная мера Апрель 2017` > 0, Т1.`Обработанная мера Апрель 2017`,
		IIF(Т1.`Обработанная мера Апрель 2017` > 0, Т1.`Обработанная мера Апрель 2017`,'Нет данных'))) AS `Итог`
FROM
	(SELECT
		Тв1.`Город`,
		Тв1.`Мера Март 2017`,
		Тв1.`Мера Апрель 2017`,
		Тв1.`Мера Май 2017`,		
		IIf(IsNull(Тв1.`Мера Март 2017`),Null,CDbl(Тв1.`Мера Март 2017`)) AS `Обработанная мера Март 2017`,
		IIf(IsNull(Тв1.`Мера Апрель 2017`),Null,CDbl(Тв1.`Мера Апрель 2017`)) AS `Обработанная мера Апрель 2017`,
		IIf(IsNull(Тв1.`Мера Май 2017`),Null,CDbl(Тв1.`Мера Май 2017`)) AS `Обработанная мера Май 2017`
	FROM
		`Исходные данные$` Тв1) AS Т1


Если нажать на кнопку, то запрос работает. А если во вкладке "Исходные данные" удалить ячейки, например, D2 или D3, то пишет "[Microsoft][Драйвер ODBC Excel] Несоответствие типов данных в выражении условия отбора".

Как правильно скорректировать в выделенном тексте SQL-запроса так, чтобы учитывался данный фактор?

Поле "Обработанная мера" это поле в числовом формате. Обратите внимание на поле "Мера2". Если в исходнике в колонке в первых строках пусто, то SQL колонку определяет как текстовый. Поэтому пришлось создавать поля как обрабатываемая мера.
...
Рейтинг: 0 / 0
Несоответствие типов
    #39484245
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уппс. В выделенном запросе вместо "Март 2017" было "Апрель 2017". Исправил

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
SELECT
	Т1.`Город`,
	Т1.`Мера Март 2017`,
	Т1.`Мера Апрель 2017`,
	Т1.`Мера Май 2017`,
	Т1.`Обработанная мера Март 2017`,
	Т1.`Обработанная мера Апрель 2017`,
	Т1.`Обработанная мера Май 2017`,
	IIF(Т1.`Обработанная мера Май 2017` > 0, Т1.`Обработанная мера Май 2017` ,
		IIF(Т1.`Обработанная мера Апрель 2017` > 0, Т1.`Обработанная мера Апрель 2017`,
		IIF(Т1.`Обработанная мера Март 2017` > 0, Т1.`Обработанная мера Март 2017`,'Нет данных'))) AS `Итог`
FROM
	(SELECT
		Тв1.`Город`,
		Тв1.`Мера Март 2017`,
		Тв1.`Мера Апрель 2017`,
		Тв1.`Мера Май 2017`,		
		IIf(IsNull(Тв1.`Мера Март 2017`),Null,CDbl(Тв1.`Мера Март 2017`)) AS `Обработанная мера Март 2017`,
		IIf(IsNull(Тв1.`Мера Апрель 2017`),Null,CDbl(Тв1.`Мера Апрель 2017`)) AS `Обработанная мера Апрель 2017`,
		IIf(IsNull(Тв1.`Мера Май 2017`),Null,CDbl(Тв1.`Мера Май 2017`)) AS `Обработанная мера Май 2017`
	FROM
		`Исходные данные$` Тв1) AS Т1


Еще раз выкладываю файл
...
Рейтинг: 0 / 0
Несоответствие типов
    #39484246
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikkпишет "[Microsoft][Драйвер ODBC Excel] Несоответствие типов данных в выражении условия отбора".ferzmikkЕсли в исходнике в колонке в первых строках пусто, то SQL колонку определяет как текстовый.Ну да... а явно привести к нужному типу? про CDbl() или там CCur() не слышал, что ли?
...
Рейтинг: 0 / 0
Несоответствие типов
    #39484262
Не понимаю, зачем вам весь этот огород с запросом, если итог по строке можно получить формулой с использованием вложенных функций ЕСЛИ и ЕПУСТО. Причем получение исходных данных можно настроить так, чтоб формула автоматически копировалась во все строки.
Но если хочется запросом, то можно попробовать так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT
	Т1.`Город`,
	Т1.`Мера Март 2017`,
	Т1.`Мера Апрель 2017`,
	Т1.`Мера Май 2017`,
	IIF(VAL(Т1.`Мера Май 2017`) > 0, Т1.`Мера Май 2017`,
		IIF(VAL(Т1.`Мера Апрель 2017`) > 0, Т1.`Мера Апрель 2017`,
		IIF(VAL(Т1.`Мера Апрель 2017`) > 0, Т1.`Мера Апрель 2017`,'Нет данных'))) AS `Итог`
FROM `Исходные данные$` Тв1) AS Т1

У вас в выражении `Мера Апрель 2017` повторяется, а `Мера Март 2017` отсутствует !?

Кстати, я сомневаюсь, что проверка пустой ячейки на IsNull даст правильный результат.
...
Рейтинг: 0 / 0
Несоответствие типов
    #39484559
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий ( Киев )Но если хочется запросом, то можно попробовать так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT
	Т1.`Город`,
	Т1.`Мера Март 2017`,
	Т1.`Мера Апрель 2017`,
	Т1.`Мера Май 2017`,
	IIF(VAL(Т1.`Мера Май 2017`) > 0, Т1.`Мера Май 2017`,
		IIF(VAL(Т1.`Мера Апрель 2017`) > 0, Т1.`Мера Апрель 2017`,
		IIF(VAL(Т1.`Мера Апрель 2017`) > 0, Т1.`Мера Апрель 2017`,'Нет данных'))) AS `Итог`
FROM `Исходные данные$` Тв1) AS Т1

Не работает так
Кстати, я сомневаюсь, что проверка пустой ячейки на IsNull даст правильный результат.А как правильно надо?
...
Рейтинг: 0 / 0
Несоответствие типов
    #39484566
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблему решил с помощью функции CStr и CVar.
Код: sql
1.
2.
3.
CStr(IIF(Т1.`Обработанная мера Май 2017` > 0, Т1.`Обработанная мера Май 2017` ,
		IIF(Т1.`Обработанная мера Апрель 2017` > 0, Т1.`Обработанная мера Апрель 2017`,
		IIF(Т1.`Обработанная мера Март 2017` > 0, Т1.`Обработанная мера Март 2017`,'Нет данных')))) AS `Итог`


Только колонка получается вся текстовая.

SQL может возвращать данные так, чтобы в одной колонке в каких строках были как числовые значения, а в других как текстовые?
...
Рейтинг: 0 / 0
Несоответствие типов
    #39484595
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikkТолько колонка получается вся текстовая.
А какой результат ты ожидал, используя функцию приведения к тексту?

ferzmikkчтобы в одной колонке в каких строках были как числовые значения, а в других как текстовые
Ну так для каждого поля - свою конвертирующую функцию:
Код: vbnet
1.
2.
3.
4.
SELECT CStr(F1), /* получится строковое */
       CLng(F2), /* получится целое 32 бита */
       CDbl(F3)  /* получится плавающая точка двойной точности */
/* и так далее */


Иногда для правильной интерпретации приходится выполнять двойное преобразование и/или использовать NZ().
...
Рейтинг: 0 / 0
Несоответствие типов
    #39484916
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaИногда для правильной интерпретации приходится выполнять двойное преобразование и/или использовать NZ() .
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Несоответствие типов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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