Skocz do zawartości


[Delphi + MySQL] - komponent TSimpleMySQL


7 odpowiedzi w tym temacie

#1 Integer

    Pomocna dłoń

  • Moderatorzy
  • 191 Postów:
  • Gadu-Gadu:6888400

Napisano wto, 05 kwi 2011 - 10:51

Jak w łatwy sposób można używać MySQL?

Dużym ułatwieniem przy programowaniu dostępu do baz danych MySQL w Delhi jest komponent TSimpleMySQL - komponent coraz rzadziej stosowany. Jednak wystawcy uruchomić dostęp do bazy i znać podstawy składni MySQL – o nich w dalszej części.

SimpleMySQL jest klasa umożliwiająca łatwą komunikacje z baza danych MySQL korzysta z modułu mysql.pas i biblioteki libmySQL.dll. Celem tej SimpleMySQL jest stworzenie jak najprostszej metody łączenia i zaradzania bazą danych MySQL.
Klasa korzysta z MySQL Client API for Borland Delphi (dolaczone).

#2 Integer

    Pomocna dłoń

  • Moderatorzy
  • 191 Postów:
  • Gadu-Gadu:6888400

Napisano wto, 05 kwi 2011 - 10:53

Przykłady podany przez Brainer.

delphi


var
  DB: TSimpleMySQL;
begin
  DB := TSimpleMySQL.Create();
  try
    with DB do
    begin
      Host := 'localhost';
      User := 'admin';
      Password := 'pn1692%';
     
      if Connect() then
        if SelectDatabase('mydb') then
          if Query('CREATE TABLE `fusion` (
                   `partition en` VARCHAR( 11 ) NOT NULL,
                   `classe` VARCHAR( 11 ) NOT NULL,
                   `segment` TEXT NOT NULL ,
                   `F tot` INT NOT NULL ,
                   `F loc` INT NOT NULL ,
                   `indice specif` INT NOT NULL);'
) then
          begin
            ShowMessage('Utworzono tabelę.');
            Disconnect();
          end;  
    end;
  finally
    FreeAndNil(DB);
  end;
 

 


Jeżeli wyślesz zapytanie np. SELECT * FROM fusion, wynik zapytania jest w polu QueryResult klasy TSimpleMySQL.

#3 Integer

    Pomocna dłoń

  • Moderatorzy
  • 191 Postów:
  • Gadu-Gadu:6888400

Napisano wto, 05 kwi 2011 - 10:56

Tutaj kod z użyciem TSimpleMySQL., który pobiera dane z tabeli i wyświetla je w ListView.
Przykłady podany przez Brainer.

delphi


var
  DB: TSimpleMySQL;
  I: Integer;
begin
  DB := TSimpleMySQL.Create();
  try
    with DB do
    begin
      Host := 'localhost';
      User := 'admin';
      Password := 'pn1692%';
     
      if Connect() then
        if SelectDatabase('mydb') then
          if Query('SELECT * FROM users') then
          begin
            for I := 0 to QueryResult.RowsCount -1 do
              with ListView.Items.Add() do
              begin
                Caption := GetValue(QueryResults.Rows[I], 'username');
                SubItems.Add(GetValue(QueryResults.Rows[I], 'password'));
              end;
            Disconnect();
          end;  
    end;
  finally
    FreeAndNil(DB);
  end;
 

 


#4 Integer

    Pomocna dłoń

  • Moderatorzy
  • 191 Postów:
  • Gadu-Gadu:6888400

Napisano wto, 05 kwi 2011 - 11:02

Przykład podany przez Brainer
{
Wersja : 1.0
Autor: Wolverine (wolverine@daminet.pl)
}

delphi

 unit SimpleMySQL;
 
interface
 
uses Windows, Messages, SysUtils, Classes, Controls, StdCtrls, MySQL;
 
type
  TField = record
    Name: String;
    Value: String;
  end;
 
  TRow = record
    Index: Integer;
    Fields: array of TField;
  end;
 
  TTable = record
    Name: String;
    Rows: array of TRow;
    Fields: array of TField;
    RowsCount, FieldsCount: Integer;
  end;
 

 


#5 Integer

    Pomocna dłoń

  • Moderatorzy
  • 191 Postów:
  • Gadu-Gadu:6888400

Napisano wto, 05 kwi 2011 - 11:02

ciąg dalszy modułu

delphi


  TSimpleMySQL = class
    private
      MySQL: TMySQL;
      pResult: PMYSQL_RES;
      pRow: PMYSQL_ROW;
      pFields: PMYSQL_FIELDS;
    public
      QueryResult: TTable;  //Wyniki zapytania
 
      //Polaczenie
      Host: String;
      User: String;
      Password: String;
      function Connect: Boolean;
      procedure Disconnect;
 
      //Zarzadzanie baza
      function SelectDatabase(Name: String): Boolean;
      function Query(q: String): Boolean;
      function GetValue(Row: TRow; Name: String): String;
 
      destructor Destroy;
  end;
 
implementation
 

 


#6 Integer

    Pomocna dłoń

  • Moderatorzy
  • 191 Postów:
  • Gadu-Gadu:6888400

Napisano wto, 05 kwi 2011 - 11:05

delphi


// Połączenie z serwerem MySQL
function TSimpleMySQL.Connect: Boolean;
begin
  mysql_connect(@MySQL, PChar(Host), PChar(User), PChar(Password));
  Result := (MySQL.net.last_errno = 0);
end;

// rozłączenie z serwerem MySQL
procedure TSimpleMySQL.Disconnect;
begin
  mysql_close(@MySQL);
end;

// wybór bazy bazy na serwerze
function TSimpleMySQL.SelectDatabase(Name: String): Boolean;
begin
  Result := (mysql_select_db(@MySQL, PChar(Name)) = 0);
end;
 

 


#7 Integer

    Pomocna dłoń

  • Moderatorzy
  • 191 Postów:
  • Gadu-Gadu:6888400

Napisano wto, 05 kwi 2011 - 11:11

delphi

 function TSimpleMySQL.Query(q: String): Boolean;
var
  i, j: Integer;
begin
  mysql_query(@MySQL, PChar(q));
  pResult := mysql_store_result(@MySQL);

  // Sprawdzanie czy jest połączenie
  if pResult = nil then begin
    Result := False;
    Exit;
  end else
    Result := True;
 
  QueryResult.RowsCount := presult^.row_count;       // pobieranie ilości wierszy
  QueryResult.FieldsCount := presult^.field_count;     // pobieranie ilości "kolumn"
 
  SetLength(QueryResult.Rows, presult^.row_count);      // ustawia ilość wiersz
  SetLength(QueryResult.Fields, presult^.field_count);     // ustawia ilość "kolumn"
 
  pfields := presult^.fields;
  for j := 0 to presult^.field_count - 1 do
    QueryResult.Fields[j].Name := pfields^[j].name;
 
  for i := 0 to presult^.row_count - 1 do begin
    prow := mysql_fetch_row(presult);
    for j := 0 to presult^.field_count -1 do begin
      SetLength(QueryResult.Rows[i].Fields, presult^.field_count);
      QueryResult.Rows[i].Fields[j].Name := QueryResult.Fields[j].Name;
      QueryResult.Rows[i].Fields[j].Value := prow^[j];
    end;
  end;
end;

 


#8 Integer

    Pomocna dłoń

  • Moderatorzy
  • 191 Postów:
  • Gadu-Gadu:6888400

Napisano wto, 05 kwi 2011 - 11:13

delphi


// pobieranie wartości z kolumny o nazwie "Nazwa" z wiersza Row: TRow
function TSimpleMySQL.GetValue(Row: TRow; Name: String): String;
var
  q: Integer;
begin
  for q := 0 to QueryResult.FieldsCount -1 do
    if QueryResult.Fields[q].Name = Name then begin
      Result := Row.Fields[q].Value;
      Exit;
    end;
end;

// niszczenie klasy, najpierw zerujemy tabele dynamiczne wierszy i nagłówków
destructor TSimpleMySQL.Destroy;
begin
  SetLength(QueryResult.Rows, 0);
  SetLength(QueryResult.Fields, 0);
  inherited Destroy;
end;
 
end.