Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.11.14;
Скачать: CL | DM;

Вниз

обменном данных   Найти похожие ветки 

 
kirilllius   (2004-10-13 22:56) [0]

Знатоки, помогите с обменном данных.  Я работаю с Access через ADBO.
У меня есть таблицы

Таблица1
ID – счетчик, ключевое
Strana – текстовое

Таблица2
ID – счетчик, ключевое
Strana – длинное целое, индексированное допускаются совпадения
Gorod – текстовое
Polozhenie – длинное целое, индексированное совпадения не допускаются

Таблица3
ID – счетчик, ключевое
Gorod – длинное целое, индексированное допускаются совпадения
…. – текстовое
…. – текстовое

Таблица1 связана с Таблицой2
Таблица1.ID-> Таблица2.Strana отношение один ко многому

и Таблица2 связана с Таблицой3
Таблица2.Polozhenie-> Таблица3.Gorod отношение один ко многому

Передо мной стоит задача, поменять в таблице Таблица2 две записи местами, так, чтобы не нарушить связь. Я делаю следующее.

Polozhenie0:=Таблица2.FieldByName(‘Polozhenie’).AsString;
Gorod0:= Таблица2.FieldByName(‘Gorod’).AsString;
Таблица2.Prior;
Polozhenie1:=Таблица2.FieldByName(‘Polozhenie’).AsString;
Gorod1 := Таблица2.FieldByName(‘Gorod’).AsString;
Таблица2.Edit;
Таблица2.FieldByName(‘Polozhenie’).AsString:="-1";//т.к. такого индекса нет
Таблица2.FieldByName(‘Gorod’).AsString:=Gorod0;
Таблица2.Post;
Таблица2.Next;
Таблица2.Edit;
Таблица2.FieldByName(‘Polozhenie’).AsString:=Polozhenie1;
Таблица2.FieldByName(‘Gorod’).AsString:=Gorod1;
Таблица2.Post;
Таблица2.Prior;
Таблица2.Edit;
Таблица2.FieldByName(‘Polozhenie’).AsString:=Polozhenie0;
Таблица2.Post;

После выполнения меняется местами только поля Gorod, а вод связь не меняется
т.е. если до  кода было
Таблица2.Gorod (Москва)     -> Таблица3....(1,2,3)
Таблица2.Gorod (Ленинград)-> Таблица3....(4,5,6)

то после кода
Таблица2.Gorod (Ленинград)-> Таблица3....(1,2,3)
Таблица2.Gorod (Москва)     -> Таблица3....(4,5,6)

А нужно
Таблица2.Gorod (Ленинград)-> Таблица3....(4,5,6)
Таблица2.Gorod (Москва)     -> Таблица3....(1,2,3)

Подскажите, как это делать


 
ЮЮ ©   (2004-10-14 02:54) [1]

>После выполнения меняется местами только поля Gorod, а вод связь не меняется

Так ты в коде это и делаешь - переименовываешь Москву в Ленинград, а Ленинград в Москву :)

Чтобы "поменять в таблице Таблица2 две записи местами", нужно изменить только поле Polozhenie (если, конечно, именно оно определяет "положение" записи в таблмце, т.е. упорядочмвает записи в нужном тебе виде), при этом по этому полю должен быть индекс и он должен быть активным - именно активный индекс определяет порядок следования записей в Таблица2.

З.Ы. После
Таблица2.Post;
Таблица2.Next;
отредактированная запись может оказаться и после той, которую ты ожидал увидеть, написав Таблица2.Next. Перемещаться по таблице можно только по Locate


 
kirilllius   (2004-10-14 11:26) [2]

>>После выполнения меняется местами только поля Gorod, а вод связь не меняется
>Так ты в коде это и делаешь – переименовываешь
> Москву в Ленинград, а Ленинград в Москву :)
Да, я это и делаю, но я перемещаю еще и записи в поле Polozhenie, а они не перемещаются, они остаются на месте, почему, не могу понять?

>Чтобы "поменять в таблице Таблица2 две записи местами",
>нужно изменить только поле Polozhenie (если, конечно,
>именно оно определяет "положение" записи в таблмце,
>т.е. упорядочмвает записи в нужном тебе виде),
>при этом по этому полю должен быть индекс и он
>должен быть активным - именно активный индекс
>определяет порядок следования записей в Таблица2.

Я пытался так сделать, но Таблица2 связана с Таблица1 и поэтому Таблица2 сортируется по связанному полю в частности по полю Strana, а вот как добавить еще одно поле сортировки я не могу понять. В IndexFieldNames уже стоит поле Strana, а когда я добавляю туда через ; еще одно поле, то происходит разрушение связи между таблицами.
Я добавлял уже и Таблица2.Sort:=’Polozhenie’; но это ни к чему не привело, хотя отсортировало только при запуске программы, а затем после перемещения по Таблица1 все сбросилось и связь между таблицами разорвалась, т.е. записи из Таблица1 стали соответствовать все записи из Таблица2.

>отредактированная запись может оказаться и после той,
>которую ты ожидал увидеть, написав Таблица2.Next.
>Перемещаться по таблице можно только по Locate
Спасибо, а это учту.


 
ЮЮ ©   (2004-10-15 02:55) [3]

смотри
http://delphi84.valuehost.ru/cgi-bin/forum.pl?id=1097758099&n=1
особенно [6]



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

Текущий архив: 2004.11.14;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.053 c
14-1098695499
Buch
2004-10-25 13:11
2004.11.14
Delpi 8


4-1096369963
bar
2004-09-28 15:12
2004.11.14
Сервисы и HKEY_CURRENT_USER. и FindWindow


3-1097571552
B-boy Dimo-N
2004-10-12 12:59
2004.11.14
проблема выполнения запроса ADODS с параметром


1-1099036668
a123
2004-10-29 11:57
2004.11.14
Шрифт в программе


14-1098686675
syte_ser78
2004-10-25 10:44
2004.11.14
Как сделать чтобы DmClient 2.1.2 запомнил имя и емейл в форме ?