Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.22;
Скачать: [xml.tar.bz2];




Вниз

Помогите серенькому!!! 


Timka   (2002-03-26 18:54) [0]

есть примерно такой кусок кода:
while not Table1.Eof do
begin
Table2.SetKey;
Table2.FieldByName("nnompr").Value
:=Table1.FieldByName("NNOM").Value ;
;
Table2.GotoKey;
Table2.Edit;

если я правильно понял, то Table2.GotoKey должно устанавливать текущей строку Table2, значение поля которой совпадает с Table1,
присвоение по отладчику идёт нормально, но после в Table2 текущей становится первая строка БД, почему это не срабатывает?
соответствующее значение ключевых полей существуют обязательно.



VAleksey   (2002-03-27 07:18) [1]

Что-то ты неправильно описал по моему щас посмотрю



VAleksey   (2002-03-27 11:14) [2]

В какой момент текущей становится первая строка, после цикла ?
Вообще позиция не меняется ?



Timka   (2002-03-27 17:48) [3]

если смотреть по отладчику, то (если в скобочках - текущие значения полей для Table1 и Table2 соответственно)
{ в Table1- 4101 и в Table2 - 41206}

Table2.SetKey;
{ в Table1- null и в Table2 - 41206}
Table2.FieldByName("nnompr").Value
:=Table1.FieldByName("NNOM").Value ;
;{ в Table1- 41206 и в Table2 - 41206}
Table2.GotoKey;
{ в Table1- 4101 и в Table2 - 41206}
Label1.Caption := "



Timka   (2002-03-27 17:52) [4]

в общем, впечатление такое, что Table2.GotoKey; устанавливает текущей в таблице 2 первую строку, и так делает на протяжении всего цикла. А вообще-то идея была такой : беру строкку из Табл1, нахожу соответствие в табл2 , устанавливаю найденную в состояние редактирования и этим пользуюсь. Может ещё какой путь есть? кроме постоянного перебора?



Shaman_Naydak   (2002-03-27 21:32) [5]

Ну что, я так понимаю связка у тебя один к одному
стало быть делаем так:
Table2.IndexFieldNames:="nnompr"; // Нужен индекс по этому полю
Table2.MasterSource:=Table1DataSource; // Нужен будет Data Source
Table2.MasterFields:="NNOM";
Table1.First;
while not Table1.Eof do
begin
if not (Table2.Bof and Table2.Eof) then // проверяем что связка есть (на всякий случай, не помешает
begin
Table2.Edit;
// Blah-blah
Table2.Post;
end;
Table1.Next;
end;



Shaman_Naydak   (2002-03-27 21:34) [6]

а в твоем способе:
GotoKey - ф-ция -> проверь, что она возвращает (True или False);



Timka   (2002-03-28 18:40) [7]

Спасибо, работает. Только не очень удобно просматривать(в данном случае). GotoKey действительно возвращает ноль, причём всегда. Вот полный текст :
procedure TForm1.Button4Click(Sender: TObject);
begin
Table2.IndexFieldNames :="nnompr";
Table1.First;
while not Table1.Eof do
begin
if (not (Table2.Eof and Table2.Bof))
or (not (Table1.Eof and Table1.Bof))
then
begin
Table2.SetKey;
Table2.FieldByName("nnompr").asString:= "41206";
{Table1.FieldByName("NNOM").Value;}
if not Table2.GotoKey then
begin
Application.MessageBox("плохо",сообщение, MB_OK);
exit; { здесь оно выбивает всегда, даже если тупо задать ключевое поле}
end;
Sopostavlenie; { ф-ция, точно рабочая}
Table1.Next;
end
else Application.MessageBox("ещё и связи нет","Сообщение", MB_OK);
{ никогда не высвечивается}
end ;{ while not Table1.Eof}
end;

если идти по Вашему пути, всё работает, если запускаю эту процедуру - облом. Что может быть не так? (больше в программе ничего не меняется...)



Shaman_Naydak   (2002-03-28 19:49) [8]

ну не знаю..
Какого типа у тебя NNompr и NNOM? (это может быть ОЧЕНЬ важно, если строковые)
Попробуй перестроить индекс, ну или, наконец, попробуй
if Table2.Locate("nnompr", [Table1.FieldByName("NNOM").Value], []) then
begin
Sopostavlenie;
end

П



Timka   (2002-03-29 09:35) [9]

дело в том, что оба поля у меня - целые числа. (... .asString это я уже от безнадёги , раньше пробовал через Value)



IPisk   (2002-03-29 09:52) [10]

А если попробовать метод Locate?



Timka   (2002-04-01 09:02) [11]

Большое спасибо за подсказки. К сожалению, у меня возникает всё больше и больше вопросов. Получается,Ю что только Locate и работает . Не могу воспользоваться даже FindNearest, поскольку не срабатывает функция нидексирования поля . BDE выдаёт ошибку, перевод - что-то типа "сервис не поддержиается". HELP!!! Медленно впадаю в трнс... и выпадаю в осадок. Ещё немного и перейду на изучение VB :( .... ;)




Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.22;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.74 MB
Время: 0.019 c
14-69982          savva                 2002-03-14 12:39  2002.04.22  
глюк в сайте..


3-69661           Canny                 2002-04-02 00:00  2002.04.22  
Как подключиться к базе MySQL?


3-69729           kserg@ukr.net         2002-04-01 12:40  2002.04.22  
Кто пользуется (и соот-но установил) в Делфи TStatusBarPro ?


1-69775           snoup                 2002-04-07 21:38  2002.04.22  
Как сделать скриншот своей проги?


3-69697           Den_ccc               2002-03-30 07:12  2002.04.22  
навигация по таблицам