|
Вопрос # 4 464/ вопрос открыт / |
|
Приветствую, уважаемые эксперты!
Требуется из полей Edit1, Edit2, Edit3 и Edit4 занести данные в таблицу MySQL. Помогите составить запрос INSERT.
procedure TForm2.Button1Click(Sender: TObject);
begin
name := Edit2.Text;
folder := Edit3.Text;
start_time := MaskEdit1.Text;
retries := Edit5.Text;
retries_interval := Edit6.Text;
call_interval := Edit7.Text;
ZQuery1.SQL.Clear;
ZQuery1.SQL.Add('INSERT INTO tablica...');
ZQuery1.ExecSQL;
end;
Заранее спасибо!
 |
Вопрос задал: eJay (статус: Посетитель)
Вопрос отправлен: 28 июля 2010, 14:17
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Ерёмин А.А.
Здравствуйте, eJay!
В первом приближении примерно так:
'INSERT INTO tablename (field1,field2,field3,field4) VALUES
("'+Edit1.Text+'","'+Edit2.Text+'","'+Edit3.Text+'","'+Edit4.Text+'")'
Вместо field1..field4 нужно вписать имена полей в таблице, вместо tablename — имя самой таблицы.
Помимо этого разумно, конечно, экранировать кавычки, проверять корректность значений и т.д.
 |
Ответ отправил: Ерёмин А.А. (статус: *Администратор)
Время отправки: 28 июля 2010, 14:31
Оценка за ответ: 5
|
Мини-форум вопроса
Всего сообщений: 13; последнее сообщение — 28 июля 2010, 20:02; участников в обсуждении: 4.
|
Тов. Женька (статус: 3-ий класс), 28 июля 2010, 14:36 [#1]:
ZQuery1.SQL.Clear;
ZQuery1.SQL.Add('INSERT INTO tablica(fld1, fld2, fld3) values(:val1, :val2, :val3)');
ZQuery1.ParamByName('val1').AsInteger := StrToInt(Edit1.Text);
ZQuery1.ParamByName('val2').AsString := Edit2.Text;
ZQuery1.ParamByName('val3').AsString := Edit3.Text;
ZQuery1.ExecSQL;
INSERT INTO tablica
значения параметров val1, val2, val3 пойдут в поля fld1, fld2, fld3 соответственно. Тут играет роль последовательность.
P.S. Купи, на худой конц книжку по программированию БД в Delphi.
|
|
Vic (статус: 1-ый класс), 28 июля 2010, 14:41 [#2]:
Чтобы не заморачиваться с кавычками
необходимо использовать запрос с параметрами
'INSERT INTO tablename(field1,...,field4) VALUES(:par1,...,:par4)'
в качестве параметров - текст из Edit(ов)
и вместо Query - ADOCommand
ADOCommand.Text :=(наш запрос на добавление)
ADOCommand.Parameters.ParamByname('par1') :=Edit1.text;
.....
.....
ADOCommand.execute;
|
|
Ерёмин А.А. (статус: *Администратор), 28 июля 2010, 15:17 [#3]:
Кстати о параметрах... Не очень много программировал БД и недавно впервые встретился с такой штукой: первое вхождение параметра нормально меняется на значение, а вот последующие — нет. Что это за глюк такой? Либо в чём смысл такого поведения? В инете нашёл подобные упоминания. Советуют самое простое — сделать несколько параметров с разными именами. Но ведь бред!
|
|
Vic (статус: 1-ый класс), 28 июля 2010, 15:37 [#4]:
Да есть такое
значение параметров можно вводить 2-мя способами
1. когда в коде добавляются параметры
вот тогда и встречается этот глюк
надо при каждом проходе удалять параметр и снова вводить новый
2 - это способ описанный в этом вопросе - там все легко и глюков не наблюдается
|
|
eJay (статус: Посетитель), 28 июля 2010, 15:37 [#5]:
to Vic, я не через АДО подключаюсь, у меня ZEOS Lib.
procedure TForm2.Button1Click(Sender: TObject);
begin
name1 := Edit2.Text;
folder1 := Edit3.Text;
start_time1 := MaskEdit1.Text;
retries1 := Edit5.Text;
retries_interval1 := Edit6.Text;
call_interval1 := Edit7.Text;
ZQuery1.SQL.Clear;
ZQuery1.SQL.Add(
'INSERT INTO auto_dial_setting (name,folder,start_time,retries,retries_interval,call_interval,) VALUES ("' + name1 +
'","' + folder1 + '","' + start_time1 + '","' + retries1 + '","' + retries_interval1 + '","' + call_interval1 + '"');
ZQuery1.ExecSQL;
end;
|
|
Vic (статус: 1-ый класс), 28 июля 2010, 15:38 [#6]:
понял - не использовал никогда, извини
|
|
eJay (статус: Посетитель), 28 июля 2010, 15:39 [#7]:
Появляется ошибка. SQL Error: You have an error in your SQL syntax...
|
|
eJay (статус: Посетитель), 28 июля 2010, 15:52 [#8]:
Вот листинг кода и ссылка на скрин с ошибкой. Кто может подсказать в чем дело?
procedure TForm2.Button1Click(Sender: TObject);
begin
name1 := Edit2.Text;
folder1 := Edit3.Text;
start_time1 := MaskEdit1.Text;
retries1 := Edit5.Text;
retries_interval1 := Edit6.Text;
call_interval1 := Edit7.Text;
ZQuery1.SQL.Clear;
ZQuery1.SQL.Add(
'INSERT INTO auto_dial_setting (name,folder,start_time,retries,retries_interval,call_interval,) VALUES
("'+name1+'","'+folder1+'","'+start_time1+'","'+retries1+'","'+retries_interval1+'","'+call_interval1+'")');
ZQuery1.ExecSQL;
end;
Скрин: http://nclub.by.ru/111.JPG
|
|
Тов. Женька (статус: 3-ий класс), 28 июля 2010, 15:52 [#9]:
после call_interval, вероятно, надо запятую убрать.
|
|
eJay (статус: Посетитель), 28 июля 2010, 15:59 [#10]:
start_time1 := MaskEdit1.Text; - передает в БД одни нули.
|
|
eJay (статус: Посетитель), 28 июля 2010, 16:05 [#11]:
ну тут разобрался маск **-**-**** **:**:** а в бд пишется ****-**-** **:**:**
Кстати, не посоветуете какой нибудь компонент чтобы в одно эдите можно было выставлять дату и время?
|
|
Ерёмин А.А. (статус: *Администратор), 28 июля 2010, 18:00 [#12]:
Цитата (eJay):
Кстати, не посоветуете какой нибудь компонент чтобы в одно эдите можно было выставлять дату и время?
TMaskEdit с маской ##.##.#### ##:## или TDateTimePicker.
|
|
Тов. Женька (статус: 3-ий класс), 28 июля 2010, 20:02 [#13]:
Правильнее, как мне кажется, использовать TDateTimePicker.
Да и вообще я бы сделал два отдельных поля, одно для даты, а второе для времени.
А для передачи в БД в нужном виде можно использовать функцию FormatDateTime().
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|