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

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

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

Delphi.int.ru Expert

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

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

#   

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


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

Подробнее »



Вопрос # 4 626

/ вопрос открыт /

Приветствую, уважаемые эксперты!
Подскажите пожалуйста как с помощью sql запроса добавить строки. Информация берется при вводе данных в Edit(Название акции), RichEdit (Описание акции), DateTimePicker(Начало акции), DateTimePicker(Конец акции), Edit (Количество бонусов). Добавить строки нужно в таблицу act_new при нажатии кнопки Добавить акцию. Я написал запрос но он не работает. Подскажите пожалуйста что я не так делаю.

Приложение:
  1. unit Unit4;
  2.  
  3. interface
  4.  
  5. uses
  6. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7. Dialogs, ComCtrls, StdCtrls, DBXpress, FMTBcd, DB, SqlExpr;
  8.  
  9. type
  10. TForm4 = class(TForm)
  11. Edit1: TEdit;
  12. Label1: TLabel;
  13. Label2: TLabel;
  14. DateTimePicker1: TDateTimePicker;
  15. Button1: TButton;
  16. Label3: TLabel;
  17. DateTimePicker2: TDateTimePicker;
  18. Label4: TLabel;
  19. Button2: TButton;
  20. Edit3: TEdit;
  21. Label5: TLabel;
  22. RichEdit1: TRichEdit;
  23. SQLConnection1: TSQLConnection;
  24. Q6: TSQLQuery;
  25. procedure Button1Click(Sender: TObject);
  26. procedure Edit3KeyPress(Sender: TObject; var Key: Char);
  27. procedure Button2Click(Sender: TObject);
  28.  
  29. private
  30. { Private declarations }
  31. public
  32. { Public declarations }
  33. end;
  34.  
  35. var
  36. Form4: TForm4;
  37.  
  38. implementation
  39.  
  40. uses Unit2, Unit5, Unit1;
  41.  
  42. {$R *.dfm}
  43.  
  44. procedure TForm4.Button1Click(Sender: TObject);
  45. begin
  46. Form2:= TForm2.Create(Application);
  47.  
  48. form2.Show;
  49. form4.visible:=false;
  50. end;
  51.  
  52. procedure TForm4.Edit3KeyPress(Sender: TObject; var Key: Char);
  53. begin
  54. if (key='.')or(key=',')then key:=decimalseparator;
  55. if not (key in['0'..'9',decimalseparator,#8,#13]) then
  56. begin
  57. key:=#0;
  58. beep;
  59. end;
  60. end;
  61.  
  62.  
  63. procedure TForm4.Button2Click(Sender: TObject);
  64. begin
  65. 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+')';
  66. q6.Open;
  67. end;
  68.  
  69. end.


slai Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

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

slai (статус: Посетитель), 1 октября 2010, 09:39 [#1]:

Спасибо.
Теперь выдает ошибку http://s46.radikal.ru/i114/1010/7e/435255a62dd5.jpg
Помимо этого дату нужно представлять в формате СУБД.
На счет даты можно поподробнее пожалуйста.
Тов. Женька

Тов. Женька (статус: 3-ий класс), 1 октября 2010, 10:16 [#2]:

Так написано же в сообщении, что нужно сконвертировать значение типа varchar в money. Правильно ли я понимаю, что значение из Edit3.Text вы тоже передаете как текст? Если да, то попробуйте одинарные кавычки. А возможно, потребуется использовать функцию конвертирования в самом тексте запроса.

На счет даты. Тут смотреть нужно, если, к примеру, серверу нужна дата в формате yyyy-mm-dd, то в таком виде и нужно ее туда передавать (F1 по FormatDateTime). По идее, он должен сообщить, как должна выглядеть дата, или хотя бы намекнет, что формат неверный.
slai

slai (статус: Посетитель), 1 октября 2010, 10:30 [#3]:

Нет в Edit3.text я ввожу числа. Да верно в таком виде дата ему и нужна, а где мне в коде это указать?
Тов. Женька

Тов. Женька (статус: 3-ий класс), 1 октября 2010, 10:38 [#4]:

1. Я так и понял, что числа. В самом тексте запроса как передается значение, покажите.
2. Если формат даты совпадает, то нигде не надо.
slai

slai (статус: Посетитель), 1 октября 2010, 10:41 [#5]:

2. вот формат даты 2010-10-01 16:20:21.710
1.Я вас не понял или я это упустил.
Тов. Женька

Тов. Женька (статус: 3-ий класс), 1 октября 2010, 10:58 [#6]:

Так удалось проблемы решить?
slai

slai (статус: Посетитель), 1 октября 2010, 11:02 [#7]:

нет я не знаю что с датой делать.
Тов. Женька

Тов. Женька (статус: 3-ий класс), 1 октября 2010, 11:05 [#8]:

Ну так передавайте ее функцией FormatDateTime.
slai

slai (статус: Посетитель), 1 октября 2010, 11:07 [#9]:

Я в этом новечек можно поподробнее.
Вадим К

Вадим К (статус: Академик), 1 октября 2010, 11:08 [#10]:

на этой странице http://msdn.microsoft.com/en-us/library/ms187928.aspx теория,
на этой странице http://www.sqlusa.com/bestpractices/datetimeconversion/ кучка примеров.
Галочка "подтверждения прочтения" - вселенское зло.
slai

slai (статус: Посетитель), 1 октября 2010, 11:10 [#11]:

Как мне написать запрос чтобы sql "переварил" дату и занес в строку?
Тов. Женька

Тов. Женька (статус: 3-ий класс), 1 октября 2010, 11:17 [#12]:

...+FormatDateTime('yyyy-mm-dd hh:mm:ss', DateTimePicker1.Date)+...
Как-то так, написал по памяти, так что нужно проверять.
slai

slai (статус: Посетитель), 1 октября 2010, 11:29 [#13]:

Теперь ошибка http://i076.radikal.ru/1010/d3/e2feebecf3a8.jpg
Что она означает?
Владимирович

Владимирович (статус: Посетитель), 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]:

Владимирович правильно подсказывает.
slai

slai (статус: Посетитель), 4 октября 2010, 03:51 [#17]:

Использую параметры выдает вот такую ошибку что делать?
http://i078.radikal.ru/1010/0b/855c4c3c2df7.jpg
Тов. Женька

Тов. Женька (статус: 3-ий класс), 4 октября 2010, 15:51 [#18]:

Неверный тип поля. Нужно подставить правильный или привести данные к нему.
slai

slai (статус: Посетитель), 5 октября 2010, 06:11 [#19]:

А как привести данные к нему?

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

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