Integer Posted April 5, 2011 Report Share Posted April 5, 2011 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 More sharing options...
Integer Posted April 5, 2011 Author Report Share Posted April 5, 2011 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 More sharing options...
Integer Posted April 5, 2011 Author Report Share Posted April 5, 2011 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 More sharing options...
Integer Posted April 5, 2011 Author Report Share Posted April 5, 2011 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 More sharing options...
Integer Posted April 5, 2011 Author Report Share Posted April 5, 2011 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 More sharing options...
Integer Posted April 5, 2011 Author Report Share Posted April 5, 2011 // 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 More sharing options...
Integer Posted April 5, 2011 Author Report Share Posted April 5, 2011 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 More sharing options...
Integer Posted April 5, 2011 Author Report Share Posted April 5, 2011 // 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 More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.