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

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.009 c
6-1233302123
vegarulez
2009-01-30 10:55
2011.01.09
Вопрос про TidHttp. Просмотр отправляемого содержимого.


15-1285592233
12
2010-09-27 16:57
2011.01.09
Подскажите утилиту форматирования sql запросов. Oracle и/или MS


15-1285360161
Юрий
2010-09-25 00:29
2011.01.09
С днем рождения ! 25 сентября 2010 суббота


2-1287039502
Hadroran
2010-10-14 10:58
2011.01.09
Быстрый поиск в большом текстовом файле


2-1287365172
DimonS
2010-10-18 05:26
2011.01.09
Обновляемый запрос в старой программе.