CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Podłączanie bazy danych MySQL do Fast Report
Strona 1 z 1

Podłączanie bazy danych MySQL do Fast Report

Nowy postNapisane: czwartek, 7 lutego 2013, 13:00
przez duf
Witam, czy znajdę tu na forum kogoś z doświadczeniem w tworzeniu raportu w FR z zastosowaniem bazy danych? Próbuję podpiąć bazę danych MySQL do FR ale bez rezultatu.

Re: Podłączanie bazy danych MySQL do Fast Report

Nowy postNapisane: czwartek, 7 lutego 2013, 16:00
przez Mironas
Użyj komponentów:
frDBDataSet
- właściwość DataSet - ustaw na swój DataSet skojarzony z tabelą
frReeport
- właściwość DataSet - ustaw na 'frDBDataSet'

Dwuklik na 'frReeport' otwiera edytor wydruku. Gotowy wzór trzeba zapisać do pliku '*.frf'
Na pustej stronie umieszczasz sekcje - ikona 'Insert band'
- Raport title (nagłówek raportu)
- Raport header (nagłówki kolumn)
- Master data (rekordy tabeli)
W każdej sekcji umieszczasz pola tekstowe (memo) z odpowiednią treścią. Najważniejsze to te na 'Master data'. Przy jego dodawaniu w oknie 'Band data source' wybierasz 'Form1.frDBDataSet1'. Potem z dolnej części okna 'Insert data field' przeciągasz myszką pola na 'Master data'.
Zapisujesz, odpalasz i powinno działać.

Podgląd wydruku w programie:
KOD cpp:     UKRYJ  
  frReport1->LoadFromFile("C:\\NazwaRaportu.frf");
  frReport1->ShowReport();
 

Re: Podłączanie bazy danych MySQL do Fast Report

Nowy postNapisane: czwartek, 7 lutego 2013, 18:53
przez duf
Dzięki Mironas wreszcie jakieś konkrety. Przyznam, że w połowie już miałem wykonane kroki o których piszesz ale napisałeś coś czego nie robiłem i może tu jest pies pogrzebany.
Mironas napisał(a):Przy jego dodawaniu w oknie 'Band data source' wybierasz 'Form1.frDBDataSet1'.

Nie widzę takiej opcji przy dodaniu memo na MasterData poniżej jest podgląd co pojawia się po dodaniu memo
Gdybyś mógł raz jeszcze wyjaśnić swój opis:
Mironas napisał(a):Potem z dolnej części okna 'Insert data field' przeciągasz myszką pola na 'Master data'.

to będzie już super. Na razie wciskam podziękowania i czekam na odpowiedź. Dzięki.

Re: Podłączanie bazy danych MySQL do Fast Report

Nowy postNapisane: piątek, 8 lutego 2013, 11:22
przez Mironas
duf napisał(a):
Mironas napisał(a):Przy jego dodawaniu w oknie 'Band data source' wybierasz 'Form1.frDBDataSet1'.

Nie widzę takiej opcji przy dodaniu memo na MasterData


Nie przy dodaniu memo na MasterData ale przy dodaniu MasterData na stronę. Być może u Ciebie będzie inaczej bo z tego co widzę masz inną wersję FR. Ja opisywałem na przykładzie wersji 2.5 z BCB6.

U mnie trzeba dla sekcji MasterData ustawić właściwość DataSource na 'Form1.frDBDataSet1' (albo na inny TfrDBDataSet). Robi się to właśnie w oknie 'Band data source' w momencie dodawania sekcji na stronę lub później w inspektorze obiektów.

Re: Podłączanie bazy danych MySQL do Fast Report

Nowy postNapisane: piątek, 8 lutego 2013, 14:31
przez duf
No dobrze. Myślę, że ustawiłem prawidłowo a jak tworzyć zapytania do bazy SQL? W FR czy w programie głównym?

Re: Podłączanie bazy danych MySQL do Fast Report

Nowy postNapisane: piątek, 8 lutego 2013, 14:49
przez Mironas
W programie.
Tak jak pisałem: Komponent frDBDataSet, właściwość DataSet ustawiasz na swój DataSet (czyli na ten komponent w którym masz zapytanie SQL np do wyświetlenia tabeli w DBGrid).

