Хобрук: Ваш путь к мастерству в программировании

Delphi: возвращение имен баз данных из MySQL с использованием метаданных

Я хочу знать, есть ли способ вернуть имена баз данных из MySQL с помощью объекта Delphi TSQLConnection, я знаю, что есть некоторые методы, которые возвращают имена таблиц или имена полей: TSQLConnection.getTableNames, TSQLConnection.GetFieldNames

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

В объекте TADOconnection есть метод с именем OpenSchema: TADOconnection.Openschema, который может возвращать имена баз данных, но в TSQLConnection метод — защищенный, а не общедоступный — не может возвращать имена баз данных.

P.S. Я не хочу выполнять запрос типа «показать базы данных» или «выбрать * из information_schema.schemata».

любой орган может помочь, спасибо.


  • Вы используете соединение MySQL или ODBC? Если вы используете MySQL, вы обычно устанавливаете имя базы данных в параметрах TSQLConnection, поэтому вы можете просто запросить это так SQLConnection.Params.Values['Database']; Если это не работает для вас, вам нужно предоставить дополнительную информацию о том, как настроено ваше TSQLConnection. 27.05.2013
  • Я знаю, что могу настроить базу данных в параметрах, но как получить все имена баз данных? 27.05.2013

Ответы:


1

Я попробовал этот код, и он сработал, не уверен, что он будет работать для всех версий MySQL, MariaDB и всех версий Delphi, но для меня он работает, я использую delphi 6 и MySQL 4.0.25:

function GetMySQLDatabaseNames(AUserName, APassword, AHostName, APort: string; var 
AErrorMessage: String): TStrings;
var SQLConnection: TSQLConnection;
    ObjectCursor: ISQLCursor;
    Status: SQLResult;
    Counter: Integer;
    Precision: Smallint;
    Value: Pointer;
    IsBlank: LongBool;
begin
  Result:= TStringList.Create;
  SQLConnection:= TSQLConnection.Create(nil);

  with SQLConnection do
  begin
    ConnectionName:='dbnames';
    DriverName := 'mysql';
    Params.Clear;
    Params.Values['User_Name'] := AUserName;
    Params.Values['Password'] := APassword;
    Params.Values['HostName'] := AHostName;
    Params.Values['Database'] := 'mysql';
    Params.Values['Port'] := APort;
    LibraryName :='dbexpmda.dll';
    VendorLib := 'not used';
    GetDriverFunc :='getSQLDriverMySQLDirect';
    LoginPrompt :=False;
    try
      Connected := True;

      Status:= MetaData.getObjectList(eObjTypeDatabase, ObjectCursor);
      while Status = SQL_SUCCESS do
      begin
        Status:= ObjectCursor.getColumnPrecision(4, Precision);
        if Status = SQL_SUCCESS then
        begin
          Value:= AllocMem(Precision);
          Status:= ObjectCursor.getString(4, Value, IsBlank);
          if Status = SQL_SUCCESS then
            if not IsBlank then
              Result.Add(PChar(Value));
        end;
        Status:= ObjectCursor.Next;
      end;
      Connected := False;
      Free;
    except
      on E: Exception do
      begin
        AErrorMessage:= AErrorMessage + E.Message+ sLineBreak;
      end;
    end;
  end;
end;
27.05.2013
Новые материалы

Ускорение регулярных выражений в 127 раз за 2 строки кода
Скомпилируйте регулярное выражение и… Я столкнулся с неприятным узким местом Regex на работе. Мне нужно было извлечь 600–800 миллионов строковых шаблонов из гигантского корпуса..

Понимание структуры каталогов Linux
Структура каталогов Linux — это иерархическая организация файлов и каталогов в системе Linux. Понимание этой структуры важно для всех, кто хочет использовать Linux в качестве основной..

Введение в SQLite3 в Python
SQLite3 — это популярная и часто используемая программная библиотека для управления реляционными базами данных. Она портативна, быстра и проста в использовании, что делает ее отличным выбором..

Как создать ORM в Node.js
Что такое ОРМ? Проще говоря, система ORM — это метод, в котором вы используете объектно-ориентированную парадигму для создания сопоставления между приложением и базой данных для выполнения..

Руководство для начинающих по обработке естественного языка .
Обработка естественного языка — захватывающая и быстро развивающаяся область, которую можно охарактеризовать как сочетание лингвистики, информатики и искусственного интеллекта. Это помогает..

Защитите свое приложение NodeJS с помощью веб-токенов JSON (JWT): руководство по аутентификации на основе токенов
В современном мире веб-приложений безопасность важнее, чем когда-либо. Одним из наиболее важных аспектов защиты веб-приложений является аутентификация пользователей. Аутентификация на основе..

Вводное руководство по аннотациям @PreAuthorize и @PostAuthorize в Spring Security
Введение Spring Security — это мощная и настраиваемая среда аутентификации и контроля доступа для приложений Java, особенно тех, которые созданы с использованием среды Spring. Этот пост..