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

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
Новые материалы

Код, который работает вместе, остается вместе
Первоначально это было опубликовано в tiagojdf . Когда я только начинал как младший программист, я всегда терялся, глядя на внутренний код. Я предположил, что отчасти это было из-за того,..

Эта модель Google сочетает в себе рассуждение и действие в рамках одной языковой модели.
ReAct предоставляет архитектуру, которая инициирует действия на основе путей рассуждений языка. Недавно я запустил образовательный информационный бюллетень, посвященный ИИ, у которого уже..

Сортировка структур JSON по нескольким полям в JavaScript
Array.sort() не для слабонервных. Особенно, когда речь идет о сортировке сложных структур данных. Большинство руководств по JavaScript дают только краткое введение в Array.sort() . Обычно..

Иллюзии разработки программного обеспечения
Многие вещи не то, чем кажутся Реальность — это всего лишь иллюзия, хотя и очень настойчивая. Альберт Эйнштейн Разработка программного обеспечения никогда не бывает такой, какой кажется...

Решил попробовать свои силы в кодировании.
Решил попробовать свои силы в кодировании. Несмотря на то, что я по профессии программист, в больших компаниях вы не можете выбирать, что вы можете программировать; даже среда очень ограничена,..

Расчет схождения-расхождения скользящих средних (MACD) с помощью JavaScript
Чтобы рассчитать схождение-расхождение скользящих средних (MACD) с помощью JavaScript, вы можете использовать следующую формулу: MACD = 12-day EMA - 26-day EMA где экспоненциальная..

Удивительное определение удивления, разговор
Вы бросаете кубик, и выпадает 1. Удивительно? Вряд ли, с моей удачей. Но даже в целом, я думаю, не так уж много — он должен был приземлиться на что-то , верно? Что, если бы я сказал..