|
Вопрос # 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);
- begin
- Form2:= TForm2.Create(Application);
-
- form2.Show;
- form4.visible:=false;
- end;
-
- procedure TForm4.Edit3KeyPress(Sender: TObject; var Key: Char);
- begin
- if (key='.')or(key=',')then key:=decimalseparator;
- if not (key in['0'..'9',decimalseparator,#8,#13]) then
- begin
- key:=#0;
- beep;
- end;
- end;
-
-
- procedure TForm4.Button2Click(Sender: TObject);
- begin
- q6.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]:
А как привести данные к нему?
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|