![]() |
Datenbank: Firebird • Version: 2.1 • Zugriff über: Fibplus
Reportproblem
Hallo zusammen
in einem Report möchte ich eine zusammenfassung div. Tabellen darstellen. Das Problem ist das die Details immer leer sprich 0 sind.
Delphi-Quellcode:
Wenn ich die abfrage mit IBExport ausführe ist der Datensatz ok:
procedure TDM_member.print_camps_dist_ov(Sender: TObject);
begin with DM_reports.camps do begin close; SelectSQL.Clear; SelectSQL.Text :=('SELECT * FROM CAMPS ORDER BY C_NO'); Open; end; with DM_reports.Default_OV do begin close; SelectSQL.Clear; SelectSQL.Add ('SELECT '+ '(SELECT COUNT( NAME ) FROM HOTEL WHERE (C_NO = ?C_NO)) AS COUNT_OF_HOTEL, '+ '(SELECT COUNT( NAME ) FROM CHURCH WHERE (C_NO = ?C_NO)) AS COUNT_OF_CHURCH, '+ '(SELECT COUNT( NAME ) FROM DOCTOR WHERE (C_NO = ?C_NO)) AS COUNT_OF_DOCTOR, '+ '(SELECT COUNT( NAME ) FROM SCHOOL WHERE (C_NO = ?C_NO)) AS COUNT_OF_SCHOOL, '+ '(SELECT COUNT( NAME ) FROM NURSING_H WHERE (C_NO = ?C_NO)) AS COUNT_OF_NURSING_H, '+ '(SELECT COUNT( NAME ) FROM LAWYER WHERE (C_NO = ?C_NO)) AS COUNT_OF_LAWYER, '+ '(SELECT COUNT( NAME ) FROM HOSPITAL WHERE (C_NO = ?C_NO)) AS COUNT_OF_HOSPITAL, '+ '(SELECT COUNT( NAME ) FROM PUB_S WHERE KIND = ''10'' and C_NO = ?C_NO) AS COUNT_OF_MILITARY, '+ '(SELECT COUNT( NAME ) FROM PUB_S WHERE KIND = ''20'' and C_NO = ?C_NO) AS COUNT_OF_FIRE_BRIGADE, '+ '(SELECT COUNT( NAME ) FROM PUB_S WHERE KIND = ''30'' and C_NO = ?C_NO) AS COUNT_OF_POLICE, '+ '(SELECT COUNT( NAME ) FROM PUB_S WHERE KIND = ''40'' and C_NO = ?C_NO) AS COUNT_OF_PRISON, '+ '(SELECT COUNT( NAME ) FROM PUB_S WHERE KIND = ''50'' and C_NO = ?C_NO) AS COUNT_OF_REFUGEE_CAMP '+ 'FROM CAMPS '+ 'WHERE C_NO = ?C_NO;'); Open; end; // FibPLus Dataset setup end: with DM_reports.frxReport do begin Variables.LoadFromFile(report_dir+'/report_var.fd3'); LoadFromFile(report_dir+'/report_camp_dist_ov.fr3'); DM_reports.set_variables(Sender); PrepareReport; ShowPreparedReport; end; end;
SQL-Code:
Danke schonmal für Eure Hilfe
SELECT
C_NO, REG_NO, ZONE_NO, AREA_NO, CITY, COUNTRY, LANG, (SELECT COUNT( NAME ) FROM HOTEL WHERE (C_NO = 'I47705')) AS COUNT_OF_HOTEL, (SELECT COUNT( NAME ) FROM CHURCH WHERE (C_NO = 'I47705')) AS COUNT_OF_CHURCH, (SELECT COUNT( NAME ) FROM DOCTOR WHERE (C_NO = 'I47705')) AS COUNT_OF_DOCTOR, (SELECT COUNT( NAME ) FROM SCHOOL WHERE (C_NO = 'I47705')) AS COUNT_OF_SCHOOL, (SELECT COUNT( NAME ) FROM NURSING_H WHERE (C_NO = 'I47705')) AS COUNT_OF_NURSING_H, (SELECT COUNT( NAME ) FROM LAWYER WHERE (C_NO = 'I47705')) AS COUNT_OF_LAWYER, (SELECT COUNT( NAME ) FROM HOSPITAL WHERE (C_NO = 'I47705')) AS COUNT_OF_HOSPITAL, (SELECT COUNT( NAME ) FROM PUB_S WHERE KIND = '10' and C_NO = 'I47705') AS COUNT_OF_MILITARY, (SELECT COUNT( NAME ) FROM PUB_S WHERE KIND = '20' and C_NO = 'I47705') AS COUNT_OF_FIRE_BRIGADE, (SELECT COUNT( NAME ) FROM PUB_S WHERE KIND = '30' and C_NO = 'I47705') AS COUNT_OF_POLICE, (SELECT COUNT( NAME ) FROM PUB_S WHERE KIND = '40' and C_NO = 'I47705') AS COUNT_OF_PRISON, (SELECT COUNT( NAME ) FROM PUB_S WHERE KIND = '50' and C_NO = 'I47705') AS COUNT_OF_REFUGEE_CAMP FROM CAMPS WHERE (C_NO = 'I47705') Manfred |
Re: Reportproblem
Schon mal im Quellcode die hart codierte Variante
des IBExpert, d.h. ohne Variablen abgesetzt? Gruß Gerald |
Re: Reportproblem
Hallo Manfred,
-Warum die Abfrage über CAMPS? Du liest ja nichts von dieser Tabelle. Was für einen Typ hat PUB_S.KIND? ( Quotes erscheinen mir überflüssig) Zudem wäre es u.U. zu überlegen, die Tabellen zu verschmelzen (wenn die Struktir gleich/ähnlich). Dann könnte man das ganze in einer normalen Abfrage mit IIFs händeln. Oder eine Execution Block unter Verwendung von PL zu verwenden |
Re: Reportproblem
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Danke Manfred |
Re: Reportproblem
Zitat:
Zitat:
Zitat:
SQL-Code:
EXECUTE BLOCK ( C_NO INTEGER = :C_NO)
RETURNS ( REG_NO INTEGER, ZONE_NO INTEGER, AREA_NO INTEGER, CITY VARCHAR(32), COUNTRY .., LANG .., COUNT_OF_HOTEL INTEGER, ... ) AS BEGIN select REG_NO, ZONE_NO, AREA_NO, CITY, COUNTRY, LANG from camps into :REG_NO, :ZONE_NO, :AREA_NO, :CITY, :COUNTRY, :LANG; SELECT COUNT( NAME ) FROM HOTEL WHERE C_NO = :C_NO into :COUNT_OF_HOTEL; ... SUSPEND; END; |
Re: Reportproblem
Zitat:
Habe auch schon hier im Forum die Suche bemüht. Aber wie das über mehrere Tabellen mit where geht ist mir nicht ganz klar.
SQL-Code:
Könntest Du mir ein kleines Bsp. geben?
SELECT
C_NO, REG_NO, ZONE_NO, AREA_NO, CITY, COUNTRY, LANG, count (IIF (HOTEL.NAME is not null,1,0 WHERE (C_NO = 'I47705')) AS COUNT_OF_HOTEL, FROM CAMPS WHERE (C_NO = 'I47705') Shalom Manfred |
Re: Reportproblem
Ich meinte die mehrere Tabellen durch eine ersetzen. Diese dann um ein Art-Feld erweitern. Dies könnte man auch in einer Union-Abfrage temporär erledigen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:09 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz