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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.04.2009, 08:49   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
Печаль И снова про ID

Вопрос во вложении.
Код внесения данных в таблицу №1:
Код:
var
 i,h:integer;
begin
 for i:=1 to 25 do
 begin
  if Form1.SG9.Cells[0,i] <> '' then
   begin
 Table1.Append;
 Table1.Edit;
 Table1.FieldByName('ФАМИЛИЯ').AsString:=Form1.SG9.Cells[1,i];
 Table1.FieldByName('ИМЯ').AsString:=Form1.SG9.Cells[2,i];
 Table1.FieldByName('ОТЧЕСТВО').AsString:=Form1.SG9.Cells[3,i];
 Table1.Post;
 Table1.Refresh;
    end;
 end;
end;
Код внесения данных в таблицу №2:
Код:
var
 i:integer;
begin
 for i:=1 to 25 do
 begin
  if Form1.SG2.Cells[0,i] <> '' then
   begin
 Table2.Append;
 Table2.Edit;
 Table2.FieldByName('ДВОЕК').AsString:=Form1.SG2.Cells[0,i];
 Table2.FieldByName('ТРОЕК').AsString:=Form1.SG2.Cells[1,i];
 Table2.FieldByName('ЧЕТВЕРОК').AsString:=Form1.SG2.Cells[2,i];
 Table2.FieldByName('ПЯТЕРОК').AsString:=Form1.SG2.Cells[3,i];
 Table2.Post;
 Table2.Refresh;
    end;
 end;
end;
Код внесения данных в таблицу №3:
Код:
var
 i:integer;
begin
 for i:=1 to 25 do
 begin
  if Form1.SG3.Cells[0,i] <> '' then
   begin
 Table3.Append;
 Table3.Edit;
// Table3.FieldByName('ID').AsString:=Form2.Table1.IndexFields[0].Text;
 Table3.FieldByName('КО').AsString:=Form1.SG3.Cells[0,i];
 Table3.FieldByName('СБ').AsString:=Form1.SG3.Cells[1,i];
 Table3.FieldByName('КУ').AsString:=Form1.SG3.Cells[2,i];
 Table3.FieldByName('У').AsString:=Form1.SG3.Cells[3,i];
 Table3.FieldByName('О').AsString:=Form1.SG3.Cells[4,i];
 Table3.FieldByName('ЧО').AsString:=Form1.SG3.Cells[5,i];
 Table3.Post;
 Table3.Refresh;
    end;
 end;
end;
Код внесения данных в таблицу №3:
Код:
begin
 Table4.Append;
 Table4.Edit;
 Table4.FieldByName('ГОД').AsString:=Form1.Edit3.Text;
 Table4.FieldByName('ПРЕДМЕТ').AsString:=Form1.ComboBox3.Text;
 Table4.Post;
 Table4.Refresh;
end;
Изображения
Тип файла: jpg Вопрос2.jpg (52.7 Кб, 161 просмотров)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 21.04.2009, 09:19   #2
S@fer
Форумчанин
 
Аватар для S@fer
 
Регистрация: 29.01.2009
Сообщений: 411
По умолчанию

Автоинкрементное поле - это поле счетчик, при удалении записей из базы, этот счетчик не обновлется, т.е. если было 30 записей, и удалить 10, то счечик все-равно поставит следующий ID 31, а не 21.

Что бы номера ставились по порядкую , то нужно сделать это поле просто числовым,
Затем при новой записи выбираем максимальное число
Код:
SELECT Max(ID) FROM table_information.db
, прибавляем к нему единицу и записываем в базу., Только надо будет еще учесть если будет удалена строка из середины таблицы, то поле ID необходимо будем обновить (чтобы данные опять шли по порядку)
S@fer вне форума Ответить с цитированием
Старый 21.04.2009, 09:49   #3
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

А без запроса нельзя это сделать?)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 21.04.2009, 09:53   #4
S@fer
Форумчанин
 
Аватар для S@fer
 
Регистрация: 29.01.2009
Сообщений: 411
По умолчанию

Попробуй сделать так
Код:
Query.last;
Nomer:=Query.FildByName('ID').AsInteger;
Nomer:=Nomer+1;
Но это будет работать если э тебя таблица отсортирована по возростанию (от 1 до n) по полю ID
По моему проще и правильнее это сделать запросом
S@fer вне форума Ответить с цитированием
Старый 21.04.2009, 11:36   #5
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Я попробую щас сделать то, что Вы предложили. А, кстати, куда именно вставить этот код?)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 21.04.2009, 11:39   #6
S@fer
Форумчанин
 
Аватар для S@fer
 
Регистрация: 29.01.2009
Сообщений: 411
По умолчанию

Цитата:
куда именно вставить этот код?
перед самой записью в таблицу
Код:
 
Table1.last;
Nomer:=Table1.FildByName('ID').AsInteger;
Nomer:=Nomer+1;

Table1.Append;
 Table1.Edit;
 Table1.FildByName('ID').AsIntegerNomer:=Nomer;
 Table1.FieldByName('ФАМИЛИЯ').AsString:=Form1.SG9.Cells[1,i];
 Table1.FieldByName('ИМЯ').AsString:=Form1.SG9.Cells[2,i];
 Table1.FieldByName('ОТЧЕСТВО').AsString:=Form1.SG9.Cells[3,i];
 Table1.Post;
 Table1.Refresh;
S@fer вне форума Ответить с цитированием
Старый 21.04.2009, 12:51   #7
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

S@fer, Спасибо тебе и с этим . У меня тут другой вопрос. Как сделать, чтобы у меня из ComboBox-a всем имеющимся записям в табице присваивалось одно и тоже значение? То есть если в базе есть два ученика, то в таблице предметов им обоим доолжно присваиваться одно и тоже значение из combobox-a? Я пробовал так:
Код:
for i:=1 to 25 do
 if Form1.ComboBox3.Text <> ' ' then
 Table4.FieldByName('ПРЕДМЕТ').AsString:=Form1.ComboBox3.Text+FloatToStr(i);
Но это не дало результата.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 21.04.2009, 14:18   #8
S@fer
Форумчанин
 
Аватар для S@fer
 
Регистрация: 29.01.2009
Сообщений: 411
По умолчанию

Код:
for i:=1 to 25 do
 if Form1.ComboBox3.Text <> ' ' then
 Table4.FieldByName('ПРЕДМЕТ').AsString:=Form1.ComboBox3.Text+FloatToStr(i);
Этот код дословно обозначает:
Перезаписать ячейку в поле "Предмет" 25 раз, причем в цикле присваевается значение в ячейке "текст в комбобоксе1" ,"текст в комбобоксе2",...,"текст в комбобоксе25".
В итоге получится
Код:
Table4.FieldByName('ПРЕДМЕТ').AsString:='текст в комбобоксе25';
Покажи польностью код записи

Последний раз редактировалось S@fer; 21.04.2009 в 14:20.
S@fer вне форума Ответить с цитированием
Старый 21.04.2009, 14:25   #9
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Вот:
Код:
var
 i,Nomer4:integer;
begin
 Table4.Last;
 Nomer4:=Table4.FieldByName('ID').AsInteger;
 Nomer4:=Nomer4 + 1;

 Table4.Append;
 Table4.Edit;
 Table4.FieldByName('ID').AsInteger:=Nomer4;
 Table4.FieldByName('ГОД').AsString:=Form1.Edit3.Text;
 Table4.FieldByName('ПРЕДМЕТ').AsString:=Form1.ComboBox3.Text;
 Table4.Post;
 Table4.Refresh;
end;
И год также как и предмет надо сделать. Как надо сделать?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 21.04.2009, 14:30   #10
S@fer
Форумчанин
 
Аватар для S@fer
 
Регистрация: 29.01.2009
Сообщений: 411
По умолчанию

Немного непонятно, тебе нужно обновить записи или добавить новые?
Каким образом связаны таблицы Ученики и предмет?
S@fer вне форума Ответить с цитированием
Ответ


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

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
И снова про подсчет строк Bezdar Microsoft Office Excel 4 23.03.2009 16:49
И снова ссылки Yaga HTML и CSS 2 20.03.2009 12:14
Снова про адрес переменной Pedro Общие вопросы Delphi 2 17.12.2008 21:53
Вопрос наверное про функции, а так точно даже не знаю про что. (Вопрос начинющего #6) Albert2008 Общие вопросы Delphi 4 21.08.2008 15:33
У меня вопрос про базы данных,а точнее про таблицы!!! Alexij Общие вопросы Delphi 1 13.04.2008 23:24