Форум программистов, компьютерный форум, киберфорум
Наши страницы
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.79/33: Рейтинг темы: голосов - 33, средняя оценка - 4.79
Зябра
0 / 0 / 0
Регистрация: 31.05.2011
Сообщений: 16
1

Запрос из ACCESS к SQL серверу

16.08.2011, 18:26. Просмотров 6035. Ответов 8
Метки нет (Все метки)

Доброго время суток!
Пожалуйста, подскажите как создать запрос к серверу (из Access) c переменной, которая считывается с формы

Что-то вроде
SELECT N_Table.[Код]
FROM N_Table
Where [КОД]=Forms!......- не считывает

Как сделать чтобы в запросе к серверу каждый раз автоматически подставлялся нужный код (из формы) для выборки.
Чтобы в ответ получить не всю таблицу, а только нужную часть
Заранее спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.08.2011, 18:26
Ответы с готовыми решениями:

Запрос SQL к Access через переменную типа date
Уважаемые коллеги, прошу помощи, не могу выполнить запрос к Access 2000 из ASP....

Подключение к sql серверу
Привет, раньше стоял mssql, но затем снёс. Сейчас поставил по новой sql...

Не удается подключиться к SQL серверу
Доброго времени суток . У меня следующая проблема. Устанавливаю Microsoft...

Запрос к связанному серверу из триггера
Здравствуйте, кто знает подскажите пожалуйста в чем дело. Две таблицы на...

Подключение к SQL серверу через интернет
Здравствуйте. Поставил SQL Server Express 2012, по нагугленным инструкциям...

8
KO42
5 / 5 / 3
Регистрация: 17.04.2011
Сообщений: 54
16.08.2011, 22:30 2
п.1 Для начала у тебя должен быть подключен источник данных, для этого делаеш так (если источник создан то пропускай к п.2): в БД ACCESS вкладка внешние данные ->дополнительно->база данных ODBC -> создать связаную таблицу для связи с источником данных->ОК В новом окне выбор источника данных выбираеш вкаладку источник данных компютера -> создать -> пользовательский ->выбираеш драйвер SQL Server Native Client 10.0 ->Далее ->готово
в окне:Create a New Date Source to SQL Server пишеш имя-Name, описание-description, server-выбираеш свой сервер-> Далее ->окно аутентификации я ничего не минял(оставил все "галки" на местах)-> Далее ->ставиш "галочку" Change the default datebase to: выбираеш свою БД-> Далее ->я ничего не минял(оставил все "галки" на местах)-> Далее ->готово
Можеш нажать тест соединения. Далее -> ОК
В окне выбор источника данных выбираеш вкаладку источник данных компютера с именем источника которого ты создал -> ОК, появилось окно: Связь с таблицами выбираеш те таблицы к которим надо писать запросы. Далее только -> ОК -> ОК -> ОК -> ОК.....
связаные таблицы будут в таблицах в БД ACCESS.
п.2
В Форму (например: Form1) переносиш/создаёш Поле (например: Поле0), переносиш/создаёш кнопку.
В конструкторе запросов создаеш запрос, где в нужном поле для запроса в условие отбора пишеш: [Forms]![Form1]![Поле0]. Закрываеш и сохраняеш запрос (например: Запрос1).
Потом в конструкторе твоей формы нажымаеш правой кнопкой мыши на кнопке, там выбираеш пункт Обработка событий в появившемся окне нажатие кнопки вибираеш ОткрытьЗапрос с именем запроса тобою созданым (например: Запрос1). Закрываеш и сохраняеш.
Переходиш с конструктора форм в режим формы. в поле вводиш то что надо для запроса, и нажымаеш на кнорпку. Должен выполнитца тобою созданый запрос.
ОК..
Если что неясно пишы. Могу наделать скриншотов ))))

Добавлено через 1 час 45 минут
Это наверное не надо, но можно использовать ище и так написать в условие отбора: Like "*"+[Forms]![Form1]![Поле0]+"*" и будет искать по Like.
0
Зябра
0 / 0 / 0
Регистрация: 31.05.2011
Сообщений: 16
16.08.2011, 22:53  [ТС] 3
Источник данных подключен.Связанные таблицы есть.У меня все так и реализовано.
Ситуация в том, что таблица переносится полностью и на стороне клиента выполняется выборка.Требуется много времени на выполнение такого запроса.Если выборка будет происходить на сервере,допустим как хранимая процедура и клиенту пересылаться уже отобранные данные это будет выполнятся намного быстрее(что сэкономит рабочее время).Нужно напрямую обратится к серверу (T-SQL) Но я не знаю как передать входной параметр для выборки,который выводится на форме(каждый раз в запросе к серверу прописывать вручную,нереально)Необходимо автоматизировать.
0
KO42
5 / 5 / 3
Регистрация: 17.04.2011
Сообщений: 54
17.08.2011, 22:00 4
Такой запрос в Access:
SQL
1
2
3
SELECT N_Table.[Код]
FROM N_Table
WHERE N_Table.[Код]=[Forms]![Form1]![Поле0];
Из 644360 записей, выбираются 429663 записи очень быстро (2-3 сек)

По-другому пока не знаю (((
0
Зябра
0 / 0 / 0
Регистрация: 31.05.2011
Сообщений: 16
18.08.2011, 10:18  [ТС] 5
В таблицах наших база данных намного больше строк(ежедневно добавляется около 200 000 строк).Поиск производятся по разным критериям из разных таблиц(макрос).Через связанные таблицы время выполнения более 5 минут.Мне необходимо ускорить этот процеcc.
0
pincet
1323 / 911 / 123
Регистрация: 23.07.2010
Сообщений: 4,940
18.08.2011, 16:47 6
хранимые процедуры рассматривал?
0
Зябра
0 / 0 / 0
Регистрация: 31.05.2011
Сообщений: 16
18.08.2011, 17:06  [ТС] 7
На SQL сервере я создала хранимую процедуру с 2-мя входными параметрами, которые необходимо брать с формы ACCESS.
Следовательно, необходимо из Access отправлять запрос к серверу на запуск данной процедуры и параметры.
Если я правильно понимаю,это реально реализовать таким образом:
-Нажимается кнопка и запускаестя код VBA
-Формируется нужная SQL строка что-то вроде того:
a = [Forms]![Товары].[Поле1]
d=[Forms]![Товары].[Поле2]
strSQL = "EXECUTE dbo.SP_TEST @КОD="'a'", @Filial="'b'""
В итоге результат её выполнения должен получится следующий
strSQL = "EXECUTE dbo.SP_TEST @КОD='10', @Filial='Самара'
-Это строка сохраняется как новый запрос к серверу под именем "Запрос1"(строка подключения, допустим что такая:dsn = "ODBC; DSN=.....;UID= ....; DATABASE=.....Trusted_Connection=Yes")
-Запускается запрос, на создание таблицы все строки Запрос1
(SELECT INTO Таблица FROM Запрос1)
-Удалить Запрос1(Чтобы не возникло ошибки при новом нажатии кнопки иначе будет ругаться что Запрос1 существует)
-Далее работаем только с полученной таблицей

Может я в чем-то не права?Тогда поправьте меня, пожалуйста...
И если Вам не сложно черканите примерный код VBA, я начала,но не знаю как сохранить полученную StrSQL как запрос к серверу(раньше мне не приходилось писать на данном языке).
Заранее спасибо.
0
KO42
5 / 5 / 3
Регистрация: 17.04.2011
Сообщений: 54
18.08.2011, 23:01 8
я видел когда-то другой способ, может поможет,
описание:
1. на сервере есть готовая процедура.
2. в папке есть текстовий файл (куда вводятса данные для поиска [какие должны быть в форме])
3. в тойже папке есть файл с росшырением .sql
4. в тойже папке есть файл .bat который запускает файл с росшырением .sql

а в процедуре написано: вкачать данные из текстового файла (2.) в таблицу на сервере, зделать выборку из главной таблицы и этой новой таблицы, и вывести резутьтат в новый текстовый файл (название может быть стандартное например REZYLT.txt).
Такую реализацыю я видел.
чтоб это работало под Access надо с формы данные заносить в тектовый файл (2.)
потом запускать батник (файл .bat), потом готовый текстовый файл (REZYLT.txt) загружать в Access таблицу (открыть связаную таблицу REZYLT).
Можна что-то усовершенствовать и не надо ничего на VBA писать.

Добавлено через 47 минут
загружать данные можна так:
SQL
1
2
3
4
5
6
BULK INSERT Emp
   FROM 'd:\1.txt'
  WITH (
        FIELDTERMINATOR ='\t',
        ROWTERMINATOR ='\n'
         )

выгружать данные можна так:
SQL
1
2
3
DECLARE @sd1 nvarchar(1000)
SELECT @sd1 = 'bcp [Tests].[dbo].[Book] out d:\REZYLT.txt -w -t; -T'
EXEC master..xp_cmdshell @sd1
Добавлено через 18 минут
Запуск батника на VBA :

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Option Compare Database
 
Private Sub Кнопка13_Click()
On Error GoTo Err_Кнопка13_Click
    Dim stAppName As String
    stAppName = "d:\11111.bat"
    Call Shell(stAppName, 1)
 
Exit_Кнопка13_Click:
    Exit Sub
 
Err_Кнопка13_Click:
    MsgBox Err.Description
    Resume Exit_Кнопка13_Click
    
End Sub
0
ErshovDmitry
0 / 0 / 0
Регистрация: 30.11.2012
Сообщений: 1
03.12.2012, 13:17 9
Доброго времени суток!
Перенес всю базу на SQL сервер запросы тоже пере писались но не работают, после переноса в запросах в условии отбора было написано
WHERE (Фамилия = @Forms___Пациенты___Фамилия1)
Я по вашему совету поменял условие на
[Forms]![Пациенты]![Поле59]
Access меня поправил на
WHERE (Фамилия = N'[Forms]!Пациенты!Поле59')
Проверку синтаксис SQL проходит но запрос не делает выборку таблица пустая, если условие убираю или ставлю
WHERE (Фамилия = N'Иванов')
делает выборку как положено выдает все записи с фамилией Иванов, а из формы условие не выполняет.
Подскажите как сделать, Office 2010 SQL Server R2.
0
03.12.2012, 13:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.12.2012, 13:17

Посоветуйте, пожалуйста, литературу по SQL-серверу
Добрый день. Посоветуйте, пожалуйста, что почитать, если об SQL я имею которое...

Не удаётся подключиться к SQL-серверу (локальному)
Сейчас изучаю базы данных, вот дошёл до создания простейшей БД, в Visual Studio...

Error 26 при подключении к SQL Серверу
Доброго времени суток. Из приложения вин форм MS VS 2013 пытаюсь подключиться к...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru