Форум: "Базы";
Текущий архив: 2006.04.02;
Скачать: [xml.tar.bz2];
ВнизПроблема с подключением к MSSQL2000 через ADOConnection Найти похожие ветки
← →
_Konstantin (2006-02-08 20:09) [0]Привет всем! Пишу программу, которая позволяет списывать инградиенты блюд со склада по калькуляционной карте (рецепту). Подключение происходит через ADOConnection. На каждой точке (баров несколько) при подключении происходит формирование строки подключения где прописывается имя сервера к которому нужно подключиться и имя базы данных. Далее ADOQuery, DataSource и DbgridEh. SQL запрос прописан железно в ADOQuery (что то вроде SELECT * FROM table),локально всё работает. Где то подводный камень, не могу понять, но с удаленной машины подключение не происходит. Сначала долго думает, а потом выдаёт что-то типа не вижу сервер... Пробовал с тонким клиентом, после долгой возни заработало, но почему ADOConnection не работает???
← →
MOA © (2006-02-08 20:50) [1]>почему ADOConnection не работает???
>На каждой точке
Хотя инфы маловато (для разрешения проблемы хорошо бы знать - что за точки, что за клиенты на них стоят, как подключаются) но попробую предположить, что не исключено, что брандмауэр (либо на точке либо на сервере) режет пакеты на портах, которые использует скуль.
Удачи!
← →
_Konstantin (2006-02-08 21:15) [2]Админ уверяет, что сетевых фильтров нет, брендмауэров тоже. Есть подозрение, что не правильно задано имя сервера. Подскажите, какое имя сервера правильно задавать, железное, под которым он виден в сетевом окружении или же имя MSSQL сервера. Кстати с тонким клиентом на 1024 порту все работает замечательно. А подключение происходит так, при включении формируется строка подключения в
ADOConnection.ConnectionString:=
"Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=sklad2;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID="+
a.ReadString("server")+
";Use Encryption for Data=False;Tag with column collation when possible=False";
где sklad2 имя б.д., a.ReadString("server") имя сервера считанное из реестра (добавлено во время первой настройки).
← →
MOA © (2006-02-08 22:39) [3]Подключение к MSSQL по какому протоколу?
Если TCP/IP - как в Вашем случае станция определяет адрес сервера по его имени?
← →
_Konstantin (2006-02-09 06:24) [4]Вообще IP или имя сервера, и port задаётся в SocetConnection при подключении с тонким клиентом. В этом случае всё работает, только нужна ещё одна прога scktsrvr.exe, которая поставляется вместе с дельфи и там нужно указать порт в свойствах на котором всё это будет работать. Строка подключения прописывается на тонком клиенте, который стоит на одной машине с сервером, поэтому проблем не возникает. В случае с ADOConnection строку подключения нужно формировать на каждой машине отдельно (не буду же я для этого приезжать к заказчику, подключать машину в сеть и искать там сервер). При её формировании, если ты пишешь программу на удалённой машине которая уже в сети с сервером, сервер выбирается из выпадающего списка. Как он там появляется - научная тайна покрытая мраком. При этом ни порт, ни протокол, ни IP адрес не прописывается. Поэтому я и спрашиваю, может быть ещё какой-то подводный камень? A ADOConnection очень нужен для подключения хранимых процедур.
← →
ЮЮ © (2006-02-09 06:46) [5]
> В случае с ADOConnection строку подключения нужно формировать
> на каждой машине отдельно (не буду же я для этого приезжать
> к заказчику, подключать машину в сеть и искать там сервер).
>
Её можно формировать и программно. Надёюсь смысл параметров понятен.
Как их задавать и хранить, вариантов куча - ini, реест, диалоговое окно.
function BuildConnectionStringForMSSQL(
const AServer, ADatabase, AUser, APassword: string
): string;
begin
Result :=
"Provider=SQLOLEDB.1;Persist Security Info=False;" +
{$IFDEF WINDOWS_AUTHENTICATION}
"Integrated Security=SSPI;" +
{$ELSE}
"User ID=" + AUser + ";" +
"Password=" + APassword + ";" +
{$ENDIF}
"Initial Catalog=" + ADatabase + ";" +
"Data Source=" + AServer;
end;
WINDOWS_AUTHENTICATION, естественно, можно сделать не параметром компиляции, а параметром функции, просто взял с живого проекта.
← →
lostdelpher (2006-02-09 10:00) [6]Зачем мучить себя создай файл с расширением udl открой его, настрой подключение (по iP или как поэкпериментируй) , сохрани ...Затем открой текстовым редактором и посмотри строку подключения
← →
Ega23 © (2006-02-09 10:20) [7]Возможно тут что-то с DNS-ом и "доверительными отношениями". Попробуй вместо имени сервера задать его IP-адрес.
← →
Ольга (2006-02-09 10:33) [8]Workstation ID и Data Source - две большие разницы
Согласна с [6] - подключайтесь через UDL (WINDOWS_AUTHENTICATION)
← →
_Konstantin (2006-02-09 23:48) [9]Последние данные по данной проблеме. Притащил ноутбук с программой в сеть. Создаю строку подключения (кстати она программно и создавалась), дохожу до места где нужно выбрать базу данных и опа - облом...
Пишет вот что:
Ошибка связи с данными (Microsoft)
[DBNETLIB][ConnectionRead(recv()).]Общая ошибка сети. Обратитесь к документации по сети.
а потом
Связь с данными (Microsoft)
Не выполнен вход в систему. Не удаётся загрузить сведения католога
Ничего не понимаю, что происходит... Может есть какие соображения.
← →
sniknik © (2006-02-10 00:54) [10]соображение... перечитать ветку и воспользоваться(проверить) уже данные советы... особое внимание на авторизацию (не только в строке но и в свойствах сервера mssql), и на советы по составлению правильной строки конекта.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2006.04.02;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.058 c