Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

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

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

...
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, 02:35   #2
mihali4
*
Профессионал
 
Регистрация: 22.11.2006
Адрес: Москва
Сообщений: 9,198
Репутация: 2661
По умолчанию

Цитата:
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 в 02:39.
mihali4 вне форума   Ответить с цитированием
Старый 26.02.2008, 12:13   #3
zimmion
Пользователь
 
Регистрация: 25.02.2008
Сообщений: 16
Репутация: 10
По умолчанию

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

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

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, 22:46   #6
mihali4
*
Профессионал
 
Регистрация: 22.11.2006
Адрес: Москва
Сообщений: 9,198
Репутация: 2661
По умолчанию

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

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

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, 11:40   #9
Andrei
Форумчанин
 
Регистрация: 20.06.2007
Адрес: Екатеринбург
Сообщений: 266
Репутация: 64
По умолчанию

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

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

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

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

Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


10:50.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru