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

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

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.06.2007, 07:40   #1
eremin
Пользователь
 
Регистрация: 22.05.2007
Сообщений: 10
По умолчанию Ошибка в SQL запросе

Данную процедуру нашел в одной книжке. Там представлен пример базы данных на основе InterBase. Для доступа используются компоненты SimpleDataSet. Подразделения представлены в виде дерева (на основе SimpleDataSet1). Данная процедура вызывается щелчком по ветке дерева и формирует набор данных о сотрудниках SimpleDataSet2 для представления в сетке DBGrid.
Прелесть данной процедуры в том, что в набор заносятся данные о сотрудниках не только текущего подразделения (по ветке которого щелкнули), но и всех подчиненных подразделений.

Цитата:
procedure TForm1.SetSelection;
begin
with DataModule1, SimpleDataSet2, TreeView1.Selected do
begin
Close;
//Закрываем набор данных SimpleDataSet2
//Выбираем все столбцы из представления FullList
DataSet. CommandText := 'select * from FullList ';
if AbsoluteIndex > 0 then
begin
//Если выбран НЕ корневой элемент структуры, то ...
//Находим соответствующую запись в таблице DEPS
SimpleDataSet1.Locate('DeptName', Text,[]);
//Добавляем условие в запрос - выбор сотрудников из всех
//подразделений, для которых содержимое поля Parents
//начинается с соответствующего списка идентификаторов
DataSet.CommandText := DataSet.CommandText +
'where DepID = '+IntToStr(SimpleDataSet1DeptID.AsI nteger) +
' or Parents starting with ''';
if Parent.AbsoluteIndex > 0 then
DataSet.CommandText := DataSet.CommandText + SimpleDataSet1Parents.AsString;
//Добавляем к списку Parents идентификатор
//текущего подразделения
DataSet.CommandText := DataSet.CommandText +
IntToStr(SimpleDataSet1DeptID.AsInt eger)+'''';
end;
if CheckBox1.Checked then
//Если есть сортировка по уровню должностей, то...
DataSet.CommandText := DataSet.CommandText +
'order by PosLevel, LastName, Firstname, FatherName'
else
//в противном случае сортируем строки по именам
DataSet.CommandText := DataSet.CommandText +
'order by LastName, Firstname, FatherName';
Open;
//Выбираем данные из представления FullList
end;
end;
По примеру сделал программу, все прекрасно работает. У меня есть другая программа по сотрудникам, база - Access, компоненты – ADOTable, ADOQuery. Хотел использовать процедуру, но с ADOQuery и свойством ADOQuery.SQL.Text не работает запрос, выдает ошибку в строке «or Parents starting », мол, пропущен оператор. Может базы используют различный язык SQL. Как сделать чтоб все заработало.
А может кто подскажет другую реализацию данной проблемы.

Последний раз редактировалось eremin; 22.06.2007 в 07:44.
eremin вне форума Ответить с цитированием
Старый 23.06.2007, 03:27   #2
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

Я могу ошибаться, но starting - это для удалённых БД, к которым относится Inter, но не Access.
Carbon вне форума Ответить с цитированием
Старый 23.06.2007, 07:13   #3
eremin
Пользователь
 
Регистрация: 22.05.2007
Сообщений: 10
По умолчанию

Может подскажешь как реализовать данную проблему другим способом?
eremin вне форума Ответить с цитированием
Ответ


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

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка в запросе с union Tanuska___:) БД в Delphi 3 22.08.2008 22:32
Ошибка SQL запросе. EVG44 БД в Delphi 2 21.10.2007 22:42
Ошибка при запросе SQL в IB Алекс1 БД в Delphi 2 24.06.2007 22:37
Ошибка в SQL запросе...!? KeyDok БД в Delphi 5 21.06.2007 09:19