Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Закрытая тема
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 14.03.2009, 10:51
joomler joomler вне форума
Новичок
 
Регистрация: 11.10.2008
Сообщения: 88
Репутация: 10
По умолчанию Помогите обойти ошибку в маленькой базе данных

Доброго дня, подскажите в чем может быть ошибка.

Мне нужно сделать базу данных преподавателей школы.
Я использовал ADO, access .
Поля: ФИО, Телефон, Дисциплина1, Дисциплина2, Дисциплина3.
Поле дисциплина индексное допускаются совпадения

Суть базы: поиск преподавателей по дисциплинам. А также добавление в базу этих преподавателей.

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

я менял все что можно в полях дисциплина , но все равно вылазит эта ошибка. Может подскажет кто как обойти это?
  #2  
Старый 14.03.2009, 12:45
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Киньте сюда примерчик вашей БД.
  #3  
Старый 14.03.2009, 14:55
joomler joomler вне форума
Новичок
 
Регистрация: 11.10.2008
Сообщения: 88
Репутация: 10
По умолчанию

Этот вопрос я разобрал счас все работает))))))

Но появилась еще проблема при поиске Выдает вот что:
Цитата:
Ошибка синтаксиса (пропущен оператор) в выражении зпроса 'Дисциплина №1 LIKE 'история''''

Почему так происходит? может то что поля в базе с пробелами (Дисциплина №1)? или с кавычками что то ошибся?

По этому случаю код нужен?
  #4  
Старый 14.03.2009, 15:42
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Нет код не нужен,
1. использование Like без % или * бессмыслено, т.к. пропадает весь смысл его использования и происходит строгое сравнение, а то тоже самое что написать Дисциплина = 'История'
2. у вас используется поле разделенное пробелом, и парсер запроса непонимает какое поле ему использовать Дисциплина или №1 и куда вообще между ними тогда оператор подевался. Либо откажитесь от использования имен полей с пробелами или берите их в квадратные скобки. Должно быть так: [Дисциплина №1] LIKE 'история'
  #5  
Старый 14.03.2009, 16:00
joomler joomler вне форума
Новичок
 
Регистрация: 11.10.2008
Сообщения: 88
Репутация: 10
По умолчанию

Спасибо, счас попробую))
  #6  
Старый 14.03.2009, 16:07
joomler joomler вне форума
Новичок
 
Регистрация: 11.10.2008
Сообщения: 88
Репутация: 10
По умолчанию

Работает ))) а как организовать поиск по некоторым полям?
  #7  
Старый 14.03.2009, 18:14
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Удобнее всего запрос к БД оформлять с параметрами:
Q.SQL.Text := 'select * from MyTable where [Дисциплина №1] like :Value1 and [Дисциплина №2] like :Value2';
Q.Parameters.ParamValues['Value1'] := '%математика%';
Q.Parameters.ParamValues['Value2'] := 'кибернетика';
Q.Open;
  #8  
Старый 14.03.2009, 20:31
joomler joomler вне форума
Новичок
 
Регистрация: 11.10.2008
Сообщения: 88
Репутация: 10
По умолчанию

вроде начинаю понимать но где это прописывать?

я использую ADOQuery1 в sql запросе прописал :
SELECT*
FROM Исполнители

Далее поле edit1 и кнопка
в edit1 вписываю слово например Экокомика и нажимаю кнопку
в кнопке прописал:
procedure TForm1.Button2Click(Sender: TObject);
begin
DataModule2.ADOQuery1.Active:=false;
DataModule2.ADOQuery1.SQL.Clear;
DataModule2.ADOQuery1.SQL.Add('SELECT*');
DataModule2.ADOQuery1.SQL.Add('FROM Исполнители');
DataModule2.ADOQuery1.SQL.Add('WhERE [Дисциплина №1] LIKE '''+Edit1.Text+'''');
DataModule2.ADOQuery1.Active:=true;
Form4.ShowModal;

end;

так где прописывать параметры?
  #9  
Старый 14.03.2009, 23:13
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Нет, так не пойдет. Смотрите как я в примере обращаюсь к параметру.
Все что вам необъодимо это вместо моей константы '%математика%' прописать значение из вашего поля ввода:
Цитата:
procedure TForm1.Button2Click(Sender: TObject);
begin
DataModule2.ADOQuery1.Close;
DataModule2.ADOQuery1.SQL.Text := 'Select from Исполнители where [Дисциплина №1] LIKE :Value1)';
DataModule2.ADOQuery1.ParamValues['Value1'] := Edit1.Text;
DataModule2.ADOQuery1.Open;
Form4.ShowModal;
end;
  #10  
Старый 15.03.2009, 00:49
joomler joomler вне форума
Новичок
 
Регистрация: 11.10.2008
Сообщения: 88
Репутация: 10
По умолчанию

Так кажется должно получиться , счас попробую , отпишусь потом
  #11  
Старый 15.03.2009, 01:10
joomler joomler вне форума
Новичок
 
Регистрация: 11.10.2008
Сообщения: 88
Репутация: 10
По умолчанию

Ну вот попробовал опять какая то ошибка:
[Error] Unit1.pas(123): Undeclared identifier: 'ParamValues'

не задекларирован параметр ?
  #12  
Старый 15.03.2009, 01:22
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Цитата:
Сообщение от joomler
Ну вот попробовал опять какая то ошибка:
[Error] Unit1.pas(123): Undeclared identifier: 'ParamValues'

не задекларирован параметр ?
Упс, ошибся маненько - надо так:
Цитата:
DataModule2.ADOQuery1.Parameters.ParamValues['Value1'] := Edit1.Text;

Последний раз редактировалось Страдалецъ, 15.03.2009 в 01:29.
  #13  
Старый 15.03.2009, 01:46
joomler joomler вне форума
Новичок
 
Регистрация: 11.10.2008
Сообщения: 88
Репутация: 10
По умолчанию

Да это я исправил, но получилось вот что:
Цитата:
Ошибочное или пропущенное зарезирвированное слово или аргумент в инструкции SELECT или не верная пунктуация

вот думаю что тут может быть
  #14  
Старый 15.03.2009, 11:12
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Цитата:
DataModule2.ADOQuery1.SQL.Text := 'Select from Исполнители where [Дисциплина №1] LIKE :Value1)';
круглую скобку надо убрать в конце.
  #15  
Старый 15.03.2009, 11:39
joomler joomler вне форума
Новичок
 
Регистрация: 11.10.2008
Сообщения: 88
Репутация: 10
По умолчанию

да да я ее убрал но не меняется ни чего )))))
может надо убрать запись в SQL в компоненте адо квери?

там у меня прописанно:
SELECT*
FROM Исполнители
Закрытая тема


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 23:59.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025