Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 22.11.2010, 11:20
susanin007 susanin007 вне форума
Прохожий
 
Регистрация: 22.11.2010
Сообщения: 17
Репутация: 10
По умолчанию скроллбары 2-х Dbgridов

есть такая проблема: есть 2 dbgrida которые тянут данные из 2-х таблиц Access, в первой таблице ФИО и ИН в другой проводяться различные расчеты. Кол-во записей в 2-х таблицах одинаково, соединить данные в 1 таблицу нельзя. Как бы сделать так чтобы при перемещении скроллбара 1-го dbgrida автоматически перемещался скроллбар 2-го dbgrida, чтобы строки были всегда напротив друг друга.
Ответить с цитированием
  #2  
Старый 22.11.2010, 14:15
Аватар для TOJluK
TOJluK TOJluK вне форума
Местный
 
Регистрация: 25.02.2009
Адрес: Минск
Сообщения: 551
Версия Delphi: 2007
Репутация: 110
По умолчанию

Цитата:
Сообщение от susanin007
соединить данные в 1 таблицу нельзя
Это почему?
Ответить с цитированием
  #3  
Старый 22.11.2010, 14:20
susanin007 susanin007 вне форума
Прохожий
 
Регистрация: 22.11.2010
Сообщения: 17
Репутация: 10
По умолчанию

в 1-й таблице карточка человека(Фам, Имя, отч, ИН....), во второй данные по начислению зарплаты. связь 2-х таблиц через ИН. Мне нужно чтобы в DBGrid Выводилось Фам, Имя, Отч, ИН, и все данные по начисл зарплаты (около 40 полей), а DBGrid соединяется только с 1-м DataSours, вот и возникла идея поставить ещё 1 DBGrid, отсюда и возникла проблема.
Ответить с цитированием
  #4  
Старый 22.11.2010, 14:29
Аватар для TOJluK
TOJluK TOJluK вне форума
Местный
 
Регистрация: 25.02.2009
Адрес: Минск
Сообщения: 551
Версия Delphi: 2007
Репутация: 110
По умолчанию

Почему бы не написать все в одном запросе, что позволит использовать один датасурс?
Ответить с цитированием
  #5  
Старый 22.11.2010, 14:33
susanin007 susanin007 вне форума
Прохожий
 
Регистрация: 22.11.2010
Сообщения: 17
Репутация: 10
По умолчанию

А можете подсказать как это правильно сделать? и главное как из 2-х таблиц запихнуть данные в DbGrid
Ответить с цитированием
  #6  
Старый 22.11.2010, 14:49
Аватар для TOJluK
TOJluK TOJluK вне форума
Местный
 
Регистрация: 25.02.2009
Адрес: Минск
Сообщения: 551
Версия Delphi: 2007
Репутация: 110
По умолчанию

Код:
select t1.*, t2.*
from table1 t1, table2 t2
where
t1.id = t2.id
Например так. Выведет все поля из таблиц table1, table2 связь по полю ID
Ответить с цитированием
  #7  
Старый 22.11.2010, 15:20
susanin007 susanin007 вне форума
Прохожий
 
Регистрация: 22.11.2010
Сообщения: 17
Репутация: 10
По умолчанию

Цитата:
Сообщение от TOJluK
Например так. Выведет все поля из таблиц table1, table2 связь по полю ID

Dbgrid связан с таблицей в которой нет полей Фам, имя, отч, есть только ИН, по ИН идет связь ещё с несколькими таблицами.
Добавить эти поля не выход, потому что их нужно будет добавлять в каждую из 5-7 таблиц и получиться что 1 таблица связывается с остальными по 4-м полям, хотя достаточно 1-го. Где тогда нормализация.

Вот и проблема, что не могу придумать как вывести в 1 Dbgrid поля из 2-х таблиц.
Ответить с цитированием
  #8  
Старый 22.11.2010, 15:23
Аватар для TOJluK
TOJluK TOJluK вне форума
Местный
 
Регистрация: 25.02.2009
Адрес: Минск
Сообщения: 551
Версия Delphi: 2007
Репутация: 110
По умолчанию

Или я дурак или лыжи не едут.
Вы хотите в одном запросе выбрать данные из нескольких таблиц? Т.е. отобразить данные из двух связанных таблиц в одном гриде. Если да- то читайте пример выше. Если непонятно как это сделать, исходя из примера, то надо как минимум
показывайте запросы ваши, а лучше почитать как делаются запросы и что это такое вообще.
Ответить с цитированием
  #9  
Старый 22.11.2010, 17:03
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Давайтека все-же начнем с того, что вы схему вашей БД покажете. Есть стойкое подозрение, что вы что-то накрутили.
А что касается первоначального вопроса о связи гридов, то связывать надо ваши запросы/таблицы с помощью мастер/детайл.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.

Последний раз редактировалось Страдалецъ, 22.11.2010 в 17:09.
Ответить с цитированием
  #10  
Старый 22.11.2010, 17:03
susanin007 susanin007 вне форума
Прохожий
 
Регистрация: 22.11.2010
Сообщения: 17
Репутация: 10
По умолчанию

Начну с начала:
у меня есть: Data module fDm: TADOTable: TKart, TZp...
DataSourse: DSKart, DSZp....
ADOQuery1
Form1: DBGrid1
TKart связано с таблицей БД KART
TZp связано с таблицей БД zp
Поля в TKart, TZp из соответствующих таблиц.
В Button1.onClick пишу

Код:
with fdm do begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT * FROM KART, Zp WHERE KART.Tabn=Zp.Tabn');
ADOQuery1.Active:= True;
DsZp.DataSet:=Adoquery1;
end;

В DBGrid1 выводяться записи которые запросил, а ФИО не пойму как вывести в DBGrid1.

Что я делаю не правильно или чего не хватает в проекте?
Ответить с цитированием
  #11  
Старый 22.11.2010, 17:12
susanin007 susanin007 вне форума
Прохожий
 
Регистрация: 22.11.2010
Сообщения: 17
Репутация: 10
По умолчанию

1.JPG
Вот схема БД
Конечная цель чтобы в таблицу на форме выводился список людей работающих на выбранном участке для ввода или редактирования зарплаты в выбранном месяце

Последний раз редактировалось susanin007, 22.11.2010 в 17:17.
Ответить с цитированием
  #12  
Старый 22.11.2010, 17:36
Аватар для TOJluK
TOJluK TOJluK вне форума
Местный
 
Регистрация: 25.02.2009
Адрес: Минск
Сообщения: 551
Версия Delphi: 2007
Репутация: 110
По умолчанию

Тут лучше все- таки будет через master-detail связь. Тогда при выборе сотрудника в одном гриде, в другом будут видны все его начисления.
TQuery- q1, q2
TDBGrid- g1, g2
TDataSource- ds1, ds2
Код:
q1.sql.text:='SELECT * FROM KART';
q2.sql.tetx:='SELECT * FROM ZP WHERE ZP.Tabn= :Tabn';
ds1.dataset:=q1;
ds2.dataset:=q2;
q2.mastersource:=q1;
q2.masterfields:='Tabn';
g1.datasource:=ds1;
g2.datasource:=ds2;
q1.open;
q2.open;

В варианте с:
Код:
SELECT * FROM KART, Zp WHERE KART.Tabn=Zp.Tabn
должно все появиться в одном гриде, скорее всего вы что- то напутали с датасурсами или с отображением колонок в гриде.


Сори, не обратил вниманите что это ADO. Скорее всего надо не мастерсурс указать, а датасурс:
Код:
q2.datasource:=ds1;

Последний раз редактировалось TOJluK, 22.11.2010 в 17:44.
Ответить с цитированием
  #13  
Старый 22.11.2010, 18:49
susanin007 susanin007 вне форума
Прохожий
 
Регистрация: 22.11.2010
Сообщения: 17
Репутация: 10
По умолчанию

ZP.rar
Извините, не ту схему выложил.
Там сначала выбирается учереждение, выводятся все сотрудники,
по кнопке зарплата выбирается месяц и данные должны вылазить в таблицу
Ответить с цитированием
  #14  
Старый 23.11.2010, 09:50
susanin007 susanin007 вне форума
Прохожий
 
Регистрация: 22.11.2010
Сообщения: 17
Репутация: 10
По умолчанию

Цитата:
Сообщение от TOJluK
q2.mastersource:=q1;

Что то я не нашел у ADOQuery свойства mastersource
Ответить с цитированием
  #15  
Старый 23.11.2010, 10:25
Аватар для TOJluK
TOJluK TOJluK вне форума
Местный
 
Регистрация: 25.02.2009
Адрес: Минск
Сообщения: 551
Версия Delphi: 2007
Репутация: 110
По умолчанию

А если мой пост до конца прочитать?
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:32.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter