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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.02.2008, 16:39   #1
zimmion
Пользователь
 
Регистрация: 25.02.2008
Сообщений: 16
По умолчанию Не отображаются данные связанные с гл. таблицей?

Есть следующий код:

...
var
Form_Contrag: TForm_Contrag;

implementation
uses
Unit_dm1,
Unit_Jur_Info;

{$R *.dfm}
procedure TForm_Contrag.FormCreate(Sender: TObject);
begin
TreeView1.Items[0].Selected:=true;
end;

procedure TForm_Contrag.TreeView1GetSelectedI ndex(Sender: TObject;
Node: TTreeNode);
begin
if TreeView1.Items[0].Selected=true or
TreeView1.Items[1].Selected=true
then
begin

---выполняем запрос, который в дбгриде отображает записи гл. табл---

with DM1.Query do
begin
Close;
SQL.Clear;
SQL.Add('SELECT j_id, j_kod, j_sname');
SQL.Add('FROM jur');
SQL.Add('ORDER BY j_kod');
Open;
end;
end;
end;
--по дбклик на дбгриде открывается форма 2 с данными вторичных таблиц связанных с гл. таблицей-----



procedure TForm_Contrag.DBGrid1DblClick(Sende r: TObject);
begin
try
Form_Jur_Info:=TForm_Jur_Info.Creat e(nil);
Form_Jur_Info.ShowModal;
finally
Form_Jur_Info.Free;
end;
end;
--------

проблема: При дбклик на любой записи в дбгриде на первой форме открывается вторая форма, только не с данными связанными с выбранной запиcью, а с данными связанными с первой записью дбгрида на первой форме.

Вопрос: Как решить данную проблему????? Заранее благодарен
zimmion вне форума Ответить с цитированием
Старый 26.02.2008, 01:35   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
procedure TForm_Contrag.DBGrid1DblClick(Sende r: TObject);
begin
try
Form_Jur_Info:=TForm_Jur_Info.Creat e(nil);
//вот тут для некоего дб контрола мы позиционируем датасет на выбранную запись...
//я подозреваю, что вы в этой форме зачем-то открываете новый экземпляр датасета, который и становится (как и положено) на первую по счету запись...
Form_Jur_Info.ShowModal;
finally
Form_Jur_Info.Free;
end;
end;
Ну так вставьте (красное) позиционирование на Selеcted...

Последний раз редактировалось mihali4; 26.02.2008 в 01:39.
mihali4 вне форума Ответить с цитированием
Старый 26.02.2008, 11:13   #3
zimmion
Пользователь
 
Регистрация: 25.02.2008
Сообщений: 16
По умолчанию

а можно примерчик "//вот тут для некоего дб контрола мы позиционируем датасет на выбранную запись..." как реализовать позиционирование на Selеcted..?
zimmion вне форума Ответить с цитированием
Старый 26.02.2008, 14:04   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Если
Цитата:
вы в этой форме зачем-то открываете новый экземпляр датасета, который и становится (как и положено) на первую по счету запись...
то - Locate на выбранное значение...
Давайте оставим девичьи гадания - приведите код создаваемой формы Form_Jur_Info.
mihali4 вне форума Ответить с цитированием
Старый 26.02.2008, 14:25   #5
zimmion
Пользователь
 
Регистрация: 25.02.2008
Сообщений: 16
По умолчанию

unit Unit_Jur_Info;

...

type
TForm_Jur_Info = class(TForm)

...
Перечень дбедитов, дблейбло...
...

procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form_Jur_Info: TForm_Jur_Info;

implementation
uses
Unit_dm1,
Unit_contrag;
{$R *.dfm}

procedure TForm_Jur_Info.BitBtn1Click(Sender: TObject);
begin
ModalResult:=mrCancel;
end;

end.
zimmion вне форума Ответить с цитированием
Старый 26.02.2008, 21:46   #6
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Я у себя попробовал, все нормально - отображаются именно те данные, которые соответствуют "щелкнутой" строке...
Может, вы дбконтролы не на тот датасорс цепляете? Нужно ведь на тот, к которому подцеплен дбгрид...
mihali4 вне форума Ответить с цитированием
Старый 27.02.2008, 10:22   #7
zimmion
Пользователь
 
Регистрация: 25.02.2008
Сообщений: 16
По умолчанию

Дело в том, что запрос который привязан к дбгриду выводит только данные по трем полям таблицы, а на второй форме 15 едитов привязанных ко всем полям таблицы, тобишь к 15, и при дбклике на дбгриде выдает, сто поле не найдено
zimmion вне форума Ответить с цитированием
Старый 27.02.2008, 10:25   #8
zimmion
Пользователь
 
Регистрация: 25.02.2008
Сообщений: 16
По умолчанию

with DM1.Query3 do
begin
Close;
SQL.Clear;
SQL.Add(' SELECT * ');
SQL.Add(' FROM jur ');
SQL.Add(' where j_id=:chemuto ');
DM1.Query3.Params.ParamByName('chem uto').Value:=DM1.Query.fieldbyname( 'j_id').asstring;
Open;
end;
------------------------
Данный код как бы решает данные вопрос, только нужно делать запросы для каждой из таблиц. Можно ли этот код оптимизировать, чтобы был один зарпрос для всех таблиц?
zimmion вне форума Ответить с цитированием
Старый 27.02.2008, 10:40   #9
Andrei
Форумчанин
 
Регистрация: 20.06.2007
Сообщений: 270
По умолчанию

Цитата:
Сообщение от zimmion Посмотреть сообщение
Дело в том, что запрос который привязан к дбгриду выводит только данные по трем полям таблицы, а на второй форме 15 едитов привязанных ко всем полям таблицы, тобишь к 15, и при дбклике на дбгриде выдает, сто поле не найдено
И это правильно. Ведь в своем SQL вы запрашиваете только три поля, вот он вам их и выдает. Всех остальных для него не существует.
Сделайте запрос по всем полям, а в гриде отразите только те поля, которые вы хотите в нем видеть. Для этого щелкните правой клавишей мыши на гриде, выберите Columus Editor... и выберите те поля, которые вы хотите отразить в гриде.
-Кукушка, кукушка! Накукуй мне сто лет!
-А накукуй тебе столько?

(с) Библия. Вольный перевод с древнееврейского.
Andrei вне форума Ответить с цитированием
Старый 27.02.2008, 12:12   #10
zimmion
Пользователь
 
Регистрация: 25.02.2008
Сообщений: 16
По умолчанию

Цитата:
Сообщение от Andrei Посмотреть сообщение
И это правильно. Ведь в своем SQL вы запрашиваете только три поля, вот он вам их и выдает. Всех остальных для него не существует.
Сделайте запрос по всем полям, а в гриде отразите только те поля, которые вы хотите в нем видеть. Для этого щелкните правой клавишей мыши на гриде, выберите Columus Editor... и выберите те поля, которые вы хотите отразить в гриде.

Запрос который выполняет "выбрать все из табл1, табл2, табл3, табл4" подвешивает систему и выдает ошибку "Нехватает памяти"!!!!
zimmion вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Связанные списки в C++ Rembo Общие вопросы C/C++ 47 11.07.2016 12:45
Связанные таблицы в Аксессе mirawoo Microsoft Office Access 8 12.03.2008 00:13
Не отображаются новые собщения Master-Skull О форуме и сайтах клуба 0 19.08.2007 13:41
MS SQL server 2000, ADO. Добавленые записи не отображаются при последующих запросах. _victor БД в Delphi 1 17.06.2007 13:33