Access и Delphi
От: Pois  
Дата: 23.10.06 14:35
Оценка:
есть 2 таблицы: клиенты и объекты. Задается имя клиента, нужно выбрать только те объекты которые принадлежат ему. Связь 2 табл через Id_klient.
Что я не так делаю?
if edit1.Text='' then showmessage('Введите условие поиска');

if (edit1.Text<>'' ) then begin s:=edit1.Text;
adoquery1.Close;
adoquery1.SQL.Clear;

adoquery1.SQL.Add('select Id_klienta');
adoquery1.SQL.Add('From Klienti');
adoquery1.SQL.Add('where ((Klienti.Familiya)="'+s+'");');
adoquery1.Open;
DBGrid2.DataSource:=datasource1;

i:=1;
sd:=dbgrid2.DataSource.DataSet.RecordCount;
while i<=sd do
begin s2:=dbgrid2.DataSource.DataSet.Fields[i-1].AsString;
inc(i);

adoquery2.Close;
adoquery2.SQL.Clear;

adoquery2.SQL.Add('select Klienti.Id_klienta, Klienti.Familiya, Klienti.Imya,Klienti.Otchestvo, '+tab+'.*');
adoquery2.SQL.Add('from Klienti inner join '+tab+' on Klienti.Id_klienta=Obekti.Sobstvennik');
ADOQuery2.SQL.Add('WHERE ((Klienti.Id_klienta='+s2+'));');
adoquery2.Open;
DBGrid1.DataSource:=datasource2;
end; end;
Re: Access и Delphi
От: alex_mah Россия www.elsy.ru
Дата: 26.10.06 08:47
Оценка:
Здравствуйте, Pois, Вы писали:

P>есть 2 таблицы: клиенты и объекты. Задается имя клиента, нужно выбрать только те объекты которые принадлежат ему. Связь 2 табл через Id_klient.

P>Что я не так делаю?
P> ...big skipped...

А что получается то, что не так?
Вообще запросы, в которые что-то вставляется извне, лучше делать с параметрами, так, для чистоты кода.

P>i:=1;
P>sd:=dbgrid2.DataSource.DataSet.RecordCount;
P>while i<=sd do
P>begin s2:=dbgrid2.DataSource.DataSet.Fields[i-1].AsString;
P>inc(i);


Здесь ты пробегаешься не по записям таблицы, содержащей id клиента с фамилиями, а последовательно по полям одной записи.

В цикле в DBGrid1 в конце концов останется только записи, соотв. последнему id клиента. Других там попросту не будет, поскольку следующий запрос у тебя затирает данные предыдущего.
Вообще это можно сделать одним запросом.
И еще технический вопрос. А как ты доступаешься к данным, у которых нет визуальных контролов, гридов и пр.?
Не проше (и правильнее) написать
Table1.Fields[1].AsString

вместо
dbgrid2.DataSource.DataSet.Fields[1].AsString

В гриде ты видешь только визуальное представление данных, а не сами данные, и доступаться к ним через грид — неправильно.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.