| Oppdatert: | 13.01.2005 - Henrik Olsen |
|---|---|
| 24.01.2005 - Alf-Ivar Holm | |
| 26.05.2005 - Henrik Olsen |
Flere eksempler på dynamisk SQL
RepWiz er en rapportgenerator hvor det for sluttbruker er lagt stor vekt på et intuitivt og enkelt brukergrensesnitt. Med RepWiz kan man enkelt gjøre uttrekk fra alle typer ODBC-datakilder og få data presentert på en oversiktlig måte. RepWiz kan også eksportere til andre verktøy som f.eks Excel. Oppbygning av rapporter krever noe teknisk kompetanse. Denne tekniske dokumentasjonen vil gi en oversikt over mulighetene for bygging av rapporter i RepWiz.
RepWiz består av tre filer. En .exe-fil som er selve programfilen. En
.ini-fil og en .sql-fil som sammen definerer rapportene. I .ini-filen angir man
datakilden til rapporten og setter hvordan rapporten skal presenteres for sluttbruker.
I .sql-filen lages spørringen som danner datagrunnlaget for rapporten.
Synopsis:
RepWiz.exe
[[-h]/[--help]/-?]
[-inifile <path>]
[-report <name> -type [file|excel|print] -output <path|printername>]
[-timeout <seconds to timeout when connecting to db>]
Dersom ingen programargumenter blir angitt forsøker RepWiz å lese inn og starte
med filene RepWiz.ini og RepWiz.sql
Elsempel med programargumenter:
RepWiz.exe -inifile myIni.ini -report REP1 excel -output c:\repports\
Med en oppsett-.ini-fil setter man opp hvilke rapporter som er tilgjengelig
og formateringen på disse.
| Elementer i en .INI.fil | |||
| Element | Beskrivelse | Eksempel | Påkrevd |
| [SYSTEM_DEFAULT] | Parameter kan settes globalt for alle rapporter.
Overstyr disse ved behov for den enkelte rapport. |
[SYSTEM_DEFAULT] TEXT_QUALIFIER = "\"" FIELD_DELIMITER = ";" |
Nei |
| TEXT_QUALIFIER = "" | Tekstinnkapsling ved eksport til tekstfil. | TEXT_QUALIFIER = "\"" | Nei |
| FIELD_DELIMITER = "" | Feltskilletegn ved eksport av tekstfil. | FIELD_DELIMITER = ";" | Nei |
| DECIMAL_POINT = "" | Desimalskilletegn. | DECIMAL_POINT = "," | Nei |
| DECIMAL_FORMAT = "" | Bruker printf-formatering (C-funksjon) med double(lf) som variabel. | DECIMAL_FORMAT = "&8.02lf" | Nei |
| INTEGER_FORMAT = "" | Bruker printf-formatering (C-funksjon) med integer(ld) som variabel. | INTEGER_FORMAT = "&ld" | Nei |
| EXCEL_DECIMAL = "" | Desimalformat ved eksport til Excel. | EXCEL_DECIMAL = "# ##0.00" | Nei |
| EXCEL_INTEGER = "" | Integer-format ved eksport til Excel. | EXCEL_INTEGER = "0" | Nei |
| EXCEL_DATE = "" | Datoformat ved eksport til Excel. | EXCEL_DATE = "d.m.åååå" | Nei |
| EXCEL_TEXT = "" | Tekstformat ved eksport til Excel. | EXCEL_TEXT = "@" | Nei |
| USE_TABS = | Angir om det skal brukes mapper eller trestruktur-visning av hovedmenyen. Mapper brukes dersom ikke annet er angitt. | USE_TABS = FALSE | Nei |
| CONNECTION_RETRIES = | Antall ganger RepWiz skal prøve å koble til via DSN dersom forbindelsen mislykkes. | CONNECTION_RETRIES = 5 | Nei |
| USER_INPUT_DSN = | Brukeren angir selv DSN. | USER_INPUT_DSN = TRUE | Nei |
| [CONSTANTS] | Liste med konstanter som kan brukes i SQL-spørringene. | [CONSTANTS] CONST = "REGION='Sør'" CONST = "POSTNR='Oslo'" Bruk i .sql: SELECT * FROM shop WHERE postnummer = {@POSTNR} |
Nei |
| CONST = | Angir konstant. | CONST = "REGION='Sør'" | Nei |
| [VARIABLES] | Variable som kan settes og brukes i SQL-spørringene. Vil leve mellom 2 spørringer, for eksempel for bruk i flerlagsspørringer. | [VARIABLES] VAR = FraDato VAR = TilDato Bruk i .sql: Settes: { ... | FraDato } Brukes: ... dato = {%FraDato} |
Nei |
| VAR = | Angir variabel. | VAR = FraDato | Nei |
| [TABS] | Definerer mapper for plassering av rapporter. | [TABS] TAB = "DagsRapporter" TAB = "MånedsRapporter" TAB = "UkeRapporter" |
Ja |
| TAB = | Navn på mappe. | TAB = "DagsRapporter" | Ja |
| [TREENODE] | Definerer en trestruktur for plassering av rapporter. | [TREENODE] PARENT = UKE CHILD = MANDAG |
Nei |
| PARENT = | Navn på foreldrenode. | PARENT = UKE | Nei |
| CHILD = | Navn på undernode. En eller flere CHILD for hver PARENT | CHILD = MANDAG | Nei |
| [DSN] | Spesifiserer grupper av DSN'er. Under hver rapport kan en så referere til en eller flere av disse gruppene med en eller flere DSN_GROUP-setninger |
[DSN] NAME = "REGION-NORD" DSN = "MEGA0570DSN" DSN_DESC = "Mega Brueland" DSN_USER = "user" DSN_PASSWD = "passwd" Brukes i [REPORT]: DSN_GROUP = "REGION-NORD" |
Nei |
| NAME = "" | Navn på DSN. | NAME = "REGION-NORD" | Nei |
| DSN_DESC = "" | Beskrivelse av DSN. | DSN_DESC = "Mega Brueland" | Nei |
| DSN_USER = "" | Brukernavn for DSN. | DSN_USER = "user" | Nei |
| DSN_PASSWD = "" | Passord for DSN. | DSN_PASSWD = "passwd" | Nei |
| [REPORT] | Definerer datakilden og oppsettet for en rapport. | [REPORT] DSN = "LOCALDSN" DSN_DESC = "Jowe database" DSN_USER = "jowe" DSN_PASSWD = "sql" TAB = "UkeRapporter" NAME = "Rapportnavn" BTN_TEXT = "Rapport knapp tekst" CAPTION = "Rapport tittel" SQL_KEY = "Sql fil referanse" |
Ja |
| DSN = "" | Navn på DSN (ODBC forbindelse) til datakilde. | DSN = "LOCALDSN" | Ja |
| DSN_DESC = "" | Beskrivelse av DSN. | DSN_DESC = "Jowe database" | Nei |
| DSN_USER = "" | Brukernavn for DSN. | DSN_USER = "jowe" | Ja |
| DSN_PASSWD = "" | Passord for DSN. | DSN_PASSWD = "sql" | Ja |
| TAB = "" | Angir hvilken mappe/trenode rapporten skal ligge under . | TAB = "UkeRapporter" | Ja |
| NAME = "" | Navn på rapporten. | NAME = "Rapportnavn" | Ja |
| BTN_TEXT = "" | Tekst på knappen for rapporten i RepWiz. | BTN_TEXT = "Salg" | Ja |
| CAPTION = "" | Tittel på rapport ved utskrift og eksport. | CAPTION = "Rapport tittel" | Ja |
| SQL_KEY = "" | Hvilken SQL-spørring i .sql-filen som skal benyttes i denne rapporten. | SQL_KEY = "REP1" | Ja |
| HIDDEN_COLUMNS = "" | Skuler en eller flere kolonner i rapporten ved visning og utskrift. Kan for eksempel brukes for å skjule hjelpe- og sorteringskolonner. | HIDDEN_COLUMNS = "1,2 | Nei |
| SUMCOLUMN = "" | Angir hvilke kolonner i rapporten som skal summeres. | SUMCOLUMN = "4,6" | Nei |
| SUM_TEXT = "" | Mulighet for å legge inn tekst i kolonner på sumlinjene. | SUM_TEXT = C3=Total | Nei |
| FILENAME = "" | Filnavn ved eksport til tekstfil. Filnavnene
kan spesifiseres med datoformatkoder. Blokker
med datoer legges inn i navnet med < og > rundt. Bruker strftime(..)-formatet fra C, bytter ut % med &. |
FILENAME = "Rapport.txt" FILENAME = c:\rpt\varer_<&Y&m&d>.dat> " |
Nei |
| EXCEL_FILENAME = "" | Filnavn ved eksport til Excel. Filnavnene kan spesifiseres med datoformatkoder. Blokker med datoer legges inn i navnet med < og > rundt. Bruker strftime(..)-formatet fra C, bytter ut % med &. |
EXCEL_FILENAME = "rapport.xls" EXCEL_FILENAME = c:\rpt\varer_<&Y>.xls> " |
Nei |
| GROUPBY_COLUMN = | Angir hvilke kolonner det skal gruperes etter. Viktig at disse kolonnene er sortert i sql for å samle grupperingene. Brukes sammen med SUMCOLUMN. | GROUPBY_COLUMN = 5 | Nei |
| SUM_HDR_TEXT = | Legger inn en ekstra rad før starten
av hver gruppering. Innholdet i kolonnene spesifiseres på samme måte
som for SUM_TXT. Data hentes fra påfølgende rad. Slik at C3=C2
vil føre til at kolonne 3 i grupperingsoverskriften vil inneholde
verdien til kolonne 2 i første påfølgende rad. |
SUM_HDR_TEXT = C1=Varegruppe SUM_HDR_TEXT = C3=C2 |
Nei |
| SUM_FORMULA = | Mulighet for å legge inn formler på kolonnene i sum-radene. Høyresiden av uttrykket må alltid referere til sumkolonner. Venstre siden av uttrykket kan plasseres i vilkårlig kolonne. | SUM_FORMULA = C2=C4/C7 SUM_FORMULA = C4=(C4/C7) + (3.14 * C2) |
Nei |
| HIDE_REPORT | Skjuler rapporten, den vises ikke i menyene. Brukes for eksempel dersom rapporten er en underrapport for flerlagsrapporter. | HIDE_REPORT = TRUE | Nei |
| BTN_TEXT_COLOR = | Angir tekstfargen på knappen for rapporten i brukergrensesnittet. (RGB) | BTN_TEXT_COLOR = 255,0,0 | Nei |
| PRINTER_ORIENTATION = | Angir orienteringen på uskrift av rapporten, PORTRAIT eller LANDSCAPE . | PRINTER_ORIENTATION = LANDSCAPE | Nei |
| SUB_REPORT = | Angir navnet på en subrapport ved flerlagsrapporter. | SUB_REPORT = "DetaljRap" | Nei |
| FORMAT_COLUMN = | Kan konvertere en kolonne med minutter til teksten hh:m eller formatere datoer og tidspunkter. | FORMAT_COLUMN = C4 = minToText FORMAT_COLUMN = C4 = FormatDate(<Formateringskoder>) |
Nei |
| DSN_GROUP | Angir hvilken DSN-gruppe som skal benyttes. DSN-grupper angis over med [DSN] | DSN_GROUP = "REGION-NORD" | Nei |
| ACCU_COLUMNS = | Legger sammen og akumulerer verdiene nedover i en kolonne. | ACCU_COLUMNS = 2 | Nei |
| TEXT_QUALIFIER = "" | Tekstinnkapsling ved eksport til tekstfil. | TEXT_QUALIFIER = "\"" | Nei |
| FIELD_DELIMITER = "" | Feltskilletegn ved eksport av tekstfil. | FIELD_DELIMITER = ";" | Nei |
| DECIMAL_POINT = "" | Desimalskilletegn. | DECIMAL_POINT = "," | Nei |
| DECIMAL_FORMAT = "" | Bruker printf-formatering (C-funksjon) med double(lf) som variabel. | DECIMAL_FORMAT = "&8.02lf" | Nei |
| INTEGER_FORMAT = "" | Bruker printf-formatering (C-funksjon) med integer(ld) som variabel. | INTEGER_FORMAT = "&ld" | Nei |
| EXCEL_DECIMAL = "" | Desimalformat ved eksport til Excel. | EXCEL_DECIMAL = "# ##0.00" | Nei |
| EXCEL_INTEGER = "" | Integer-format ved eksport til Excel. | EXCEL_INTEGER = "0" | Nei |
| EXCEL_DATE = "" | Datoformat ved eksport til Excel. | EXCEL_DATE = "d.m.åååå" | Nei |
| EXCEL_TEXT = "" | Tekstformat ved eksport til Excel. | EXCEL_TEXT = "@" | Nei |
| NAME_COLUMN = "" | Setter navn på kolonneoverskrifter. | NAME_COLUMN = C4=Navn | Nei |
| Eksempel RepWiz.ini |
|
[SYSTEM-DEFAULT] [TABS]
;Kommanter Rapport 2 |
I .sql-filen angir man spørringene som skal danne datagrunlaget for rapportene.
| Elementer i en .SQL-fil | |||
| Element | Beskrivelse | Eksempel | Påkrevd |
| [SQL] | Angir en ny sql-spørring. | [SQL] REP1 SELECT * FROM Ansatt where Ansattnr = 8 |
Ja |
| "Navn på spørring" | Navn på spørring. Brukes som SQL_KEY mot .ini-filen | REP1 | Ja |
| "Sql spørring" | Sql-spørring som skal returnere datagrunnlaget. | SELECT * FROM Ansatt where Ansattnr = 8 |
Ja |
Ved å bruker følgende syntaks kan SQL setningene bestemmes av bruker ved kjøring. Bruker får da opp dialogbokser ved kjøring for spesifikasjon endelig SQL.
Syntaks:
{ <Dialogboks tekst > | [Rapport tekst] | [Default verdi eller funksjon]
| [Lokal konstant/ global variabel] }
<Dialogboks tekst > Teksten som vises i dialogboksen når
bruker blir bedt om å spesifiesere en verdi ved kjøring av rapporten.
[Rapport tekst] Denne teksten vises på utskrifter og annet sammen
med verdien som brukeren har angitt.
[Default verdi eller funksjon] Tekst eller verdi som kommer som forhåndsvalgt
verdi i feltet hvor brukeren skal angi en verdi under kjøring av rapporten.
Se de forskjellige funksjoner i seksjonene under.
[Lokal konstant/ global variabel] Dersom denne ikke er definert i .ini.filen
som en global variabel, under [VARIABLES], vil denne verdien fungere som en
lokal konstant for inneværende rapport og kan kun gjenbrukes innenfor
samme rapport for å ungå at man spør etter samme verdi flere
ganger. Er den derimot definer i .ini-filen fungerer den som en global variabel
og kan settes og gjenbrukes i senere spørringer for andre rapporter,
se eksempeler.
Kommenrarer:
Linjer kommenteres vekk ved bruk av --innefor sqlsetningen. På samme måte
som i isql.
| Eksempel RepWiz.sql |
|
[SQL] |
Datofunksjoner kan brukes i en dynamsik-sql.
Synopsis:
<date_func(
)>;<datoformat>
Funksjoner:
CurDate([days=0]);
FirstInMonth(year, month, year_corr, month_corr, [days=0]);
LastInMonth(year, month, year_corr, month_corr, [days=0]);
FirstInWeek(year, week, year_corr, week_corr, [days=0]);
LastInWeek(year, week , year_corr, week_corr, [days=0]);
- Hvis year, month eller week blir satt til 0 vil inneværende dato bli
brukt.
- xxxx_corr argumentene blir brukt for å korrigere i forhold til datoen
spesifisert ved year, month(+/-12) eller week.
- Days argumentet er valgfritt.
Eksempel:
...
WHERE dato > '{Angi ordre dato| Dato > |$FirstInMonth (2005, 4, 0 );&Y.&m.&d;
}'
Det er mulig å lage flerlagsrapporter i RepWiz, så kalt drilldowns.
Dette gjøres ved at rapporter kan åpne andre rapporter med argumenter
fra egne kolonner. Det er ingen begrensninger på antall nivåer i
en flerlagsrapport.
Eksempel:
Ved dobbeltklikk i rapport 'Ordre' vil den hente opp sin SUB_REPORT som er 'Detaljer'
og bruke verdien i kolonne 1 som utvalgskriterie angitt med '{@@C1}'.
| .ini.fil | .sql-fil |
| [SYSTEM-DEFAULT] DECIMAL_POINT = "," [TABS] TAB = "Ordre" [REPORT] DSN = "db" DSN_USER = "user" DSN_PASSWD = "sql" TAB = "Ordre" BTN_TEXT = "Ordrerapport" NAME = "Ordre" CaPTION = "Ordrerapport" SQL_KEY = "REP1" SUB_REPORT = "Detaljer" [REPORT] DSN = "db" DSN_USER = "user" DSN_PASSWD = "sql" TAB = "Ordre" BTN_TEXT = "" NAME = "Detaljer" CaPTION = "Ordredetaljer" SQL_KEY = "REP2" HIDE_REPORT = TRUE |
[SQL] Rep1 SELECT ordreid, dato FROM ORDRE [SQL] Rep2 SELECT * FROM ordrelinje WHERE ordreid = '{@@C1}' |
| Gir brukerene mulighet til å angi utplukskkriterier. |
| WHERE date = '{Angi ordre dato| Dato }' |
| Dialogboks der man kan angi verdi for 'date'-feltet. Som forslag vises datoen en uke tilbake. |
| WHERE date = '{Angi ordre dato| Dato |@select getdate() - 7}' |
| Som over men her legges verdien du angir i variabelen
vDate. vDate deklareres i .ini-filen. Dersom vDate ikke er definert i .ini.filen som en global variabel, under [VARIABLES], vil vDate fungere som en lokal konstant for inneværende rapport og kan kun gjenbrukes innenfor samme rapport. Er den derimot definert i .ini-filen fungerer den som en global variabel og kan settes og gjenbrukes i senere spørringer for andre rapporter. |
| .ini-fil: ... [VARIABLES] VAR = vDate ... .sql-fil: ... WHERE date = '{Angi ordre dato| Dato |@select getdate() - 7|vDate}' |
| Bruk av verdien vDate satt i eksempelt over i en senere spørring. |
| WHERE date = '{%vDate}' |
| Dialogboks der man kan velge blant listen med registrerte kundenavn. |
| WHERE KundeNavn = '{Velg kunde|Kundenavn|@select distinct(navn) FROM kunde}' |
| Som over men har brukes det to kolonner, en for data og en for visning i dialogen. Gjør det mulig å formatere visningen til brukerene. Første kolonne angis hva som er verdiene til i spørringen ('%, kundenr1', kundenr2,...) og deretter det som vises til brukeren ('Alle', Navn1, Navn2,...) |
| WHERE kundenr like '{Velg kunde|Kundenavn|@select '%', 'Alle' UNION select kundenr, navn FROM kunde}' |
Cosmo Scientific Consultant AS © 2005
Forskningsparken, Gaustadalléen 21, 0349 Oslo,
Tlf. 22 95 86 45, Fax. 22 60 44 27, E-post: csc@csc.no