Diese Werbeeinblendung erscheint nach 5 Minuten Idletime.
- Werbung - weiter auf Codershell surfen.
Delphi » MySQL connect via MySQL direct Units
Seiten:  1 
[ Sie müssen angemeldet sein, um einen Beitrag zu verfassen. ]
Geschrieben von sofl (Moderator) am 09.06.2008 um 17:51 Uhr.
Beiträge: 12 / #1730

Kontakt: Mailen | ICQ

Um auf MySQL Datenbanken im Delphi zuzugreifen giebt es verscheidene Möglichkeiten. Viele nehmen ZEOS- oder dbExpress Komponente. Das Tutorial zeigt eine mehr oder minder einfachere Variante. Zudem sind die Units kostenlos und können auf http://sourceforge.net/projects/directsql heruntergeladen werden.

Bei MySQL direct handelt es sich nicht um Komponenten, sondern um, wie bereits erwähnt, Units, die Klassen enthalten, die in einer Anwendung wie gewohnt instanziiert und
freigegeben werden müssen.

Folgende MySQLdirect-Units müssen in den Interface-Abschnitts der Hauptunit unseres Programmes eingebunden werden:

CODE
1.
2.
3.
 
uses ...umysqlvio, uMysqlCT, uMysqlClient, uMysqlHelpers;


Noch vor den Typdeklarationen muss die Include-Datei eingebunden werden:


CODE
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 
uses ...,umysqlvio, uMysqlCT, uMysqlClient, uMysqlHelpers; 

[b]{$I mysqlinc.inc}[/b]

type
  TForm1 = class(TForm)
    Button1: TButton;
    ...


Im private-Abschnitt ( public auch möglich ;p ) von TForm1 deklarieren wir nun folgende Objektreferenzen:

CODE
1.
2.
3.
4.
private
FMysql: TMysqlClient;
FResult: TMysqlResult;


FMySql verweist auf das Objekt, welches für den Datenbankzugriff benötigt wird.
FResult ist für die Ergebnismenge von Abfragen zuständig.

beim start unseres Programmes sollte FMySql gleich erzeugt werden. Also am besten ins Form.OnCreate oder Form.OnShow Ereignis schreiben.

CODE
1.
2.
3.
4.
5.
6.
procedure TForm1.FormCreate(Sender: TObject);
begin
FMysql := TMysqlClient.create;
end;


Es empfiehlt sich das Object bei Programmende wieder freizugeben

CODE
1.
2.
3.
4.
5.
6.
7.
8.
procedure TForm1.FormDestroy(Sender: TObject);
begin
FMysql.Free;
if FResult<>nil then
FResult.free;
end;


Nun machen wir uns an den Verbindungsaufbau... am besten einen Button erstellen und ins OnClick Ereignis folgendes schreiben

CODE
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
 
procedure TForm1.Button1Click(Sender: TObject);
begin
FMysql.Host := 'localhost';
FMysql.port := 3306;
FMysql.user := 'root';
FMysql.password := 'O.O';
FMysql.UnixSocket := '';
FMysql.Db := 'sofl'; // kann auskommentiert werden
FMysql.UseNamedPipe := false;
FMysql.UseSSL := false;
FMysql.Compress := true;
FMysql.TrySockets := false;

if FMysql.Connect then
ShowMessage('Verbindung aufgebaut')
else
ShowMessage('Fehler beim Verbinden: '+FMysql.LastError);
end;



unser FMysql object enthält zahlreiche sub proceduren/functionen wie z.b.

1* giebt einen Booleschen Wert zurück (true or false)

FMysql.create_db('meinedb') // 1*
FMysql.select_db('meinedb') // 1*
FMysql.drop_db('meinedb') // 1*
FMysql.change_user(user, pass, db) // 1*
FMysql.stat // giebt einen String zurück (Statistiken)
FMysql.Connected // 1*
FMysql.ping // 1*
und viele mehr...

Man kann natürlich auch eigne abfragen erstellen...

Hier eine Bsp Function

CODE
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
function execsql(abfrage: string): Boolean;
begin
if assigned(FResult) then begin
if FMysql.Status<>MYSQL_STATUS_READY then
ShowMessage('Ein Ergebnis wurde unvollständig gelesen!');
FreeAndNil(FResult);
end;
FResult := FMysql.query(abfrage, true, Result);


anwenden...

CODE
1.
2.
3.
execsql('delete from user where id="23"');


Eine Selectabfrage im Stringgrid ausgeben ? Kein Problem!

Hier eine Procedure aus einehm Programm von mir

CODE
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
procedure Tmain.showtable;
var i, j: integer;
af: TMysql_FieldDef;
cr: integer;
begin
if assigned(main.FResult) then
begin
  if main.FResult.ResultType=rtStored then
  begin
    cr := main.FResult.RecNo;
    main.StringGrid1.RowCount := main.FResult.RowsCount+1;
    main.StringGrid1.ColCount := main.FResult.FieldsCount;
    for i:=0 to main.FResult.FieldsCount-1 do
    begin
      af := main.FResult.FieldDef(i)^;
      main.StringGrid1.cells[i,0] := af.Name;
    end;
  main.FResult.First;
  for i:=0 to main.FResult.RowsCount-1 do
  begin
  {
    if main.FResult.RecNo=cr then
    main.StringGrid1.Cells[0,i+1] := '*'
  else
    main.StringGrid1.Cells[0,i+1] := '';
   }
    for j:=0 to main.FResult.FieldsCount-1 do
    main.StringGrid1.Cells[j,i+1] := main.FResult.FieldValue(j);
    main.FResult.Next;
  end;
  main.FResult.RecNo := cr;
  end
else
begin
  main.StringGrid1.RowCount := 2;
  main.StringGrid1.ColCount := main.FResult.FieldsCount+1;
  for i:=0 to main.FResult.FieldsCount-1 do
  begin
    af := main.FResult.FieldDef(i)^;
    main.StringGrid1.cells[i+1,0] := af.Name;
  end;
for j:=0 to main.FResult.FieldsCount-1 do
main.StringGrid1.Cells[j+1,1] := main.FResult.FieldValue(j);
end;
end;
// statusbar1.Panels[1].Text := inttostr(stringgrid1.rowcount-1)+' Datensätze';
end;


um diese auszuführen müssen wir allerdings erst einmal unsren FResult füllen.

in Kombination mit der execsql Function ist das ein Kinderspiel

CODE
1.
2.
3.
4.
 
if execthissql('Select * from User') then
showtable;


Jou das wars soweit, ich hoffe es war bissl informativ

mfg teh sofl


wong itdel.iciode.blinklisttechnoratigoogleblinkbitsyahooyiggblogmarksfurlspurlwebnewsstumbleupondigg itma.gnolia.comco.mments Zitieren Beitrag melden
[ Sie müssen angemeldet sein, um einen Beitrag zu verfassen. ]
Seiten:  1 
Login / Account
E-Mail Adresse:

Passwort:



Passwort zurücksetzen
Werbung