Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 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 Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: 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

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

Vic (статус: 1-ый класс), 28 июля 2010, 15:37 [#4]:

Да есть такое
значение параметров можно вводить 2-мя способами
1. когда в коде добавляются параметры
вот тогда и встречается этот глюк
надо при каждом проходе удалять параметр и снова вводить новый
2 - это способ описанный в этом вопросе - там все легко и глюков не наблюдается
eJay

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

Vic (статус: 1-ый класс), 28 июля 2010, 15:38 [#6]:

понял - не использовал никогда, извини
eJay

eJay (статус: Посетитель), 28 июля 2010, 15:39 [#7]:

Появляется ошибка. SQL Error: You have an error in your SQL syntax...
eJay

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

eJay (статус: Посетитель), 28 июля 2010, 15:59 [#10]:

start_time1 := MaskEdit1.Text; - передает в БД одни нули.
eJay

eJay (статус: Посетитель), 28 июля 2010, 16:05 [#11]:

ну тут разобрался маск **-**-**** **:**:** а в бд пишется ****-**-** **:**:**

Кстати, не посоветуете какой нибудь компонент чтобы в одно эдите можно было выставлять дату и время?
Ерёмин А.А.

Ерёмин А.А. (статус: *Администратор), 28 июля 2010, 18:00 [#12]:

Цитата (eJay):

Кстати, не посоветуете какой нибудь компонент чтобы в одно эдите можно было выставлять дату и время?

TMaskEdit с маской ##.##.#### ##:## или TDateTimePicker.
Тов. Женька

Тов. Женька (статус: 3-ий класс), 28 июля 2010, 20:02 [#13]:

Правильнее, как мне кажется, использовать TDateTimePicker.
Да и вообще я бы сделал два отдельных поля, одно для даты, а второе для времени.
А для передачи в БД в нужном виде можно использовать функцию FormatDateTime().

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 12:01
Выполнено за 0.04 сек.