Подключение через TMySQLClien & TMySQLResult

Материал из DRKB

Подключение через TMySQLClien & TMySQLResult[править | править код]

Решение нашел...

  1. Без использования dbExpress, а с использованием специальных классов TMySQLClien & TMySQLResult.
  2. Все эти файлы ( файл приаттачит Secandr (90 кил)) надо положить либо в папку с проектом, либо в <Delphi_dir>/lib.
  3. Код:

Сразу говорю, показал только основные моменты. Код, для определения ошибок и т.п. писать не стал.

uses
  uMysqlClient, uMysqlCT, uMysqlErrors, uMysqlHelpers, uMysqlNet, uMysqlNewPassword, uMysqlSSL, uMysqlVio;

type
  TMainForm = class(TForm)
  public
    procedure Connect();
    procedure QueryData(Query: string); // Результирующий запрос (заносим данные в таблицу)
    procedure QueryNoData(Query: string); // insetrt, delete - нет полученных данных
  end;

var
 SQLConnection: TMysqlClient; // Объявляем переменную для соединения.
 Grid: TStringGrid;

implementation

// Установка соединения
procedure TMainForm.Connect();
begin
  SQLConnection := TMysqlClient.Create;
  with SQLConnection do
  begin
    Host := 'localhost';
    User := 'root';
    Password := '';
    Db := 'mysql';

    try
      Connect;
    except on Exception do
      begin
        Application.MessageBox('К сожалению, соединиться с MySQL-сервером не удалось. Проверьте правильность ввода всех параметров.' , 'Ошибка соединения', 0);
        exit;
      end;
    end;
  end;
end;

// Выполнение запроса:
procedure TMainForm.QueryData( Query : string );
var
  mysql_result: TMySQLResult;
  i, j: Integer;
  OK: Boolean;
begin
  OK := True;

  try
    mysql_result := SQLConnection.Query(Query, True, OK);
  except on Exception do
    begin
      Application.MessageBox('Запрос не выполнился.', 'Ошибка соединения', 0);
      exit;
    end;
  end;

  with Grid do
  begin
    ColCount := mysql_result.FieldsCount;
    RowCount := mysql_result.RowsCount+1;

    if RowCount = 1 then
      FixedRows := 0
    else
      FixedRows := 1;

    for i := 0 to mysql_result.RowsCount - 1 do
    begin
      for j := 0 to mysql_result.FieldsCount do
        Cells[j, i+1] := mysql_result.FieldValue(j);
      mysql_result.Next();
    end;
  end;
  
  mysql_result.Free();
end;

procedure TMainForm.QueryNoData(Query: string);
begin
  // Аналогично предыдущей процедуре, без внесения данных в таблицу. для запросов Insert, Update .....
end;


Author: Mal Hack
Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 02938