• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).

Если у вас возникнут вопросы или потребуется дополнительная информация, не стесняйтесь обращаться к нашей службе поддержки. Вы можете связаться с нами по указанным контактным данным на нашем сайте.

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

Поключение к серверу баз данных

Автор Mistral, 09.02.11, 17:05:26

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Mistral

Здравствуйте!
Интересует такой вопрос, в теме http://forum.ascon.ru/index.php/topic,16415.0.html обсуждалось подключение к серверу приложений, подключиться получается, а вот как подключиться к серверу баз данных? при подключении к серверу приложений метод ConnectToDB не срабтывает, права нужно делегировать, как это можно осуществить, из хэлпа не понял. если можно то пример. при методе ConnectToDBex с явным указанием пользователя так же не получается  :((( Ошибки: "Ошибка подключения к серверу баз данных" и "член группы не найден"
Заранее спасибо

Chaa

Чтобы разрешить делегирование прав, нужно выполнить в самом начале работы приложения
OleCheck(CoInitializeSecurity(nil, -1, nil, nil, RPC_C_AUTHN_LEVEL_NONE, RPC_C_IMP_LEVEL_DELEGATE, nil, 0, nil));
Об этом написано в ЛОЦМАН API.chm.

Mistral

Chaa, спасибо!
Объявил OleCheck, CoInitializeSecurity подключив ComObj, ActiveX. а как объявить RPC_C_AUTHN_LEVEL_NONE?

Chaa

Напишите:
OleCheck(CoInitializeSecurity(nil, -1, nil, nil, 1, 4, nil, 0, nil));

Mistral

Ещё раз, всем доброго времени суток, имеется такой кусок кода:

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, DB, DBClient, GridsEh, DBGridEh,
  ComObj,  ActiveX, MConnect, StdCtrls;

procedure TForm2.FormShow(Sender: TObject);
var
  a: TDCOMConnection;
    inErrCode, stErrMess: Variant;
  stDBList: String;
id: integer;
LibHandle: THandle;
begin
  a := TDCOMConnection.Create(nil);
  CoInitialize(nil);
  try
    a.ComputerName := 'Loodsman';
    a.ServerGUID := '{392BA982-A82F-44AB-BA8A-69BE25199F73}';
    a.Open;
    OleCheck(CoInitializeSecurity(nil, -1, nil, nil, 1, 4, nil, 0, nil));
    PLM:=a.Appserver;
    if a.Connected then
    begin
    stDBList := PLM.GetDBList(inErrCode, stErrMess);
  PLM.ConnectToDB('loodsman', inErrorCode, stErrorMessage);
    if stErrorMessage<>'' then    showMessage(stErrorMessage);
    end;
  finally
    a.Close;
    a.Free;
  CoUninitialize;
  end;

как я понимаю, инициализация проходит за счёт   CoInitialize(nil), проект компилируется, но при обращении к функции "OleCheck", ругается благим матом: Система безопасности должна быть инициализирована до начала передачи или приёма парамтров.  Изменения могут быть произведены после инициализации.
Что же я делаю не так? зараее спасибо
и ещё грызёт такой опрос, почему же не подключается с помощью
Variant ConnectToDBEx(
BSTR stDBName,        // название базы данных
BSTR stUserName,        // имя пользователя базы данных
BSTR stPassword,        // пароль пользователя базы данных
Variant * inReturnCode,
Variant * stErrorMessage,);
при явном указании пользователя базы sql...


Chaa

Добавьте вызов CoInitializeSecurity в *.dpr файл, до вызова Application.Initialize.

С помощью ConnectToDBEx вы подключаетесь под пользователем, для которого в MS SQL Server задана SQL-авторизация?

Mistral

Chaa, большое спасибо. добавил CoInitializeSecurity. подключаюсь к базе. до этого пробовал  CoInitialize пройти до Application.Initialize, а CoInitializeSecurity проходил уже в прцедуре, у меня не получалось.
Цитата: Chaa от 12.02.11, 22:06:25
Добавьте вызов CoInitializeSecurity в *.dpr файл, до вызова Application.Initialize.

С помощью ConnectToDBEx вы подключаетесь под пользователем, для которого в MS SQL Server задана SQL-авторизация?
Пользователь является администратором и на SQL сервере и в клиенте.
Ещё раз спасибо, всё работает