Połączenie BCB 6 i MySQL

0

Witam,
wiem, że wiele wątków było na forum, ale niestety nie znalazłam odpowiedzi na moje pytanie.
Na forma wrzuciłam następujące komponenty do łączenia z bazą danych MySQL:

  1. ADOConnection
  2. ADOTable
  3. ADOQuery
    Używam ODBC (ściągnięte ze strony mysql'a), sprawdziłam połączenie we właściwościach łącza danych i powiodło się, jednak kod zamieszczony poniżej zwraca następujące błędy (wskazują one na zawartość catch):

E2303 Type name expected
E2377 If statement missing )

Proszę o podpowiedź, co zrobiłam źle i jak to naprawić.

#include <vcl.h>
#include <stdlib.h>
#pragma hdrstop

#include "Unit1.h"
#include "Unit2.h"

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
Tlogowanie *logowanie;
//---------------------------------------------------------------------------
__fastcall Tlogowanie::Tlogowanie(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall Tlogowanie::zaloguj_pClick(TObject *Sender)
{
       ADOQuery1->SQL->Clear();
       ADOQuery1->SQL->Text="SELECT imie_o, nazwisko_o, stanowisko_o, haslo_o FROM osoba WHERE imie_o = '"+imie_e->Text+"' AND haslo_o = '"+haslo_e->Text+"' AND activ_o=1";
        try
        {
                ADOQuery1->Open();
                String stanowisko = ADOQuery1->FieldByName("stanowisko_o")->AsString;
                stanowisko = stanowisko.Trim();

                if (stanowisko=="Administrator")
                {
                        admin->Show();
                        
                }
                else
                        ShowMessage("Podałeś nieprawidłowe dane lub nie masz uprawnień");
        }
         catch (Exception &E)
  {
        if ( !dynamic_cast<ENoResultSet*>(&E) )
        throw;
  }
}

Z góry dziękuję i pozdrawiam

0

Wklej proszę zawartość plików Unit1.h oraz Unit2.h

Poza tym, możesz zerknąć tutuaj : ( podobny problem )

http://www.tek-tips.com/viewthread.cfm?qid=1515338&page=3

http://forums.devshed.com/c-programming-42/bcb-6-0-e2303-type-name-expected-65945.html

0

Dziękuję za szybką odpowiedź, poniżej przesyłam wymienione wcześniej pliki:
Unit1.h


#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
#include <ADODB.hpp>
#include <DB.hpp>
#include <IBDatabase.hpp>
//---------------------------------------------------------------------------
class Tlogowanie : public TForm
{
__published:	// IDE-managed Components
        TPanel *logowanie_pa;
        TLabel *imie_lb;
        TLabel *haslo_lb;
        TEdit *imie_e;
        TEdit *haslo_e;
        TLabel *stanowisko_lb;
        TComboBox *stanowisko_cb;
        TPanel *zaloguj_p;
        TADOConnection *ADOConnection1;
        TADOQuery *ADOQuery1;
        TADOTable *ADOTable1;
        void __fastcall zaloguj_pClick(TObject *Sender);
private:	// User declarations
public:		// User declarations
        __fastcall Tlogowanie(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE Tlogowanie *logowanie;
//---------------------------------------------------------------------------
#endif 

Unit2.h

//---------------------------------------------------------------------------

#ifndef Unit2H
#define Unit2H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
#include <jpeg.hpp>
//---------------------------------------------------------------------------
class Tadmin : public TForm
{
__published:	// IDE-managed Components
        TPanel *admin_pa;
        TPanel *pocz_przy_p;
        TPanel *poczt_wy_p;
        TPanel *prac_p;
        TImage *pocz_wy_i;
        TImage *prac_i;
        TLabel *prac_l;
        TLabel *poczt_wy_l;
        TLabel *poczt_przy_l;
        TImage *pocz_przy_i;
        TPanel *dzialy_p;
        TLabel *dzialy_l;
        TImage *dzialy_i;
        void __fastcall pocz_przy_pClick(TObject *Sender);
        void __fastcall poczt_przy_lClick(TObject *Sender);
        void __fastcall poczt_wy_pClick(TObject *Sender);
        void __fastcall poczt_wy_lClick(TObject *Sender);
        void __fastcall prac_pClick(TObject *Sender);
        void __fastcall prac_lClick(TObject *Sender);
        void __fastcall dzialy_pClick(TObject *Sender);
private:	// User declarations
public:		// User declarations
        __fastcall Tadmin(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE Tadmin *admin;
//---------------------------------------------------------------------------
#endif 

Dodam tylko, że przy kompilacji programu pozbawionego dostępu do bazy, wszystko się ładnie kompiluje.

0

Witam.
Proszę poczytać o technologii ADO i zastosowaniu tego komponentu w poniższym artykule:
Oracle 10g i Delphi 7. Programowanie baz danych

0

Witam,
co prawda znalazłam obejście, ale nadal męczy mnie problem. Otóż zmieniłam komponenty z ADO na DBExpress. No i oczywiście nie obyło się bez komplikacji. W momencie konfiguracji SQLConnection i ustawienia go na true, wyskakuje błąd Unable to Load libmysql.dll. Niezbędne biblioteki dorzuciłam do katalogu system32 oraz do katalogu projektu. Mimo to, nadal błąd się pojawia. Tak jak mówiłam, udało mi się go raczej chwilowo obejść niż rozwiązać. Zainstalowałam sobie Buildera XE i przy takich samych ustawieniach programu, błąd nie wyskakuje. Czy ktoś ma może pomysł, jaki jest powód błędu?
Proszę o pomoc
Pozdrawiam

0

Czy ma kolega tak ustawione? jak na załączniku? Oczywiście trzeba wstawić właściwą nazwę biblioteki "mysql.dll"

0

Po pierwsze to koleżanka a nie kolega:)
Ustawione mam tak, jak na screenie w załączniku.
W momencie zmiany ustawień na "Twoje" wyskakuje mi błąd: "Unable to Load mysql-lib.dll". Niestety tej biblioteki nie udało mi się znaleźć.
Dzięki za pierwszy odzew i proszę o kolejne.
Pozdrawiam

0

Przepraszam za "kolegę". Proszę o wybaczenie mojego przeoczenia. Ta biblioteka chyba powinna być "dbexpmysql.dll" lub "libmysql.dll". Mam pytanie: czy ma Pani zainstalowany pakiet MYSQL czy chociażby zarejestrowaną przez system bibliotekę libmysql.dll? Być może nie widzi jej system?

0

W folderze zainstalowanego BCB powinien być folder dbExpress. W tym folderze plik dbxdrivers.ini. Proszę go otworzyć choćby w notatniku. U mnie wygląda on m.in. tak:

[MYSQL]
GetDriverFunc=getSQLDriverMYSQL
LibraryName=dbxmys30.dll
VendorLib=LIBMYSQL.dll
BlobSize=-1
Database=DBNAME
ErrorResourceFile=
HostName=ServerName
LocaleCode=0000
Password=password
User_Name=user
Compressed=False
Encrypted=False

Dla Pani ważna będzie chyba linijka: LibraryName=dbxmys30.dll
odpowiedni wpis ?"dbxmys30.dll"? powinien pomóc. Tylko proszę nie zmieniać tego pliku
dbxdrivers.ini.

0

Tak, MySQL jest zainstalowany.
U mnie plik dbxdrivers.ini zawiera coś takiego:
[MySQL]
GetDriverFunc=getSQLDriverMYSQL
LibraryName=dbexpmysql.dll
VendorLib=libmysql.dll
HostName=ServerName
Database=DBNAME
User_Name=user
Password=password
BlobSize=-1
ErrorResourceFile=
LocaleCode=0000

Do system32 i do katalogu projektu dodałam dodatkowo pliki:dbxmys.dll, libmySQL.dll, libmysql_d.dll oraz libmysql.dll. Też to nic nie dało.
P.S. Proszę, tylko nie na Pani :)

0

To powielanie miejsc plików *.dll nie jest chyba potrzebne. Dostęp do tych plików powinien być realizowany przez zmienne systemowe.
Proszę spróbować ustawień wg poniższego załącznika.

110224212908_3.jpg

Większość tych ustawień tworzy się automatycznie. Bibliotekę dbexpmysql.dll trzeba dopisac ręcznie. Ja dawno nie pracowałem na MySql. Jutro ją zainstaluję i spróbuję coś jeszcze doradzić.

0

W VendorLib powinna być ustawiona pełna ścieżka do pliku. U mnie wygląda tak: D:\xampp\mysql\bin\libmysql.dll

0

Witam, ale ja mam takie ustawienia:(
W załączniku obrazek, ja to u mnie wygląda.

0

Ustawienia wyglądają na prawidłowe. W ostatniej linijce ustawień powinna być chyba podana pełna ściezka do zainstalowanej biblioteki libmysql.dll. U mnie zgłasza się prawidłowo. A może opiszesz jaki wyświetla się komunikat o błędzie?

0

W załączniku wysyłam wyskakujący błąd.

0

Moje ustawienia są w załączniku i błędu nie ma. Zwróć uwagę na ostatnią linijkę. Podstawowa sprawa to poprawnie zainstalowana MySQL i pełna ścieżka dostępu do biblioteki libmysql.dll jaka występuje u Ciebie.

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