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

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

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

Восстановить пароль

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

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

Дело в том, что когда я рисовал связи для таблиц, не получалось у меня тривиального(простого) решения данной задачи через главную и подчиненную таблицу. В связи с чем и возник исходник PersonalInfo2, который до этого вылаживал.
Там за основу бралась таблица Criteria, поля которой являются уникальными для каждой таблицы.
Поэтому чтобы знать кому принадлежит данный критерий и для какого предмета в каком году, там введены поля IdPersonalInfo, IdPredmet, IdChetvert, idGod. в которых находятся индесы Id других таблиц.
Кстати в этом случае можно обойтись и без запросов, используя метод Locate для нескольких полей.
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.
ArtInt вне форума
Старый 11.05.2009, 18:09   #52
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Дык я так и не понял. Если я свяжу таблицу critery с таблицей infa по ID, то это будет неправильно?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума
Старый 11.05.2009, 21:28   #53
ArtInt
Форумчанин
 
Аватар для ArtInt
 
Регистрация: 06.03.2009
Сообщений: 583
По умолчанию

Если получится, то связывай. Правильность на первом этапе определяется результатом работы, а уже потом оптимизацией кода.
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.
ArtInt вне форума
Старый 12.05.2009, 02:31   #54
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

связал таблицы критериев и инфу по ID. Вроде бы при выборе фио ученика в
таблице критериев отображаются данные для этого ученика. А если я буду данные менять для какого то ученика через dbedit, то они в базе тоже поменяются?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума
Старый 12.05.2009, 06:47   #55
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Вот такая ситуация возникла с БД после создания связи Master Source. Когда я в главную таблицу вношу данные ФИО для двух человек, например, Иванов_1 Иван_1 Иванович_1 и Иванов_2 Иван_2 Иванович_2 для первой четверти, и заношу их результаты по таблицам, то все нормально работает. При выборе, например, первого ученика, в других таблицах отображаются одна строка с его данными. Это правильно. Так и должно быть. Одна выбранная запись в главной таблице - по одной строке в подчиненных. Но когда я добавляю этих же учеников снова в главную таблицу, но уже, например, 2 четверть и их результаты разные, то когда я заношу эти результаты по дочерним таблицам, то получается вот что. Если я выбираю уже ранее занесенного Иванов_1, то в таблице critery у меня отображаются все данные, которые соответствуют для этого ученика. Это происходит во всех дочерних таблицах. В принципе это правильно. Если я вношу одного и того же ученика, но с разными результатами, то я и получу при его выборе в гриде все его данные, которые относятся к нему. Думаю это логично. Но последняя добавленная эта же запись, того же Иванов_1, но за другую четверть повторяется и при ее выборе не отображается строка с результатом. Все данные этого ученика отображаются только тогда, когда я выбираю запись когда первый раз еще внес. Вообщем возникла проблемка: как сделать, чтобы в главную таблицу не заносилась строка, если она уже в ней есть, но при этом данные, которые соответствуют вносимой строке отображались в дочерних таблицах? Вообщем, как сделать, чтобы не отображалась повторяющаяся строка, но остальное работало. Делать цикл на проверку уже имееющегося значения? Или как?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума
Старый 12.05.2009, 16:06   #56
ArtInt
Форумчанин
 
Аватар для ArtInt
 
Регистрация: 06.03.2009
Сообщений: 583
По умолчанию

Насчет DBEdit я думаю, практическим путем уже убедился, что да будут тоже изменятся значение в таблице.
Про повторяющиеся значения Фамилий учеников, наверное лучше сделать проверку через метод Locate . То есть, примерно так:
Код:
if Locate(????????)=false then
begin//вставляем новые данные по фамилии
Table1.Insert;

Table1.Post;
////потом для дочерней код........
else//указатель перешел на найденную запись в главной таблице
  begin///запись существует, поэтому вставляем только для дочерней
   {код вставки в дочернюю таблицу}
  end;
Вообщем, образно, код выглядит примерно так.
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.
ArtInt вне форума
Старый 12.05.2009, 16:50   #57
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

И как это можно сделать?
Код:
procedure TForm2.SpeedButton1Click(Sender: TObject);
var
 i,h,Nomer:integer;
begin
//что писать вместо вопросов?
 if Locate(???) = False then
 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;
    end;
    end;
end;
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума
Старый 12.05.2009, 17:42   #58
ArtInt
Форумчанин
 
Аватар для ArtInt
 
Регистрация: 06.03.2009
Сообщений: 583
По умолчанию

Примерно так
Код:
 if Form1.Adotable1.Locate('ФАМИЛИЯ',Form1.SG9.Cells[1,i],[loCaseInsensitive, loPartialKey])=false then
и возможно в цикле
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.
ArtInt вне форума
Старый 12.05.2009, 17:49   #59
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

А остальной код оставить без изменения?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума
Старый 12.05.2009, 17:55   #60
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

А у меня же заносится не только фамилия, но имя и отчество. Могу ли я записать код таким образом:
Код:
procedure TForm2.SpeedButton1Click(Sender: TObject);
var
 i,h,Nomer:integer;
begin
 if Form2.Table1.Locate('ФАМИЛИЯ;ИМЯ;ОТЧЕСТВО',VarArrayOf([Form1.SG9.Cells[1,i],Form1.SG9.Cells[2,i],Form1.SG9.Cells[3,i]),[loCaseInsensitive, loPartialKey]) = False then
 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;
    end;
    end;
end;
A?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
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