Re: Podłączanie bazy danych MySQL do Fast Report

Nowy postNapisane: piątek, 8 lutego 2013, 15:17
przez duf
frDBDataSet->DataSet mam ustawiony na ClientDataSet chociaż mam też możliwość ustawienia na SQLQuery1. W frDBDataSet mam też właściwość DataSource, która jest pusta ale można ją ustawić na DataSource1 ale wtedy znika ustawienie w DataSet :D
Czyli kod w programie głównym powinien wyglądać tak:

KOD cpp:     UKRYJ  
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  SQLQuery1->CommandText = "SELECT NAZWA FROM INTR";
  frReport1->LoadFromFile("C:\\NazwaRaportu.frf");
  frReport1->ShowReport();
}

Re: Podłączanie bazy danych MySQL do Fast Report

Nowy postNapisane: piątek, 8 lutego 2013, 15:29
przez Mironas
Podstawowe pytanie: Czy Ty już otworzyłeś tabelę w swoim programie? Np czy wyświetlacz ją w DBGrid?

Jeśli TAK to jakich używasz komponentów? Bo po ClientDataSet1 to chyba nie łączysz się z MySQL.

Jeśli NIE to najpierw połączyć z bazą danych, otwórz tabele, wyświetl ją w DBGrid, modyfikuj dane a dopiero potem jak już będzie to działać to zrób pierwszy raport.

Re: Podłączanie bazy danych MySQL do Fast Report

Nowy postNapisane: piątek, 8 lutego 2013, 15:57
przez duf
Mironas napisał(a):Podstawowe pytanie: Czy Ty już otworzyłeś tabelę w swoim programie? Np czy wyświetlacz ją w DBGrid?

Jeśli TAK to jakich używasz komponentów? Bo po ClientDataSet1 to chyba nie łączysz się z MySQL.

Jeśli NIE to najpierw połączyć z bazą danych, otwórz tabele, wyświetl ją w DBGrid, modyfikuj dane a dopiero potem jak już będzie to działać to zrób pierwszy raport.

W zdarzeniu oncklick łączę się z tabelą. Wynik łączenia widać również w DBGrid. Raport pokazuje mi 3 strony (bo tyle mam rekordów) ale nie ma nic w memo.
KOD cpp:     UKRYJ  
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  SQLQuery1->CommandText = "SELECT NAZWA FROM INTR";
  ClientDataSet1->Active = true;

  //frReport1->LoadFromFile("C:\\NazwaRaportu.frf");
  //frReport1->ShowReport();
}

Re: Podłączanie bazy danych MySQL do Fast Report

Nowy postNapisane: piątek, 8 lutego 2013, 16:38
przez Mironas
duf napisał(a):[...]ale nie ma nic w memo.

Bo w MEMO musisz umieścić odwołanie do danego pola bazy danych.

Myślę że zamiast
KOD cpp:     UKRYJ  
SQLQuery1->CommandText = "SELECT NAZWA FROM INTR";

Powinieneś wpisać zapytanie do właściwości SQLQuery1->SQL (w inspektorze obiektów), Potem dwuklik na SQLQuery1 i 'Add all fields'.
Potem otwierasz FR, dwuklik na MEMO i za pomocą właściwej ikony wybierasz odpowiednie pole. U mnie (FR 2.5) to jest ikona opisana 'Insert data field'. Na Twoich zrzutach nie widzę podobnej ikony, może jest to ikon '#'. Na koniec treść memo powinna wyglądać mniej więcej tak:
[Form1.SQLQuery1."NAZWA_POLA"]

Do czego w twoim przykładzie służy ClientDataSet1?

Re: Podłączanie bazy danych MySQL do Fast Report

Nowy postNapisane: piątek, 8 lutego 2013, 18:14
przez duf
Mironas napisał(a):Do czego w twoim przykładzie służy ClientDataSet1?

Nigdy się nad tym nie zastanawiałem. Gdzieś na forum znalazłem układ komponentów do prawidłowego połączenia z bazą MySQL i tak zostało.
Bazę danych udało mi się podłączyć do FR :x ale nie widać wyników w raporcie :cry: Czy trzeba programować zdarzenia OnCheckEOF w komponencie TfrxDBDataset?