| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Базы данных и репортинг > Проблема с запросом Insert |
| Автор: Jonnik 1.3.2011, 00:39 | ||
| Подскажите насчет запроса. База находится в Access соедина с делфи через ADO. Выдает ошибку, что пропущен оператор. Не могу понять какой оператор. Все поля в таблице текстовые Сам запрос:
|
| Автор: Данкинг 1.3.2011, 00:46 | ||||
А с чего ты взял, что подобная конструкция сработает на Access? Вот я попробовал:
И Access выдал "ошибка синтаксиса". В то время как простой запрос работает:
|
| Автор: Antimol 1.3.2011, 11:45 | ||||||
К тому же эта конструкция если бы работала то только в том случае когда выражение:
возвратит только одно значение. Инструкция гласит что синтаксис таков:
Проверь отдельно каждую часть запроса на выполнение в Access, а потом приступай к реализации. |
| Автор: Jonnik 1.3.2011, 20:45 | ||
| Спасибо за объяснения, но у меня всеравно не получается. В общем необходимо из таблицы Operator перенести три поля в таблицу Otob_Oper. Первое и третье поле тупо переносятся, а для второго поля надо сначало узнать по ID его значение в таблице Val. Я эту проблему решил, но она решается тремя запросами, а это много писанины. Вопрос как сделать эту операцию одним запросом к базе? Вот пример кода:
|
| Автор: Antimol 2.3.2011, 14:53 | ||||||||||||
| Ну что ж, немного разобравшись с вышеприведенным кодом, создал БД. Думаю она будет похожа на оригинал: Вы писали что:
Это очень интересно, но все же, создал текстовые поля. Operator N_O ID_VAL Date_O Otob_Oper N_O Val Date_O Val ID_VAL N_VAL Теперь приступим к кодированию. Тестируем запрос в Аксес.
О чудо оно работает, а про это еще писал Данкинг
Ладно, теперь переходим к кодированию на делфи. Размещаем на форме ADOConnection1 - настраиваем подключение к БД. размещаем там же ADOQuery1 - настраиваем. Размещаем кнопку, по нажатию на которою будет выполняться запрос. На событие кнопки onClick пишим код:
Момент истины пришел. Запускаем, нажимаем и видим что? правильно "Операция удачно завершена". Так смотрим программа правильно работает или нет. Открываем Аксес и что видим - все ОК. Ну это так у меня, у вас может не получиться, но ничего не расстраиваемся, пробуем снова и снова, пока не получиться. Кстати можно писать просто
|
| Автор: Jonnik 2.3.2011, 19:32 |
| Спасибо. Все верно. Но есть маленькая проблема в этом месте: VAL.ID_VAL = OPERATOR.ID_VAL VAL.ID_VAL это цифровой параметр, а OPERATOR.ID_VAL текстовый поэтому происходит сравнение числа и строки. Как в этом случае быть? |
| Автор: Antimol 3.3.2011, 12:14 | ||||||||
Пожалуйста.
План действий: 1. (Изменяем таблицу VAL.ID_VAL - цифровое поле, OPERATOR.ID_VAL - текстовое ). Тестируем запрос в Access:
Результат: Говорит что типы у нас разные 2. Задаем вопрос: Что нужно сделать???? Ответ: Преобразовать тип, к примеру с текста в число 3. Ищем как преобразовать параметр. Ответ: находим функцию CInt 4. Тестируем снова, но уже с функией CInt
Результат: работает. |
| Автор: Jonnik 5.3.2011, 12:44 |
| Спасибо за консультацию |
| Автор: Jonnik 5.3.2011, 18:04 | ||
| Я кончно извеняюсь, но что то я никак не могу сделать эти два запроса в один. Я не могу понять как вставить первый запрос вместо переменно s8?
|