Komponenty do połączenia z MySQL

Problemy związane z tworzeniem i zarządzaniem programami bazo-danowymi.
Regulamin działu


Zadając pytania dotyczące baz danych należy podawać szczegółowe informacje o bazie danych nad którą się pracuje, czyli:

  • Rodzaj serwera bazodanowego: MySql, MSSQL, Oracle itp.
  • Wersja bazy danych
  • Technologia bazodanowa używana w programie: ADO, DbExpress, InterBase
  • Komponenty użyte do zestawienia połączenia: ADOConnection, SqlConnection
  • Sposób zestawienia komponentów bazodanowych np. DataSet - DataSource - DbGrid lub DataSet - DataSetProvider - ClientDataSet - DataSource - DbGrid
  • Jeżeli używane były biblioteki innych firm niż Borland, CodeGeer i Embarcadero proszę podać ich nazwy, numer wersji i adres źródła.

Komponenty do połączenia z MySQL

Nowy postprzez Bert1223 » wtorek, 3 listopada 2009, 13:31

Witam, proszę o pomoc chciałbym połączyć się z bazą MySQL na innym serwerze używam 'Wersja klienta MySQL: 5.0.51a'
Czytałem, że do połączenia trzeba korzystać z komponentów, pobrałem ZeosLib próbuję dodać komponent -- Componetn -> Instal Pack... wyszukuje w folderze cbuilder6 pliku o rozszerzeniu *.dpl ale niestety nie ma. Prosiłbym o pomoc w zainstalowaniu, podaniu linku bo może mam uszkodzone pliki ZeosLib
Avatar użytkownika
Bert1223
Bladawiec
Bladawiec
 
Posty: 45
Dołączył(a): czwartek, 15 października 2009, 02:41
Podziękował : 6
Otrzymał podziękowań: 0
    NieznanyNieznana

Re: Komponenty do połączenia z MySQL

Nowy postprzez Bert1223 » środa, 4 listopada 2009, 22:20

Temat można uważać za zamknięty. Zainstalowałem CodeGear C++ Builder.
dbExpress jest już dodany prosiłbym o przykłady w jaki sposób mogę dodawać, usuwać i pobierać dane z bazy danych.
Avatar użytkownika
Bert1223
Bladawiec
Bladawiec
 
Posty: 45
Dołączył(a): czwartek, 15 października 2009, 02:41
Podziękował : 6
Otrzymał podziękowań: 0
    NieznanyNieznana

Re: Komponenty do połączenia z MySQL

Nowy postprzez banita » czwartek, 5 listopada 2009, 16:30

to chyba jakis zart. nie masz najmniejszych podstaw wiedzy odnosnie pracy w bazami danych w bibliotece VCL. musisz je najpierw zdobyc a pozniej w racie problemow zglaszac sie na forum.
Avatar użytkownika
banita
Kreacjusz
Kreacjusz
 
Posty: 283
Dołączył(a): poniedziałek, 28 lipca 2008, 20:07
Podziękował : 1
Otrzymał podziękowań: 18
System operacyjny: Windows 7 Professional
Kompilator: C++Builder 2010 Update 5,
Delphi 2010 Update 5,
NetBeans 6.9(MinGw + Qt),
Visual Studio 2008 + Qt
Gadu Gadu: 0
    NieznanyNieznana

Re: Komponenty do połączenia z MySQL

Nowy postprzez Bert1223 » czwartek, 5 listopada 2009, 17:51

Kilka słów w obronie co do baz danych mam pojęciem. Nie wiem w jaki sposób wydawać polecenia.
Z tego co wyczytałem, do połączenia używam TSQLConnection ustawiam wszystkie parametry i działa.
Do dodawania i usuwania rekordów używam:
Kod: Zaznacz cały
// TSQLDataSet = SQL // dla jasności

AnsiString insert= "INSERT INTO dystrybutor SET dystrybutor='";
insert += Form1->CBDys->Text;
insert += "'";

Form1->SQL->CommandText = insert;
if(Form1->SQL->ExecSQL(True) == 1)
{
   ShowMessage("Nowy dystrybutor został dodany!");
}

