![]() |
|
![]() ![]() ![]() |
|
Jonnik |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 9.2.2006 Репутация: нет Всего: нет |
Подскажите насчет запроса.
База находится в Access соедина с делфи через ADO. Выдает ошибку, что пропущен оператор. Не могу понять какой оператор. Все поля в таблице текстовые Сам запрос:
Это сообщение отредактировал(а) Jonnik - 1.3.2011, 00:45 |
|||
|
||||
Данкинг |
|
||||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 35 Всего: 130 |
А с чего ты взял, что подобная конструкция сработает на Access? Вот я попробовал:
И Access выдал "ошибка синтаксиса". В то время как простой запрос работает:
-------------------- There's nothing left but silent epitaphs. |
||||
|
|||||
Antimol |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 118 Регистрация: 28.7.2007 Где: Украина, Киев Репутация: 4 Всего: 4 |
К тому же эта конструкция если бы работала то только в том случае когда выражение:
возвратит только одно значение. Инструкция гласит что синтаксис таков:
Проверь отдельно каждую часть запроса на выполнение в Access, а потом приступай к реализации. Это сообщение отредактировал(а) Antimol - 1.3.2011, 11:50 --------------------
Лучшее спасибо это "+" к репутации. Мой блог: ИНФОРМАТИЗАЦИЯ, и mirsovetov.net. Написание программ, исправление ошибок, статьи.... |
||||||
|
|||||||
Jonnik |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 9.2.2006 Репутация: нет Всего: нет |
Спасибо за объяснения, но у меня всеравно не получается.
В общем необходимо из таблицы Operator перенести три поля в таблицу Otob_Oper. Первое и третье поле тупо переносятся, а для второго поля надо сначало узнать по ID его значение в таблице Val. Я эту проблему решил, но она решается тремя запросами, а это много писанины. Вопрос как сделать эту операцию одним запросом к базе? Вот пример кода:
|
|||
|
||||
Antimol |
|
||||||||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 118 Регистрация: 28.7.2007 Где: Украина, Киев Репутация: 4 Всего: 4 |
Ну что ж, немного разобравшись с вышеприведенным кодом, создал БД. Думаю она будет похожа на оригинал:
Вы писали что:
Это очень интересно, но все же, создал текстовые поля. Operator N_O ID_VAL Date_O Otob_Oper N_O Val Date_O Val ID_VAL N_VAL Теперь приступим к кодированию. Тестируем запрос в Аксес.
О чудо оно работает, а про это еще писал Данкинг
Ладно, теперь переходим к кодированию на делфи. Размещаем на форме ADOConnection1 - настраиваем подключение к БД. размещаем там же ADOQuery1 - настраиваем. Размещаем кнопку, по нажатию на которою будет выполняться запрос. На событие кнопки onClick пишим код:
Момент истины пришел. Запускаем, нажимаем и видим что? правильно "Операция удачно завершена". Так смотрим программа правильно работает или нет. Открываем Аксес и что видим - все ОК. Ну это так у меня, у вас может не получиться, но ничего не расстраиваемся, пробуем снова и снова, пока не получиться. Кстати можно писать просто
--------------------
Лучшее спасибо это "+" к репутации. Мой блог: ИНФОРМАТИЗАЦИЯ, и mirsovetov.net. Написание программ, исправление ошибок, статьи.... |
||||||||||||
|
|||||||||||||
Jonnik |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 9.2.2006 Репутация: нет Всего: нет |
Спасибо. Все верно.
Но есть маленькая проблема в этом месте: VAL.ID_VAL = OPERATOR.ID_VAL VAL.ID_VAL это цифровой параметр, а OPERATOR.ID_VAL текстовый поэтому происходит сравнение числа и строки. Как в этом случае быть? Это сообщение отредактировал(а) Jonnik - 2.3.2011, 21:43 |
|||
|
||||
Antimol |
|
||||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 118 Регистрация: 28.7.2007 Где: Украина, Киев Репутация: 4 Всего: 4 |
Пожалуйста.
План действий: 1. (Изменяем таблицу VAL.ID_VAL - цифровое поле, OPERATOR.ID_VAL - текстовое ). Тестируем запрос в Access:
Результат: Говорит что типы у нас разные 2. Задаем вопрос: Что нужно сделать???? Ответ: Преобразовать тип, к примеру с текста в число 3. Ищем как преобразовать параметр. Ответ: находим функцию CInt 4. Тестируем снова, но уже с функией CInt
Результат: работает. --------------------
Лучшее спасибо это "+" к репутации. Мой блог: ИНФОРМАТИЗАЦИЯ, и mirsovetov.net. Написание программ, исправление ошибок, статьи.... |
||||||||
|
|||||||||
Jonnik |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 9.2.2006 Репутация: нет Всего: нет |
Спасибо за консультацию
Это сообщение отредактировал(а) Jonnik - 5.3.2011, 12:45 |
|||
|
||||
Jonnik |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 9.2.2006 Репутация: нет Всего: нет |
Я кончно извеняюсь, но что то я никак не могу сделать эти два запроса в один.
Я не могу понять как вставить первый запрос вместо переменно s8?
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Базы данных и репортинг" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |