dbExpress i połączenie z MySQL5

0

Napisałem prosty program który łączy się z bazą danych korzystając z komponentów dbExpress. Zainstalowałem na localhost baze MySQL 5.0.27.
Program łaczy się z bazą danych - zdarzenie SQLConnection1AfterConnect jest wykonywane poprawnie. Jednak program wysypuje się przy wywołaniu zdarzenia Button2Click oraz w linii SQLConnection1.GetTableNames(cbTables.Items); w której chce pobrać nazwy tabel z bazy danych i przekazac je do ComboBoxa.

Bład jaki wyrzuca progarm to SQLConnection property required for this operation .

Czy ma to jakiś związek z wersją bazy MySQL, a mianowicie wersją 5.0?

unit Unit1;
interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DBXpress, StdCtrls, DB, SqlExpr, FMTBcd, ComCtrls;

type
  TForm1 = class(TForm)
    SQLConnection1: TSQLConnection;
    Button1: TButton;
    Label1: TLabel;
    lvTable: TListView;
    Button2: TButton;
    SQLDataSet1: TSQLDataSet;
    ProgressBar1: TProgressBar;
    cbTables: TComboBox;
    procedure Button2Click(Sender: TObject);
    procedure SQLConnection1AfterDisconnect(Sender: TObject);
    procedure SQLConnection1AfterConnect(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
   SQLConnection1.Connected := not(SQLConnection1.Connected);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
 i,j: Integer;
 ColList: TstringList;
 Column: TListColumn;
 ListItem: TListItem;
 Counter: Integer;
begin
 lvTable.Clear;
 SQLDataSet1.Active := True;
 ColList := TStringList.Create;


 try
  SQLDataSet1.GetFieldNames(ColList);
  Progressbar1.Max := ColList.Count;

  for i := 0 to ColList.Count - 1 do
    begin
      Column := lvTable.Columns.Add;
      Column.Caption := ColList.Strings[1];
    end;

 finally
  ColList.Free;
 end;

  SQLDataSet1.Active := False;
end;

procedure TForm1.SQLConnection1AfterConnect(Sender: TObject);
begin
   Label1.Caption := 'Polaczono poprawnie... ';
   SQLConnection1.GetTableNames(cbTables.Items); //linia problemowa
end;

procedure TForm1.SQLConnection1AfterDisconnect(Sender: TObject);
begin
   Label1.Caption := 'Rozlaczono...';
end;

end.

usupełnienie tagów wątku - furious programming

0

Witam!
Po pierwsze sorry, za odgrzanie kotleta. Nie było jednak tu odpowiedzi, a mam ten sam problem.
Przede wszystkim miałem problem z biblioteką libmySQL (i nadal mam) nie może jej wczytać, a wrzuciłem ją do folderu z programem, i System32. Uruchomiłem połączenie zmieniając DriverName na ODBC (zamiast MySQL) i ładnie łączy z bazą MySQL.
Jednak przy wczytywaniu tabeli wyskakuje mi ten sam błąd co autorowi powyższego postu, czyli SQLConnection property required for this operation
Proszę o pomoc.
Aplikację robiłem zgodnie z: Rozdział 17 oraz MySQL w Delphi.

Kod programu to:

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB, Data.SqlExpr, Vcl.StdCtrls,
  Vcl.XPMan, Data.DBXMySQL, Data.DBXPool, Data.DBXSybaseASA, Data.DBXOdbc,
  Vcl.ComCtrls, Data.FMTBcd;

type
  TForm1 = class(TForm)
    Button1: TButton;
    MySQL: TSQLConnection;
    XPManifest1: TXPManifest;
    Label1: TLabel;
    ListView: TListView;
    SQL: TSQLDataSet;
    procedure Button1Click(Sender: TObject);
    procedure AfterConnect(Sender: TObject);
    procedure AfterDisconnect(Sender: TObject);
    procedure OnClose(Sender: TObject; var Action: TCloseAction);
  private
  Connected: Boolean;
  Procedure LoadTable;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.AfterConnect(Sender: TObject);
begin
Label1.Caption:='Połączyło cię draniu';
LoadTable;
end;

procedure TForm1.AfterDisconnect(Sender: TObject);
begin
Label1.Caption:='Rozłączony rześ';
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if MySQL.Connected then
  begin
    MySQL.Connected:=False;
    Button1.Caption:='POŁĄCZ';
  end
  else
  begin
    MySQL.Connected:=True;
    Button1.Caption:='ROZŁĄCZ';
  end;

end;

procedure TForm1.OnClose(Sender: TObject; var Action: TCloseAction);
begin
MySQL.Connected:=False;
end;

procedure Tform1.LoadTable;
var
i: integer;
ListItem: TListItem;
begin
ListView.Items.Clear;
SQL.CommandText:='select * from dane';
SQL.Open;
for i  := 1 to SQL.RecordCount do
  begin
     ListItem:=ListView.Items.Add;
     ListItem.SubItems.Add(SQL.FieldValues['imie']);
     ListItem.SubItems.Add(SQL.FieldValues['nazwisko']);
     ListItem.SubItems.Add(SQL.FieldValues['data_ur']);
     SQL.Next;
  end;
  SQL.Close;
end;

end.

Z góry dzięki za wszelaką pomoc.

0

nie wiem jak jest w wersjach Delphi nowszych od D2010 , ale pod D2010 DBXpress nie chciał mi się połączyć z MYSQL w wersji 5.xx i dopiero ZeosLib poradził sobie

0

Wersja Delphi 7, Delphi 2005 i RAD Stidio XE6 - na takich próbowałem, szukając rozwiązania problemu, łącznie ze zmianą servera MySQL na 4.X. Jak nie Unable to load libMySQL.dll, to problem z dbexpmysql.dll, a jak nie to to jeszcze coś innego lub ostatecznie to co w poście wyżej. Wybierając Driver MySQL nawet nie łączy, ODBC łączy ale nie wczytuje tabel. Spróbuję jeszcze trochę z tym powalczyć.

1 użytkowników online, w tym zalogowanych: 0, gości: 1