Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / как програмно подключаться к разным _be.mdb ? / 6 сообщений из 6, страница 1 из 1
25.05.2004, 17:07
    #32533049
стас1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как програмно подключаться к разным _be.mdb ?
работаю в Access 2000.
подскажите пожалуйста как програмно подключаться к разным _be.mdb
т.е. на стартовой форме давать юзеру выбирать, к какой _be.mdb он хочет подключиться.
час искал поиском, не нашёл
спасибо
...
Рейтинг: 0 / 0
25.05.2004, 17:11
    #32533059
АлексейК
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как програмно подключаться к разным _be.mdb ?
все зависит от типа подключения:

если у тебя таблицы приликкованы то ищи как перелинковать все таблицы, обновить линки

если используешь ado то сохраняй в настройке /в переменной / в параметре
строку подключения к базе
...
Рейтинг: 0 / 0
25.05.2004, 17:23
    #32533098
фыыф
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как програмно подключаться к разным _be.mdb ?
по разному

если перецепить только то, что прицеплено (и только с выбранного пути)

я пользую:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
Function newPathAuto(PString As String, OldPString As String) As Integer
On Error GoTo err_newPathAuto
    newPathAuto = - 1 
    DoCmd.Hourglass True
    Dim MyWork As Workspace, BD As Database ', OldPString
    'Dim i_Table As String 'TableDef
    Dim dfTable As TableDef
    Dim rst As Recordset
    Set MyWork = DBEngine.Workspaces(0)
    Set BD = MyWork.Databases(0)
    BD.TableDefs.Refresh
    Set rst = BD.OpenRecordset("_Connected_Tables", DB_OPEN_DYNASET)
    rst.MoveLast
    rst.MoveFirst
    Dim imax As Integer, i As Integer
    Dim tdfName As String
        imax = rst.RecordCount
        For i = 1 To imax
            If rst("Database") & "" <> "" Then
                tdfName = rst.Fields("Name")
                Set dfTable = BD.TableDefs(tdfName)
                'If dfTable.Connect = IIf((rst.Fields("connect") & "") <> "", rst.Fields("connect"), ";") & "DATABASE=" & OldPString Then
                If rst.Fields("DATABASE") = OldPString Then
                    dfTable.Connect = IIf((rst.Fields("connect") & "") <> "", rst.Fields("connect"), ";") & "DATABASE=" & PString
                    dfTable.RefreshLink
                End If
            End If
            rst.MoveNext
        Next i
        
exit_newPathAuto:
    'logPrint "Подключение " & PString & " " & (newPathAuto <> 0)
    Set MyWork = Nothing
    Set BD = Nothing
    Set dfTable = Nothing
    DoCmd.Hourglass False
    Exit Function
err_newPathAuto:
    newPathAuto = 0
    If Not dfTable Is Nothing Then
        tdfName = dfTable.Name
    Else
        tdfName = ""
    End If
    MsgBox "Ошибка подключения " & err & " in " & tdfName
    'Debug.Print "Ошибка подключения " & Err & " in " & tdfName
    'logPrint "Ошибка подключения " & Err & " in " & tdfName
    Resume exit_newPathAuto: 'Next '
End Function
где
_Connected_Tables
Код: plaintext
1.
2.
3.
SELECT DISTINCTROW MSysObjects.Database, MSysObjects.Connect, MSysObjects.ForeignName, MSysObjects.Name
FROM MSysObjects
WHERE (((MSysObjects.Database) Is Not Null)) OR (((MSysObjects.Connect) Is Not Null));
(можно и через Connect, но смотреть глазом в грид запроса удобнее, чем запущать процедуру с выводом).

подключаем только то, что было и только из тех таблиц, которые были подключены по OldPString (другие не трогаем).

при новом подключении (всех, или по выбору) кажется TransferDatabase acLink предпочтительнее, чем CreateTableDef, поскоку последний у меня нормально цеплял только как dbAttachExclusive (при создании), потом только сбрасывался в нормальный. Что неприятно при наличии паралельного подключения.
...
Рейтинг: 0 / 0
25.05.2004, 17:52
    #32533183
стас1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как програмно подключаться к разным _be.mdb ?
вот так вроде получилось (нашёл на форуме):
Код: plaintext
Call Prilinkovka("E:\233_DB.mdb")
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Function Prilinkovka(sBase)

Dim dbs As Database
Dim tdf As TableDef
Dim lngX As Long

Set dbs = CurrentDb
SysCmd acSysCmdInitMeter, "Otkryvaem... " & sBase, dbs.TableDefs.Count
lngX =  0 
For Each tdf In dbs.TableDefs
    If Len(tdf.Connect) >  0  Then
        tbl_name = tdf.SourceTableName
        If Not (InStr( 1 , tbl_name, "$",  1 ) >  0 ) Then
            tdf.Connect = ";DATABASE=" & sBase
            tdf.RefreshLink
        End If
    End If
    SysCmd acSysCmdUpdateMeter, lngX
Next tdf
SysCmd acSysCmdUpdateMeter, dbs.TableDefs.Count
SysCmd (acSysCmdClearStatus)
dbs.Close

End Function
только я пока не понимаю, что делают команды:
SysCmd acSysCmdInitMeter, "Otkryvaem... " & sBase, dbs.TableDefs.Count
SysCmd acSysCmdUpdateMeter, dbs.TableDefs.Count
SysCmd (acSysCmdClearStatus)
?
...
Рейтинг: 0 / 0
25.05.2004, 18:03
    #32533213
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как програмно подключаться к разным _be.mdb ?
Эти команды показывают на экране ProgressBar.
...
Рейтинг: 0 / 0
25.05.2004, 18:20
    #32533267
стас1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как програмно подключаться к разным _be.mdb ?
понял
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / как програмно подключаться к разным _be.mdb ? / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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