Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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 :( .... ;)



Страницы: 1 вся ветка

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

Наверх





Память: 0.47 MB
Время: 0.006 c
1-69900
Jony
2002-04-09 13:58
2002.04.22
Навороченный выход из программы.


1-69815
VEG
2002-04-10 01:05
2002.04.22
Работа с ресурсами другого exe-шника.


1-69846
f0rm
2002-04-08 22:59
2002.04.22
Регистрация собственного расширения


14-69986
Провинциал
2002-03-13 13:13
2002.04.22
Работа в Москве?


1-69901
d_oleg
2002-04-09 11:44
2002.04.22
передача объектов из dll в вызыващщее приложение





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский