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

Вниз

Изменение записи из другого приложения   Найти похожие ветки 

 
Yurikon   (2009-08-22 18:05) [0]

Доброго времени суток!

Подскажите, плиз, как отловить изменения таблицы в Акцесе (изменение, добавление, удаление записи), которые делает другое приложение, без переоткрывания таблицы?

Сейчас я тупо закрываю и открываю таблицу по таймеру.

Спасибо!


 
sniknik ©   (2009-08-22 18:25) [1]

вообще, если это понадобилось то значит чтото неправильно в логике приложения... ну так говорят.
но один раз таки мне это понадобилось, ненадолго, потом ТЗ изменили но решение уже было. база аксесс это файл, у файла есть время изменения можешь смотреть на него, у системы (винды) есть события на изменение файлов, сделаешь мониторинг (есть статья на этом же сайте от Панова) не понадобится таймер... т.е. ловишь сообщение, в нем проверяешь изменилось ли время редактирования файла базы, а уже таблицу (та или не та) проверяешь запросом с count (этим отследишь удаление/добавление если сравнишь с сохраненным, а вот с изменениями облом, запросом этого не сделать... но можно если есть желание через ADOX открыть объект - таблица и посмотреть ее свойство "модифаед", т.е. то же самое что время изменения файла базы)
по ADOX и его объекты есть инфа в справке access.


 
Yurikon   (2009-08-22 21:11) [2]

С логикой все в порядке. Стороннее приложение кидает инфу в базу, я ее оттуда беру.

Спасибо за подсказку с "модифайд". Я для текстового файла такое делал, попробую для базы посмотреть.

На каком то форуме читал для SQL баз для подобной задачи используют тригеры и хранимые процедуры. Кто-нибудь может пояснить, что это за звери и как для акцеса их можно (или нет) использовать?

С уважением.


 
Сергей М. ©   (2009-08-22 21:37) [3]


> С логикой все в порядке


Не то что "все в порядке", а катастрофа с ней.


 
Yurikon   (2009-08-22 21:55) [4]

Сергей, Вы хотите сказать, что задачи, когда два приложения используют одну БД, не логичные???

В моей предметной области это очень распространенная ситуация, когда одна прога выдает данные во внешнюю БД, а мне надо их анализировать.


 
Сергей М. ©   (2009-08-22 22:10) [5]


> задачи, когда два приложения используют одну БД, не логичные?


Это-то как раз логично.
А катастрофа - с логикой "ловли".


> В моей предметной области


Ты о ней НИЧЕГО не сказал.
Потому дальнейшие рассуждения на эту тему бессмысленны.


 
Сергей М. ©   (2009-08-22 22:14) [6]


> одна прога выдает данные во внешнюю БД, а мне надо их анализировать


Для этого существует технологии "трехзвенки".


 
sniknik ©   (2009-08-23 10:46) [7]

> Вы хотите сказать, что задачи, когда два приложения используют одну БД, не логичные???
нет. он хочет сказать, что база это не событийная/"уведомительная" система, а "хранительная" и "запросная". т.е. логика баз - запрашивать по клиентскому запросу сохраненные данные и работать с ними (1 раз, и скопом над всеми необходимыми), а не ловить приход по одной превращая запись в событие для "других" программ (это хотя и возможно, в некоторых субд, но это против логики, на случай "а есть и такие задачи", хотя как говорил "такая" мне попалась всего раз, да и то по ошибочному ТЗ, глупость которого, и без этой части, просто выпирала из него. и которое я не хотел делать едва на него взглянув... из-за этого в итоге и изменили, начал указывать на очевидные ляпы, и будущие глюки от его "дословной" реализации. кстати, не помню, но по моему именно в нем был "шедевр" манагерской мысли - "отчет должен выдаваться в различной форме по желанию пользователя"(пояснение, форма по умолчанию меняется в настройках, а для разового переключения, ее можно выбрать при вводе параметров, дат там и остального. и вот эту то настройку и предлагалось убрать как лишнюю и загромождающую интерфейс, а форму выбирать в зависимости от "желания"... %), на вопрос каким образом узнавать желания - "хорошая программа должна это знать!" :о))))

> для SQL баз для подобной задачи используют тригеры и хранимые процедуры.
с тригерами облом, нет их в access (в базе а не программе, т.к. программа может пользоваться и базой mssql, а там они уже есть), а процедуры ничем тут не помогут, и даже неважно, что в access они очень ограничены, фактически одно название а не процедуры.
в общем только так как я сказал, "вешаться" на событие от системы, средства самой базы не помогут (ну или постоянные пере-запросы "наобум" как у тебя).
и кстати, если база чужая, то лезть в нее со своими дополнениями нехорошая идея... ну, вот я бы был против если бы в "мою базу"(моей программы) понаставили "левых тригеров", а потом начали предъявлять претензии к скорости работы уже моей программы (/а то и глюкам в ней) .

> Кто-нибудь может пояснить, что это за звери
конечно. любая книжка по sql. welcome.


 
Yurikon   (2009-08-23 11:28) [8]

Спасибо, sniknik, за развернутый ответ!!

Лезть в чужую БД никто и не собирается. В этой проге придется использовать время изменений и переоткрытия.

ЗЫ
Столкнулся с таким глюком драйвера JET:

Вот так выдает ошибку о доступе:
qQuikData.SQL.Add("SELECT Count(id_quik) ");
qQuikData.SQL.Add(FROM tQuik");

а так работает
qQuikData.SQL.Add("SELECT Count(id_quik ");
qQuikData.SQL.Add(") FROM tQuik");

8-)


 
sniknik ©   (2009-08-23 13:31) [9]

> Столкнулся с таким глюком драйвера JET:
это не jet, это реализация борланда ADOQuery без учета особенностей ADO. есть патч вроде, но не советую его искать и ставить, советую выкинуть ADOQuery, ADOStopedProc, ADOTable с палитры компонент, и никогда к ним не притрагиваться...

при вносе запроса он по возможности проверяется ядром, определяются типы параметров, а ты со "своим" SQL.Add туда пихаешь "глючный" сточки зрения jet запрос, чего в оригинале (CommandText) не предусмотрено и не возможно (если конечно не написать -
CommandText:= "SELECT Count(id_quik) "
CommandText:= CommandText +  "FROM tQuik";

что сразу даже выглядит глупо. если уж нужно форматирование то очевидно ->
CommandText:= "SELECT Count(id_quik)"#13#10+
                      "FROM tQuik";

)

> это не jet, это реализация борланда
или это твой глюк (если отсутствие скобки в первом варианте не описка, но даже если твой, то описанный глюк к "разорванным" запросом, и определением параметров имеет место быть)



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

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

Наверх





Память: 0.48 MB
Время: 0.006 c
4-1243692161
Nikfel
2009-05-30 18:02
2011.01.09
Замена ресурсов из файлов?


2-1286908287
ZerGo
2010-10-12 22:31
2011.01.09
Аунтетификация и доступ к ресурсам Windows XP на Delphi.


15-1285273761
Юрий
2010-09-24 00:29
2011.01.09
С днем рождения ! 24 сентября 2010 пятница


15-1285184688
NailMan
2010-09-22 23:44
2011.01.09
А вот собрался показать себя таки на "модельном МАКСе"


3-1251053802
Maks Zyuzin
2009-08-23 22:56
2011.01.09
IBDataSet и сбрасывание значений параметров





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