Delphi 2010 + MySQL5.5 + UNIDAC error#42000

kiori

Member
Joined
Oct 10, 2011
Messages
9
Reaction score
0
Установлены:
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.
 
Last edited by a moderator:

kiori

Member
Joined
Oct 10, 2011
Messages
9
Reaction score
0
Причина найдена

Причина ошибки в синтаксисе 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 отобразит результат.

и все!
 
Last edited by a moderator:

kiori

Member
Joined
Oct 10, 2011
Messages
9
Reaction score
0
Для редактирования записей в таблице. БД 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:
 
Last edited by a moderator:

goga2

Member
Joined
Feb 1, 2007
Messages
6
Reaction score
0
Супер!! Сама спросила - сама ответила! :)
 

innysya82

Member
Joined
Apr 13, 2011
Messages
5
Reaction score
0
"Dude, I've dealt with UNIDAC issues in the past. Try updating the UNIDAC components to the latest version, sometimes that resolves the error#42000. If that doesn't work, maybe we can dig deeper and see what's causing the issue."
 

oltemp

New member
Joined
Jun 11, 2011
Messages
1
Reaction score
0
"Hey OP, I've had similar issues with UNIDAC before. Have you tried checking the version of the UNIDAC library you're using against the MySQL version? Maybe an update would do the trick."
 
Top