Jump to content

[Delphi + MySQL] - komponent TSimpleMySQL


Integer

Recommended Posts

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).

Link to comment
Share on other sites

Przykłady podany przez Brainer.

 

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.

Link to comment
Share on other sites

Tutaj kod z użyciem TSimpleMySQL., który pobiera dane z tabeli i wyświetla je w ListView.

Przykłady podany przez Brainer.

 

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;

Link to comment
Share on other sites

Przykład podany przez Brainer

{

Wersja : 1.0

Autor: Wolverine (wolverine@daminet.pl)

}

 

 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;

Link to comment
Share on other sites

ciąg dalszy modułu

 

 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

Link to comment
Share on other sites

// 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;

Link to comment
Share on other sites

 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;

Link to comment
Share on other sites

// 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.

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...