| 
| 
 | Вопрос # 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().
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |