Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 27.05.2018
Сообщений: 17
1
Delphi 6-7

Сохранение из DBLookUpComboBox в БД

27.05.2018, 12:26. Показов 1399. Ответов 23

Author24 — интернет-сервис помощи студентам
Помогите пожалуйста разобраться!!!!
У меня есть форма, на ней расположены компоненты Edit, DBLookUpComboBox, ComboBox, DateTimePicker.
В поля edit я ввожу данные, в остальных выбираю с помощью списка, и при нажатии на кнопку, данные должны сохраняться в БД Access.
Возникают ошибки: [Hint] Unit25.pas(177): Value assigned to 'tip_doz' never used,
[Hint] Unit25.pas(175): Value assigned to 'dolgn' never used, [Hint] Unit25.pas(174): Value assigned to 'podr' never used,
[Hint] Unit25.pas(168): Value assigned to 'dr' never used,
[Hint] Unit25.pas(148): Variable 'pol' is declared but never used in 'TForm25.BitBtn1Click'.

Прилагаю код:
Delphi
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
        var
    fio:string;
    pol:string;
    dr:TDateTime;
    doc_ser:string;
    doc_nom:string;
    ss_nom:string;
    nom_kart:string;
    podr:integer;
    dolgn:integer;
    CatPers:string;
    Person_ID:string;
    tip_doz:integer;
    nom_doz:string;
    begin
    Form25.ADOQuery1.Post;
    fio:=Edit1.Text;
    pol:=ComboBox1.Items;
    dr:=DateTimePicker1.Date;
    doc_ser:=Edit4.Text;
    doc_nom:=Edit5.Text;
    ss_nom:=Edit6.Text;
    nom_kart:=Edit7.Text;
    Person_ID:=Edit8.Text;
    podr:=DBLookupComboBox1.KeyValue;
    dolgn:=DBLookupComboBox3.KeyValue;
    CatPers:=DBLookupComboBox4.KeyValue;
    tip_doz:=DBLookupComboBox2.KeyValue;
    nom_doz:=Edit9.Text;
 
    form25.ADOQuery1.Close;
    form25.ADOQuery1.SQL.Clear;
 
form25.ADOQuery1.SQL.Add('Insert Into PersonKart(Person_ID, fio,  doc_ser,  doc_nom, ss_nom, nom_kart)');
form25.ADOQuery1.SQL.Add('Values ("'+Edit8.Text+'", "'+Edit1.Text+'",   "'+Edit4.Text+'", "'+Edit5.Text+'", "'+Edit6.Text+'", "'+Edit7.Text+'")');
form25.ADOQuery1.Active:=True;
form25.ADOQuery1.ExecSQL;
Form25.ADOQuery1.Refresh;
    form25.ADOQuery1.ExecSQL;
    Form25.ADOQuery1.Refresh;
 
    end;
