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

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

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.04.2009, 15:54   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
Вопрос Последняя работа с ID :)

Уважаемые программисты! Я, с вашей помощью, подошел к последней задачкой связанной с ID .
Суть задачи:
- имеется БД "Оценки".
- В ней есть колонка ID_Predmet.
- Есть БД table_predmety, в которой тоже есть колонка ID_Predmet. Нужно, чтобы при нажатии на кнопку в таблицу БД "Оценки" в колонку ID_Predmet заносился IDишник предмета выбранного в DBLookupComboBox-е. Также ID выбранного предмета появляется в Label.
Причем есть маленький нюанс: заносится IDишников должно столько строчек, сколько учеников вносится в БД "Оценки", т.е. сколько строк добавляется. Что можете предложить? .
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 28.04.2009, 16:20   #2
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Все, с этой задачей саь разобрался . Решение оказалось проще, чем условие расписывать . На всякий случай выложу свое решение. Вдруг кому-нибудь пригодится. Итак, я объявил новую переменную типа integer и нужному полю присвоил значение этой переменной. В коде это выглядит так:
Код:
procedure TForm2.SpeedButton2Click(Sender: TObject);
var
 Nomer21:integer;
begin
 Table2.Last;
 Nomer21:=Form1.DBLookupComboBox1.KeyValue;

 Table2.Append;
 Table2.Edit;
 Table2.FieldByName('ID_Predmeta').AsInteger:=Nomer21;
 Table2.Post;
 Table2.Refresh;
 end;
end;
Вопрос в другом: как сделать, чтобы заносилось теперь название предмета? Для первого случая оказалось легко сделать установив такое свойство DBLookupComboBox1.KeyValue. А вот как быть с названием?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 28.04.2009, 16:34   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ченить типа такого.
Код:
Table2.FieldByName('Название_Predmeta'):=DBLookupComboBox1.DataSource.DataSet.FieldByName('Название');
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.04.2009, 16:39   #4
koma_grusha
Редкий обитатель
Форумчанин
 
Аватар для koma_grusha
 
Регистрация: 08.04.2009
Сообщений: 170
По умолчанию

если из этого же Лукапа, то немного допишу в твой же код
Код:
procedure TForm2.SpeedButton2Click(Sender: TObject);
begin
 Table2.Last;
 Table2.Append;
 Table2.Edit;
 Table2.FieldByName('ID_Predmeta').AsInteger:=Form1.DBLookupComboBox1.KeyValue;
 Table2.FieldByName('Predmet').AsString:=Form1.DBLookupComboBox1.Text;
 Table2.Post;
 Table2.Refresh;
 end;
end;
а если нужно чтобы другой Лукап возвращал в KeyValue, не ID, а Predmet, то укажи это поле в KeyField
Мозг, хорошо устроенный, стоит больше, чем мозг, хорошо наполненный (Мишель Монтень)
koma_grusha вне форума Ответить с цитированием
Старый 28.04.2009, 17:32   #5
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Stilet, большое спасибо Только я чуть подправил Ваш код на такой:
Код:
Table2.FieldByName('ID_Predmeta'):=DBLookupComboBox1.ListSource.DataSet.FieldByName('Predmet');
koma_grusha спасибо ))
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 28.04.2009, 17:46   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Только я чуть подправил Ваш код на такой:
Ради бога, я ж не могу знать чего ты там кашеваришь.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.04.2009, 18:55   #7
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Stilet . У меня возможно последний вопрос по ID. Как сделать, чтобы счетчик ID начинался заново? А то ситуация такая. Если я в таблицу для проверки работоспосбности программы добавляю записи, а потом удаляю их, и, вроде бы полностью очищаю таблицу, и она, она пустая, то у меня ID следующиx записей начинаются со следующего номера, который идет по счету. То есть было две записи, я их удалил, казалось бы новые две записи должны иметь ID 1 и 2, а у меня следующие ID равны 3 и 4. Как избежать этого?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 28.04.2009, 19:07   #8
maladoy
delphi-ст!
Форумчанин
 
Аватар для maladoy
 
Регистрация: 02.01.2009
Сообщений: 825
По умолчанию

почитай тут
вступлю в команду разработчиков ПО на Delphi
maladoy вне форума Ответить с цитированием
Старый 28.04.2009, 19:52   #9
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Код:
ALTER TABLE Test ALTER COLUMN CodeSecond IDENTITY (1, 1)
Что значит CodeSecond? Начало счетсчика? А просто кодом нельзя его обнулить?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Моя первая и последняя игра. BangBangFM Gamedev - cоздание игр: Unity, OpenGL, DirectX 13 05.12.2008 22:12
Последняя запись из DBGrid в отчёт Raccoon Помощь студентам 2 25.05.2008 13:59
Последняя статья. R-SER Свободное общение 10 25.11.2007 20:38