powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Реализовать БД безобидным способом.
17 сообщений из 17, страница 1 из 1
Реализовать БД безобидным способом.
    #36967903
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С Acsess, DAO и ADO я в принципе знаком и программы на эту тему писал.

Тем не менее в программе кот. должна работать на произвольном компьютере я от этого отказался, а использую тестовуху, причем даже FileSystemObject не использую на всякий случай.

Т.е.
Есть текстовой файл (БД) 1 строка=1 запись
A=aaa;B=bbb; C=ccc....

Есть прога#1 с Listview, кот. суть эту БД отображает в режиме реального времени.

Есть прога#2 кот. следит за входящими данными (таймер скажем на 1сек).
Входящие данные суть короткие текстовухи (эту часть поменять нельзя, ибо генерируются C++ прогой, а в нее я лезть не буду).
Текстовуха по сути содержит информацию вида: процесс с B=xxx: параметры такие-то
Получив такой файл прога 2# выполняет 2 задачи:
1) лезет в БД и a)правит строчку с B=xxx если есть, либо добавляет строчку с B=xxx если нет
2) генерит текстовуху для прога#1 c информацией о добавить/поправить запись в Listview(дабы не читать всю БД целиком всякий раз)

Прога#1 с Listview по таймеру ловит файлы от прога#2 и добавляет/обновляет отдельные строки. При загрузке читает БД, если уж хочется считать БД целиком, то есть кнопка Refresh.
Иногда она тоже может внести изменения в БД, но этим не злоупотребляется.
--------------------------
Вся эта кухня работает достаточно хорошо и надежно, несмотря на столь грубую реализацию, в духе "оч.плохих программистов", как тут же съязвили бы на местном форуме C++.
Во всяком случае если процессов 2-10, то все отлично.
Но сделал тут тест на 30-50 активных процессов...ну и скажем строчек в БД не 2 десятка а поболе, скажем тыщонка-другая. Нет, все нормально,катастрофы не происходит... но ощущение что программы "не успевают", т.е. много файлов в очереди, отображение процессов далеко не в real-time ну и т.п....CPU Usage поджираться понятно начинает...
Ну и плюс конечно, тяжело что-то новое добавлять в эту конструкцию.

Т.е. думаю, то ли оптимизировать существующие алгоритмы, можно конечно, но до определенного предела думаю.

Или все-таки менять "ядро". От входящих текстовух я конечно не избавлюсь, но у меня есть явно слабые звенья:
1) работа с текстовухой-БД на предмет "перерыть ее".
2) обмен большим количеством потоковых текстовушек между 2-мя exe-приложениями VB.
3) ListView черпает в процессе работы информацию не синхронно из самой БД а по "левому" каналу.(синхронность, но принудительно)
4) Не злоупотребляется, но фактически допустим одновременный доступ к "БД" (текстовуха!) в режиме записи со стороны более одного приложения.

Т.е. куда оптимизироваться? Если в сторону БД, то какой? Есть ли какой-то стандартный тип БД, не требующий доустановки на чистой системе Windows (стандартный компонент)?
Я видел малюсенькие проги, кот. устанавливают 100MB-SQL сервера, кот. потом не запускаются и не знаешь чего делать.
Я знаю про mdb, что оно так просто не работает. Надо либо Access, и vb sp5/6 устанавливать, какие точно компоненты не знаю.
Т.е. мне такого счастья не надо. Именно поэтому и остановился на простой текстовухе.
Но что-то все-таки надо предпринять...не дело так жить.
...
Рейтинг: 0 / 0
Реализовать БД безобидным способом.
    #36968061
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77> Я знаю про mdb, что оно так просто не работает.
Как раз работает. И есть в чистой системе и обновление небольшое.

Время поиска при обновлении данных будет для текстовухи весьма существенное - надо или БД или хранить в памяти.

Еще между программами №1 и №2 лучше уйти от обмена файлами. Или OLE/DDE или просто через сообщения Windows (если удастся поместить минимум данных). Или можно напрямую писать данные в окно программы №1.
...
Рейтинг: 0 / 0
Реализовать БД безобидным способом.
    #36968109
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglДмитрий77> Я знаю про mdb, что оно так просто не работает.
Как раз работает. И есть в чистой системе и обновление небольшое.
В произвольной XP/2003/Vista/2008/7 x86/x64 ?
Обновление какое и как доустанавливать (инсталлятором понятно)?
Предполагается формат MsAccess 2000, так? VB6 его понимает начиная с SP5-6, помнится там mdac какой-то доустанавливается, а Access сам не нужен.

SiemarglВремя поиска при обновлении данных будет для текстовухи весьма существенное
Мелкие глюки потихоньку убираю. Вроде все достаточно резво.
Обнаружил некоторые крупные, которые и с БД бы стреляли точно также.
Например прога #2 иногда отправляет e-mail (+файлик к нему), на выбор через CDO или консольную утилиту с ожиданием окончания процесса(ShellAndContinue прекрасно грузит процессор), но в любом случае это идет в "общем стэке", то бишь пока mail не отправится, следующая строчка Listview не обновится, а если этих mail-ов 50 - стоим минуту-другую?...Это хуже всех текстовух, задания слать mail-ы надо в отдельный процесс/БД просто скидывать. Недоработка-С.

Siemarglили хранить в памяти.
В памяти это понятно. Но у меня 2 проги с этим делом работают. Раз, питание слетело, и что-то с памятью моей стало. Не уверен...

Siemarglили просто через сообщения Windows (если удастся поместить минимум данных).
Данные обмена в одну строчку, хотя и длинную. Причем основной поток именно в направлении Прога#2->Прога#1, если не считать случаев, когда пользователь сам правит БД из Проги #1.
Прога#2 не имеет интерфейса - задача обрабатывать данные.

SendMessage имеете ввиду? Пример обмена можно?

SiemarglИли можно напрямую писать данные в окно программы №1.
Ну, в смысле SendMessage (Listview.hwnd, и.т.д.)
Не пойдет. Там SubItems много. И они в основном управляются через VB-модель. То что пишется через API в subitems, через VB потом не читается. Долго разгребать придется.
...
Рейтинг: 0 / 0
Реализовать БД безобидным способом.
    #36968143
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,
o mdac речь и идет. http://en.wikipedia.org/wiki/Microsoft_Data_Access_Components
Jet engine - это доступ к mdb

Про SendMessage кажется я зря упомянул. Не помню, есть ли в VB возможность отлавливать произвольные сообщения в приложении (организовать свой оконный цикл).
...
Рейтинг: 0 / 0
Реализовать БД безобидным способом.
    #36968154
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно. Вот науглил пример google (visual basic sendmessage other program)

http://www.codeproject.com/KB/vb/Send_string_by_message.aspx
...
Рейтинг: 0 / 0
Реализовать БД безобидным способом.
    #36968185
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglJet engine - это доступ к mdb
Это все понятно. И понятно как-чего программировать, и как это работает, когда это уже стоит.
Минимально чего конкретно и как инсталлятором надо поставить чтобы это было? Конкретно.

SiemarglПро SendMessage кажется я зря упомянул. Не помню, есть ли в VB возможность отлавливать произвольные сообщения в приложении (организовать свой оконный цикл).
Можно. Вот науглил пример google
Ну наверно чего-нибудь сабклассить...чтоб отловить.
Но Ваш пример про vb.net
Нужен простой для vb6, без примера это черт ногу сломит с такими вещами...Я с ходу не нашел.
Если б еще от C++ можно было посылать - отлавливать в vb6, было бы вообще замечательно, но это в данном контексте хотя б с двумя vb разобраться...и надо ли.

Прога#2 у меня может работать как сервис (под System), ее работа в отличии от прога #1 (всегда под user )обязательна поэтому они разделены по понятным причинам. А файлы они как бы для всех общие. Поэтому даже не уверен что эти сообщения всегда будут "посылаться", даже если разобраться.
...
Рейтинг: 0 / 0
Реализовать БД безобидным способом.
    #36968419
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77, не вижу проблем перевести vb.net на vb.

В английской вике, что я дал ссылку - все подробно и есть ссылка на Jet Engine.
...
Рейтинг: 0 / 0
Реализовать БД безобидным способом.
    #36968825
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglДмитрий77, не вижу проблем перевести vb.net на vb..Там написано
In VB6, we can easily use the SendMessage function to send a wm_datacopy message, because we can define lparam as Any..Откуда следует что перевод сложного vb.net->vb6 не имеет смысла.
Но именно конкретного примера с упомянутым wm_datacopy message (для vb6), я найти то и не могу.
SiemarglВ английской вике, что я дал ссылку - все подробно и есть ссылка на Jet Engine.Да согласен, якобы проблем вообще нет
Windows XP 4.0 SP5+
Windows Server 2003 4.0 SP6+
Windows Vista 4.0 SP8+
Windows Server 2008 4.0 SP8+
Windows 7 4.0 SP8+

Но:
сделайте поиск в Google на тему:
"jet engine win 7 64 bit"
и проблема сразу нарисуется, не так ли?
...
Рейтинг: 0 / 0
Реализовать БД безобидным способом.
    #36968862
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Но:
сделайте поиск в Google на тему:
"jet engine win 7 64 bit"
и проблема сразу нарисуется, не так ли?Вот как раз в данном случае: "Меньше искать, больше делать".
В действительности там нету никаких проблем. Просто люди пугаются смеси 32-х и 64-х битных систем.

А по сути первоначального вопроса: то что тебе нужно называется "встраиваемые СУБД" (embedded). Их на рынке ныне много, выбирай на вкус. Акцесс тоже можно считать в какой-то мере встраиваемой, но оно слишком уж тормозное и неудобное для реальной работы.
...
Рейтинг: 0 / 0
Реализовать БД безобидным способом.
    #36968873
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlВот как раз в данном случае: "Меньше искать, больше делать".
В действительности там нету никаких проблем. Просто люди пугаются смеси 32-х и 64-х битных систем.
Я не сказал что я пугаюсь. Я подобные проблемы с x64 решать умею, сделайте поиск по моим топикам, но "больше делать" надо, согласен. Только я еще не начинал делать, и не уверен что именно это тот путь, тем более сами Access не рекомендуете, хотя да, использовал в прошлом. Программа обычно начинала со "сжатия и восстановления базы", чтоб не тормозило. И строчки с "решетками" из-за сбоев тоже помню.

White OwlА по сути первоначального вопроса: то что тебе нужно называется "встраиваемые СУБД" (embedded). Их на рынке ныне много, выбирай на вкус.
Что значит на рынке? Покупать желания нету. Сделал беглый поиск. Есть бесплатные.
Если правильно понял, кидаем в папку с прогой dll-другую, и пользуемся без установки и излишних проблем.
Какую Embedded DBMS можете порекомендовать для удобной работы именно с VB?
...
Рейтинг: 0 / 0
Реализовать БД безобидным способом.
    #36969099
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Дмитрий77
> Какую Embedded DBMS можете порекомендовать для удобной работы именно с VB?


Какую лучше знаешь, для себя, я взял-бы FireBird.
По моему был какой-то вариант и у MSSQL.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Реализовать БД безобидным способом.
    #36969134
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь ГорбоносКакую лучше знаешь, для себя, я взял-бы FireBird.Кроме Access ничего не знаю.
Firebird Direct Access for Visual Basic -Это?
на перспективу если, изучаться надо...
...
Рейтинг: 0 / 0
Реализовать БД безобидным способом.
    #36969168
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Дмитрий77
> Игорь Горбонос
> Какую лучше знаешь, для себя, я взял-бы FireBird.
> Кроме Access ничего не знаю.

Это не беда, я как раз Access до сих пор не знаю :(

> Firebird Direct Access for Visual Basic -Это?

Это вижу в первый раз, но используемая "внутрях" IBPP говорит мне что как минимум посмотреть нужно, потому, что на
сишных проектах я использовал эту IBPP :)
Я вообще имел в виду Firebird ODBC/JDBC Drivers

> на перспективу если, изучаться надо...

Другое дело, что FireBird - версионная СУБД, в отличии от привычного акцеса или MSSQL, которые блокировочники, поэтому
при разработке нужно учитывать эту особенность. http://www.sql.ru/forum/actualthread.aspx?tid=807391]Вот
товарищ хочет начать изучение, поччитай, посмотри. что и как

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Реализовать БД безобидным способом.
    #36969279
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос,

Для данной задачи firebird слишком много и сложно.
Придется разрабатывать в клиент-сервер, потом менять не emdebbed.

Если ТС почетче обрисует хотя бы пределы, до которых он хочет расширять базу, можно будет посмотреть.
А так - ту нагрузку что потянут на тестовых файлах, на .mdb будет летать )
...
Рейтинг: 0 / 0
Реализовать БД безобидным способом.
    #36969310
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Siemargl
> Игорь Горбонос,
>
> Для данной задачи firebird слишком много и сложно.

Согласен, зато будет задел переходить на полноценный сервер :)

> Придется разрабатывать в клиент-сервер, потом менять не emdebbed.

Ну все когда-то начинали :)
К тому-же у ТС было много изысканий на предмет нормальной работы клиентского приложения на различных ОС. Теперь, когда
красота наведена, почему-бы не посвятить время изучению чего-то нового.

> Если ТС почетче обрисует хотя бы пределы, до которых он хочет расширять базу, можно будет посмотреть.
> А так - ту нагрузку что потянут на тестовых файлах, на .mdb будет летать )

+1

P.S. Но из-за того, что я не знаю акцеса, я бы сразу начинал делать на FB :)
P.S.S. Все что написанно выше, это ИМХО.

Вот такой я - северный олень

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Реализовать БД безобидным способом.
    #36969320
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос> P.S. Но из-за того, что я не знаю акцеса, я бы сразу начинал делать на FB :)

Не верю. VB6 и Access - близнецы-братья. На переход у тебя уйдет полдня )
...
Рейтинг: 0 / 0
Реализовать БД безобидным способом.
    #36969693
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Э...даже не знаю.
Какие-то FireBird изучать неохота.
Но сделал эксперимент:
вникнул в свои старые коды:
взял первую попавшуюся mdb, накатал вот это в чистом проекте:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Sub Main()
    Dim AdoConnection ' As ADODB.Connection
    Dim RSBaza ' As ADODB.Recordset
    Dim ConnectionString As String
    Dim Baza As String
    Dim Table As String
    Dim kritBD As String
    Baza = "test.mdb"
    Table = "АвтоСписок"
    kritBD = "Выполнено = 'нет'"
    Set AdoConnection = CreateObject("ADODB.Connection")
    Set RSBaza = CreateObject("ADODB.Recordset")
    ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Baza & ";Mode=Share Deny None;Persist Security Info=False"
    AdoConnection.Open ConnectionString
    'RSBaza.CursorType = adOpenStatic
    'RSBaza.LockType = adLockOptimistic
    RSBaza.Open "SELECT * FROM " & Table & " WHERE " & kritBD, AdoConnection
    RSBaza.MoveFirst
    MsgBox RSBaza.Fields("Телефон")
End Sub
Накатывая, подключил какую-то (для удобства, использовалась в этих старых проектах)
C:\Program Files\Common Files\system\ado\msado25.tlb
Microsoft ActiveX Data Objects 2.5 Library
Потом правда закомментировал как приведено и сомнительную tlb из ссылок убрал, и сделал exe-шник.
Потом проверил пару exe-mdb на нескольких системах.
Win XP 32-бит (где делал)
Server 2003 32-бит
Server 2008 64-бит
Win 7 32-бит
Win 7 64-бит
Везде сработало. Не ожидал даж такого эффекта.
Хотя...не знаю, на Win 7 64-бит Office 2000 включая Access установлен зачем-то был, нечистый какой-то эксперимент. Надо чистую ставить...
Не знаю пока стоит ли возиться... раньше следующего года вряд ли буду заниматься переделками.
Вообще конечно CreateObject кажется очень хороший метод, пусть система сама думает че там создавать в рамках своей испорченности, че нибудь да создаст, пусть сама разбирается со своей многобитностью и версиями.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Реализовать БД безобидным способом.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]