Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

SQL [D6, Access]


VVV ©   (2004-05-15 15:51:00) 

Добрый день всем. Прошу Вас помочь мне решить одну проблемммку.

Есть 2 таблицы: Sotrudniki и Dolgnost
В табл. Sotrudniki нах. числовое поле Dolgnost
С помощью DBLookupComboBox вставляю значение ДОЛЖНОСТИ в поле Dolgnost таблицы Sotrudniki
из Таблицы Dolgnost
Нужен запрос, чтобы выводил Ф.И.О. Должность сотрудника:

По нажатии кнопки выполняется делаю вот что:
begin
DataModule1.SotrQuery.Active:=false;
DataModule1.SotrQuery.SQL.Clear;
DataModule1.SotrQuery.SQL.Text:='Select S.SirName,S.Name,S.Otchestvo,D.naimDol from Sotrudniki S, Dolgnost D where S.Dolgnost='+ComboBox.Text +' and LinkKey='+DataModule1.PodrTableKod.Value;
DataModule1.SotrQuery.Active:=true;
MainForm.wwDBGrid1.DataSource:=DataModule1.SotrFindSource;
end;

......и получаю вот это:

Project Kadry.exe raised exception class EOleException with message
'Ошибка синтаксиса (пропущен оператор) в выражении запроса 'S.Dolgnost=лаборант химического анализа and LinkKey=002''.
Process stoped. Use Step or Run to continue.

Спасибо.


VVV   (2004-05-15 19:45:00) [1]

Благодарю всех за предоставленную помощь.
Удачи!


Johnmen   (2004-05-15 18:14:00) [2]

1.
>...+DataModule1.PodrTableKod.Value+'''Group by Sotrudniki.SirName;

А где пробел ?

2. Группировка всё равно не пройдет. См. хелп по применению GROUP BY


VVV   (2004-05-15 18:01:00) [3]

>ну так в аксесе наверное значение параметра до того как он
>сформирован запросом не инициализируется.
А я вообще параметры не использую
SELECT Sotrudniki.SirName, Sotrudniki.Name, Sotrudniki.Otchestvo, Dolgnost.NaimDol FROM Sotrudniki INNER JOIN Dolgnost ON Sotrudniki.Dolgnost = Dolgnost.Key WHERE Dolgnost.NaimDol='''+ ComboBox.Text +''' and LinkKey='''+DataModule1.PodrTableKod.Value+'''Group by Sotrudniki.SirName;
...а групировки нет ругается на Несоответствие типов!?


sniknik   (2004-05-15 17:55:00) [4]

> DataModule1.SotrQuery.Parameters.ParamByName('Dol').Value:=ComboBox.Text;
> DataModule1.SotrQuery.SQL.Text:='SELECT Sotrudniki.SirName, Sotrudniki.Name, ...

> в Access такой текст работает.
ну так в аксесе наверное значение параметра до того как он сформирован запросом не инициализируется.


VVV   (2004-05-15 17:34:00) [5]

>VVV  (15.05.04 16:31) [4] Загрузи базу в аксесс, построй нужный >запрос и посмотри его текст. Может поможет в дальнейшем?

Сделал как ты посоветовал получил такой текст
'SELECT Sotrudniki.SirName, Sotrudniki.Name, Sotrudniki.Otchestvo, Dolgnost.NaimDol FROM Sotrudniki INNER JOIN Dolgnost ON Sotrudniki.Dolgnost = Dolgnost.Key WHERE Dolgnost.NaimDol='''+ ComboBox.Text +''' and LinkKey='+DataModule1.PodrTableKod.Value;
и работает
но если добавить Group by Sotrudniki.SirName

'SELECT Sotrudniki.SirName, Sotrudniki.Name, Sotrudniki.Otchestvo, Dolgnost.NaimDol FROM Sotrudniki INNER JOIN Dolgnost ON Sotrudniki.Dolgnost = Dolgnost.Key WHERE Dolgnost.NaimDol='''+ ComboBox.Text +''' and LinkKey='''+DataModule1.PodrTableKod.Value+'''Group by Sotrudniki.SirName;
то получается вот, что
Project Kadry.exe raised exception class EOleException with message
'Несоответствие  типов данных в условии отбора'.
Process stoped. Use Step or Run to continue. ХОТЯ
в Access такой текст работает.

>А про параметря - покажи как ты это делаешь.

DataModule1.SotrQuery.Active:=false;
DataModule1.SotrQuery.SQL.Clear;
DataModule1.SotrQuery.Parameters.ParamByName('Dol').Value:=ComboBox.Text;
DataModule1.SotrQuery.SQL.Text:='SELECT Sotrudniki.SirName, Sotrudniki.Name, Sotrudniki.Otchestvo, Dolgnost.NaimDol FROM Sotrudniki INNER JOIN Dolgnost ON Sotrudniki.Dolgnost = Dolgnost.Key WHERE Dolgnost.NaimDol=:Dol and LinkKey='+DataModule1.PodrTableKod.Value;
DataModule1.SotrQuery.Active:=true;
выскакивает
Project Kadry.exe raised exception class EOleException with message
'Несоответствие  типов данных в условии отбора'.
Process stoped. Use Step or Run to continue. ХОТЯ
в Access такой текст работает.


Mike Kouzmine   (2004-05-15 16:36:00) [6]

VVV   (15.05.04 16:31) [4] Загрузи базу в аксесс, построй нужный запрос и посмотри его текст. Может поможет в дальнейшем?


Mike Kouzmine   (2004-05-15 16:33:00) [7]

VVV   (15.05.04 16:09) [3] Как это не связаны?
"Есть 2 таблицы: Sotrudniki и Dolgnost
В табл. Sotrudniki нах. числовое поле Dolgnost" Если "нах." это не матом, то по этому полю и связываются. А в запросе у тебя этого нет.
А про параметря - покажи как ты это делаешь.


VVV   (2004-05-15 16:31:00) [8]

>Mim1 ©  (15.05.04 16:00) [2]
>S.Dolgnost='''+ComboBox.Text +''' and LinkKey='+DataModule1.

Появилось
Project Kadry.exe raised exception class EOleException with message 'Несоответствие  типов данных в условии отбора'.
Process stoped. Use Step or Run to continue.

Сделал поле Dolgnost в таблице Sotrudniki текстовым - ошибок нет
и ДАННЫХ ТОЖЕ!!!, т.е. НД почему то пустой
Помогите разобраться.
С уважением, Виталий


VVV   (2004-05-15 16:09:00) [9]

А S и D как у тебя связываются? Используй параметры.

Эти таблицы вообще не связаны, точнее
один сотрудник -> одна должность

С параметрами вообще SQL запрос работает только один раз за сеанс,
сам непойму почему.


Mim1   (2004-05-15 16:00:00) [10]

S.Dolgnost='''+ComboBox.Text +''' and LinkKey='+DataModule1.


Mike Kouzmine   (2004-05-15 15:58:00) [11]

А S и D как у тебя связываются? Используй параметры.


Наверх

Титульная страница Поиск, карта сайта Написать письмо