| 
| 
 | Вопрос # 4 626/ вопрос открыт / | 
 |  Приветствую, уважаемые эксперты!Подскажите пожалуйста как с помощью sql запроса добавить строки. Информация берется при вводе данных в Edit(Название акции), RichEdit (Описание акции), DateTimePicker(Начало акции), DateTimePicker(Конец акции), Edit (Количество бонусов). Добавить строки нужно в таблицу act_new при нажатии кнопки Добавить акцию. Я написал запрос но он не работает. Подскажите пожалуйста что я не так делаю.
 Приложение:Переключить в обычный режим unit Unit4; interface uses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, ComCtrls, StdCtrls, DBXpress, FMTBcd, DB, SqlExpr; type  TForm4 = class(TForm)    Edit1: TEdit;    Label1: TLabel;    Label2: TLabel;    DateTimePicker1: TDateTimePicker;    Button1: TButton;    Label3: TLabel;    DateTimePicker2: TDateTimePicker;    Label4: TLabel;    Button2: TButton;    Edit3: TEdit;    Label5: TLabel;    RichEdit1: TRichEdit;    SQLConnection1: TSQLConnection;    Q6: TSQLQuery;    procedure Button1Click(Sender: TObject);    procedure Edit3KeyPress(Sender: TObject; var Key: Char);    procedure Button2Click(Sender: TObject);   private    { Private declarations }  public    { Public declarations }  end; var  Form4: TForm4; implementation uses Unit2, Unit5, Unit1; {$R *.dfm} procedure TForm4.Button1Click(Sender: TObject);beginForm2:= TForm2.Create(Application); form2.Show;form4.visible:=false;end; procedure TForm4.Edit3KeyPress(Sender: TObject; var Key: Char);beginif (key='.')or(key=',')then key:=decimalseparator;if not (key in['0'..'9',decimalseparator,#8,#13]) thenbeginkey:=#0;beep;end;end;  procedure TForm4.Button2Click(Sender: TObject);beginq6.SQL.Text:='insert into act_new (name, description, date_begin, date_end, amount_bonus) values
('+Edit1.Text+', '+RichEdit1.Text+', '+char(39)+datetostr(DateTimePicker1.Date)+char(39)+',
'+char(39)+datetostr(DateTimePicker2.Date)+char(39)+', '+Edit3.Text+')';q6.Open;end; end.
|  |   Вопрос задал: slai (статус: Посетитель)Вопрос отправлен: 1 октября 2010, 09:18
 Состояние вопроса: открыт, ответов: 1.
 |  Ответ #1. Отвечает эксперт: Тов. Женька Здравствуйте, slai!Текстовые значения и даты нужно брать в парные кавычки, т.е.:
 
 'insert into act_new (name, description, date_begin, date_end, amount_bonus) values ('''+Edit1.Text+''',
'''+RichEdit1.Text+'''... и т.д.Помимо этого дату нужно представлять в формате СУБД.
|  | Ответ отправил: Тов. Женька (статус: 3-ий класс)Время отправки: 1 октября 2010, 09:28
 Оценка за ответ: 5
 |  
 Мини-форум вопросаВсего сообщений: 19; последнее сообщение — 5 октября 2010, 06:11; участников в обсуждении: 4. 
|   | Тов. Женька (статус: 3-ий класс), 1 октября 2010, 10:16 [#2]:Так написано же в сообщении, что нужно сконвертировать значение типа varchar в money. Правильно ли я понимаю, что значение из Edit3.Text вы тоже передаете как текст? Если да, то попробуйте одинарные кавычки. А возможно, потребуется использовать функцию конвертирования в самом тексте запроса. 
 На счет даты. Тут смотреть нужно, если, к примеру, серверу нужна дата в формате yyyy-mm-dd, то в таком виде и нужно ее туда передавать (F1 по FormatDateTime). По идее, он должен сообщить, как должна выглядеть дата, или хотя бы намекнет, что формат неверный.
 |  
|   | slai (статус: Посетитель), 1 октября 2010, 10:30 [#3]:Нет в Edit3.text я ввожу числа. Да верно в таком виде дата ему и нужна, а где мне в коде это указать? |  
|   | Тов. Женька (статус: 3-ий класс), 1 октября 2010, 10:38 [#4]:1. Я так и понял, что числа. В самом тексте запроса как передается значение, покажите. 2. Если формат даты совпадает, то нигде не надо.
 |  
|   | slai (статус: Посетитель), 1 октября 2010, 10:41 [#5]:2. вот формат даты 2010-10-01 16:20:21.710 1.Я вас не понял или я это упустил.
 |  
|   | Тов. Женька (статус: 3-ий класс), 1 октября 2010, 10:58 [#6]:Так удалось проблемы решить? |  
|   | slai (статус: Посетитель), 1 октября 2010, 11:02 [#7]:нет я не знаю что с датой делать. |  
|   | Тов. Женька (статус: 3-ий класс), 1 октября 2010, 11:05 [#8]:Ну так передавайте ее функцией FormatDateTime. |  
|   | slai (статус: Посетитель), 1 октября 2010, 11:07 [#9]:Я в этом новечек можно поподробнее. |  
|   | slai (статус: Посетитель), 1 октября 2010, 11:10 [#11]:Как мне написать запрос чтобы sql "переварил" дату и занес в строку? |  
|   | Тов. Женька (статус: 3-ий класс), 1 октября 2010, 11:17 [#12]:...+FormatDateTime('yyyy-mm-dd hh:mm:ss', DateTimePicker1.Date)+... Как-то так, написал по памяти, так что нужно проверять.
 |  
|   | Владимирович (статус: Посетитель), 1 октября 2010, 11:38 [#14]:Люди пользуйтесь параметрами! 
 q6.SQL.Text:='insert into act_new (name, description, date_begin, date_end, amount_bonus) values (:name, :descr, :dt_begin, :dt_end, :bonus)';
 q6.Params[0].AsString := Edit1.Text;
 q6.Params[1].AsString := RichEdit1.Text;
 q6.Params[2].AsDate := DateTimePicker1.Date;
 q6.Params[3].AsDate := DateTimePicker2.Date;
 q6.Params[4].AsCurrency := StrToFloat(Edit3.Text);
 q6.ExecSQL;
 |  
|   | Тов. Женька (статус: 3-ий класс), 1 октября 2010, 11:48 [#15]:Видимо, :16 воспринимается как параметр. |  
|   | Тов. Женька (статус: 3-ий класс), 1 октября 2010, 11:49 [#16]:Владимирович правильно подсказывает. |  
|   | Тов. Женька (статус: 3-ий класс), 4 октября 2010, 15:51 [#18]:Неверный тип поля. Нужно подставить правильный или привести данные к нему. |  
|   | slai (статус: Посетитель), 5 октября 2010, 06:11 [#19]:А как привести данные к нему? |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |