Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 | 3 |

 

  Вопрос: Ведём лог файл... Добавлено: 05.01.09 12:14  

Автор вопроса:  werber | Web-сайт: www.werbersoft.ru

Ответить

  Ответы Всего ответов: 42  

Номер ответа: 31
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #31 Добавлено: 08.01.09 02:05
Это удобно если софтина сама по себе юзает базу.. но не станешь же ты только из за логов базу за собой таскать!

Ответить

Номер ответа: 32
Автор ответа:
 Father



Вопросов: 0
Ответов: 159
 Профиль | | #32 Добавлено: 08.01.09 02:10
Почему таскать? Просто вместо создания txt-файла создается mdb. ODBC-драйвер к access есть везде, где есть windows и не только.

Ответить

Номер ответа: 33
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #33 Добавлено: 08.01.09 02:24
Анализ лога это отдельная история по моему.
И вообще это все равно что с пушки стрелять по воробьям.

Ответить

Номер ответа: 34
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #34 Добавлено: 08.01.09 02:29
"таскать" - это я образно выразился... читать - юзать
все равно.. имхо, юзать базу для этих целей - это лишнее... этоне та информация которая требует хранения и всей мощи базы данных.

Ответить

Номер ответа: 35
Автор ответа:
 Father



Вопросов: 0
Ответов: 159
 Профиль | | #35 Добавлено: 08.01.09 03:09
Ни на что не претендую, но чем это элементарщина сложнее предыдущих?

  1. Public Sub mdblog(mystr As String)
  2. Static cnn As Object
  3.     '---
  4.     If Not cnn Is Nothing Then
  5.         cnn.Execute "INSERT INTO MYLOG (MYSTR) VALUES ('" & mystr & "')"
  6.         Exit Sub
  7.     End If
  8.     '---
  9.     Dim cat As Object
  10.     Dim connstr As String
  11.     Dim sfile As String
  12.     
  13.     sfile = App.Path & "\" & App.Title & ".mdb"
  14.     connstr = "Provider = Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Engine Type=4;Data Source = " & sfile & ";Locale Identifier=1049;"
  15.     If Len(Dir(sfile)) Then
  16.         Set cnn = CreateObject("adodb.connection")
  17.         cnn.Open connstr
  18.     Else
  19.         Set cat = CreateObject("adox.catalog")
  20.         cat.Create connstr
  21.         cat.ActiveConnection.Execute "CREATE TABLE MYLOG (IDX COUNTER,  MYSTR TEXT (255) )"
  22.     End If
  23.     mdblog mystr
  24. End Sub

Ответить

Номер ответа: 36
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #36 Добавлено: 08.01.09 04:18
чем это элементарщина сложнее предыдущих?

чисто теоритически - никакой разницы, но!!!
- существует гораздо бОльшая(в сравнении с файловыми операциями) вероятность отсутствия/кривизны имеющегося (установленного) и используемого в системе драйвера для работы с базой.. будь то odbc, dao или ado. А при отсутствии таковых(гипотетически) делает логирование вообще невозможным.
- при частом логировании тебе надо будет часто вызывать/использовать CreateObject.. а ты сам прекрасно знаешь, что этот метод в совокупности с поздним связыванием далеко не самый быстрый способ получить экземпляр объекта.
- при достижении критического размера базы(читаем лога) ты будешь удалять записи, после чего для физического удаления записей тебе надо будет выполнить метод Compact, а для этого, в свою очередь, ты должен будешь открыть базу в режиме монопольного доступа, что тоже является не самой быстрой операцией. Кроме того, метод Compact подразумевает создание новой копии.. а это значит что после выполнения этого метода тебе придется удалять старую базу и переименовывать новую. А если учесть тот факт, что после достижения критического размера тебе придется выполнять эти операции каждый раз(при добавлении каждой записи), то ситуация складывается весьма не радостная.
- ну и наконец, каким образом ты планируешь вычислять размер данных(для вычисления критического размера) и количество строк подлежащих удалению, чтобы размер базы не превышал заданный после сжатия?

Ответить

Номер ответа: 37
Автор ответа:
 Father



Вопросов: 0
Ответов: 159
 Профиль | | #37 Добавлено: 08.01.09 05:13
Из чувства противоречия можно и поспорить.

-При том кол-ве библиотек, требуемых для корректного запуска мало-мальски приличного приложения на VB, боязнь поломки ADO является параноей.
-CreateObject при внимательном рассмотрении кода вызывается только 1 (один) раз при первом вызове процедуры за все время логирования.
-Метод Compact со своим монопольным доступом ни чем не хуже монопольного доступа при "Open For As".
-Лично я не планирую вычислять размер базы данных так, чтобы он (шаг-вправо-шаг-влево-расстрел) был гарантированно не более 10Mb + 4Kb + 1bt
А если учесть тот факт, что после достижения критического размера тебе придется выполнять эти операции каждый раз(при добавлении каждой записи), то ситуация складывается весьма не радостная

Использовать не фиксированое число записей, а гистерезис.

Ответить

Номер ответа: 38
Автор ответа:
 Father



Вопросов: 0
Ответов: 159
 Профиль | | #38 Добавлено: 08.01.09 08:02
И кстати, насчет монопольного доступа.
На кой черт, каждый раз вызывать Open fileName For Append As #fileNumber?

Надо объявить Static fileNumber as Integer
Открыть его единожды и дописывать.
    If FileNumber Then
        Print #FileNumber, ...
        Exit Sub
    End If
Освободится сам при выходе проги.

Ответить

Номер ответа: 39
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #39 Добавлено: 08.01.09 12:29
Из чувства противоречия можно и поспорить.

я в этом нисколько и не сомневался)) Я лишь выразил свой взгляд на предложенный тобой вариант. А спорить тут можно до бесконечности...
во-первых, ты держишь соеденение постоянно открытым и вообще на закрываешь его, что не есть гуд
во вторых, ты не выполнишь Compact без создания новой копии БД, что потребует создания от тебя нового соеденения,удаления и переименования файла бд и т.д...
но в конечном итоге эта задача имеет много решений, и которое из них лучшее зависит от конкретной ситуации. поэтому продолжать спор, имхо, тут лишнее.

Ответить

Номер ответа: 40
Автор ответа:
 Father



Вопросов: 0
Ответов: 159
 Профиль | | #40 Добавлено: 08.01.09 12:38
Согласен, просто все уперлись в Open fileName, надо ж было показать "транссексуальный" вариант.:)
Предлагаю забить.

Ответить

Номер ответа: 41
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #41 Добавлено: 08.01.09 13:54
Предлагаю забить

+1

Ответить

Номер ответа: 42
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #42 Добавлено: 08.01.09 17:11
Теоретики блин!
А Палач вот возьмет да и напишет bas модуль с функцией на все случаи жизни

Ответить

Страница: 1 | 2 | 3 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам