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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 15.03.2012, 11:31
AlexMan12 AlexMan12 вне форума
Прохожий
 
Регистрация: 15.03.2012
Сообщения: 5
Репутация: 10
Печаль Проблема Delphi и Access

Добрый день. Вопрос в следующем:

Имеется БД MS ACCESS с двумя таблицами (люди и машины. В первой поля C_NAME, C_NUMBER, C_ADDRESS и C_ID. Во второй таблице A_AUTO, A_NAMEAUTO, A_NUMBER и A_ID. На форме делаю два DBGrida. В первом данные из первой таблицы о людях, во второй появляются данные о машинах после щелчка на каком либо человеке (одному человеку может принадлежать как одна, так и много машин). Делаю запрос:

Код:
  AccountADOQuery.Active := false;
  AccountADOQuery.SQL.Text := 'SELECT A_AUTO, A_NAMEAUTO, A_NUMBER FROM PEOPLE, AUTO WHERE C_ID=A_ID';
  AccountADOQuery.Active := true;

но толком ничего не выводит. Подскажите пожалуйста, как быть.

P.S. A_ID и C_ID ключевые поля типа Счетчик.

Последний раз редактировалось lmikle, 15.03.2012 в 21:54.
Ответить с цитированием
  #2  
Старый 15.03.2012, 19:35
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Неверное проектирование структуры БД завело в тупик. Задача нерешаема с помощью 2 таблиц. Вам нужно 3-я таблица (Link), где будут общие ключи для Машины и Человека. C_ID,A_ID
И тогда вы сможете получить выборку для человека у которого есть машины:
Код:
select * from People as P
 inner join Link as L on L.C_ID=P.C_ID
 inner join Auto as A on A.ID=L.A_ID
where P.Name = 'Иванов'
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #3  
Старый 15.03.2012, 21:13
AlexMan12 AlexMan12 вне форума
Прохожий
 
Регистрация: 15.03.2012
Сообщения: 5
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
Неверное проектирование структуры БД завело в тупик. Задача нерешаема с помощью 2 таблиц. Вам нужно 3-я таблица (Link), где будут общие ключи для Машины и Человека. C_ID,A_ID
И тогда вы сможете получить выборку для человека у которого есть машины:
Код:
select * from People as P
 inner join Link as L on L.C_ID=P.C_ID
 inner join Auto as A on A.ID=L.A_ID
where P.Name = 'Иванов'

Спасибо, это я решил. А вот вторая проблема:

есть форма с DBGrid'ом и БД на Access'е. Подскажите, как отловить значение конкретного столбца (ID) в последней добавленной строке? Мне необходимо как-то это значение присвоить переменной.
Ответить с цитированием
  #4  
Старый 15.03.2012, 21:33
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Можно так:
Код:
Select Max(ID) from UserTable
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #5  
Старый 15.03.2012, 21:40
AlexMan12 AlexMan12 вне форума
Прохожий
 
Регистрация: 15.03.2012
Сообщения: 5
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
Можно так:
Код:
Select Max(ID) from UserTable


MainFrm.AccountADOQuery.SQL.Text := 'SELECT MAX(A_ID) FROM ACCOUNT';
tempA := MainFrm.AccountADOQuery.SQL.Text;

Ошибка "SELECT MAX(A_ID) FROM ACCOUNT' is not a valid integer value for field 'A_ID"

Последний раз редактировалось AlexMan12, 15.03.2012 в 21:47.
Ответить с цитированием
  #6  
Старый 15.03.2012, 21:46
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Вообще-то не должно бы. Тут либо проблема с именем таблицы (возможно зарезервированное слово), либо вы запрос неверно исполняете. Какой командой запускаете запрос? Должно быть:
Код:
MainFrm.AccountADOQuery.Open;
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #7  
Старый 15.03.2012, 21:55
AlexMan12 AlexMan12 вне форума
Прохожий
 
Регистрация: 15.03.2012
Сообщения: 5
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
Вообще-то не должно бы. Тут либо проблема с именем таблицы (возможно зарезервированное слово), либо вы запрос неверно исполняете. Какой командой запускаете запрос? Должно быть:
Код:
MainFrm.AccountADOQuery.Open;

В БД три таблицы - CUSTOMER, ACCOUNT, CONNECTS. Вроде ни одно слово не заразервировано.

следуя вашему совету получились такие строчки:

MainFrm.AccountADOQuery.SQL.Text := 'SELECT MAX(A_ID) FROM ACCOUNT';
tempA := MainFrm.AccountADOQuery.SQL.Text;

(переменная tempA типа String).

Я хочу добиться чтобы в tempA заносилась информация из A_ID таблицы ACCOUNT (там число сидит, которое счетчиком меняется). но получаю ошибку

SELECT MAX(A_ID) FROM ACCOUNT' is not a valid integer value for field 'A_ID

Всю голову сломал уже ((
Ответить с цитированием
  #8  
Старый 16.03.2012, 12:22
Аватар для Ildar-tsr
Ildar-tsr Ildar-tsr вне форума
Местный
 
Регистрация: 09.08.2011
Адрес: г.Сургут, ХМАО
Сообщения: 453
Репутация: 7402
По умолчанию

Цитата:
Сообщение от AlexMan12
SELECT MAX(A_ID) FROM ACCOUNT' is not a valid integer value for field 'A_ID
A_ID какого типа поле?
__________________
Google в помощь
Ответить с цитированием
  #9  
Старый 16.03.2012, 12:34
AlexMan12 AlexMan12 вне форума
Прохожий
 
Регистрация: 15.03.2012
Сообщения: 5
Репутация: 10
По умолчанию

Цитата:
Сообщение от Ildar-tsr
A_ID какого типа поле?

счетчик, автоинкремент.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter