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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.03.2011, 01:27   #1
world12_tk
Форумчанин
 
Регистрация: 24.02.2009
Сообщений: 269
Сообщение Delphi считывание значения первичного ключа

Здраствуйте уважаемые программисты!!!
Возникла такая проблема....
Есть БД на Access, в которой включены 2 связанные таблицы
С помощью компонента ADOQuery я хочу считать значение первичного ключа, чтобы потом это значение использовать во второй таблицы:
Код:
id:=TestForm.ADOQuery1.SQL.Add('SELECT FROM StudentTabel where (id)');
Но почему то в id возвращается значение 0....
Не могли бы вы мне сказать в чем я ошибся...
Заранее спасибо!
world12_tk вне форума Ответить с цитированием
Старый 17.03.2011, 08:40   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
С помощью компонента ADOQuery я хочу считать значение первичного ключа
Допустим. Но в таблице StudentTabel много записей. ID какой именно записи Вы хотите получить?

Цитата:
Код:
id:=TestForm.ADOQuery1.SQL.Add('SELECT FROM StudentTabel where (id)');
Не обижайтесь, но это написан ПОЛНЫЙ бред. (чушь, ахинея, ерунда... - можете выбрать по вкусу...)

метод ADD всего навсего добавляет в строку в запрос. И всё.
Ваш код должен выглядеть примерно так:
Код:
   TestForm.ADOQuery1.Close;
   TestForm.ADOQuery1.SQL.Clear;
   TestForm.ADOQuery1.SQL.Add('SELECT id FROM StudentTabel where что-то = чему-то');
   TestForm.ADOQuery1.Open;
   if TestForm.ADOQuery1.RecordCount=1 then begin
     {нашли нужный ID}
      id := TestForm.ADOQuery1.FieldByName('id').AsInteger;
   end
   else begin {произошла ошибка}
      if TestForm.ADOQuery1.RecordCount=0 then
         ShowMessage('Ошибка! Ничего не нашлось!')
      else  
         ShowMessage('Ошибка! Сразу несколько записей отвечают заданным условиям отбора!')
    end;     
    {закроем открытый датасет}
    TestForm.ADOQuery1.Close;
NB. разумеется, вместо where что-то = чему-то Вам нужно задать корректное условие отбора нужной записи.
Причём это условие отбора должно гарантировать УНИКАЛЬНОСТЬ записи в таблице.

Последний раз редактировалось Serge_Bliznykov; 17.03.2011 в 23:27. Причина: опечатка при вызове метода .Open
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.03.2011, 16:23   #3
world12_tk
Форумчанин
 
Регистрация: 24.02.2009
Сообщений: 269
По умолчанию

А какое условие нужно поставить, чтобы узнать id последней строки???
world12_tk вне форума Ответить с цитированием
Старый 17.03.2011, 16:29   #4
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Цитата:
чтобы узнать id последней строки
Так бы сразу и сказал
Код:
SELECT max(id) FROM StudentTabel
_SERGEYX_ вне форума Ответить с цитированием
Старый 17.03.2011, 17:30   #5
world12_tk
Форумчанин
 
Регистрация: 24.02.2009
Сообщений: 269
По умолчанию

_SERGEYX_! В этой строке
Код:
TestForm.ADOQuery1.SQL.Open;
выдает ошибку:
TStrings does not contain a member named 'Open'
world12_tk вне форума Ответить с цитированием
Старый 17.03.2011, 19:39   #6
world12_tk
Форумчанин
 
Регистрация: 24.02.2009
Сообщений: 269
По умолчанию

_SERGEYX_ Я понял в чем ошибка.... Но далеко так и не продвинулся((((
Теперь в этой строчки он мне выдает ошибку: ADOQuery1:Field 'id' not found. Хотя этот столбец присутствует... Пробывал ставить другой столбец, все равно...
Не могли бы вы мне объяснить в чем ошибка??
Код:
 ids := TestForm.ADOQuery1.FieldByName('id').AsInteger;
world12_tk вне форума Ответить с цитированием
Старый 17.03.2011, 23:26   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
выдает ошибку:
TStrings does not contain a member named 'Open'
Угу. это я опечатался - SQL там лишнее (поправил в своём примере выше)!

Цитата:
Не могли бы вы мне объяснить в чем ошибка??
В том, что в запросе: SELECT max(id) FROM StudentTabel
не выбирается поле ID

самый простой способ изименить запрос на такой:
Код:
 TestForm.ADOQuery1.SQL.Add('SELECT max(id) as id FROM StudentTabel');
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.03.2011, 22:53   #8
world12_tk
Форумчанин
 
Регистрация: 24.02.2009
Сообщений: 269
По умолчанию

Спасибо.... вы мне очень помогли....
Но вот возникла другая проблема.....
Вот я из первой таблицы, где хранится фамилия человека, вытащил id этой строки.
Вдругую таблицу я записываю вопросы для этого id. Но когда вопросов достигает больше чем 1, он начинает ругаться, и говорит о том что не может быть две строчки с одинаковым id.... Может быть я их не правильно связал....!?
Не могли бы вы мне помочь.....
Заранее спасибо....
world12_tk вне форума Ответить с цитированием
Старый 21.03.2011, 08:50   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Вдругую таблицу я записываю вопросы для этого id. Но когда вопросов достигает больше чем 1, он начинает ругаться, и говорит о том что не может быть две строчки с одинаковым id.... Может быть я их не правильно связал....!?
может быть. А может, структура этой таблицы неверна. Ну или Вы ID не туда вставляете. Или на таблицу неправильно добавлен индекс с уникальностью...
без конкретных данных ничего точно сказать нельзя.

p.s. На форуме правило - одна тема - один вопрос. Поэтому, лучше, если Вы создадите новую тему! и там изложите подробности.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.03.2011, 01:16   #10
world12_tk
Форумчанин
 
Регистрация: 24.02.2009
Сообщений: 269
По умолчанию

Serge_Bliznykov, у меня опять проблема....((((
Когда у меня в таблице есть одна запись, то данный код не выполняется:
Код:
  TestForm.ADOQuery1.SQL.Clear;
  TestForm.ADOQuery1.SQL.Add('SELECT id as id FROM StudentTabel');
  TestForm.ADOQuery1.Open;
В последней строчки он выдает ошибку:
Псевдоним 'id' из списка определений SELECT запроса привел к возникновению циклической ссылки.....
Я всю голову сломал, но так и не понял как это исправить и почему это возникло(((
Вы не могли бы мне помочь????
Заранее спасибо....
world12_tk вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Считывание из файла в массив (delphi) CAMOBAP Помощь студентам 9 27.02.2011 12:07
Считывание файла со второй строки (delphi) CAMOBAP Помощь студентам 19 12.01.2011 23:04
delphi считывание из свойств программы. Evgewa Помощь студентам 1 01.06.2010 17:16
Delphi считывание матрицы из файла Remlin Помощь студентам 1 03.05.2009 13:16
вывод первичного ключа ZBoris SQL, базы данных 3 09.02.2009 17:38