Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?

Официальный форум Simple-Scada.

Автор Тема: Работа с несколькими SQL базами данных на разных серверах  (Прочитано 4389 раз)

sir

  • Новичок
  • *
  • Сообщений: 18
    • Просмотр профиля
Здравствуйте!
Одна SQL база для трендов установлена локально и прописана в настройках проекта, а SQL база для рецептов находится в локальной сети на другом сервере и работают с ней другие пользователи в другом программном обеспечении. Возможно ли работать с разными SQL базами данных на разных серверах, если в настройках задается доступ (логин-пароль) только к одному SQL серверу?

Как я понимаю, в скрипте Проекта на Delphi надо прописать авторизацию с логином и паролем для удаленного SQL сервера? Не подскажите как это сделать?
Вот пример:
Код: (delphi)
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, Grids, DBGrids, SqlExpr;

type
TForm1 = class(TForm)
SQLConnection1: TSQLConnection;
SQLQuery1: TSQLQuery;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
SQLConnection1.DriverName := 'MySQL';
SQLConnection1.Params.Values['HostName'] := '10.0.0.10';
SQLConnection1.Params.Values['Database'] := 'mydatabase';
SQLConnection1.Params.Values['User_Name'] := 'myusername';
SQLConnection1.Params.Values['Password'] := 'mypassword';
SQLConnection1.Open;

SQLQuery1.SQL.Text := 'SELECT * FROM mytable';
SQLQuery1.Open;

DBGrid1.DataSource := DataSource1;
DataSource1.DataSet := SQLQuery1;
end;

end.
« Изменён: 27 Февраля 2025, 10:04:51 от Simple-Scada »

Simple Scada

  • Глобальный модератор
  • *****
  • Сообщений: 288
    • Просмотр профиля
    • Simple-Scada
Здравствуйте.

На данный момент из скриптов можно работать только с той БД, которая указана в настройках проекта. Также поддерживается работа со связанными серверами SQL Server. Возможно, в будущем добавим функционал для работы со сторонними БД, но какие-либо сроки появления такого функционала назвать, к сожалению, не можем.

ZWolol

  • Пользователь
  • **
  • Сообщений: 58
    • Просмотр профиля
Связал два сервера SQL 2008 Enterpice.
Сделал запрос с выводом данных в TM_Table:
Код: (delphi)
sQuery:= 'SELECT ID_Channel,MeasureDate,Value,State FROM [ASDK-VZ2].Telemera.dbo.Currents;';
tblMy.RunSQL(sQuery, tsSaveFixRow);
Выводит ошибку:

Invalid use of schema or catalog for OLE DB provider "SQLNCLI10" for linked server "ASDK-VZ2". A four-part name was supplied, but the provider does not expose the necessary interfaces to use a catalog or schema.
The OLE DB provider "SQLNCLI10" for linked server information about the error.

В SQL Менеджере видно таблицы, но при запросе:
Код
SELECT [ID_Channel]
      ,[MeasureDate]
      ,[Value]
      ,[State]
  FROM [ASDK-VZ2].[Telemera].[dbo].[Currents]
GO
Выдает:

Msg 7399, Level 16, State 1, Line 1
The OLE DB provider "SQLNCLI10" for linked server "ASDK-VZ2" reported an error. The provider did not give any information about the error.
Msg 7312, Level 16, State 1, Line 1
Invalid use of schema or catalog for OLE DB provider "SQLNCLI10" for linked server "ASDK-VZ2". A four-part name was supplied, but the provider does not expose the necessary interfaces to use a catalog or schema.

С чем это связано и что надо посмотреть?

P.S.
Установил виртуал бокс, на нем прилинковал базу и прочитал данные!!!
Извиняюсь за беспокойство.
Видимо есть какая-то хрень на моей машине... :(
« Изменён: 05 Марта 2025, 06:41:11 от ZWolol »

ZWolol

  • Пользователь
  • **
  • Сообщений: 58
    • Просмотр профиля
Запустил сервер и клиент на своей машине, а базу указал на сетевом сервере Win64 с SQL 2008 Enterprice (кластерная).
На сервере прилинковал три рабочих SQL сервера Win32 Prifessional (два 2005 и 2012).

И все работает влет.
Только пришлось в настройках линковки отключить все, кроме доступа к данным и RPC.
Там же можно указать имя/пароль для удаленного подключения к серверам (если отличаются).

Даже не вижу необходимости добавлять скаде работу с несколькими серверами если все решается на уровне операционки.

P.S.
У меня стоит 5 сек на повторе скрипта с запросом SELECT, но в реале получается 7 сек.

ZWolol

  • Пользователь
  • **
  • Сообщений: 58
    • Просмотр профиля
Все что может случиться, обязательно случится. (Закон Мэрфи).

15 лет назад я предлагал своему начальству изменить название сервера опроса,
но мне запретили это делать потому, что маловероятно, что кто-то назовет свою программу "server.exe" и вот оно случилось!!! :)

Ваш сервер периодически закрывается потому, что наша служба ServerRun следит за работой Server.exe, периодически посылает ему запросы и в случае отсутствия ответов считает его зависшим и перезапускает приложение.
Снимается зависшее приложение с помощью taskkill, вот потому и нет ничего в логах вашего сервера.

Спустя столько времени мне все таки придется переименовать нашу прогу и поправить ServerRun.
Но хоть теперь причина найдена...