Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > контролирование Базы даных


Автор: Gannibal 20.12.2005, 17:45
допустим есть база данных на MySQL кто нибудь туда запишет, удалит, или исправит её, а при запуске програмы бы желательно узнать какие были произведены изминения в БД и выписать в лог файл? можете кто идеей подсказать? smile

Автор: Akina 20.12.2005, 18:32
В общем случае никак.

Автор: Gannibal 20.12.2005, 18:35
Цитата(Akina @ 20.12.2005, 17:32)
В общем случае никак.


а если не в общем случии? есть идеии как реализовать?
Добавлено @ 18:38
а по дате?? если?? создавать лог фаил? кде будет записано изминения когда проицходили например.. потом сравнивать? .. главное скорость вобощето smile 3 гиговая база данных

Автор: Exception 20.12.2005, 18:42
Хм.. Насколько я знаю, в SQL есть такие вещи, как триггеры. Поставь триггер на изменение данных в нужной таблице, который пишет об изменении в спецтаблицу. Но я в этом совершенно не уверен. Спроси в разделе по БД

Автор: Akina 20.12.2005, 22:13
Цитата(Run @ 20.12.2005, 19:42)
Насколько я знаю, в SQL есть такие вещи, как триггеры.

в MySQL с этим напряженка.

Автор: Gannibal 21.12.2005, 02:49
так остаёться сделать тогда програму которои я буду записывать данные в БД а там ои ети новые запишуться в другое место куда нибудь .. и всё наверное так лучше будет я думаю или нет? просто БД от 3 до 5 гигабайт вот проблема с временим хотелось бы чтобы побыстрее работало всётаки

Автор: Akina 21.12.2005, 10:13
То о чем ты говоришь называется журнал. Или лог транзакций - в терминах MS SQL. Весьма, кстати, разумная вещь.

Автор: Gannibal 21.12.2005, 20:49
можно поподробнее о МС СКВЛ?

Автор: Exception 21.12.2005, 21:32
Что именно о нем ты хочешь узнать?

Автор: Gannibal 22.12.2005, 03:28
как работать с МС СКВЛ через ВБ6, и как с ним вообще работаеться, какие возможности есть.. и так далее чем больше инфы тем лучше

Автор: Exception 22.12.2005, 09:52
Смотря какой. Вообще с MSSQL лучше и проще работать из дотнета. Особенно с 2005 - там даже хранимые процедуры можно писать на C#/VB.NET...

Автор: Voldemar2004 22.12.2005, 19:17
Цитата(M @ 20.12.2005, 17:45)
допустим есть база данных на MySQL кто нибудь туда запишет, удалит, или исправит её,
M.E.G.U.S, вот моя идея: предлагаю сделать текстовый лог-файл со структурой, аналогичной структуре полей в БД: допустим у тебя есть 10 полей и 20 строк - запишем в текстовый файл что-то типа:

поле1: строка1....до n=20
....
поле10:строка1....до n=20
Код
Option Explicit

Private Sub Command1_Click()
Dim my As String, fname As String
my = FreeFile

    fname = "d:\file_making date_" & Replace(Time, ":", "_") & ".log"

    Open fname For Append As my
        'поле1: строка1....до n=20 
        '....
        'поле10:строка1....до n=20
    Close #my

End Sub
Везде, где пользователь будет делать изменения (удалять/добавлять и т.п.) - все эти изменения будут записываются в такой же лог-файл с аналогичной структурой
Цитата
поле1: строка1....до n=20
....
поле10:строка1....до n=20
Но тут есть одна хитрость - в лог-файле надо как-то помечать уникальным идентификатором, который не пересекался бы с данными в реальной БД - разделение строк/столбцов, что-то наподобие вот этого:
Цитата
поле1#строка1*Имя*Фамилия*Отчество*Дата
Далее сравниваем текстовые файлы:например сделаем первичный лог-файл: занесем в него всю информацию из БД,
потом создадим второй лог-файл, но в него будем заносить только ту информацию, для которой произошли изменения - какие-то ячейки юзер поправил/удалил
Цитата
поле6#строка18*Имя*Дата
Сравниваем эти файлы.

P.S. Чисто моя идея. smile

Автор: Akina 22.12.2005, 23:10
Voldemar2004
Боюсь, от такого лога сервер быстро станет трупом по причине исчерпания пространства...

M.E.G.U.S
Когда мне пришлось самостоятельно организовывать журнал работы (это лет 10 назад) - я пошел путем добавления в базу 3 полей. Т.е. была структура типа ID и данные, добавились NextID, DateTime и Operator. Изначально эти поля были пусты. Но любые исправления и удаления всегда приводили к копированию измененного состояния записи в новую запись, а в старой просто ставилось в доп. полях, когда, кем внесены изменения и какой ID следующего состояния записи (-1 означало что запись удалена). Рабочие записи выбирались дополнительным условием отбора NextID=0, а чтобы база сильно гне пухла, периодически записи с NextID<>0 переносились в базу архива (и только при этом физически удалялись из рабочей базы). Посколько % корректировки составлял порядка 0.1% в день - схема была весьма жизнеспособна.

Правда, было одно маленькое НО - с этой базой невозможно было работать минуя мою математику.

Автор: Voldemar2004 24.12.2005, 12:45
Цитата(Akina @ 22.12.2005, 23:10)
Боюсь, от такого лога сервер быстро станет трупом по причине исчерпания пространства...
Первый лог-файл создается раз и навсегда, второй лог-файл - первый раз при прогоне БД - в остальном случае использовать метод произвольного доступа к лог-файлу и поправлять только те места, где произошли изменения.

Хотя, имхо, для работы с такой БД размером в 3 Гб даже самый скоростной метод отслеживания изменений будет еле ползать.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)