Delphi 2010 + MySQL5.5 + UNIDAC error#42000

kiori

Турист
Регистрация
10 Окт 2011
Сообщения
5
Реакции
0
Credits
8
Установлены:
Rad Studio Delphi 2010 + UNIDAC, MySQL5.5 и для работы с ним phpmyadmin.

Через phpmyadmin создаю бд test с таблицей tab1 (поля key, nam), кодировку выбираю utf8_general_ci.
На форму кидаю UniConnection1, MySQLUniProvider1, UniTable1, Uniquery1, Datasource1, Datasource2 и 2 DBGrid - а.
В UniConnection1 в options в charset указываю utf8, указываю бд, настройки. Здесь все подключается и нормально отображаются.

Хочу добавить запись, не получается. Все равно каким образом: через UniTable1 (через insert, post) или Uniquery1 (insert into ...), в инете нашла несколько методов не идет. Может ошибку допускаю где то?

можете подсказать полный код добавление записи? :bac:

Добавлено через 8 минут
Ошибка содержит следующий текст:

#42000You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'key, nam)
Values (12, tekst) ' at line 1.
 
Последнее редактирование модератором:

kiori

Турист
Регистрация
10 Окт 2011
Сообщения
5
Реакции
0
Credits
8
Причина найдена

Причина ошибки в синтаксисе sql запроса.

Я с интернета взяла распространенный пример кода:
Если ты используешь UniQuery.
То в его свойстве SQL пишешь запрос на вставку. Пример:
Код:
INSERT INTO tablename(pole1,pole2...)
VALUES:)value1,:value2...);


и почему то у меня выходила ошибка. ;(

в книге "самоучитель MySQL 5. Кузнецов М., Симдянов И." прочитала добавление записи и попробовала через командную строку и получилось:
INSERT INTO test.tab1 VALUES (45, 'tekst1')

И ВСЕ ЗАРАБОТАЛО

Чтобы работало через Delphi + UNIDAC

Через UniQuery запрос для вставки записи, в свойстве SQL пишешь:
INSERT INTO tab1 VALUES (45, 'tekst1')

Обработчик кнопки:
procedure TForm1.Button1Click(Sender: TObject);
begin
UniQuery1.Execute;
end;

Чтобы видеть результат:
UniTable1+DataSource1 (tab1)
DBGrid1 в свойствах указываем DataSource1, и кнопки для обновления данных, ну типа Unitable1.Active:=false; Unitable1.Active:=true;
Новая запись сразу отобразится в Гриде.

Далее все просто, через параметры передаем значения в запрос.
:beer: :D

Добавлено через 12 минут
Запрос на добавление с помощью параметров:
UniQuery1, в свойстве SQL пишешь:


INSERT INTO tab1 VALUES :)value1, :value2)

еще можно в свойстве Params -> Parameters указать DataType для столбцов.
Здесь tab1 наша таблица, :value1, :value2 наши параметры соответствуют поле1 и поле2 - с помощью их мы добавим записи в таблицу.

Обработчик кнопки:
procedure TForm1.Button1Click(Sender: TObject);
begin
UniQuery1.Params.ParamByName('value1').Value:=Edit1.text;
UniQuery1.Params.ParamByName('value2').Value:=Edit2.text;
UniQuery1.Execute;
end;

после выполнения запроса значения поля1 равно Edit1.text, а поля2 значению Edit2.text.
Чтобы видеть результат: необходимо обновить UniTable1, после чего DBGrid1 отобразит результат.

и все!
 
Последнее редактирование модератором:

kiori

Турист
Регистрация
10 Окт 2011
Сообщения
5
Реакции
0
Credits
8
Для редактирования записей в таблице. БД MySQL 5.5.
Есть таблица tab2 с полями id, nam, number.
Есть UniQuery2 и UniTable1+DBGrid1 для отображения данных.

В свойстве SQL компонента UniQuery2 пишем:
UPDATE tab2
SET
nam = :nam, number = :number
WHERE
id = :id

то есть редактируем выбранную запись (определяем по ID) поля nam и number. Здесь используются 3 параметра: :nam, :number (для редактирования значении) и :id (для указания какая запись подлежит редактированию).

Обработчик кнопки:
UniQuery2.Params.ParamByName('nam').Value:=Edit1.text;
UniQuery2.Params.ParamByName('number').Value:=Edit2.text;
UniQuery2.Params.ParamByName('id').Value:=UniTable1.FieldByName('id').AsInteger;
UniQuery2.Execute;

Здесь значение поля nam меняется на введенное значение Edit1.text, соответственно number на значение Edit2.Text.
А значение UniTable1.FieldByName('id').AsInteger равно значению выбранной записи поля id, например если мы выбираем какую нибудь запись в таблице, в нашем случае в DBGrid1.

и все, запись редактируется, необходимо только обновить UniTable1 чтобы DBGrid1 отобразил измененные записи. :beer:
 
Последнее редактирование модератором:

goga2

Турист
Регистрация
1 Фев 2007
Сообщения
2
Реакции
0
Credits
4
Супер!! Сама спросила - сама ответила! :)