Так же возникает ошибка, показанная на фото.
Не могу понять как сохранять из DBLookUpCmboBox и ComboBox в бд данные..
Хочу разобраться, что не так и как исправить ошибки, ибо нужно сделать, а плохо понимаю((

С добавлением Edit, вопросов нет (я не стала прикладывать код с описанием их типов и т.д)!
Миниатюры
Сохранение из DBLookUpComboBox в БД  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.05.2018, 12:26
Ответы с готовыми решениями:

Сохранение списка объектов класса в ручную, сохранение в XML. Без сериализации.
Здравствуйте! Хотел спросить. Как можно сохранить список объектов в XML файл вручную? Я...

2 DBLookupComboBox
День добрый. Следует реализовать следующую вещь. Подскажите плиз...человек я еще не совсем опытный....

DBLookupComboBox
Добрый вечер всем) У меня такая проблема: В базе данных в Access имеется одна таблица Студенты. И...

DBLookupComboBox
Здравствуйте, как добавить запись из одной таблицы в другую с помощью DBLookupComboBox ? Спасибо.

23
0 / 0 / 0
Регистрация: 27.05.2018
Сообщений: 17
27.05.2018, 12:27  [ТС] 2
0
5395 / 4323 / 1060
Регистрация: 29.08.2013
Сообщений: 27,130
Записей в блоге: 3
27.05.2018, 12:50 3
Цитата Сообщение от Аннушка23 Посмотреть сообщение
Возникают ошибки:
это не ошибки, это предупреждения - переведите их и все поймете

Цитата Сообщение от Аннушка23 Посмотреть сообщение
Form25.ADOQuery1.Post;
что вы делаете этой строкой?
0
0 / 0 / 0
Регистрация: 27.05.2018
Сообщений: 17
27.05.2018, 13:59  [ТС] 4
ADOQuery1.Post; это вроде бы должно быть сохранение, если не ошибаюсь
и оно по-идее должно быть уже после всего
я уберу оттуда его

Добавлено через 3 минуты
Delphi
1
2
form25.ADOQuery1.SQL.Add('Insert Into PersonKart(Person_ID, fio,  doc_ser,  doc_nom, ss_nom, nom_kart)');
form25.ADOQuery1.SQL.Add('Values ("'+Edit8.Text+'", "'+Edit1.Text+'",   "'+Edit4.Text+'", "'+Edit5.Text+'", "'+Edit6.Text+'", "'+Edit7.Text+'")');
сюда нужно добавлять поля dblookupcombobox?

Добавлено через 13 минут
Сейчас возникает ошибка синтаксиса конструкции insert into
0
5786 / 4528 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
27.05.2018, 18:26 5
вот вы видите, что конкретно за строка получилась в результате вашего конструктора?
нет
и мы - нет
а сервер видит. и говорит, что что-то не то

а теперь намекну, может, и вам узнать?
0
0 / 0 / 0
Регистрация: 27.05.2018
Сообщений: 17
27.05.2018, 22:59  [ТС] 6
Вообще ничего не понимаю

Добавлено через 3 часа 26 минут
Изменила код
Все равно ошибка((
Delphi
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
var
fio:string;
pol:string;
dr:TDateTime;
doc_ser:string;
doc_nom:string;
ss_nom:string;
nom_kart:string;
podr:integer;
dolgn:integer;
kat_pers:string;
Person_ID:string;
tip_doz:integer;
nom_doz:string;
begin
fio:=Edit1.Text;
pol:=ComboBox1.Text;
dr:=DateTimePicker1.Date;
doc_ser:=Edit4.Text;
doc_nom:=Edit5.Text;
ss_nom:=Edit6.Text;
nom_kart:=Edit7.Text;
Person_ID:=Edit8.Text;
podr:=DBLookupComboBox1.KeyValue;
dolgn:=DBLookupComboBox3.KeyValue;
kat_pers:=DBLookupComboBox4.KeyValue;
tip_doz:=DBLookupComboBox2.KeyValue;
nom_doz:=Edit9.Text;
 
form25.ADOQuery1.Close;
form25.ADOQuery1.SQL.Clear;
 
form25.ADOQuery1.SQL.Add('Insert Into PersonKart(Person_ID, fio,  doc_ser,  doc_nom, ss_nom, nom_kart, pol, kat_pers, podr, dolgn, tip_doz, nom_doz)');
form25.ADOQuery1.SQL.Add('Values ("'+Edit8.Text+'", "'+Edit1.Text+'",   "'+Edit4.Text+'", "'+Edit5.Text+'", "'+Edit6.Text+'", "'+Edit7.Text+'", "'+ComboBox1.Text+'", "'+DBLookupComboBox4.KeyValue+'","'+DBLookupComboBox1.KeyValue+'","'+DBLookupComboBox3.KeyValue+'","'+DBLookupComboBox2.KeyValue+'", "'+Edit9.Text+'")');
form25.ADOQuery1.Active:=True;
form25.ADOQuery1.ExecSQL;
Form25.ADOQuery1.Refresh;
 
end;
Добавлено через 22 минуты
Ошибка

Добавлено через 13 секунд
Could not convert variant of type (Null) into type (String)
0
5786 / 4528 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
28.05.2018, 06:40 7
плохо изменили. было лучше. строки 35,37 из другой песни

как
нам
узнать
что
получилось
в
ADOQuery1.SQL ??

может, сначала всю строку положить в переменную S:string
потом прочесть как остановить программу в нужном месте
https://habrahabr.ru/post/178007/
и посмотреть, что же такое в строке, что не нравится серверу
0
5786 / 4528 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
28.05.2018, 07:05 8
при чем тут компоненты вообще?
вы конструируете обычную СТРОКУ запроса
вот по этому простому правилу
https://www.w3schools.com/sql/sql_insert.asp

поместите свои значения из компонентов в строки
S1, S2, S3.
и соберите строку S используя их значения
ничего же не изменится
эту строку S можете посылать серверу
Delphi
1
ADOQuery.SQL.Text := s;
еще удобнее для вставки значений в выражение использовать параметры
см. тут, там есть раздел про insert
https://www.cyberforum.ru/blog... g5254.html

и не надо плодить темы
0
472 / 161 / 80
Регистрация: 07.10.2015
Сообщений: 379
28.05.2018, 08:45 9
Аннушка23, а через параметры не подходит?
0
5786 / 4528 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
28.05.2018, 09:55 10
конечно подходит
0
0 / 0 / 0
Регистрация: 27.05.2018
Сообщений: 17
28.05.2018, 17:58  [ТС] 11
А как через параметры?
0
5786 / 4528 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
28.05.2018, 20:29 12
https://www.cyberforum.ru/blog... g5254.html

Добавлено через 27 секунд
вдруг со второго раза прочтет ))
0
0 / 0 / 0
Регистрация: 27.05.2018
Сообщений: 17
28.05.2018, 21:48  [ТС] 13
Я читаю все, что вы написали, пытаюсь понять и разобраться
Спасибо!
0
5786 / 4528 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
29.05.2018, 08:17 14
вот и задавайте вопросы по тому что непонятно там где читаете
а то у вас третья тема и все одно и то же...
0
0 / 0 / 0
Регистрация: 27.05.2018
Сообщений: 17
29.05.2018, 12:57  [ТС] 15
Я изменила код, как показано в блоге
Сделала через параметры
Так же возникает ошибка
Could not convert variant of type (Null) into type (String)
И выделяется эта строка:

Delphi
1
ADOQuery1.SQL.Text := 'INSERT INTO  PersonKart(Person_ID, fio, pol, dr, doc_ser, doc_nom, ss_nom, podr, nom_kart, kat_pers, dolgn, tip_doz, nom_doz) VALUES ("'+Edit8.Text+'", "'+Edit1.Text+'", "'+DateTimePicker1.Format+'", "'+Edit4.Text+'", "'+Edit5.Text+'", "'+Edit6.Text+'", "'+Edit7.Text+'", "'+ComboBox1.Text+'", "'+DBLookupComboBox4.KeyValue+'","'+DBLookupComboBox1.KeyValue+'","'+DBLookupComboBox3.KeyValue+'","'+DBLookupComboBox2.KeyValue+'", "'+Edit9.Text+'")';

Delphi
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
begin
ADOQuery1.Close;
ADOQuery1.SQL.Text := 'INSERT INTO  PersonKart(Person_ID, fio, pol, dr, doc_ser, doc_nom, ss_nom, podr, nom_kart, kat_pers, dolgn, tip_doz, nom_doz) VALUES ("'+Edit8.Text+'", "'+Edit1.Text+'", "'+DateTimePicker1.Format+'", "'+Edit4.Text+'", "'+Edit5.Text+'", "'+Edit6.Text+'", "'+Edit7.Text+'", "'+ComboBox1.Text+'", "'+DBLookupComboBox4.KeyValue+'","'+DBLookupComboBox1.KeyValue+'","'+DBLookupComboBox3.KeyValue+'","'+DBLookupComboBox2.KeyValue+'", "'+Edit9.Text+'")';
ADOQuery1.Parameters.ParamByName('Person_ID').DataType := ftString;
ADOQuery1.Parameters.ParamByName('Person_ID').Value := Edit8.Text;
 
ADOQuery1.Parameters.ParamByName('fio').DataType := ftString;
ADOQuery1.Parameters.ParamByName('fio').Value := Edit1.Text;
 
ADOQuery1.Parameters.ParamByName('pol').DataType := ftString;
ADOQuery1.Parameters.ParamByName('pol').Value := ComboBox1.Text;
 
ADOQuery1.Parameters.ParamByName('dr').DataType := ftDate;
ADOQuery1.Parameters.ParamByName('dr').Value := DateTimePicker1.Date;
 
ADOQuery1.Parameters.ParamByName('doc_ser').DataType := ftString;
ADOQuery1.Parameters.ParamByName('doc_ser').Value := Edit4.Text;
 
ADOQuery1.Parameters.ParamByName('doc_nom').DataType := ftString;
ADOQuery1.Parameters.ParamByName('doc_nom').Value := Edit5.Text;
 
ADOQuery1.Parameters.ParamByName('ss_nom').DataType := ftString;
ADOQuery1.Parameters.ParamByName('ss_nom').Value := Edit6.Text;
 
ADOQuery1.Parameters.ParamByName('podr').DataType := ftInteger;
ADOQuery1.Parameters.ParamByName('podr').Value := DBLookupComboBox1.KeyValue;
 
ADOQuery1.Parameters.ParamByName('nom_kart').DataType := ftString;
ADOQuery1.Parameters.ParamByName('nom_kart').Value := Edit7.Text;
 
ADOQuery1.Parameters.ParamByName('kat_pers').DataType := ftString;
ADOQuery1.Parameters.ParamByName('kat_pers').Value := DBLookupComboBox4.KeyValue;
 
ADOQuery1.Parameters.ParamByName('dolgn').DataType := ftInteger;
ADOQuery1.Parameters.ParamByName('dolgn').Value := DBLookupComboBox3.KeyValue;
 
ADOQuery1.Parameters.ParamByName('tip_doz').DataType := ftInteger;
ADOQuery1.Parameters.ParamByName('tip_doz').Value := DBLookupComboBox2.KeyValue;
 
ADOQuery1.Parameters.ParamByName('nom_doz').DataType := ftInteger;
ADOQuery1.Parameters.ParamByName('nom_doz').Value := Edit9.Text;
 
ADOQuery1.ExecSQL;
Может ли быть из-за того, что она слишком длинная?
0
5786 / 4528 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
29.05.2018, 13:29 16
так как код вы все-таки уже немного меняете и даже в правильном направлении ))) ,
давайте я вам расскажу еще раз про параметры в SQL запросе
параметр - это слово, которое начинается на :
когда мы передаем серверу значение параметра :рaram , сам сервер подставляет вместо :рaram переданное значение
и сам заботится, нужно его в кавычки брать или нет, и т.д.
в вашем случае нужно написать так
Delphi
1
2
ADOQuery1.SQL.Text := 'INSERT INTO  PersonKart(Person_ID, fio, pol, dr, doc_ser, doc_nom, ss_nom, podr, nom_kart, kat_pers, dolgn, tip_doz, nom_doz)  '+
'VALUES (:Person_ID, :fio, :pol, :dr, :doc_ser, :doc_nom, :ss_nom, :podr, :nom_kart, :kat_pers, :dolgn, :tip_doz, :nom_doz)';
совсем не обязательно имена параметров повторяют название полей, можно было написать :р1, :р2 ...
просто так удобнее
сделайте это и отчитайтесь о результате

а ваша ошибка сейчас это печальное неумение просто считать
смотрите по очереди, поле и значение, которое вы ему передаете
SQL
1
PersonKart(Person_ID, fio, pol, dr,
SQL
1
VALUES("'+Edit8.Text+'", "'+Edit1.Text+'", "'+DateTimePicker1.Format+'", "'+Edit4.Text+'" ...
допустим у вас вEdit8.Text действительно Person_ID и в Edit1.text - FIO
но поверить, что в DateTimePicker1.Format у вас находится POL я не смогу))
мало того дальше идет поле dr, что я подозреваю как Dата Rождения , и вот туда DateTimePicker1 по смыслу подходит гораздо больше.
правда, в DateTimePicker1.format совсем не выбранная дата а как и написано, формат этой даты, например dd.mm.yyyy
вряд ли это то, что вы хотели вставить в БД
0
0 / 0 / 0
Регистрация: 27.05.2018
Сообщений: 17
29.05.2018, 14:44  [ТС] 17
Не правильно составила запрос
Сейчас переделаю, заметила поздно

Добавлено через 19 минут
Да, да, да, я заметила ошибку в полях
Это просто не внимательность
Я уже изменила

Delphi
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
ADOQuery1.Close;
ADOQuery1.SQL.Text := 'INSERT INTO  PersonKart(Person_ID, fio, pol, dr, doc_ser, doc_nom, ss_nom, podr, nom_kart, kat_pers, dolgn, tip_doz, nom_doz) VALUES (:ID,:F,:P,:D,:DS,:DN,:SN,:POD,:NK,:KP,:DOL,:TP,:ND)';
ADOQuery1.Parameters.ParamByName('ID').DataType := ftString;
ADOQuery1.Parameters.ParamByName('ID').Value := Edit8.Text;
 
ADOQuery1.Parameters.ParamByName('F').DataType := ftString;
ADOQuery1.Parameters.ParamByName('F').Value := Edit1.Text;
 
ADOQuery1.Parameters.ParamByName('P').DataType := ftString;
ADOQuery1.Parameters.ParamByName('P').Value := ComboBox1.Text;
 
ADOQuery1.Parameters.ParamByName('D').DataType := ftDate;
ADOQuery1.Parameters.ParamByName('D').Value := DateTimePicker1.Date;
 
ADOQuery1.Parameters.ParamByName('DS').DataType := ftString;
ADOQuery1.Parameters.ParamByName('DS').Value := Edit4.Text;
 
ADOQuery1.Parameters.ParamByName('DN').DataType := ftString;
ADOQuery1.Parameters.ParamByName('DN').Value := Edit5.Text;
 
ADOQuery1.Parameters.ParamByName('SN').DataType := ftString;
ADOQuery1.Parameters.ParamByName('SN').Value := Edit6.Text;
 
ADOQuery1.Parameters.ParamByName('POD').DataType := ftInteger;
ADOQuery1.Parameters.ParamByName('POD').Value := DBLookupComboBox1.KeyValue;
 
ADOQuery1.Parameters.ParamByName('NK').DataType := ftString;
ADOQuery1.Parameters.ParamByName('NK').Value := Edit7.Text;
 
ADOQuery1.Parameters.ParamByName('KP').DataType := ftString;
ADOQuery1.Parameters.ParamByName('KP').Value := DBLookupComboBox4.KeyValue;
 
ADOQuery1.Parameters.ParamByName('DOL').DataType := ftInteger;
ADOQuery1.Parameters.ParamByName('DOL').Value := DBLookupComboBox3.KeyValue;
 
ADOQuery1.Parameters.ParamByName('TP').DataType := ftInteger;
ADOQuery1.Parameters.ParamByName('TP').Value := DBLookupComboBox2.KeyValue;
 
ADOQuery1.Parameters.ParamByName('ND').DataType := ftInteger;
ADOQuery1.Parameters.ParamByName('ND').Value := Edit9.Text;
 
ADOQuery1.ExecSQL;
Добавлено через 1 минуту
С датой еще сейчас разберусь
0
0 / 0 / 0
Регистрация: 27.05.2018
Сообщений: 17
29.05.2018, 14:51  [ТС] 18
А это что за зверь?)
Миниатюры
Сохранение из DBLookUpComboBox в БД  
0
0 / 0 / 0
Регистрация: 27.05.2018
Сообщений: 17
29.05.2018, 14:58  [ТС] 19
Так, изменила в дате на DateTimePicker1.format
Возникает ошибка (фото)
И выделяется строка:

Delphi
1
ADOQuery1.Parameters.ParamByName('DS').DataType := ftString;
Миниатюры
Сохранение из DBLookUpComboBox в БД  
0
5786 / 4528 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
29.05.2018, 16:07 20
при чем тут format ???
чтобы поймать вашу ошибку напишите
Delphi
1
2
3
4
5
6
ADOQuery1.SQL.Text := 'INSERT INTO  PersonKart(Person_ID, fio) VALUES (:ID,:F)';
ADOQuery1.Parameters.ParamByName('ID').DataType := ftString;
ADOQuery1.Parameters.ParamByName('ID').Value := Edit8.Text;
ADOQuery1.Parameters.ParamByName('F').DataType := ftString;
ADOQuery1.Parameters.ParamByName('F').Value := Edit1.Text;
ADOQuery1.ExecSQL;
если все норм добавьте еще одно поле потом еще
и найдете, кто у вас и что переполняет

просто ваше значение больше по размеру чем поле в БД , куда вы его пихаете
0
29.05.2018, 16:07
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.05.2018, 16:07
Помогаю со студенческими работами здесь

DbLookUpCombobox и БД
Добрый день. Имеется таблица в SQL, которая хранит информацию об автомобилях. Марка_авто,...

2 х DBLookupComboBox
Доброго времени суток. Есть таблица из 4 столбцов(ID_tovara, Category, Name, Count). Также имеется...

Dblookupcombobox
после добавления через dblookupcombobox всё глючит сильно.. в одних таблицах добавление через него...

DBLookupComboBox
Есть mdb соединяется через ADO c Delphi, данные в таблицу заполняюся таким образом : ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru