Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: A2003+MS SQL Server
 
 автор: alexkn   (14.11.2010 в 20:17)   личное сообщение
 
 

Здравствуйте!
Есть строка соединения баз, причем одна из них локальна (А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

Вопрос: как программно связать (прилинковать) таблицы на сервере и таблицы, расположенные локально?

  Ответить  
 
 автор: osmor   (15.11.2010 в 09:01)   личное сообщение
 
 

оболочка - ADP или MDB?
Если ADP - никак, он работает только с sql
если MDB - придется для линковки таблиц с сервера использовать не sqloledb, a ODBC

  Ответить  
 
 автор: alexkn   (15.11.2010 в 10:25)   личное сообщение
 
 

Оболочка - MDB (MDE) Сервер в интернете - MS SQL
То, что я нашел для связи с ip-адресом сервера, т.е. с интернетом, это SQLOLEDB
Я согласен на ODBC (хотя SQLOLEDB бысирее, говорят.) , но я уже голову сломал, как связать таблицы приложения и сервера.
Локально я прилинковал эти таблицы, но там используется DAO-технология, здесь же нужна, как я понимаю, ADO Повторяю, сервер идентифицируется по ip-адресу.

Если вы приведете конкретно код, буду очень благодарен

  Ответить  
 
 автор: osmor   (15.11.2010 в 11:02)   личное сообщение
 
 

создаете odbc DSN с вашими параметрами
http://www.ehow.com/how_4642566_setup-odbc-database-connection.html
В Access создаете связанные таблицы указав в качестве источника cозданный DSN
далее работаете с таблицами как с родными (хоть через ADO хоть через DAO) или используя запросы к серверу.

а зачем вообще создавать связанные таблицы с sql сервера? Использйте запросы к серверу, это и быстрее и соединение можно использовать любое. Правда таблицы не будут видны в интерфейсе ACCESS, ну так это мелочи

  Ответить  
 
 автор: alexkn   (15.11.2010 в 11:54)   личное сообщение
 
 

А если без DSN? (Через Provider=?)


а зачем вообще создавать связанные таблицы с sql сервера? Использйте запросы к серверу, это и быстрее и соединение можно использовать любое. Правда таблицы не будут видны в интерфейсе ACCESS, ну так это мелочи



А тут, если можно, поподробнее...

  Ответить  
 
 автор: osmor   (15.11.2010 в 15:12)   личное сообщение
 
 

вообще давно не работал с odbc, но не уверен что получится создать связанные таблицы без создания dsn
вообще connection string будет такая
Driver={SQL Server};Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;
http://www.connectionstrings.com/

По второму вопросу... слишком обширная тема.
в кратце так
ACCESS может работать с sql ипользуя запросы к серверу (создаются как обычные заспросы и в контрукторе указывается "запрос к серверу")
в этом случае просто пишите SQL текст запроса и указываете строку подключения.
Естественно никаких таблиц на закладке "таблицы" в access не будет.

  Ответить  
 
 автор: alexkn   (15.11.2010 в 16:03)   личное сообщение
 
 


ACCESS может работать с sql ипользуя запросы к серверу (создаются как обычные заспросы и в контрукторе указывается "запрос к серверу")
в этом случае просто пишите SQL текст запроса и указываете строку подключения.
Естественно никаких таблиц на закладке "таблицы" в access не будет.


Извините, что спрашиваю, но где в Конструкторе (А2203) указывается "запрос к серверу"? И где приводится строка подключения? Это ведь должно быть как-то формализовано?
Как я могу сконструировать запрос, если я не вижу таблиц?
Вы можете указать ссылку, где все это "разжевывается"?

  Ответить  
 
 автор: Explorer   (15.11.2010 в 16:14)   личное сообщение
 
 

http://connectionstring.com/

  Ответить  
 
 автор: osmor   (15.11.2010 в 16:15)   личное сообщение
 
 

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

  Ответить  
 
 автор: alexkn   (15.11.2010 в 18:01)   личное сообщение
 
 

Explorer - по этой ссылке ничего нет
Osmor - спасибо за ценную (первую) ссылку, со второй сейчас разбираюсь, но там много всего....
А если я употребляю SQL-текст запроса в программе? Где мне указать "Строку подключения ODBC" ?

А для того, чтобы видеть таблицы в окне Access, надо иметь такую же базу, с такими же названиями таблиц, но локальными...

  Ответить  
 
 автор: alexkn   (15.11.2010 в 23:18)   личное сообщение
 
 

А если в Конструкторе запросов используются и локальные таблицы, и на сервере, то как делать запрос? Или все таблицы тогда держать на сервере?

  Ответить  
 
 автор: osmor   (16.11.2010 в 09:16)   личное сообщение
 
 

запрос к серверу не может содержать локальные таблицы, если вы хотите использовать в одном запросе и данные из локальных таблиц и с севрера, то нужно или использовать odbc и прилинковать таблицы с сервера или создать запросы к серверу и эти запросы использовать в запросах содержащих локальные таблицы. (правда не помню работает это или нет)

Имена таблиц в базе должны быть уникальны.

что бы увидеть таблицы с сервера их нужно прилинковать, но тогда придется создать и использовать ODBC DSN
Если вы никак не можете без конструктора запросов, то можно сделать так.
1. Создать dsn.
2. прилинковать таблицы с сервера
3.в конструкторе создать запрос используя прилинкованные таблицы
4. открыть запрос в режиме SQL и скопировать текст запроса
5. изменить тип запроса на "запрос к серверу"
6. вставить скопированный текс запроса
7. прописать коннекшн

так же нужно учитывать что запрос к серверу должен быть написана с учетом синтаксиса той серсии sql который поддерживается серверем к которому делается запрос, и такой запрос не может содержать функции ACCESS.

А если я употребляю SQL-текст запроса в программе? Где мне указать "Строку подключения ODBC" ?

запрос открывается илиисполняется в определенном connection который и указывает на базу

  Ответить  
 
 автор: alexkn   (16.11.2010 в 13:38)   личное сообщение
 
 


А если я употребляю SQL-текст запроса в программе? Где мне указать "Строку подключения ODBC"



запрос открывается илиисполняется в определенном connection который и указывает на базу



т.е. я не могу выполнять запросы к серверным таблицам в тексте модуля формы?

  Ответить  
 
 автор: osmor   (16.11.2010 в 14:32)   личное сообщение
 
 

почему?
приведите синтаксис исполнения запроса..
Вы используете ado или dao ?

  Ответить  
 
 автор: alexkn   (16.11.2010 в 15:12)   личное сообщение
 
 


Вы используете 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 - таблица, которая должна быть на сервере, но сейчвс находится локально

  Ответить  
 
 автор: osmor   (16.11.2010 в 15:36)   личное сообщение
 
 

это не 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")
    

  Ответить  
 
 автор: alexkn   (16.11.2010 в 17:20)   личное сообщение
 
 

Чувствуется, у меня такая каша в голове. Буду разбираться.
Спасибо за код.
Если можно, то ссылку. И еще, как это будет на ADO ?

  Ответить  
 
 автор: osmor   (16.11.2010 в 17:52)   личное сообщение
 
 

это примеры из русского help по msa97
ссылка вот
http://hiprog.com/access/dwn/help97_rus.zip
на ado - не сегодня, работы полно

  Ответить  
 
 автор: alexkn   (16.11.2010 в 18:55)   личное сообщение
 
 

Спасибо!

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList