|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Проблема 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
|
||||
|
||||
Неверное проектирование структуры БД завело в тупик. Задача нерешаема с помощью 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
|
|||
|
|||
Цитата:
Спасибо, это я решил. А вот вторая проблема: есть форма с DBGrid'ом и БД на Access'е. Подскажите, как отловить значение конкретного столбца (ID) в последней добавленной строке? Мне необходимо как-то это значение присвоить переменной. |
#4
|
||||
|
||||
Можно так:
Код:
Select Max(ID) from UserTable Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#5
|
|||
|
|||
Цитата:
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
|
||||
|
||||
Вообще-то не должно бы. Тут либо проблема с именем таблицы (возможно зарезервированное слово), либо вы запрос неверно исполняете. Какой командой запускаете запрос? Должно быть:
Код:
MainFrm.AccountADOQuery.Open; Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#7
|
|||
|
|||
Цитата:
В БД три таблицы - 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
|
||||
|
||||
Цитата:
Google в помощь |
#9
|
|||
|
|||
Цитата:
счетчик, автоинкремент. |