Массив соеденений

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
xfolder
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 133
Зарегистрирован: 22.07.2002 (Пн) 18:57
Откуда: United Kingdom

Массив соеденений

Сообщение xfolder » 23.03.2004 (Вт) 17:10

Est programma server kotoraya obslujivaet mnogo mashin po seti. V programe mngo podprogram s soedeneniyami k database.

prihoditsya ispolsovat raznie imena dlya soedenenii tipa

dim DBa as DAO.Database
dim DBb as DAO.Database
dim DBc as DAO.Database
....

tak vot zadumka, sdelat tak chtobi pri soedenenii zaprashovat dospupnoe unikalnoe imya index dlya soedeniniya na vremya raboti proceduri.

brat index is database ili massiva??? database medlenno a massiv??? neznay kak realizovat sistemu

dopustim est massiv indexov

1- connected
2- connected
3- connected
4-free

k momentu zaprosa 2 zakonchil rabotu i obnulilsya. tak pri zaprose, soedeneniy bi prisvaivalsya index 2 a ne 4.

to est pervii dostupnii index


esli kto nit stalkivalsya s takoy zadachey podelites opitom

spasibo

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 23.03.2004 (Вт) 17:38

А не лучше перейти на ADO?
Его схема будет более удобна для данной работы, кроме того в ADO допускается асинхронное выполнение процедур/запросов.
Lasciate ogni speranza, voi ch'entrate.

xfolder
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 133
Зарегистрирован: 22.07.2002 (Пн) 18:57
Откуда: United Kingdom

Сообщение xfolder » 23.03.2004 (Вт) 17:48

ADO?

esli chestno ne ochen pronimay v chem preimushestvo ego.

probuy reshit zadachu: kak sdelat obrasheniya k database bolee nadejnimi v plane chtobi imena peremennih ne peresekalis globalno i sdelat code menee zaputanim

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 23.03.2004 (Вт) 18:48

А я не пойму, зачем нужно столько баз данных? Помоему это свидетельствует о неграмотной схеме работы программы.
Lasciate ogni speranza, voi ch'entrate.

xfolder
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 133
Зарегистрирован: 22.07.2002 (Пн) 18:57
Откуда: United Kingdom

Сообщение xfolder » 23.03.2004 (Вт) 20:03

predstav situaciy

inormaciya o sotrudnikah hranitsya v odnoy database na servere (access)
s 10 terminalov etu informaciy chitayt i zapisivayt

sootvetstvenno kucha podprogram kotorim peredaytsya dannie oni obrobativayt ih i zapisivayt v database.

obyavlyat recordseti kajdii raz v podprogramme dumay zaimet mngo pamyati i procesornogo vremeni. no drugogo vihoda na sey moment net

poetomu dumku obdumivay kak dinamicheski sosdavat massiv recorsetov v runtime i otkrivat soedeneniya po mere nadobnosti.

dumay eto progditsya vo mnogih projectah.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 24.03.2004 (Ср) 9:39

А я бы тебе советовал настроить репликацию в Access.
А если уж это не подходит, оставь как есть, но репликацию возложи на клиентов, а не на сервер. Т.е. в клиентских частях будет всего лишь один Dim DB As Database.

А если уж тебе позарез нужен массив рекордсетов (хотя я по прежнему не понимаю, зачем), то примерно так:
Код: Выделить всё
Const buffMax As Long = 100
Type BuffType
  Used As Boolean
  db As DAO.Database
End Type
Dim buff(1 To buffMax) As BuffType, buffCount As Long

Function GetFreeIndex() As Long
Dim I As Long
If buffCount = buffMax Then Exit Function
For I = buffMax To 1 Step -1
  If Not buff(I).Used Then Exit For
Next I
GetFreeIndex = I
End Function

Sub MakeNewConnection() As Boolean
Dim I As Long
I = GetFreeIndex()
If I = 0 Then Exit Sub
buffCount = buffCount + 1
buff(I).Used = True
Set buff(I).db = OpenDatabase(...)
End Sub

Sub CloseConnection(ByVal Index As Long)
If buffCount = 0 Then Exit Sub
If Index < 1 Or Index > buffMax Then Exit Sub
If Not buff(Index).Used Then Exit Sub
buffCount = buffCount - 1
buff(Index).Used = False
buff(Index).db.Close
Set buff(Index).db = Nothing
End Sub
Lasciate ogni speranza, voi ch'entrate.

xfolder
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 133
Зарегистрирован: 22.07.2002 (Пн) 18:57
Откуда: United Kingdom

Сообщение xfolder » 24.03.2004 (Ср) 13:19

bolshoe spasibo!

izvini ya chtoto nesovsem ponimay chto takoe replikaciya v dannom sluchae.

poskaji chto ti imeesh vvidu ili day link gde mojno prochitat ob etom

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 24.03.2004 (Ср) 15:22

Создай базу в Access, потом зайди в меню "Сервис" и выбери "Мастер репликации" (если не ошибаюсь, в разделе "Служебные"). Там все объясняется. Но это решение предполагает, что ты свою программу переведешь с VB на Access.

А репликация - я так понял, что на терминале вводятся какие-то данные и надо потом синхронизировать основную базу с этими изменениями. Это и есть репликация (синхронизация между двумя и более объектами).
Lasciate ogni speranza, voi ch'entrate.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 12

    TopList