| 
| 
 | Вопрос # 5 261/ вопрос решён / | 
 |  Приветствую, уважаемые эксперты!Опять нуждаюсь в вашей помощи!!!! Не получается сохранить данные в базу,  программа запускается но при нажатии на кнопку Сохранить появляется ошибка : Ошибка синтаксиса в инструкции Insert Intro. Подскажите что не так делаю, вот код:
 
 procedure TForm1.sButton10Click(Sender: TObject);
 var
 fields, values : string;
 begin
 fields := ' (Предмет, Всего, Теоритические, Лабораторные, Курсовые) ';
 values := '+ sEdit3.Text +,+ sEdit4.Text + , + sEdit5.Text + , +sEdit6.Text + ,  + sEdit7.Text +';
 if CheckBox1.Checked then
 begin
 fields := fields + ', Экзамены';
 values := values + ', 1';
 end;
 ADOCommand1.CommandText:= 'insert into ' + sEdit1.text + '(' + fields + ')' + 'values (' + values + ')';
 ADOCommand1.Execute;
 
 end;
 
|  |   Вопрос задал: Анучин (статус: Посетитель)Вопрос отправлен: 5 мая 2011, 23:11
 Состояние вопроса: решён, ответов: 1.
 |  Ответ #1. Отвечает эксперт: corban Здравствуйте, Анучин!ну у вас не правильно заданы переменные:
 
 procedure TForm1.sButton10Click(Sender: TObject);
 var
 fields, values : string;
 begin
 fields := ' (Предмет, Всего, Теоритические, Лабораторные, Курсовые) ';// - уберите скобки
 values := sEdit3.Text +','+ sEdit4.Text + ', '+ sEdit5.Text + ', '+sEdit6.Text + ', '+ sEdit7.Text; // это строка должна выглядеть так, а не как в вашем коде
 if CheckBox1.Checked then
 begin
 fields := fields + ', Экзамены';
 values := values + ', 1';
 end;
 ADOCommand1.CommandText:= 'insert into ' + sEdit1.text + '_(' + fields + ')' + 'values (' + values + ')';// там где "_" поставьте пробел
 ADOCommand1.Execute;
 
 end;
 
|  | Ответ отправил: corban (статус: 2-ой класс)Время отправки: 6 мая 2011, 04:03
 Оценка за ответ: 5
 |  
 Мини-форум вопросаВсего сообщений: 4; последнее сообщение — 6 мая 2011, 21:37; участников в обсуждении: 3. 
|   | Егор (статус: 10-ый класс), 6 мая 2011, 04:03 [#1]:есть хорошая штука - отладчик. вот отладчик бы показал, в чём ошибка 
 begin
  fields := ' (Предмет, Всего, Теоритические, Лабораторные, Курсовые) ';
  values := '+ sEdit3.Text +,+ sEdit4.Text + , + sEdit5.Text + , +sEdit6.Text + , + sEdit7.Text +';
  // в values будут не значения текстовых полей, а перечисления имён компонентов
  if CheckBox1.Checked then
  begin
    fields := fields + ', Экзамены'; // того лучше - это значение будет вне скобок
    values := values + ', 1';
  end;
  ADOCommand1.CommandText:= 'insert into ' + sEdit1.text + '(' + fields + ')' + 'values (' + values + ')';если в sEdit1.text была строчка "table", то получим запрос:
 
 'insert into table ((Предмет, Всего, Теоритические, Лабораторные, Курсовые), Экзамены)values (+ sEdit3.Text +,+
sEdit4.Text + , + sEdit5.Text + , +sEdit6.Text + , + sEdit7.Text +)'; p.s. Теоретические
 Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.— Donald E. Knuth.
 |  
|   | Мережников Андрей (статус: Абитуриент), 6 мая 2011, 05:49 [#2]: Цитата (corban): values := sEdit3.Text +','+ sEdit4.Text + ', '+ sEdit5.Text + ', '+sEdit6.Text + ', '+ sEdit7.Text; // это строка должна выглядеть так, а не как в вашем коде лучше сделать так:
 values := QuotedStr(sEdit3.Text) +','+ QuotedStr(sEdit4.Text) + ', '+ QuotedStr(sEdit5.Text) + ', '+QuotedStr(sEdit6.Text) + ', '+ QuotedStr(sEdit7.Text);
 |  
|   | Анучин (статус: Посетитель), 6 мая 2011, 20:50 [#3]:corban: Спасибо большое добавил ваши исправления, и строку котроую посоветовал Мережников Андрей и все заработало!!!! еще раз спасибо!!!! |  
|   | Анучин (статус: Посетитель), 6 мая 2011, 21:37 [#4]:И вот еще один вопрос, чтоб не начинать новую тему..... у меня на форме не один CheckBox а 3, CheckBox1 добовляет в базу цисло 1, CheckBox2 добовляет цисло 2, ну и CheckBoх3 добовляет цисло 3, так вот как сделать чтобы при нажатии 2-х или всех 3-х CheckBoх-ов в базу в одну ячейку добавлялась запись (1,2,3) или (1,2) или (1,3)??? |  9 мая 2011, 00:07: Статус вопроса изменён на решённый (изменил автор вопроса — Анучин) Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |