|
|
|
| Здравствуйте!
Есть строка соединения баз, причем одна из них локальна (А2003) -это оболочка, а другая - в Интернете, MSSQL Server, адрес ip=xxx.xxx.xxx.xxx. Эта строка имеет вид
Set conn = New ADODB.Connection
With conn
.ConnectionString = "Provider=sqloledb;Data Source=xxx.xxx.xxx.xxx,1433;Network Library=DBMSSOCN;Initial Catalog=mybase;User ID=login;Password=pass;"
.Open
End With
Вопрос: как программно связать (прилинковать) таблицы на сервере и таблицы, расположенные локально? | |
|
| |
|
|
|
| оболочка - ADP или MDB?
Если ADP - никак, он работает только с sql
если MDB - придется для линковки таблиц с сервера использовать не sqloledb, a ODBC | |
|
| |
|
|
|
| Оболочка - MDB (MDE) Сервер в интернете - MS SQL
То, что я нашел для связи с ip-адресом сервера, т.е. с интернетом, это SQLOLEDB
Я согласен на ODBC (хотя SQLOLEDB бысирее, говорят.) , но я уже голову сломал, как связать таблицы приложения и сервера.
Локально я прилинковал эти таблицы, но там используется DAO-технология, здесь же нужна, как я понимаю, ADO Повторяю, сервер идентифицируется по ip-адресу.
Если вы приведете конкретно код, буду очень благодарен | |
|
| |
|
|
|
| создаете odbc DSN с вашими параметрами
http://www.ehow.com/how_4642566_setup-odbc-database-connection.html
В Access создаете связанные таблицы указав в качестве источника cозданный DSN
далее работаете с таблицами как с родными (хоть через ADO хоть через DAO) или используя запросы к серверу.
а зачем вообще создавать связанные таблицы с sql сервера? Использйте запросы к серверу, это и быстрее и соединение можно использовать любое. Правда таблицы не будут видны в интерфейсе ACCESS, ну так это мелочи | |
|
| |
|
|
|
| А если без DSN? (Через Provider=?)
а зачем вообще создавать связанные таблицы с sql сервера? Использйте запросы к серверу, это и быстрее и соединение можно использовать любое. Правда таблицы не будут видны в интерфейсе ACCESS, ну так это мелочи
|
А тут, если можно, поподробнее... | |
|
| |
|
|
|
| вообще давно не работал с odbc, но не уверен что получится создать связанные таблицы без создания dsn
вообще connection string будет такая
Driver={SQL Server};Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;
http://www.connectionstrings.com/
По второму вопросу... слишком обширная тема.
в кратце так
ACCESS может работать с sql ипользуя запросы к серверу (создаются как обычные заспросы и в контрукторе указывается "запрос к серверу")
в этом случае просто пишите SQL текст запроса и указываете строку подключения.
Естественно никаких таблиц на закладке "таблицы" в access не будет. | |
|
| |
|
|
|
|
ACCESS может работать с sql ипользуя запросы к серверу (создаются как обычные заспросы и в контрукторе указывается "запрос к серверу")
в этом случае просто пишите SQL текст запроса и указываете строку подключения.
Естественно никаких таблиц на закладке "таблицы" в access не будет.
|
Извините, что спрашиваю, но где в Конструкторе (А2203) указывается "запрос к серверу"? И где приводится строка подключения? Это ведь должно быть как-то формализовано?
Как я могу сконструировать запрос, если я не вижу таблиц?
Вы можете указать ссылку, где все это "разжевывается"? | |
|
| |
|
|
|
|
| pass-through -запрос
http://support.microsoft.com/kb/303968
Как я могу сконструировать запрос, если я не вижу таблиц |
просто напишите текст запроса без конструктора
примерно как я сейчас
select Поле1, поле2, поле3 from таблица where поле1 = 4;
где-то здесь
http://www.google.com/search?client=ubuntu&channel=fs&q=access+%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B+%D0%BA+%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D1%83&ie=utf-8&oe=utf-8 | |
|
| |
|
|
|
| Explorer - по этой ссылке ничего нет
Osmor - спасибо за ценную (первую) ссылку, со второй сейчас разбираюсь, но там много всего....
А если я употребляю SQL-текст запроса в программе? Где мне указать "Строку подключения ODBC" ?
А для того, чтобы видеть таблицы в окне Access, надо иметь такую же базу, с такими же названиями таблиц, но локальными... | |
|
| |
|
|
|
| А если в Конструкторе запросов используются и локальные таблицы, и на сервере, то как делать запрос? Или все таблицы тогда держать на сервере? | |
|
| |
|
|
|
| запрос к серверу не может содержать локальные таблицы, если вы хотите использовать в одном запросе и данные из локальных таблиц и с севрера, то нужно или использовать odbc и прилинковать таблицы с сервера или создать запросы к серверу и эти запросы использовать в запросах содержащих локальные таблицы. (правда не помню работает это или нет)
Имена таблиц в базе должны быть уникальны.
что бы увидеть таблицы с сервера их нужно прилинковать, но тогда придется создать и использовать ODBC DSN
Если вы никак не можете без конструктора запросов, то можно сделать так.
1. Создать dsn.
2. прилинковать таблицы с сервера
3.в конструкторе создать запрос используя прилинкованные таблицы
4. открыть запрос в режиме SQL и скопировать текст запроса
5. изменить тип запроса на "запрос к серверу"
6. вставить скопированный текс запроса
7. прописать коннекшн
так же нужно учитывать что запрос к серверу должен быть написана с учетом синтаксиса той серсии sql который поддерживается серверем к которому делается запрос, и такой запрос не может содержать функции ACCESS.
А если я употребляю SQL-текст запроса в программе? Где мне указать "Строку подключения ODBC" ?
|
запрос открывается илиисполняется в определенном connection который и указывает на базу | |
|
| |
|
|
|
|
А если я употребляю SQL-текст запроса в программе? Где мне указать "Строку подключения ODBC"
|
запрос открывается илиисполняется в определенном connection который и указывает на базу
|
т.е. я не могу выполнять запросы к серверным таблицам в тексте модуля формы? | |
|
| |
|
|
|
| почему?
приведите синтаксис исполнения запроса..
Вы используете ado или dao ? | |
|
| |
|
|
|
|
Вы используете ado или dao ?
|
Сейчас DAO
sql = "SELECT members.id FROM Members WHERE (((Members.BirthDate Is Not Null)) WITH OWNERACCESS OPTION;"
DoCmd.RunSQL (sql)
или
sql = "UPDATE Members SET Members.s1 = False WITH OWNERACCESS OPTION;"
DoCmd.RunSQL (sql)
members - таблица, которая должна быть на сервере, но сейчвс находится локально | |
|
| |
|
|
|
| это не DAO
dao так
Set dbsCurrent = currentdb
' Создает временный объект QueryDef для загрузки
' данных из базы данных Microsoft SQL Server.
Set qdfBestSellers = dbsCurrent.CreateQueryDef("")
With qdfBestSellers
.Connect = "ODBC;DATABASE=pubs;UID=sa;PWD=;" & _
"DSN=Publishers"
.SQL = "SELECT title, title_id FROM titles " & _
"ORDER BY ytd_sales DESC"
Set rstTopSeller = .OpenRecordset()
rstTopSeller.MoveFirst
End With
|
или
' Создает объект Workspace Microsoft Jet.
Set wrkJet = CreateWorkspace("", "admin", "", dbUseJet)
' Открывает для монопольного доступа аргумент Database,
' представляющий сохраненную базу данных Microsoft Jet.
MsgBox "Открытие базы данных 'Борей'..."
Set dbsNorthwind = wrkJet.OpenDatabase("Борей.mdb", _
True)
' Открывает только для чтения объект Database,
' используя строку подключения.
MsgBox "Открытие базы данных 'Publishers'..."
Set dbsPubs = wrkJet.OpenDatabase("Publishers", _
dbDriverNoPrompt, True, _
"ODBC;DATABASE=pubs;UID=sa;PWD=;DSN=Publishers")
|
| |
|
| |
|
|
|
| Чувствуется, у меня такая каша в голове. Буду разбираться.
Спасибо за код.
Если можно, то ссылку. И еще, как это будет на ADO ? | |
|
| |
|
|
|
| это примеры из русского help по msa97
ссылка вот
http://hiprog.com/access/dwn/help97_rus.zip
на ado - не сегодня, работы полно | |
|
| |
|