Форум программистов, компьютерный форум, киберфорум
MySQL
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
2 / 2 / 0
Регистрация: 12.07.2015
Сообщений: 13
1

Delphi и SQL Выборка из связанных таблиц, по ключевым полям с разными типами (счётчик-текстовый)

30.01.2019, 13:47. Показов 872. Ответов 5

Author24 — интернет-сервис помощи студентам
Всем доброго времени суток. Разрабатываю программу по учёту сотрудников. Проделана очень большая работа, много функций. В БД около 20 таблиц. Имеется master(список сотрудников) и slave(образование, взыскание итд.). У master'a тип ключевого поля - счётчик, у slave'ов тип ключевого поля текстовый. Связь между таблицами Spisok и Vigovor настроена в delphi на вкладке diagram. Всё прекрасно работает, но мне надо сделать выборку по выговорам. Вот мой запрос:
Delphi
1
2
3
4
5
6
7
with QueryVigovor do
begin
 close;
 sql.Clear;
sql.Add('select Фамилия,[Срок до] from Spisok inner join Vigovor on Spisok.Код=Vigovor.Код where  [Vigovor.Срок до] >= :Date1');
QueryLich.Parameters.ParamByName('date1').Value:=datetostr(DateTimePicker1.Date);
open;
При сравнении полей Код sql запрос ошибку выкидывает-несоответствие типа в выражении. Если оба ключевых поля сделать счётчиками то всё работает но мне так ненадо. Как в тексте запроса приравнять тип поля Код к стринговому?
Вариант
Delphi
1
inttostr(Spisok.Код)=Vigovor.Код
в тексте запроса естественно ошибку выдаёт.

P.S. Не пинайте за безграмотность это мой первый проект с БД До этого, во всех случаях помогал поиск по этому по истине "священному" форуму, но сейчас всё зашло слишком далеко

Добавлено через 2 часа 42 минуты
если делать так
Delphi
1
from Spisok inner join Vigovor on (CAST(Spisok.Код AS string) =CAST(Vigovor.Код AS string)) where
то говорит что неопознаня ошибка. Проблема в сравнении плей с разными типами. Хотя у меня значения полей Spisok.Код и Vigovor.Код -числовые.

Добавлено через 18 минут
Правильное решение:

Delphi
1
sql.Add('select Фамилия,[Срок до] from Spisok inner join Vigovor on Spisok.Код like Vigovor.Код where  [Vigovor.Срок до] >= :Date1');
При указании ключевых полей вместо = надо like поставить, и выборка заработает так как надо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.01.2019, 13:47
Ответы с готовыми решениями:

Delphi+Sql+MS VFP Driver (выборка из таблиц без дублей)
Помогите разобраться в SQL, имеется вот такой запрос: К примеру приведу базу (dbf файл) содержащую...

Выборка из связанных таблиц
Как выбрать значения из связанных таблиц я знаю. Но в одном из случаев выбирается не всё. Есть...

Выборка из связанных таблиц БД Access
В БД Есть две таблицы: 1.bazy (структура таблицы: kod; name_baz) 2.users (структура таблицы :...

Выборка из нескольких связанных таблиц
Как выбрать значения из связанной таблицы понятно. А как выбрать значения из нескольких связанных...

5
541 / 352 / 194
Регистрация: 07.11.2018
Сообщений: 1,238
30.01.2019, 13:48 2
непонятно..сравнить надо инт со стрингой?
0
2 / 2 / 0
Регистрация: 12.07.2015
Сообщений: 13
30.01.2019, 13:51  [ТС] 3
сравнить надо было тип счётчика (я не знаю какой тип у счётчика, int?) со стрингой. В итоге оператор like сам всё делает.
0
541 / 352 / 194
Регистрация: 07.11.2018
Сообщений: 1,238
30.01.2019, 13:54 4
нет такого типа данных счётчик!

Добавлено через 3 минуты
раз сами нашли ответ то респект..думаю многие просто игнорировали тему увидив тип данных счётчик..
0
2 / 2 / 0
Регистрация: 12.07.2015
Сообщений: 13
30.01.2019, 13:55  [ТС] 5
Да я понимаю, в Access в поле Код, стоит тип- счётчик. Счётчик в принципе это числовое поле(int) с последовательным автоинкрементом но я не уверен в этом рассуждении. Самое главное что решение найдено. Как бы мне не очень хочется сейчас изучать весь язык SQL.
В моём вопросе был разговор о полях, и имелось ввиду что Счётчик это тип поля а не тип данных. Но всё равно спасибо что хоть кто то откликнулся.
0
541 / 352 / 194
Регистрация: 07.11.2018
Сообщений: 1,238
30.01.2019, 14:18 6
чтобы узнать тип данных
SQL
1
SHOW FIELDS FROM название таблицы;
Добавлено через 11 минут
Цитата Сообщение от tygaimaks Посмотреть сообщение
Счётчик это тип поля а не тип данных.
Поле это колонка в которой стоят данные с заданым типом..у колонки по сути нет типа она отображает данные с заданным типом,вы несможете поместить в колонку для строк какое либо число.Потому колонка не может отображать счётчики так как нет такого типа данных.Это тоже самое ,что доказать что канистра должна уменьшать громкость музыки,так как счётчик это функция а не тип.
1
30.01.2019, 14:18
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.01.2019, 14:18
Помогаю со студенческими работами здесь

Выборка данных из связанных таблиц
Всем привет! Столкнулся с проблемой выборки данных из связанных таблиц.Есть БД Access, читаю с...

Выборка из нескольких таблиц, связанных по ID
Здравствуйте! В инете ничего толкового не нашёл в ответ на свой вопрос, поэтому задаю вопрос здесь....

Выборка из двух связанных таблиц
Есть две таблицы связаны между собой как один к многим. Сделал выборку с помощью подзапроса. ...

Выборка связанных данных из двух таблиц
На текущий момент запрос такого вида SELECT id, product1, ( SELECT price2 FROM post_2 ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru