Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.11.2009, 23:59   #1
disaer
Пользователь
 
Регистрация: 05.11.2009
Сообщений: 13
По умолчанию

Для работы с базой на аксесе я добавил Adoconnection, Datasource, adotable, query(не ADO), все настроил, поместил на форму кнопку "добавить". Имеется таблица "Клиент" с полями: фио_клиента, адрес, телефон. Пытаюсь записать запись, но пишет ошибку, мол неправильно употреблены слова в запросе (ругается на название полей таблицы походу)
вот сам запрос:

Код:
procedure TForm2.Button1Click(Sender: TObject);
var
fio:string[45];
adr:string[97];
tel:integer;
begin
if (form2.Edit1.Text='') or  (form2.Edit2.Text='') or (form2.Edit3.Text='') then   showmessage('Не все поля заполнены')
else
begin
fio:=edit1.Text;
adr:=edit3.text;
tel:=strtoint(edit2.Text);
form2.Query1.Close;
form2.Query1.SQL.Clear;
form2.Query1.SQL.Add('select Клиент');
form2.Query1.SQL.Add('Replace ФИО_клиента WITH "'+ fio+'"');
form2.Query1.SQL.Add('Replace Телефон With tel');
form2.Query1.SQL.Add('Replace Адрес WITH "'+adr+'"');
form2.Query1.Open;
end;

end;

Что нужно исправить? помогите плз...

Изменил Query1 на AdoQuery1. Немного изменил запрос:
Код:
form2.ADOQuery1.Close;
form2.ADOQuery1.SQL.Clear;
form2.ADOQuery1.SQL.Add('Insert Into Клиент (ФИО_клиента, телефон, адрес)');
form2.ADOQuery1.SQL.Add('Values ("'+Edit1.Text+'", "'+Edit2.Text+'", "'+Edit3.text+'")');
form2.ADOQuery1.ExecSQL;
form2.ADOQuery1.Active := true;

Теперь в ошибке пишет: "Изменения не были успешно внесены из-за повторяющихся значений в индексею Удалите индекс или переопределите его..."

Зато данные добавляет, правдо надо перезапускать прогу чтобы они появились в DBGride, подозреваю что надо както его обновлять. Какая процедурка может есть стандартная? И как избавится от ошибки?

Последний раз редактировалось Stilet; 09.11.2009 в 09:21.
disaer вне форума Ответить с цитированием
Старый 09.11.2009, 00:47   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

DBGrid через Datasource подцеплен к adotable ?
А вы подцепите к ADOQuery1 и сразу будут видны обновления.
(Естественно, после инсерта нужно будет делать селект.)
Аdotable тогда не нужна.

Другой вариант - после отработки form2.ADOQuery1.ExecSQL; сделайте Аdotable.Refresh.

По поводу ошибки.
У вас индексы определены или нет ни одного?
Если определены, то это не ошибка, а нормальная реакция базы - не имеет права быть двух записей с одинаковым значением индексного поля, о чем и говорит сообщение "Изменения не были успешно внесены из-за повторяющихся значений в индексе. Удалите индекс или переопределите его..."

Последний раз редактировалось mihali4; 09.11.2009 в 02:24.
mihali4 вне форума Ответить с цитированием
Старый 09.11.2009, 02:21   #3
disaer
Пользователь
 
Регистрация: 05.11.2009
Сообщений: 13
По умолчанию

Все разобрался:
form2.ADOQuery1.Active := true;
Было лишним. Спс михалыч, твой совет с Запросом помог.

Теперь другая проблема, делаю по аналогии на другой форме похожий запрос:

Код:
if (form3.Edit9.Text='') or (form3.Edit1.Text='') or (form3.DBLookupComboBox1.Text='') then   showmessage('Не все обязательные поля заполнены')
else
begin
if (form3.Edit2.Text='') then form3.Edit2.Text:='неизвестно';
if (form3.Edit3.Text='') then form3.Edit3.Text:='0';
if (form3.Edit4.Text='') then form3.Edit4.Text:='0';
if (form3.Edit5.Text='') then form3.Edit5.Text:='0';
if (form3.Edit6.Text='') then form3.Edit6.Text:='0';
if (form3.Edit7.Text='') then form3.Edit7.Text:='0';
if (form3.Edit8.Text='') then form3.Edit8.Text:='0000000';
if (form3.Edit10.Text='') then form3.Edit10.Text:='неизвестно';
if (form3.Edit11.Text='') then form3.Edit11.Text:='0';
if (form3.Edit12.Text='') then form3.Edit12.Text:='01.01.0001';
form3.ADOQuery1.Close;
form3.ADOQuery1.SQL.Clear;
form3.ADOQuery1.SQL.Add('Insert Into объект (Тип_объекта, Количество_комнат, Этаж, Общая_площадь, Жилая_площадь, Кухня, Материал_объекта,  Телефон, Год_постройки, Город, Адрес, Цена_$, ФИО_клиента)');
form3.ADOQuery1.SQL.Add('Values ("'+form3.Edit1.Text+'","'+form3.Edit3.Text+'","'+form3.Edit4.text+'","'+form3.Edit5.Text+'","'+form3.Edit6.Text+'","'+form3.Edit7.Text+'","'+form3.Edit2.Text+'","'+form3.Edit8.Text+'","'+form3.Edit12.Text+'","'+form3.Edit10.Text+'","'+form3.Edit9.Text+'","'+form3.Edit11.Text+'","'+form3.DBLookupComboBox1.Text+'")');
form3.ADOQuery1.ExecSQL;
{showmessage('Запись добавлена');  }
end;
Ругается на то, что "ошибка синтаксиса insert into". У меня в этой таблице есть еще 1 поле "Номер_заявки", в access оно стоит как автоинкрементное, но я думаю это не из-за него. ВОобщем вроде все правильно а чето бьет ошибку на синтаксис.

Последний раз редактировалось Stilet; 09.11.2009 в 09:21.
disaer вне форума Ответить с цитированием
Старый 09.11.2009, 09:24   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

В таких случаях я обычно ставлю breakpoint на ту строчку где выполняется команда (в товем случае form3.ADOQuery1.ExecSQL и посмотреть как оно сформировало запрос - после чего скормить его акцессу и пусть пожурит тебя.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.11.2009, 12:03   #5
disaer
Пользователь
 
Регистрация: 05.11.2009
Сообщений: 13
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
(в товем случае form3.ADOQuery1.ExecSQL и посмотреть как оно сформировало запрос - после чего скормить его акцессу и пусть пожурит тебя.
Все значения из эдитов берутся, проверил, а вот чего непишутся хз...
disaer вне форума Ответить с цитированием
Старый 09.11.2009, 12:07   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
а вот чего непишутся хз...
А вот и узнай. Watch тебе в помошь.
На бряке добавь в Ватч form3.ADOQuery1.SQL.Text и скопируй его значение в Акцесс
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавление записи gitzzz Microsoft Office Access 2 23.06.2009 19:30
Добавление записи LLIYT БД в Delphi 15 09.06.2009 18:25
Добавление записи rn6hac БД в Delphi 3 02.06.2009 10:26
Добавление записи в файл (Delphi) VadEr Помощь студентам 2 15.05.2009 10:30
Добавление записи.... Droid БД в Delphi 2 04.06.2008 15:50