Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.01.27;
Скачать: [xml.tar.bz2];

Вниз

Тонкий вопрос про компоненты DAO 3.4.5(Oracle)   Найти похожие ветки 

 
FROM_X   (2003-01-09 12:59) [0]

Допустим есть связь двух таблиц один-к-одному.
Пусть запросом, объединили мы данные из эти 2-х таблиц.
колонка 1, колонка 2 из табл.1, табл.2

Есть ли способ одновременно добавлять, редакировать и удалять
данные из этих двух таблиц как из одной.

Хотелость бы иметь( если есть) стандартные способы решения (от создателей).
Хотя можно и проанализировать разные алгоритмы решения.
--------------
Повторяю вопрос тонкий. сам работаю не один месяц с DAO.


 
FROM_X   (2003-01-09 13:09) [1]

Разве никто не работал с DAO? Странно.


 
FROM_X   (2003-01-09 13:13) [2]

Ну может с другими компонентами кто то проделовал тоже самое
db_express? ADO ?


 
FROM_X   (2003-01-09 13:26) [3]

Ау Ау Ау


 
Max Zyuzin   (2003-01-09 13:29) [4]

C DAO + Oracle не работал... работал с локальными и IBase... но думаю стандартного нету ничего... По крайней мере АФАИК в IB такого нету.


 
FROM_X   (2003-01-09 13:30) [5]

Что такое АФАИК?


 
Val   (2003-01-09 13:42) [6]

АФАИК к теме не относится :)
не знаком с именно этими компонентами, но возможно есть что-то типа TUpdateProcs, в котором определяются имена хп, ответственных за вставку, удаление и изменение данных в связанном с ним соотв. DataSource?


 
Sergey13   (2003-01-09 13:45) [7]

2FROM_X (09.01.03 12:59)
>Разве никто не работал с DAO?
Может ты DOA(direct oracle access) имеешь в виду?
Если да, то насчет двух таблиц сразу не скажу, но для того чтобы сделать датасет редактируемым нужно в запрос добавить rowid

select t.*,t.rowid from table_name t

Кстати, а зачем так хранить (один-к-одному) - может проще свести все в одну таблицу? Поясни задачу.


 
Max Zyuzin   (2003-01-09 13:47) [8]

AFAIK - as far as I know
На сколько мне известно :)


 
passm   (2003-01-09 13:52) [9]

IMHO механизм поддержки правильности данных должен осуществляться триггерами. На приложение в таких делах лучше на полагаться :)


 
FROM_X   (2003-01-09 13:54) [10]

ребята, можно я скромно повторюсь, с DOA(direct oracle access)
я работаю не один год. и с Oracle тоже, и rowid один раз видел :)
Способ хранения данных то же не надо обсуждать.
Вопрос буквально не о том.
Если имеем select col1,col2 from table1,table2 where ...
то как можно отредактировав col1,col2 записать в table1,table2
(Если нет стандарта что я у же замечаю) то может быть есть красивый алгоритм (с кэшированием или подобной хернёй)
ну нет у DAO TUpdateSQL - Нет


 
passm   (2003-01-09 14:02) [11]

FROM_X (09.01.03 13:54)> Не работал с DOA и с Oracle. Но что мешает просто пробежаться по циклу и выполнить SQL предложения на измененных записях?


 
Sergey13   (2003-01-09 14:08) [12]

2FROM_X (09.01.03 13:54)
>я работаю не один год. и с Oracle тоже
Чтото не похоже, или может это у тебя стиль задания вопросов такой. 8-)
>Если имеем select col1,col2 from table1,table2 where ...
То такой датасет на DOA ты вообще не отредактируешь. 8-)

DOA и DAO это разные вещи. Хватит путать народ.

Я тебе принцип показал.
select t.*,t.rowid from table_name t
Попробуй творчески переаботать на 2 таблицы. Мне что ли пробовать? О результатах сообщи, если хочешь.


 
FROM_X   (2003-01-09 14:12) [13]

ОбЯснЯю
Можно!
Всего то нужно
1)зарание знать имена таблиц (или парсить)
2)поля к ним соответствующие (зарание знать или парсить)
3)Изменены, добавлены удалены ли они
4)запомнить эти данные
5.1)Если нет кэширование в DataSet то отменить изменения в
исходном запросе если он вообще позволил изменять поля
и выполнить update,insert, delete для соответсв. таблиц.
5.2)Если есть кэширование то не подтверждать изменения и выполнить update,insert, delete для соответсв. таблиц.
6) При этом надо проверить на Exeption
7) После всего этого что мне больше всего в этом не нравится - это делать refresh
-Это один из вариантов работы


 
Тормоз   (2003-01-09 14:14) [14]

Если таблицы связаны 1-1 то можно объединить их в одно представление(view) и вставлять/редактировать/удалять данные посредством INSTEAD OF триггеров


 
FROM_X   (2003-01-09 14:21) [15]

это тоже вариант и кстати я его предложил. (Рад что нашёлся знаток Oracle)
Но я признаюся, смысл моих допросов таков.
У меня коллега работал с PowerBuilder (этот мощный инструмент для работы с БД и только) и там эта задача ну просто пустяковая.
Вот он меня и мурыжит с этим. А я как Истинный потриот Delphi Пытаюся доказать что он не прав.


 
Sergey13   (2003-01-09 14:29) [16]

2FROM_X (09.01.03 14:12)
1 и 2. придется парсить, ибо ни я ни кто бы то ни было здесь их не знает. 8-)
3. Кто они?
4. Зачем?
5.1 При чем тут кеширование и откат изменений и как они между собой связаны?
5.2. см 5.1
6. Чего проверить?
7. А кому щас легко?

Чей то ты совсем меня(и не только меня наверное) запутал. Описал бы задачу нормально. Может и насоветует кто чего дельного? А так ... Я пас.


 
FROM_X   (2003-01-09 14:43) [17]

Про парсинги SQL выражений это я бы не советовал на скорую руку делать и (блин)SQl -он веть тоже разный.
А про всё остальное с 1. по 2. это всё правда (сам делаю)
А если задача не понятна ни кому, то чё на неё столько народу отвечает?
Задача =============
Имеем две таблицы
tab1 с полями id1,Name1 и
tab2 с полями id2,Name2
--------
Строим
Select id1,id2,Name1,Name2 From tab1,tab2
where id1=id2
--------
Ну скажем в таблицах в DBGrid-e отредактировали Name1,Name2
--------
Хочу записать изменения оосветственно в tab1,tab2- в базе данных.



 
Тормоз   (2003-01-09 14:57) [18]

Кстати у TOracleDataset есть свойство UpdatingTable где Вы сможете указать какую таблицу следует модифицировать при операции с датасетом, а также еще более гибкое средство - событие OnApplyRecord где при сохранении можно делать вообще все, что заблагорассудится. Главное в конце обработчика поставить Applied:=True, чтобы отменить стандартное поведение компонента при модификациях данных


 
FROM_X   (2003-01-09 15:15) [19]

Да с этим событием я признаюсь не работал, если можно
ЭЭЭ "Тормоз" извиняюсь :) можешь сам расказать мне об этом? как ты с этим работал?
или даже может пример?
ну прям плиз плиз плиз


 
Тормоз   (2003-01-09 16:21) [20]

Да я в принципе все рассказал. Суть в том что, например, при вставке в DataSet с запросом
Select id1,id2,Name1,Name2 From tab1,tab2
where id1=id2

Вы можете используя компоненты TOracleQuery вставить
сначала в tab1, потом в tab2, и затем commit или rollback.
Что касается примера, то лучше чем в хелпе примера не придумаешь 8-)


 
Big_Rom   (2003-01-09 18:36) [21]

Ну а если вот так


Select t1.id1,t2.id2,t1.Name1,t2.Name2,t1.rowid,t2.rowid
From tab1 t1,tab2 t2
where t1.id1=t2.id2
выдаст редоктируемый набор и я думаю писать будет соответственно
туда где чтото изменили.
Или я неправ



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

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

Наверх




Память: 0.49 MB
Время: 0.01 c
3-86667
OlegKrt
2003-01-06 08:22
2003.01.27
Ошибка в BLOB Paradox


1-86894
maxim2
2003-01-16 11:55
2003.01.27
Как можно вставить рисунок в чужое окно, зная дискриптор окна


1-86829
trotski
2003-01-16 17:59
2003.01.27
array of shortint


4-87218
_saha_
2002-12-13 11:01
2003.01.27
Как лучше прерывать WaitForCommEvent ?


3-86703
badaxe
2003-01-09 13:44
2003.01.27
Выбор из таблицы случайным образом.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский