Topic: Как сделать запрос к внешней базе MySQL

Необходимо подключиться к серверу MySql к базе, которая не создавалась в MVD и получить размеры всех таблиц в базе.
Для этого использую такой cкрипт:
      Application.ProcessMessages;
      {$MySQL disable_connectdialog}
      Form1.MySQLConnection.Server := 'server.ru';
      Form1.MySQLConnection.Port := 3306;
      Form1.MySQLConnection.Username := 'name';
      Form1.MySQLConnection.Password := 'passsss';
      Form1.MySQLConnection.Database := 'dbname';

      try
         Form1.MySQLConnection.Connect;
      except
         ShowMessage('Соединиться с сервером базы данных '+Form1.MySQLConnection.Server+ ' на порт '+ IntToStr(Form1.MySQLConnection.Port) + ' не удалось.');
         exit;
      end;

      if Form1.MySQLConnection.Connected then
      begin
         showmessage('соединение с сервером успешно');
         sql_request := 'SELECT table_name AS `Table`, round(((data_length + index_length) / 1024 / 1024), 2) `Size in MB` FROM information_schema.TABLES  Order by `Size in MB` DESC';
         showmessage (  SQLExecute(sql_request) );

     end;

Однако, этот MySql запрос возвращает ошибку: no such table: information_schema.TABLES
Соединение устанавливается успешно.
Запрос SELECT отлажен в другом приложении.
Но в данном случае почему то не срабатывает?
В чем может быть причина?

Re: Как сделать запрос к внешней базе MySQL

Тоже стало интересно возможно ли создать в MVD таблицы потом подключится к mysql и далее где то в формах указать кнопку sql запрос к другому соединению в другой mysql ?  Никто не знает решения ?

Re: Как сделать запрос к внешней базе MySQL

попробуйте другой запрос
http://myvisualdatabase.com/forum/viewtopic.php?id=7125

4 (edited by k245 2022-07-23 13:33:33)

Re: Как сделать запрос к внешней базе MySQL

У вас сам проект настроен как  проект MySQL? Или как SQLite?

Чтобы пользоваться стандартной функцией SQLExecute для работы с MySQL проект должен быть тоже MySQL.


P.S. Ваш запрос работает, но он выдает размеры всех таблиц во всех схемах (БД). Обычно интересует какая-то одна. Я бы добавил условие WHERE TABLE_SCHEMA = "Название БД"

Визуальное программирование: блог и телеграм-канал.

Re: Как сделать запрос к внешней базе MySQL

k245 wrote:

У вас сам проект настроен как  проект MySQL? Или как SQLite?

Чтобы пользоваться стандартной функцией SQLExecute для работы с MySQL проект должен быть тоже MySQL.


P.S. Ваш запрос работает, но он выдает размеры всех таблиц во всех схемах (БД). Обычно интересует какая-то одна. Я бы добавил условие WHERE TABLE_SCHEMA = "Название БД"

Познавательно. У меня вот база настоена на MySQL и я сижу в 1 соединениее под названием BASE в сегменте 192.168.0.1  вот и вопрос  вполне реализуемо сделать не только запрос но и изменения в другом соединение BASE2 в другой MySQL в другой сети  192.168.1.1 ? smile

Re: Как сделать запрос к внешней базе MySQL

chartcatuser wrote:

Познавательно. У меня вот база настоена на MySQL и я сижу в 1 соединениее под названием BASE в сегменте 192.168.0.1  вот и вопрос  вполне реализуемо сделать не только запрос но и изменения в другом соединение BASE2 в другой MySQL в другой сети  192.168.1.1 ? smile

Возможно создать ещё один экземпляр соединения с другой базой. Но как его использовать для выполнения запроса, мне не понятно.... Может, у вас получится? smile  С разными базами (схемами) на одном сервере теоретически можно работать (перед именем таблицы можно указать имя схемы) , а вот чтобы с разными серверами...


А вот SQLite работает с разными базами, но лично мне этим заниматься не приходилось, но задумка одна имеется...

Визуальное программирование: блог и телеграм-канал.

Re: Как сделать запрос к внешней базе MySQL

Нашел на форуме, но не проверял:


Работа с SQLite, подключение к MySQL

procedure Form1_Button1_OnClick (Sender: string; var Cancel: boolean);
var
    MySQL: TMyConnection;
    MySQLQuery: TMyQuery;
begin
    MySQL := TMyConnection.Create(Form1);
    MySQLQuery := TMyQuery.Create(nil);
    try
            MySQL.Options.UseUnicode := True;
            MySQL.Server := '127.0.0.1'; // ip address of MySQL server
            MySQL.Port := 3306;
            MySQL.Username := 'login';
            MySQL.Password := 'password';
            MySQL.Database := 'databasename';
            MySQL.LoginPromt := False;
        
            try
                MySQL.Connect;
            except
                ShowMessage('Can''t connect to database.');
            end;

            if MySQL.Connected then
            begin
                // SQL query
                MySQL.ExecSQL('INSERT INTO test (field1, field2) VALUES ("value1", "value2")');


                // how to get data
                MySQLQuery.Connection := MySQL;
                MySQLQuery.SQL.Text := 'SELECT fieldname FROM tablename';
                MySQLQuery.Execute;

                while not MySQLQuery.EOF do
                begin
                    Form1.Memo1.Lines.Add( MySQLQuery.FieldByName('fieldname').AsString );
                    MySQLQuery.Next;
                end;


                MySQL.Disconnect;
            end;

    finally
        MySQLQuery.Free;
        MySQL.Free;
    end;
end;

То есть тут все наоборот: проект настроен на SQLite, но работает с базой MySQL. Полагаю, можно и с несколькими базами работать одновременно, создав для каждой свои экземпляры компонентов доступа.

Визуальное программирование: блог и телеграм-канал.

Re: Как сделать запрос к внешней базе MySQL

Спасибо будем пробовать smile