I wszystko działa OK. Natomiast co do SELECT, mam problem używam:
Kod: Zaznacz cały
   AnsiString odczyt;
   SQL->CommandText = "SELECT * FROM dystrybutor WHERE id='15'";
   odczyt = SQL->FieldValues["dystrybutor"];
   SQL->ExecSQL(True);

Komunikat o błędzie "Project Project1.exe raised exception class EDatabaseError with message 'SQL: Field 'dustrybutor' not found'"
Avatar użytkownika
Bert1223
Bladawiec
Bladawiec
 
Posty: 45
Dołączył(a): czwartek, 15 października 2009, 02:41
Podziękował : 6
Otrzymał podziękowań: 0
    NieznanyNieznana

Re: Komponenty do połączenia z MySQL

Nowy postprzez banita » czwartek, 5 listopada 2009, 18:05

do pobierania danych sluzy metoda Open a nie execute
Avatar użytkownika
banita
Kreacjusz
Kreacjusz
 
Posty: 283
Dołączył(a): poniedziałek, 28 lipca 2008, 20:07
Podziękował : 1
Otrzymał podziękowań: 18
System operacyjny: Windows 7 Professional
Kompilator: C++Builder 2010 Update 5,
Delphi 2010 Update 5,
NetBeans 6.9(MinGw + Qt),
Visual Studio 2008 + Qt
Gadu Gadu: 0
    NieznanyNieznana

Re: Komponenty do połączenia z MySQL

Nowy postprzez Bert1223 » czwartek, 5 listopada 2009, 22:00

Kod: Zaznacz cały
SQL->CommandText = "SELECT * FROM dystrybutor WHERE id='15'";
SQL->Open();


Cały czas wyskakują błędy. Jesteś w stanie napisać kod pobierający dane z całej tabeli lub z użyciem WHERE?
Avatar użytkownika
Bert1223
Bladawiec
Bladawiec
 
Posty: 45
Dołączył(a): czwartek, 15 października 2009, 02:41
Podziękował : 6
Otrzymał podziękowań: 0
    NieznanyNieznana

Re: Komponenty do połączenia z MySQL

Nowy postprzez banita » czwartek, 5 listopada 2009, 23:15

napisz jaka wersja IDE jakich komponentow uzywasz i napisze ci ten kod ale wtedy niczego sie nie nauczysz.
Avatar użytkownika
banita
Kreacjusz
Kreacjusz
 
Posty: 283
Dołączył(a): poniedziałek, 28 lipca 2008, 20:07
Podziękował : 1
Otrzymał podziękowań: 18
System operacyjny: Windows 7 Professional
Kompilator: C++Builder 2010 Update 5,
Delphi 2010 Update 5,
NetBeans 6.9(MinGw + Qt),
Visual Studio 2008 + Qt
Gadu Gadu: 0
    NieznanyNieznana

Re: Komponenty do połączenia z MySQL

Nowy postprzez Bert1223 » piątek, 6 listopada 2009, 14:49

Używam CodeGear™ C++Builder 2007, co do komponentów to dbExpress do łączenia TSQLConnection o nazwie MySQL sprawnego i działającego do zapytań typu insert i delete używam TSQLDataSet tak jak w poście powyżej, ale nie wiem jak mam pobrać np pola id, name, z tablicy user?
Avatar użytkownika
Bert1223
Bladawiec
Bladawiec
 
Posty: 45
Dołączył(a): czwartek, 15 października 2009, 02:41
Podziękował : 6
Otrzymał podziękowań: 0
    NieznanyNieznana

Re: Komponenty do połączenia z MySQL

Nowy postprzez banita » sobota, 7 listopada 2009, 00:54

w komponencie TSQLDataSet podpinasz polaczenie z baza. W ComamndText wpisujesz zapytanie. wywolujesz metode Open() i dostajesz wynik zapytania. niestety nie mozesz tego komponentu podpiac do grida za posrednictwem datasource. do tego celu musisz wykozystac komponent TSimpleDataSet(ta sama zakladka). tam o ile pamietam odwolujesz sie tak:

TSimpleDataSet* temp = ...
temp->DataSet->CommandText = ....

metoda Open otwierasz kanal transmisyjny z baza i dostajesz rekordy z zapytania.
Avatar użytkownika
banita
Kreacjusz
Kreacjusz
 
Posty: 283
Dołączył(a): poniedziałek, 28 lipca 2008, 20:07
Podziękował : 1
Otrzymał podziękowań: 18
System operacyjny: Windows 7 Professional
Kompilator: C++Builder 2010 Update 5,
Delphi 2010 Update 5,
NetBeans 6.9(MinGw + Qt),
Visual Studio 2008 + Qt
Gadu Gadu: 0
    NieznanyNieznana

Re: Komponenty do połączenia z MySQL

Nowy postprzez Bert1223 » niedziela, 8 listopada 2009, 16:20

banit: Jak dla mnie zbyt mało szczegółów, żeby to odpalić.
Użyłem TSQLQuery z nazwą SQLQ podłączony do MySQL.
Kod: Zaznacz cały
SQLQ->CommandText = "SELECT spr FROM dystrybutor WHERE id='18'";
SQLQ->Open();
AnsiString odczyt = "";
odczyt = SQLQ->FieldValues["spr"];
ShowMessage(odczyt);

Odczytuje wartość 2 czyli zgadza się.

Z gwiazdką nie działa
Kod: Zaznacz cały
SQLQ->CommandText = "SELECT * FROM dystrybutor WHERE id='18'";

Nie działa
Kod: Zaznacz cały
SQLQ->CommandText = "SELECT spr, dystrybutor FROM dystrybutor WHERE id='18'";


Trochę to bez sensu do każdej kolumny z tabeli pisać osobne zapytanie.
Kolejnym problemem jest pobieranie pola typu blob czy tetx.
Co prawda zapytanie zwróciło liczbę 2, ale przy zamianie spr na dystrybutor typu text, zapytanie zwraca NULL

Banit proszę napisz trochę bardziej szczegółowo jak połączyć się przy pomocy TSQLDataSet, bo np ten typ nie ma funkcji commandtext
Avatar użytkownika
Bert1223
Bladawiec
Bladawiec
 
Posty: 45
Dołączył(a): czwartek, 15 października 2009, 02:41
Podziękował : 6
Otrzymał podziękowań: 0
    NieznanyNieznana

Re: Komponenty do połączenia z MySQL

Nowy postprzez banita » niedziela, 8 listopada 2009, 19:01

po wykonaniu metody Open dane odbiera sie tak:

metoda next przechodzi do kolejnego rekordu. close zamyka zbior.

query->FieldByName("nazwa_kolumny")->As... <----- tutaj odpowiedni typ: AsInteger, AsString itd...
Avatar użytkownika
banita
Kreacjusz
Kreacjusz
 
Posty: 283
Dołączył(a): poniedziałek, 28 lipca 2008, 20:07
Podziękował : 1
Otrzymał podziękowań: 18
System operacyjny: Windows 7 Professional
Kompilator: C++Builder 2010 Update 5,
Delphi 2010 Update 5,
NetBeans 6.9(MinGw + Qt),
Visual Studio 2008 + Qt
Gadu Gadu: 0
    NieznanyNieznana

Re: Komponenty do połączenia z MySQL

Nowy postprzez Bert1223 » niedziela, 8 listopada 2009, 20:56

Próbuję cały czas z TSQLQuery pod nazwą SQLQ:

Dostaję błąd "Could no find a match for 'operator AnsiString::=(TField *)'"
Kod: Zaznacz cały
   SQLQ->CommandText = "SELECT dystrybutor FROM dystrybutor WHERE id='20'";
   SQLQ->Open();
   AnsiString odczyt = "";
   odczyt = SQLQ->FieldByName("dystrybutor");


Po zmianie kodu dostaję dostaję cały czas NULL, a nie np ABC Data tak jak w rekordzie.
Kod: Zaznacz cały
   odczyt = SQLQ->FieldByName("dystrybutor")->AsString;


W dalszej części próbowałem z: TSimpleDataSet pod nazwą SDS. W efekcie dostaję komunikat: "Project1.exe raised exception class EOleException with message "Katastrofalny błąd". Fajnie, że ten komunikat jest po polsku ale skąd mam wiedzieć czego dotyczy?"
Kod: Zaznacz cały
   SDS->DataSet->CommandText = "SELECT dystrybutor FROM dystrybutor";
   SDS->Open();
   // SDS->FieldValues["dystrybutor"];
Avatar użytkownika
Bert1223
Bladawiec
Bladawiec
 
Posty: 45
Dołączył(a): czwartek, 15 października 2009, 02:41
Podziękował : 6
Otrzymał podziękowań: 0
    NieznanyNieznana

Re: Komponenty do połączenia z MySQL

Nowy postprzez banita » poniedziałek, 9 listopada 2009, 18:32

wyciaganie danych za pomoca TSQLQuery:

Kod: Zaznacz cały
   TSQLConnection* conn = new TSQLConnection(0);
   conn->ConnectionName = "MySQLConnection";
   conn->DriverName = "MySQL";
   conn->GetDriverFunc = "getSQLDriverMYSQL";
   conn->LibraryName = "dbxmys.dll";
   conn->VendorLib = "libmysql.dll";
   conn->LoginPrompt = false;
   conn->Params->Values["User_Name"] = "xxx";
   conn->Params->Values["Database"] = "yyy";
   conn->Params->Values["Password"] = "zzz";
   conn->Params->Values["HostName"] = "127.0.0.1";

   TSQLQuery* query = new TSQLQuery(0);
   query->SQLConnection = conn;
   query->CommandText = "select * from xyz";
   query->Open();

   if(!query->IsEmpty())
   {
      for(int i(0); i < query->RecordCount; ++i)
      {
         ShowMessage(query->FieldByName("imie")->AsString + ' ' + query->FieldByName("nazwisko")->AsString);
         query->Next();
      }

      query->Close();
   }

   conn->Close();

tutaj mozesz pobrac dane ale nie mozesz ich wyswietlic za pomoca komponentu TDBGrid
aby tego dokonac musisz wykozystac komponent TSimpleDataSet:

Kod: Zaznacz cały
   TSQLConnection* conn = new TSQLConnection(0);
   conn->ConnectionName = "MySQLConnection";
   conn->DriverName = "MySQL";
   conn->GetDriverFunc = "getSQLDriverMYSQL";
   conn->LibraryName = "dbxmys.dll";
   conn->VendorLib = "libmysql.dll";
   conn->LoginPrompt = false;
   conn->Params->Values["User_Name"] = "zzz";
   conn->Params->Values["Database"] = "yyy";
   conn->Params->Values["Password"] = "zzz";
   conn->Params->Values["HostName"] = "127.0.0.1";

   TSimpleDataSet* data_set = new TSimpleDataSet(0);
   data_set->Connection = conn;
   data_set->DataSet->CommandType = ctQuery;
   data_set->DataSet->CommandText = "select * from xyz";
   data_set->Open();

   TDataSource* data_source = new TDataSource(0);

   if(!data_set->IsEmpty())
   {
      data_source->DataSet = data_set;
      GRID->DataSource = data_source;
   }


przyklad pod c++builder 2010, w wersji 2007 moze byc inna nazwa biblioteki dbexpress:
conn->LibraryName = "dbxmys.dll";


przyklad nie uwzglednia obslugi bledow!!!
musisz dołaczyc odpowiednie naglowki albo skozystac z wizualnych komponentow.

Za ten post autor banita otrzymał podziękowanie od:
Lukasz
Avatar użytkownika
banita
Kreacjusz
Kreacjusz
 
Posty: 283
Dołączył(a): poniedziałek, 28 lipca 2008, 20:07
Podziękował : 1
Otrzymał podziękowań: 18
System operacyjny: Windows 7 Professional
Kompilator: C++Builder 2010 Update 5,
Delphi 2010 Update 5,
NetBeans 6.9(MinGw + Qt),
Visual Studio 2008 + Qt
Gadu Gadu: 0
    NieznanyNieznana


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Bazy danych

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 0 gości

cron