Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
Мусаси
8 / 8 / 2
Регистрация: 07.05.2013
Сообщений: 203
1

Создание SQL-запросов в Delphi XE4

27.04.2014, 19:11. Просмотров 1318. Ответов 10
Метки нет (Все метки)

Добрый день. Есть очень простой вопрос. Я работал в Delphi 7, а сейчас в Delphi XE4. Создал БД в Access, создал запрос на добавление в Delphi XE4. При попытки добавления сотрудника Выдаёт ошибку "Ошибка синтаксиса в инструкции Insert into". Чё за хрень ума не приложу. В семерке у меня бы давно получилось. Скрин БД я прикрепил

Создание SQL-запросов в Delphi XE4
.

Код внизу. Исправьте пожалуйста. ))))

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//добавить сотрудника
DataModule2.ADOQ2_Insert_Sotrudnika.Close;
DataModule2.ADOQ2_Insert_Sotrudnika.SQL.Clear;
DataModule2.ADOQ2_Insert_Sotrudnika.SQL.Add('insert into Сотрудник(Фамилия, Имя, Отчество,Д/Р, Адрес, Телефон, Серия_паспорта, Должность) values (:Фамилия, :Имя, :Отчество,:Д/Р, :Адрес, :Телефон, :Серия_паспорта, :Должность)');
DataModule2.ADOQ2_Insert_Sotrudnika.Parameters.ParamByName('Фамилия').Value:=Edit1.Text;
DataModule2.ADOQ2_Insert_Sotrudnika.Parameters.ParamByName('Имя').Value:=Edit2.Text;
DataModule2.ADOQ2_Insert_Sotrudnika.Parameters.ParamByName('Отчество').Value:=Edit3.Text;
DataModule2.ADOQ2_Insert_Sotrudnika.Parameters.ParamByName('Д/Р').Value:=DateTimePicker1.Date;
DataModule2.ADOQ2_Insert_Sotrudnika.Parameters.ParamByName('Адрес').Value:=Edit4.Text;
DataModule2.ADOQ2_Insert_Sotrudnika.Parameters.ParamByName('Телефон').Value:=Edit4.Text;
DataModule2.ADOQ2_Insert_Sotrudnika.Parameters.ParamByName('Серия_паспорта').Value:=Edit4.Text;
DataModule2.ADOQ2_Insert_Sotrudnika.Parameters.ParamByName('Должность').Value:=Edit1.Text;
 
DataModule2.ADOQ2_Insert_Sotrudnika.ExecSQL;
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.04.2014, 19:11
Ответы с готовыми решениями:

Delphi XE4 синтаксис sql запроса
Добрый день, Есть у меня такой запрос, который работает в Pl/SQL Developer....

Delphi XE4 SQL запрос на подсчет суммы
Составил запрос на подсчет суммы по критерию (Код_заказа (не ключевое)). И не...

Delphi XE4 SQL запрос. Добавление записи в последнюю позицию DBGrid
Еще раз всем привет! Возникла вот такая загогулина. Есть поле Edit, в котором...

Создание запросов к БД в приложении Delphi
Задание: добавиую форму создать поля просмотра в зависимых таблицах; ...

Вывод данных в БД Access 2003 при использование SQL запросов. Delphi
Добрый день или вечер Камрады, столкнулся с проблемой при использование...

10
Скандербег
943 / 897 / 299
Регистрация: 07.08.2012
Сообщений: 2,500
27.04.2014, 23:33 2
Вот так запросто: Д/Р
Ну, хотя бы, как принято в аксессе: [Д/Р]
1
Мусаси
8 / 8 / 2
Регистрация: 07.05.2013
Сообщений: 203
28.04.2014, 09:48  [ТС] 3
Спасибо. Ответ даже очень простой.

А теперь еще один вопрос. К таблице сотрудники есть таблица должности. Отношение 1 ко многим. Поле должности в таблице Сотрудник имеет числовой тип. Как с помощью DBLookupCombobox вставить значение в таблицу Сотрудник, если будут выбираться Наименование должности, которое имеет текстовый тип из таблицы Должности?

