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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 11.05.2009, 14:58   #41
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

А когда делаю для проверки внесение данных тока из одной строки, т.е. так:
Код:
procedure TForm2.SpeedButton1Click(Sender: TObject);
var
 i,h,Nomer:integer;
begin
// for i:=1 to 25 do
//   begin
 Table1.Insert;
 Table1.FieldByName('ФАМИЛИЯ').AsString:=Form1.SG9.Cells[1,1];
 Table1.FieldByName('ИМЯ').AsString:=Form1.SG9.Cells[2,1];
 Table1.FieldByName('ОТЧЕСТВО').AsString:=Form1.SG9.Cells[3,1];
 Table1.Post;
//    end;
end;
то в главную таблицу заносятся все 25 строк с одинаковыми значениями, а в дочерней отображается только первая запись главной таблицы. В чем дело? Какие могут быть варианты решения этой проблемы?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума
Старый 11.05.2009, 15:18   #42
ArtInt
Форумчанин
 
Аватар для ArtInt
 
Регистрация: 06.03.2009
Сообщений: 583
По умолчанию

Как я понял в StringGrid общее число строчек равно 25, а заполнено всего 2, которые и должны быть занесены в таблицу, значит надо делать проверку на пустые значения.
А в главной таблице должны быть занесены две строки (в данном случае) из StringGrid и при этом в подчиненной таблице для каждой строки главной таблицы четверть и год заносятся.
Тогда, если исходить из такой логике, код будет примерно такой:
Код:
procedure TForm2.SpeedButton1Click(Sender: TObject);
var
 i,h,Nomer:integer;
begin
 for i:=1 to 25 do
 begin

 if Form1.SG9.Cells[1,i]<>'' then
 begin
   Table1.Insert;
   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;

  //вносим данные в дочернюю таблицу
  Table2.Insert;
  Table2.FieldbyName('Chetvert').AsString:=DBLookupCombobox2.Text;
  Table2.FieldbyName('God').AsString:=EditGod.Text;
  Table2.Post;
 end;//if
  end;//for
end;
В этом случае последовательно будут вноситься данные сначала в первую таблицу, потом во вторую.
Писал, прямо на форуме по памяти, поэтому возможны опечатки, но по логике, где то примерно так должно быть.
А если захочешь отдельно заполнять подчиненнную таблицу, то учитывай что она связана с главной таблицей, значит надо сначала перейти на другую запись в главной таблице, а потом заполнить.
Примерно так:
Код:
  Table1.First;
  for i:=1 to Table1.RecordCount do
  begin
    Table2.Insert;
    Table2.FieldByName('Chetvert'):=Form1.DBLookupCombobox2.text;
    Table2.Post;
     Table1.Next;
  end;
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.

Последний раз редактировалось ArtInt; 11.05.2009 в 15:25.
ArtInt вне форума
Старый 11.05.2009, 15:52   #43
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

ArtInt, Ваша память Вас как всегда не подвела и для главной таблицы Вы правильно код написали . Там теперь работает. А вот у меня в коде дочерней таблицы идет проверка по условиям. Код:
Код:
procedure TForm2.SpeedButton34Click(Sender: TObject);
var
 i,Nomer_74: integer;
begin
 for i:=1 to 25 do
 begin
   if Form1.DBLookupComboBox2.Text = '1 четверть' then
     begin
     Form2.Table_74.Insert;
     Form2.Table_74.FieldByName('Chetvert').AsString:='1 четверть';
     Form2.Table_74.FieldByName('ГОД').AsInteger:=StrToInt(Form1.Edit3.Text);
     Form2.Table_74.Post;
     end;

{   if Form1.DBLookupComboBox2.Text = '2 четверть then
     begin
       Table_74.Insert;
       Form2.Table_74.FieldByName('ID').AsString:=IntToStr(Nomer_74);
       Form2.Table_74.FieldByName('Chetvert').AsString:='2 четверть';
       Table_74.FieldByName('ГОД').AsInteger:=StrToInt(Form1.Edit3.Text);
     end;    }

   if Form1.DBLookupComboBox2.Text = '3 четверть' then
     begin
      Table_74.Insert;
      Form2.Table_74.FieldByName('ID').AsString:=IntToStr(Nomer_74);
      Form2.Table_74.FieldByName('Chetvert').AsString:='3 четверть';
      Table_74.FieldByName('ГОД').AsInteger:=StrToInt(Form1.Edit3.Text);
     end;

 {  if Form1.DBLookupComboBox2.Text = '4 четверть' then
     begin
     Table_74.Insert;
     Form2.Table_74.FieldByName('ID').AsString:=IntToStr(Nomer_74);
     Form2.Table_74.FieldByName('Chetvert').AsString:='4 четверть';
     Table_74.FieldByName('ГОД').AsInteger:=StrToInt(Form1.Edit3.Text);
     end; }
//  end;
 end;
end;
Суть выше приведенного кода в том, что идет проверка по выбору четверти. То есть смотрится какая четверть выбрана из списка и название этой четверти и год должен заносится для каждого ученика. Вот. Нормальный ли это код?)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума
Старый 11.05.2009, 16:07   #44
ArtInt
Форумчанин
 
Аватар для ArtInt
 
Регистрация: 06.03.2009
Сообщений: 583
По умолчанию

Как понять данную строчку, если Id (+) автоинкрементное, то наверное в этом случае будет ошибка выводится.
Код:
   Form2.Table_74.FieldByName('ID').AsString:=IntToStr(Nomer_74);
A цикл зачем
Код:
for i:=1 to 25 do
Зачем 25 раз заносить одно и тоже значение, если заносить то наверное по количеству записей в главной таблице table1.RecordCount и потом смещать запись Table1.Next;
Вот в чем вопрос:
Зачем делать такую сложную проверку, не легче ли сразу присвоить значение DBLookupCombobox2.Text; , ведь как я вижу текст то одинаковый???
Второй вопрос: Смысл программы как я понял: Сначала пользователь заполняет фамилии и имена. Потом выбирает четверть и год. Потом
нажимает на кнопку Добавить данные(и данные из StringGrid заносятся в таблицу).
Цитата:
вот у меня в коде дочерней таблицы идет проверка по условиям
что мешает сделать все в одной кнопкой? Про странность данного условия уже написал.
Цитата:
То есть смотрится какая четверть выбрана из списка и название этой четверти и год должен заносится для каждого ученика
должна заносится автоматически в цикле? или выбрал в главной таблице запись(фамилию ученика) и потом нажал на кнопку и для этого одного ученика в дочернюю таблицу занеслись значения из DbLookupCombobox и Edit???
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.

Последний раз редактировалось ArtInt; 11.05.2009 в 16:11.
ArtInt вне форума
Старый 11.05.2009, 16:10   #45
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

ArtInt, огромное спасибо Вам за помощь ). Жаль, что не получается оставить Вам отзыв . Ваш код самый правильный. А вот то, что у меня в дочерней таблице отображаются данные одного и того же человека, но когда он имеет разные ID, это правильно? . Скрин прилагается.
Изображения
Тип файла: jpg Безымянный.jpg (36.1 Кб, 143 просмотров)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума
Старый 11.05.2009, 16:20   #46
ArtInt
Форумчанин
 
Аватар для ArtInt
 
Регистрация: 06.03.2009
Сообщений: 583
По умолчанию

В дочерней таблице Id относится только к ней, а вот поле по которому делалась связь с главной таблицей должно содержать такой же индекс как и главной в поле Id.
Так что, это нормально.
P.S. Отзыв можно и попозже оставить.
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.
ArtInt вне форума
Старый 11.05.2009, 16:20   #47
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Дружище, если в кратце, то суть моей программы такова: пользователь вносить ФИО ученика, выбирает четверть, предмет, год, вводить оценки. Далее считаются критерии. И все эти результаты должны заносится в БД по своим таблицам. Думаю, что такая структура должна быть нормальной. Как Вы считаете? И, при выборе ученика в главной таблице infa у меня в остальных таблицах должна выводится информация для соответстствующего выбранного ученика. .
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума
Старый 11.05.2009, 16:23   #48
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

А вот еще такой вопрос: как лучше поступить с таблицей critery? (самая нижняя и большая таблица). Как ее лучше связать: связать ее с таблицей predmety по ID_Predmet или связать эту таблицу (critery) с главной таблицей (infa) по ID?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума
Старый 11.05.2009, 16:35   #49
ArtInt
Форумчанин
 
Аватар для ArtInt
 
Регистрация: 06.03.2009
Сообщений: 583
По умолчанию

таблицу Criteria - зависит от того, если эти критерии вычисляются один раз для ученика на протяжении всего года, то можно связать с Infa.
Если же вычисления происходят по каждому предмету, который сдает ученик, то по таблице предметы.
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.
ArtInt вне форума
Старый 11.05.2009, 16:48   #50
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Ну, а если например ученик изучает русский язык несколько лет подряд, то для него премдет может быть одинаковым и четверти тоже. Разными будут год обучения и количество оценок и результаты критериев. Тогда как? Связать с таблицей infa? По логике-то должно быть правильно, что мы выбирая ученика по его ФИО должны получать инфу о его успеваемости, а не выбирая предмет. Иначе как мы будем знать к какому ученику относятся эти данные. Изначально я подразумевал, что у меня таблица predmety не будет связана с таблицей infa, а на таблицу предметы будет ссылаться как-то таблица critery. Кстати, у меня в таблицу critery ID_Predmeta заносится не из таблицы predmety, а из другой таблицы БД на главном окне проги. Может тогда правда сделать ссылку таблицы critery на таблицу infa по ID? Вот код внесения данных в таблицу critery:
Код:
procedure TForm2.SpeedButton3Click(Sender: TObject);
var
 i,Nomer3,Nomer31:integer;
begin
 for i:=1 to 25 do
   begin

 Nomer31:=Form1.DBLookupComboBox1.KeyValue; //когда выбран предмет в списке, то происходит получение ID этого предмета и занесение этого ID в таблицу critery. 

 Table3.Insert;
 if Form1.DBLookupComboBox1.Text <> '' then
    begin
      Table3.FieldByName('ID_Predmet').AsString:=IntToStr(Nomer31);
    end;

 if Form1.DBLookupComboBox2.Text = '1 четверть' then
   begin
     Table3.FieldByName('ID_Chetvert').AsInteger:=1;
   end;

 if Form1.DBLookupComboBox2.Text = '2 четверть' then
   begin
     Table3.FieldByName('ID_Chetvert').AsInteger:=2;
   end;

 if Form1.DBLookupComboBox2.Text = '3 четверть' then
   begin
     Table3.FieldByName('ID_Chetvert').AsInteger:=3;
   end;

 if Form1.DBLookupComboBox2.Text = '4 четверть' then
   begin
     Table3.FieldByName('ID_Chetvert').AsInteger:=4;
   end;

 Table3.FieldByName('ДВОЕК').AsString:=Form1.SG2.Cells[0,i];
 Table3.FieldByName('ТРОЕК').AsString:=Form1.SG2.Cells[1,i];
 Table3.FieldByName('ЧЕТВЕРОК').AsString:=Form1.SG2.Cells[2,i];
 Table3.FieldByName('ПЯТЕРОК').AsString:=Form1.SG2.Cells[3,i];
 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;
 end;
end;
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.

Последний раз редактировалось artemavd; 11.05.2009 в 16:55.
artemavd вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Связь таблиц в Database Desctop Sergius X БД в Delphi 0 22.04.2009 16:53
Связь с кучей dbf файлов (таблиц) через OLEDB через UNION ALL Sasha811 SQL, базы данных 0 01.01.2009 14:04
Связь таблиц в Delphi adinadin111 БД в Delphi 3 10.07.2008 14:50
связь таблиц в локальной БД IGREK БД в Delphi 3 30.06.2008 19:46
Связь таблиц БД kaa БД в Delphi 5 18.09.2007 18:29