Sirik писал(а):access, я не могу использовать внешние данные, так как у меня свзять не постоянная:
время от времени перелинковую базы
может программным путём как-то можно?
У тебя есть три варианта:
1. Указывать имя внешней базы непосредственно в SQL-запросе.
- Код: Выделить всё
SELECT T1.Field1, T1.Field2 FROM Table1 as T1 IN 'С:\db2.mdb'
2. Программно прилинковывать таблицы следующей ф-ией:
- Код: Выделить всё
Public Function LinkJetTable(sDestPath As String, sDestPWD As String, sLinkTblAs As String, sSourcePath As String, sSourcePWD As String, sLinkTbl As String) As Boolean
'Прилинковка таблицы из другой базы Access
'sDestPath, sDestPWD - путь и пароль к базе, в которую нужно прилинковать табл.
'sLinkTblAs - под каким именем прилинковывать таблицу
'sSourcePath, sSourcePWD - путь и пароль к базе, в которой находится подсоединяемая табл.
'sLinkTbl - имя таблицы в этой базе
Dim cat As New ADOX.Catalog
Dim tbl As New ADOX.Table
On Error Resume Next
' Open the catalog
cat.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & sDestPath & ";Jet OLEDB:Database Password=" & sDestPWD
If Err.Number <> 0 Then Exit Function
' Set the name and target catalog for the table
tbl.Name = sLinkTblAs
Set tbl.ParentCatalog = cat
' Set the properties to create the link
tbl.Properties("Jet OLEDB:Create Link") = True
tbl.Properties("Jet OLEDB:Link Datasource") = sSourcePath
tbl.Properties("Jet OLEDB:Link Provider String") = ";Pwd=" & sSourcePWD & ";"
tbl.Properties("Jet OLEDB:Remote Table Name") = sLinkTbl
' Append the table to the collection
cat.Tables.Append tbl
If Err.Number = 0 Then LinkJetTable = True
Set tbl = Nothing
Set cat = Nothing
End Function
3. Воспользоваться статьей, которую рекомендует GSerg
(хотя это почти равносильно 2-ому варианту)
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.