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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 28.10.2011, 18:36
Sheepz Sheepz вне форума
Прохожий
 
Регистрация: 01.04.2011
Сообщения: 14
Репутация: 10
По умолчанию Дублирование записей в DBGrid

В бд (access) есть меются 2 таблицы:

1) Client
idc - номер клиента, счётчик
family - текст
name - текст
ph - телефон

2) Visit
id - номер встречи, счетчик
idc - номер клиента, числовое поле
date - ну тут понятно

Связь я так понимаю один ко многим, т.к. клиент может несколько раз приходить, т.е.
idc(счетчик) 1 ко М idc (числовой)

В приложении нужно отображать 1 таблицу для работы с ней, и короче lookup я юзать не могу, потому что они не сортируются/фильтруются/ищутся. Для этого можно сделать кнопочки с sql запросами, т.е. dbgrid будет менять datasource в зависимости от нужной команды.

например есть по 2 записи в таблице
Client
idc family name ph
1 Петров Пётр 12345
2 Иванов Иван 12346
Visit
id idc date
1 1 11.08.2011
2 2 12.08.2011


Но проблема в том, что запрос
Код:
procedure TForm2.Button1Click(Sender: TObject);
begin
 datamodule1.adoquery1.Active:=false;
 datamodule1.adoquery1.SQL.Clear;
 datamodule1.adoquery1.SQL.Add('SELECT visit.id, visit.idc, client.idc, visit.date, client.family');
 datamodule1.adoquery1.SQL.Add('FROM visit, client');
 datamodule1.adoquery1.SQL.Add('order by client.family');
 datamodule1.adoquery1.Active:=true;
end;
дублирует записи, и в DBGrid получается:

visit.id__visit.idc__client.idc____visit.date____client.family
2________2_________2_______12.08.2011____Иванов
1________1_________2_______11.08.2011____Иванов
2________2_________1_______12.08.2011____Петров
1________1_________1_______11.08.2011____Петров

а хотелось бы 2 правильные строки
вобщем я подумал что это из-за связи, мб не правильно сделал, удалил связи, делал другие, не помогло. Сделал запрос выборки данных только из 1 таблицы - всё ок работает, а с 2 таблицами такое вот дублирование =\ Где я ошибся?)

p.s. извините за многобукв)
Ответить с цитированием
  #2  
Старый 28.10.2011, 19:04
Аватар для Ildar-tsr
Ildar-tsr Ildar-tsr вне форума
Местный
 
Регистрация: 09.08.2011
Адрес: г.Сургут, ХМАО
Сообщения: 453
Репутация: 7402
По умолчанию

Код:
datamodule1.adoquery1.SQL.Add('SELECT v.id, v.idc, c.idc, v.date, c.family');
datamodule1.adoquery1.SQL.Add('FROM visit v, client c');
datamodule1.adoquery1.SQL.Add('where v.idc = c.idc');
datamodule1.adoquery1.SQL.Add('order by c.family');

Тем самым связываем таблицы по соответствующим полям.
__________________
Google в помощь
Ответить с цитированием
  #3  
Старый 28.10.2011, 19:07
Sheepz Sheepz вне форума
Прохожий
 
Регистрация: 01.04.2011
Сообщения: 14
Репутация: 10
По умолчанию

спасибо братюнь
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter