Przejdź do głównej zawartości

Show SQL Query

Jak wyświetlić zapytanie SQL w swojej aplikacji, na którym oparty jest raport?
Trzeba skorzystać z RAS SDK, gdyż sam Crystal Reports Engine tego nie umożliwia.

Oto kod w C#:

// Declarations
// CrystalDecisions.CrystalReports.Engine.ReportDocument boReportDocument = new CrystalDecisions.CrystalReports.Engine.ReportDocument();
CrystalDecisions.ReportAppServer.ClientDoc.ISCDReportClientDocument boReportClientDocument;
CrystalDecisions.ReportAppServer.Controllers.RowsetController boRowsetController;
CrystalDecisions.ReportAppServer.DataDefModel.ISCRGroupPath boGroupPath = null;
string temp = "";

// Load the report from the application directory
boReportDocument.Load(filename);
// Set database logon
boReportDocument.SetDatabaseLogon(user, password);

// Access the ReportClientDocument in the ReportDocument (EROM bridge)
// Note this is available without a dedicated RAS with SP2 for XI R2
boReportClientDocument = boReportDocument.ReportClientDocument;

CrystalDecisions.ReportAppServer.DataDefModel.ConnectionInfo rcConnectionInfo = boReportClientDocument.DatabaseController.GetConnectionInfos(null)[0].Clone(true);
CrystalDecisions.ReportAppServer.DataDefModel.PropertyBag rcLogonInfo = (CrystalDecisions.ReportAppServer.DataDefModel.PropertyBag)rcConnectionInfo.Attributes["QE_LogonProperties"];

// use the RowsetController to get the SQL query
// Note: If a report has parameters they must be supplied before getting the
// SQL query.
boRowsetController = boReportClientDocument.RowsetController;
boGroupPath = new CrystalDecisions.ReportAppServer.DataDefModel.GroupPath();

string sql = boRowsetController.GetSQLStatement(boGroupPath, out temp);

Komentarze

Anonimowy pisze…
Witam.
Czy w jakiejkolwiek wersji Crystala jest możliwość wyciągnięcia zapytania SQL za pomocą C#, poprawienie tego zapytania i ponowne wrzucenie go do raportu?
Marcin pisze…
Próbowałem coś takiego kiedyś zrobić przy okazji pisania biblioteki cscShowSQLQuery.dll, ale nie znalazłem takiej możliwości.
Można natomiast w C# pobrać zapytanie filtrujące (select formula record) i je zmienić. Tą metodę można wykorzystać do zmiany filtrowania w locie.
Anonimowy pisze…
WOW Jaka szybka odpowiedź :)
A gdzie można pobrać cscShowSQLQuery.dll, bo z posta, pod który jest podpięta ta biblioteka to nie mogę.
Marcin pisze…
Tymczasowo tutaj:
http://goo.gl/KBiFk
Anonimowy pisze…
Wielkie dzięki :)
Anonimowy pisze…
Jeszcze jakbyś mi napisał, gdzie ikonka z tym dodatkiem powinna się pojawić to by było super :) Mam Crystala 11R2
Marcin pisze…
Możliwość podczepiania add-in dodano dopiero w wersji CR 2008.
Unknown pisze…
Super tego właśnie szukałem

Popularne posty z tego bloga

Konwersja daty w CDN Optima

Crystal Reports jest bardzo często zintegrowany z popularnymi aplikacjami. Przykładem jest system CDN Optima . Początkujących użytkownikom sprawiają kolumny z datą, bo data nie jest zapisana jako datetime lecz jako liczba. Otóż data w CDN Optima zapisana jest w formacie Clarion, czyli liczba dni, które upłynęły od daty 1800-12-28 . (Czy ktoś wie co to za data w historii?) Dlatego jeśli chcemy użyć takiego pola na raporcie, pierwsze co powinniśmy zrobić to dokonać konwersji liczby na datę. W innym przypadku Crystal Reports nie będzie wiedział, że jest to data i żadne formatowanie dat, grupowanie po okresach nie będzie działać. Formuła do konwersji formatu Clarion na datę : Jeśli mamy wiele takich pól to najlepiej utworzyć własną funkcję:

Koszmar z limitem

Witajcie po dłuższej przerwie. Jakiś czas temu prowadziłem szkolenie w firmie i z jakiegoś powodu nie chciały nam się wyświetlać się wszystkie tabele z ich bazy danych. Na początku myślałem, że to kwestia uprawnień ale okazało się, że użytkownicy mają prawa do odczytu wszystkich tabel a problem wynika z czegoś innego... Okazało się, że winowajcą jest sam Crystal Reports, który ma ustawiony limit(!) na ilość obiektów pobieranych elementów ze struktury bazy danych, czyli tabel, widoków i procedur składowanych razem wziętych. Domyślnie jest to  8000 . Większość baz danych nie przekracza tego limitu, więc możecie spać spokojnie, ale przy większym systemie może nadejść koszmar, który zerwie Was na równe nogi. Pamiętajcie wówczas o moim blogu -  ten limit można zmienić (w praktyce podwyższyć). Niestety nie ma do tego opcji w Crystal Reports, trzeba pogrzebać w rejestrach windows: Zamykamy Crystal Reports Uruchamiamy aplikację Edytor rejestru , z linii poleceń: ...

Wyświetlanie QRCode

Ostatnio coraz większą popularnością cieszą się tzw. foto-kody, czyli dwuwymiarowe kody kreskowe. Umożliwiają one przechowywanie zakodowanych informacji, które możemy odczytać za pomocą czytnika kodów kreskowych lub telefonem komórkowym dzięki specjalnej aplikacji. W fotokodzie może być zakodowany nie tylko tekst lecz adres URL, wizytówka vcard lub wiadomość sms. Jednym z najbardziej popularnych standardów jest QR Code . Crystal Reports nie posiada niestety wbudowanej obsługi kodów dwuwymiarowych.  Przedstawię wam prosty sposób na rozwiązanie tego problemu, bez potrzeby kupowania dodatkowych bibliotek. Otóż Crystal Reports umożliwia wstawienie obrazka graficznego spod wskazanego adresu url. Natomiast Google udostępnia usługę do generowania kodów kreskowych o nazwie Google Chart API . Musimy tylko przygotować odpowiedni url i w rezultacie otrzymamy obrazek graficzny w formacie PNG. Przykładowo, aby zakodować tekst Crystal Reports wystarczy wpisać do przeglą...