Если я выбираю значение в ListField Наименование_должности, пишет не соответствие типов, а если код должности, тогда подставляет, но при этом я вижу не наименование_должности, а его код в DBLookupCombobox.
0
Скандербег
943 / 897 / 299
Регистрация: 07.08.2012
Сообщений: 2,500
28.04.2014, 10:03 4
Использовать свойства DBLookupCombobox:
при разработке:
ListSource - для подключения к компоненту таблицы Должности (черезе ADOTable и Datasource)
KeyField - указать поле-идентификатор в т. Должности (как он там называется)
ListField - здесь указать поле Наименование должности
при работе программы:
KeyValue - для получения значения поля-идентификатора (для поля Должности в т. Сотрудники) после выбора должности пользователем.
Другие свойства в данном случае не используются.
0
Мусаси
8 / 8 / 2
Регистрация: 07.05.2013
Сообщений: 203
28.04.2014, 22:15  [ТС] 5
Что-то не работает. У меня возникла идея, а если значение ValueKey занести в еще один Edit и из него перенести в таблицу. Все как бы не плохо, только почему-то не воспринимает перевод StrToLongint(Edit7.text). Кричит что тип не соответствует, хотя В таблице написано длинное целое. Как тогда его в длинное целое перевести?
0
Скандербег
943 / 897 / 299
Регистрация: 07.08.2012
Сообщений: 2,500
28.04.2014, 22:29 6
KeyValue - это не длинное и не короткое и даже не целое - это тип Variant. А значение типа Variant преобразовывать не надо.
Да и зачем переносить в едит, если можно сохранить это значение в переменной, а потом оттуда взять.
Но идея, сама по себе, не очень - какие-то лишние телодвижения.
Опять же, непонятно почему "не работает", если значение KeyValue существует (не зря же куда-то его хочется занести). А ведь это значение результат нормальной работы компонента.
0
Мусаси
8 / 8 / 2
Регистрация: 07.05.2013
Сообщений: 203
29.04.2014, 00:09  [ТС] 7
Фигня какая-то. Все сделал, как ты говорил

Delphi
1
DataModule2.ADOQ2_Insert_Sotrudnika.Parameters.ParamByName('Должность').Value:=DBLookupComboBox1.KeyValue;
По идее все правильно, должно работать.

И снова выдаёт эту долбаную ошибку. Я прикреплю файл Программа.rar. Может найдешь ошибку?
0
Скандербег
943 / 897 / 299
Регистрация: 07.08.2012
Сообщений: 2,500
29.04.2014, 06:25 8
Ошибка не здесь, а в присвоении даты:
Delphi
1
...ParamByName('Дата_рождения').Value:=DateOf(DateTimePicker1.Date);
Пикер этот содержит и время, которое надо отсекать, иначе ошибка такая и бывает.
Функция DateOf (тем и занимается, что дата остается с очищенным временем) находится в модуле DateUtils:
Delphi
1
uses Главная, Module, DateUtils;
0
Мусаси
8 / 8 / 2
Регистрация: 07.05.2013
Сообщений: 203
29.04.2014, 09:52  [ТС] 9
Спасибо, указал в каком направлении рыть. Только на счет DateOf(....) пишет вот что

[dcc32 Error] Сотрудники.pas(61): E2003 Undeclared identifier: 'DateOf'

Думаю, что-нибудь придумаю. Но все равно Гран Мерси.
0
Скандербег
943 / 897 / 299
Регистрация: 07.08.2012
Сообщений: 2,500
29.04.2014, 12:34 10
Пож., внимательнее посмотрите мой прежний пост.
В нем рассказано что делать чтобы не было этой ошибки.
Но можно и по-буквам:
надо найти в тексте модуля слово uses, которое находится после слова implementation
рядом со словом uses находятся имена модулей: uses Главная, Module;
после слова Module нужно поставить запятую и вписать DateUtils, чтобы получилось так:
uses Главная, Module, DateUtils;
Упомянутой ошибки при компиляции не будет.
1
Мусаси
8 / 8 / 2
Регистрация: 07.05.2013
Сообщений: 203
01.05.2014, 20:56  [ТС] 11
Большое тебе спасибо. Есть ли у тебя какие-нибудь книги по делфи или какие можешь посоветовать? Если есть скинь на мою почту, если тебе не сложно terran.doatk@mail.ru. Буду очень благодарен.

Еще раз СПАСИБО!!!
0
01.05.2014, 20:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.05.2014, 20:56

Delphi XE4 дебаггинг
Если начинать компиляцию через Trace into, то показывает ход компиляции не...

Анимация иконки в TrayIcon (Delphi XE4)
Всем привет! Помогите пожалуйста решить вопрос. Допустим у меня есть на форме...

О вызове хр.процедур Oracle из Delphi XE4
Добрый день, Форумчанины. Вот несколько дней ломаю голову над вызовом...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru