ADO Data Sources 1.1 - FS плагин к Total Commander
===========================================================

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

Плагин распространяется как freeware продукт.

==================================================

Плагин обеспечивает доступ к объектам серверных и локальных БД, допускающих 
подключение с помощью технологии Microsoft ADO: OLE DB провайдеров (MS SQL,
Oracle, DB2, Sybase, InterBase, MySQL, MS Access...) и ODBC драйверов (Paradox,
dBASE, FoxPro, Excel, CSV...).

Данный плагин является развитием FS плагина для доступа к MS SQL
серверам - MS SQL Servers 1.3. Он создавался первоначально для доступа к MS SQL 
серверам и написан с использованием набора ADO компонент для доступа к данным. 
Кроме того, автор работает повседневно с MS SQL Server. Поэтому плагин имеет больше 
возможностей при работе с MS SQL серверами, чем с другими источниками данных.

Замечание для пользователей MS SQL Server плагина.
==================================================
Ниже я использую более общие термины ADO вместо более специфичных для MS SQL Server
терминов, употреблявшихся в описании предыдущего плагина:
  "Соединение" (Connection) - вместо "Сервер"      (Server) ,
  "Каталог"    (Catalog)    - вместо "База данных" (Database) и
  "Схема"      (Scheme)     - вместо "Владелец"    (Owner).
Поймите и примите %-) 

Возможности плагина:
====================

- Простое визуальное создание списка используемых соединений.
    Добавить соединение - F7 или двойной клик на пункте '- Add Connection -'.
    Удалить соединение  - F8, Del или Right Menu - Delete.
    Свойства соединения - Alt+Enter или Right Menu - Properties.
  Список соединений хранится в файле connections.ini в каталоге плагина.

- Свойства соединения:
    Connection Name - можно использовать любое допустимое в файловой системе
    имя для удобной идентификации соединения.
    Connection String - можно ввести ее непосредственно, построить используя 
    стандартный ADO-диалог или поместить ее в UDL файл.
    Login type - если подключение к соединению требует аутентификации
    (ввода пользовательского логина и пароля) вы можете выбрать один
    из четырех вариантов аутентификации:
      - Однократный запрос логина и пароля при первой установке соединения.
        Введенные данные сохраняются в памяти плагина до конца текущей сессии
        Total Commander.

      - Запрос логина и пароля при каждом входе в соединение. Доступ к каталогам
        и объектам внутри соединения не требует повторной аутентификации.
        (Из-за особенностей взаимодействия FS-плагинов с TC последнее может
         иногда нарушаться. Работа с плагином в обеих панелях TC, переходы с
         использованием Directory Menu (Ctrl-D) или списка ранее посещенных
         каталогов (Alt-Right/Left/Down) могут привести к "лишним" диалогам
         ввода логина/пароля.)

      - Постоянное хранение логина и пароля в зашифрованном виде.
        Для шифрования сохраняемых логина и пароля в каталоге плагина должна
        находиться библиотека crsqlwfx.dll. Более подробная информация о ней
        дана в разделе "Установка".

      - Постоянное хранение логина и пароля в строке подключения в явном виде.
        Не требует постоянной аутентификации, но при этом Ваша персонально
        важная информация - логин и пароль - ХРАНЯТСЯ В ОТКРЫТОМ ВИДЕ.
        ВНИМАНИЕ:  Это крайне нежелательный вариант аутентификации!
                   Забота о Вашей приватности - в Ваших руках!

- Плагин просматривает иерархию:
    Соединения
     |
     +-->  Каталоги
            |
            +-->  Группы объектов (таблицы пользователя, системные таблицы,
                   |               просмотры (views), хранимые процедуры)
                   |
                   |  (некоторые группы могут быть пустыми)
                   |
                   +-->  Объекты БД

- Отображаемые колонки TC:
    Имена соединений, каталогов и объектов БД (таблиц, просмотров,
    хранимых процедур) отображаются в (Name).
    Если соединение поддерживает различные схемы (MS SQL, Oracle, DB2, ...),
    имя схемы отбражается как расширение объекта БД(напр. employee.dbo).
    Если OLE DB провайдер возвращает даты создания каталогов и объектов БД -
    они отображаются в (Date).

- Enter или двойной клик мышью над объектом (таблица, view, SP) вызывает
  внутренний листер/редактор запросов (Query Viewer). Возможны просмотр и
  редактирование записей объекта.
  Для хранимых процедур формируется (но не выполняется при входе) запрос вида
    EXEC <SP_Name> @Par1 = ?, @Par2 = ?
  в котором Вы можете доввести значения параметров и выполнить его затем вручную.
  Подробнее о возможностях Query Viewer смотрите ниже.

- F3 показывает описание объекта:
  Для таблиц - в виде CREATE TABLE (поля, индексы, PRIMARY & FOREIGN KEYS).
  Для просмотров - CREATE VIEW ...
  Для хранимых процедур - CREATE PROCEDURE ...
  К сожалению, многие OLE DB провайдеры не возвращают информацию для просмотров и
  хранимых процедур, соответственно, ничего не покажет и плагин.

  F5 копирует описание объекта в виде текстового файла на соседнюю панель.

  ВНИМАНИЕ:
  Плагин не позволяет изменять/добавлять/удалять объекты в БД.
  Поэтому F4 и F6 будут работать как F3 и F5, не более того.
  Также не поддерживаются F7, F8 (кроме списка соединений) и F5 в панель плагина.

- Поиск в плагине по Alt+F7, в том числе с заданием текста для поиска.

- Объекты с нерегулярными именами (содержащие пробелы, кириллицу, ряд
  специальных символов или совпадающие с зарезервированными словами)
  отображаются с разделителями и корректно поддерживаются.
  (Используеися список зарезервированных слов для MS SQL Server).

- Папка "- Saved Queries -" корневого каталога плагина содержит сохраненные
  Вами ранее запросы из произвольных соединений.
  Сохраненные запросы можно удалять с помощью F8 (удаляется только описание
  запроса, данные не теряются!)
  Подробнее о сохранении запросов смотрите ниже.

Возможности внутреннего листера/редактора запросов:
===================================================
- Выполнение произвольных SQL-запросов, в т.ч. не возвращающих результата
  в виде набора данных (INSERT, UPDATE, DELETE...).

- Возможно редактирование результатов обновляемых запросов типа SELECT.

- Ряд операций выполняется простым кликом мышью по таблице:
  - Левый клик по заголовку колонки выполняет запрос с сортировкой по этой
    колонке. Вcе клики по заголовку завязаны в кольцо - сортировка ASC/
    сортировка DESC/нет сортировки.
    Сортируемая колонка выделяется фоном колонки либо цветом заголовка
    (цвет можно настроить).
    Shift+левый клик позволяет производить сортировку более чем по
    одной колонке.
    Ctrl+левый клик полностью отменяет сортировку в запросе.

  - Alt+правый клик по какой-либо ячейке данных выполняет запрос с фильтром
    вида "WHERE <выбранная колонка> = <выбранному значению>".
    Alt+Shift+правый клик позволяет добавлять дополнительные фильтры
    (все фильтры объединяются с помощью AND).
    Alt+Ctrl+правый клик отменяет ранее поставленные фильтры.
    При постановке фильтров мышью исходный фильтр запроса (фраза WHERE) может
    сохраняться и объединяться по AND с фильтрами, устанавливаемыми мышью
    (см. флаг "Save original query filter" в конфигурации).

  - Ctrl+правый клик по заголовку колонки скрывает данную колонку, делает
    ее невидимой.
    Ctrl+Shift+правый клик в области заголовков колонок показывает все
    ранее скрытые колонки.
    Вместе с возможностями изменять размеры колонок и их порядок (правый
    клик на заголовке и потянуть) скрытие колонок позволяет гибко настраивать
    внешний вид результатов Ваших запросов.

- Возможно выполнять выделенную часть скрипта (как в Query Analyzer).
  ВНИМАНИЕ! При этом быстрая сортировка и фильтрация мышью НЕ РАБОТАЮТ.

- Если запрос возвращает несколько наборов данных (например EXEC SP_HELP...),
  возможна навигация по всем этим наборам (Alt+P, Alt+N).
  ВНИМАНИЕ! При этом быстрая сортировка и фильтрация мышью НЕ РАБОТАЮТ.

- Можно устанавливать таймауты для соединения и запроса.

- Специальная кнопка позволяет ограничить максимальную ширину колонок.

- В отдельном окне можно просматривать и редактировать поля типа BLOB (TEXT,
  IMAGE, BINARY). Поддерживаются редактирование текста, сохранение в файл,
  загрузка из файла и работа с буфером обмена.
  Просмотр возможен в виде text/image/hex (в hex режиме - read only).

- Возможно перемещение по истории выполнявшихся в Query Viewer запросов
  (меню History). В список истории помещаются различные запросы, выполненные
  ранее командой Execute (F5). Запросы, генерируемые мышью (быстрая сортировка
  и фильтрация), в список не заносятся.
  Если пункт меню History - Run Immediately отмечен, сразу при перемещении к
  предыдущему/следующему запросу он будет отправлен на выполнение.

- Отформатированный Вами должным образом запрос можно сохранить в папке
  "- Saved Queries -" корневого каталога плагина (Ctrl+S) для последующего
  быстрого выполнения. Сохраняются параметры соединения, текущий текст запроса
  и все настройки колонок (ширина, порядок, скрытые колонки). Все что Вы должны
  сделать - дать информативное название Вашему сохраненному запросу.

- Диалог конфигурации Query Viewer доступен через пункт меню Options...

Дополнительные возможности плагина при работе с MS SQL серверами:
=================================================================

- Отображаются только не пустые группы объектов, дополнительной группой
  показываются пользовательские функции.

- Дополнительно отображаемые данные:
    Для баз данных
      - общий размер файлов БД в байтах (Size),
      - атрибуты БД:
          read-only - для read-only БД;
          hidden    - для offline БД;
          system    - если работать с БД может только ее владелец (dbo use only).
    Для групп объектов - количество объектов в группе (Size).
    Для таблиц - количество записей в таблице (Size).
    (Внимание: запросы к системным таблицам производятся без обновления
               статистики (dbcc updateusage), поэтому информация в колонке
               Size может быть неактуальной, как для БД, так и для таблиц).

- В целях ускорения просмотра для больших таблиц производится ограничение
  выводимого диапазона записей с помощью условия TOP в зависимости от
  количества записей в таблице.

- По F3, F5 выдается более подробная информация об объекте БД. Для таблиц
  это DEFAULT, CHECK, PRIMARY KEY и FOREIGN KEY CONSTRAINTS, TRIGGERS.
  Выдаваемая информация максимально близка к тому, что выдает команда
  "Generate SQL Script..." в SQL Server Enterprize Manager.

- В Query Viewer компонент DataGrid с возможностями быстрой сортировки и
  фильтрации мышью оптимизирован под синтаксис MS Transact-SQL. Для других
  провайдеров на сложных запросах (вычисляемые поля, алиасы для полей,
  сложные соединения таблиц - JOINs) эти возможности могут не работать.

Протестированные конфигурации:
==============================
Работа плагина проверялась в конфигурациях:
  ОС - WinXP, Win98
  MS SQL Server - 7.0, 2000
  Другие серверные БД - Oracle, DB2, Sybase, InterBase, MySQL
  Локальные БД - MS Access, Paradox, dBASE, FoxPro, Excel

Установка:
==========
1. Распакуйте архив с плагином в выбранный вами каталог.

2. Установите FS плагин "MS_SQL.wfx" (см. Help к Total Commander).
   Плагин будет доступен в "Network Neighborhood" под именем "ADO Data Sources".

3. Библиотека Microsoft Data Access Components (MDAC) версии не ниже 2.1
   должна быть установлена на Вашем компьютере для работы плагина.
   Вы можете скачать ее последнюю версию с сайта Microsoft:
      http://www.microsoft.com/data
   Инструкции по установке библиотеки MDAC смотрите в статье "MDAC
   Installation" по ссылке:
     http://msdn.microsoft.com/library/en-us/dnmdac/html/data_mdacinstall.asp

4. Установка OLE DB провайдера или ODBC драйвера:
   Вы должны иметь OLE DB провайдер для каждой базы данных, к которой Вы хотите
   иметь соединение.
   Ряд провайдеров Вы будете иметь после установки MDAC: Microsoft провайдеры
   для SQL Server, Jet (MS Access), Oracle. Также устанавливается провайдер
   для ODBC Drivers, предоставляющий доступ к большинству локальных БД (Access,
   dBase, FoxPro, Paradox), а также к файлам Excel и текстовым файлам данных
   в формате CSV.
   Многие БД при инсталляции устанавливают также "родные" OLE DB провайдер
   и/или ODBC драйвер для доступа к ним - Oracle, DB2, Sybase...
   Для прочих БД (Interbase, FireBird, MySQL...) Вы сами должны найти в
   Интернете и скачать (или купить :-)) соответсвующий провайдер или драйвер.

   ВНИМАНИЕ: количество и качество информации, выдаваемой плагином, во многом
             определяется выбором провайдера и его настройками.
             Не будучи специалистом по конкретным БД (кроме MS SQL Server),
             я использовал при тестировании самые доступные провайдеры с
             минимальными настройками (все по умолчанию).
             Если у Вас есть возможность и знания попробовать в деле разные
             провайдеры для какой-то БД, поиграться с их настройками и сообщить
             оптимальные результаты для всех пользователей - сделайте это, пожалуйста.

5. Установка библиотеки для шифрования:
   Для шифрования сохраняемых данных о пользовательских логинах и паролях
   в каталоге плагина должна находиться библиотека crsqlwfx.dll.

   ВНИМАНИЕ: в отсутствие этой библиотеки Ваши логины и пароли будут
             сохраняться в явном виде.

   Поставляемая с плагином библиотека crsqlwfx.dll реализует простой алгоритм
   шифрования с использованием компонент из пакета DCPcrypt Cryptographic
   Component Library v2 (http://www.cityinthesky.co.uk).

   Вы можете написать свою реализацию библиотеки для шифрования данных.
   Она должна экспортировать две функции с интерфейсом:

         //  for PASCAL
      function Encode(Source, KeyString: PChar): PChar; stdcall;
      function Decode(Source, KeyString: PChar): PChar; stdcall;

         //  for C
      char* __stdcall Encode(char* Source, char* KeyString);
      char* __stdcall Decode(char* Source, char* KeyString);

   Первая функция шифрует, а вторая расшифровывает строку Source с ключом
   KeyString.

6. Пользователи предыдущих версий плагина!
   Вам надо будет настроить список Ваших соединений заново.
   Извиняюсь за неудобство и надеюсь, что новая организация соединений
   будет более удобной в использовании.

Что планируется дальше:
=======================
- Возможность более гибкой настройки плагина под конкретные БД.
- Экспорт записей из Query Viewer (мой старый долг).
- ... а что бы еще Вы хотели увидеть? Пишите.

В свою очередь прошу всех заинтересованных пользователей поделиться
советами и предложениями по улучшению функциональности плагина.

Пишите о проблемах
==================
плагина по адресу: sqlplugin@comcast.net
При этом сообщайте, пожалуйста:
  - название и версию OLE DB провайдера или драйвера ODBC
    (и еще хорошо бы сразу и линк на него),
  - строку подключения к соединению,
  - особенности Вашей БД.

Некоторые из возникающих проблем связаны с ошибками конкретных
OLE DB провайдеров. 
Если Вы можете, попробуйте протестировать своего OLE DB провайдера, 
используя ту же строку подключения и какое-нибудь другое приложение. 
(Для пользователей Borland рекомендую приложение
   {Borland_Folder}\Demos\Ado\AdoTest\ADOTest.exe). 
В любом случае, нпишите о проблеме мне.

История версий:
===============
[!] - Исправлено
[+] - Добавлено
[-] - Удалено
[*] - Мелкие исправления

-----------------------
ADO Data Sources v. 1.1 - 10.04.2004

[++] Теперь плагин работает не только с MS SQL Server, но и с любыми БД,
     допускающими подключение с помощью OLE DB провайдеров и ODBC драйверов.
[+]  Новая организация списка подключений с возможностями добавления и удаления.
[+]  Визуальная настройка свойств соединения.
[+]  Отображение просмотров (views) и хранимых процедур, а также пользовательских
     функций (для MS SQL Server).
[+]  Описание объектов БД по F3, F5.
[+]  Папка "- Saved Queries -" для быстрого доступа к ранее сохраненным запросам.
[+]  [Query Viewer] Скрытие и отображение колонок запроса одним щелчком мыши.
[+]  [Query Viewer] Сохранение истории выполнявшихся запросов и навигация по ним.
[+]  [Query Viewer] Сохранение запроса вместе с его форматированием для
     последующего быстрого доступа.

---------------------
MS SQL Servers v. 1.3 - 20.01.2004

[+]  Работа с несколькими списками серверов:
       - зарегистрированные в Enterprise Manager;
       - алиасы из Client Network Utility;
       - определяемый пользователем список.
[!]  Отображение серверов во вложенных группах Enterprise Manager -
     поддерживается любая степень вложенности.
[!]  Корректная работа с нерегулярными именами баз данных и таблиц
[!]  Освобождение памяти после закрытия Query Viewer.
[!]  Освобождение открытых соединений после закрытия Query Viewer.
[*]  Отдельные изменения в интерфейсе диалога Options.
[+]  В параметрах соединения прописывается свойство:
       Application Name=MS SQL Server Plugin for TC.
[+]  Отображение атрибутов для баз данных
[+]  [Query Viewer] Отдельное окно для полей типа TEXT, IMAGE, BINARY:
       - сохранение в файл/загрузка из файла;
       - работа с буфером обмена;
       - просмотр в виде text/image/hex.
[+]  [Query Viewer] Выполнение выделенной части скрипта (как в QA).
[+]  [Query Viewer] Просмотр результатов запроса, возвращающего несколько
     наборов данных.
[+]  [Query Viewer] Ограничение максимальной ширины колонок.
[+]  [Query Viewer] Установка таймаутов для соединения и запроса.
[*]  [Query Viewer] Быстрая сортировка мышью - добавлен стиль выделения
     как в Windows Explorer.
[*]  [Query Viewer] Выполнение запроса по F5 (как в QA).

---------------------
MS SQL Servers v. 1.2 - 05.01.2004

  Выход в свет

Благодарности:
==============
За ценные обсуждения и советы:
  Глебу Сазонову,
  Виталию Невзорову.
Автору Total Commander
  Christian Ghisler, www.ghisler.com.
Авторам свободных компонентов:
  Markus Stephany, merkes@mirkes.de    - компонент Hex Editor,
  David Barton, www.cityinthesky.co.uk - DCPcrypt Cryptographic Component Library.
Фирмам:
  Borland,
  Microsoft.

Автор:
======
Олег Ювашев, Чикаго ( США )
Email: sqlplugin@comcast.net

PS.  Автор читает все письма.
     Ответ не гарантирую, но пожелания постараюсь учесть.




