Skocz do zawartości
Zaloguj się, aby obserwować  
Integer

[Delphi + MySQL] - komponent TSimpleMySQL

Polecane posty

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

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

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.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

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;

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

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;

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

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

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
// 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;

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
 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;

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
// 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.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się
Zaloguj się, aby obserwować  

×