29. Juni 2009

Deaktivierung eines Triggers

Wenn man auf die schnelle einen Trigger deaktivieren möchte, dann kann man die "_"-Technik benutzen:



In diesem Beispiel soll ein Key-Create-Record-Trigger deaktiviert werden. Dazu benennt man jeden "-" in "_" um im Namen des Triggers. Von da an ist der Trigger ein sogenannter User-Named-Trigger und kann durch normale Events nicht mehr gestartet werden.



Wichtig: Den Trigger in "KEY-CREREC2" oder ähnliches Umbenennen funktioniert nicht. Der Bindestrich ist in Forms reserviert für Event-Trigger.

Den Trigger kriegt man danach wieder aktiviert, indem man die Unterstriche wieder gegen Bindestriche tauscht.

Viel Spass
Gerd

18. Juni 2009

AdSense Test beendet

Die zwei Wochen, in denen ich Googles AdSense getestet habe, waren sehr interessant. Man sieht jeden Tag, wieviele tausend Euro man wieder dazuverdient hat (aeh, ich meinte Euro-Cents) und hat die Möglichkeit aus endlos vielen Reports sich die Daten anzuschauen, die einem zeigen, was für Werbung die User bevorzugten, etc.

Und genau jetzt, wo es am schönsten ist, beende ich diesen Test auch wieder, damit keiner durch die Ads genervt ist und die Blog-Seite wieder so aussieht wie immer. Frei von Werbung!



Viel Spass weiterhin mit dem Blog
Gerd

4. Juni 2009

AdSense in meinem Blog (nur für kurze Zeit)


Heute fand ich eine neue Registerkarte auf meiner Google-Blogger-UI. Sie heisst "Monetize" und scheinbar möchte Google, dass wir Blogger denken, dass wir sofort reich werden, wenn wir dem AdSense Programm beitreten. Ich weiss, dass das nicht passieren wird, da ich nicht die erforderlichen 2 Millionen Hits pro Tag schaffe :-)

Ich starte das AdSense-Programm trotzdem aus reiner Neugier, um zu sehen, wie Google das intern umsetzt und wie sie die Blogs damit verändern.

Ich möchte niemanden nerven und werde den Test sogar vorzeitig beenden, wenn entsprechende Kommentare kämen. Mein Blog wird weitergehen wie bisher und am Ende meines AdSense-Tests werden ich ein kleines Feedback veröffentlichen, wie die Arbeit mit AdSense war und welchen Einfluss es auf meinen Blog hatte.

Auf geht's!
Gerd

29. Mai 2009

Und die Gewinner sind:

Grants Posting habe ich mir zum Vorbild genommen und hier einmal die 5 besten Oracle Forms Java Beans des April 2009 Wettstreits veröffentlicht:

18,8% Md. Mehbub Islam: Scanner Bean
17,5% Hafed Benteftifa: FRITE (Forms Rich Text HTML Editor)
17,5% Vijaynath Nair: Autocad Integration Bean
16,2% Francois Degrelle: Carousel Bean
16,2% Lionel Lasserre: Planning Bean



Für diese Links sollte man sich ein paar Minuten Zeit nehmen und die Lösungen eingehend untersuchen.

Es ist toll zu sehen, dass dies alles mit Oracle Forms machbar ist. Auf diese Weise kann man seine alten Oracle Forms Applikationen beinahe beliebig modernisieren, so dass man bald gar nicht mehr erkennen wird, dass im Hintergrund Forms läuft.

Ein grosses Dankeschön an alle, die bei dem Contest mitgemacht haben und Ihre Lösungen der Öffentlichkeit gezeigt haben
Gerd

25. März 2009

Data Modeling White Paper

Es sieht so aus, dass Oracle SQL Developer Data Modeling der neue Oracle Designer werden könnte.

Unter diesem Link ist ein sehr umfangreiches White Paper zu finden, dass den vollen Umfang des Data Modelers beschreibt SQL Developer Überblick

viel Spass damit
Gerd

27. Februar 2009

Daten filtern über Multi-Rows

Angenommen, wir haben eine Maske auf der Tabelle EMP aufgebaut und möchten die Daten filtern, so dass nur Mitarbeiter der Abteilungen 20 und 30 zu sehen sind. Die beste Art und Weise einen solchen Filter anzubieten wäre ein Block, der alle Abteilungen anzeigt und man jede Abteilung markieren kann oder nicht.

Wir würden dann zum Beispiel die Checkboxen für Abteilung 20 und 30 anklicken:



Der Button Abfrage starten startet dann eine Query im Block EMP



Was brauchen wir für diese Technik?

-) Einen CONTROL-Block mit einem Feld TI_Filter_String (Char, 2000)
-) Eine Checkbox CB_Filter im DEPT-Block (Numerisch, 0-unchecked, 1-checked)

Der Button, der die Query startet, benötigt noch einen WHEN-BUTTON-PRESSED:

:Control.TI_Filter_String := ';';
go_block ('DEPT');
first_record;
LOOP
IF :DEPT.CB_Filter = 1 THEN
:Control.TI_Filter_String := :Control.TI_Filter_String || :DEPT.DEPTNO || ';';
END IF;
IF :SYSTEM.LAST_RECORD = 'TRUE' THEN
EXIT;
ELSE
Next_Record;
END IF;
END LOOP;
go_block ('EMP');
execute_query;


Zum Schluss benötigt der EMP-Block noch folgende Default-Where-Eigenschaft:


:Control.TI_Filter_String LIKE '%;' || DEPTNO || ';%'

Der Trick ist nun, dass jede DEPTNO des Filter-Strings in der EMP-Tabelle gefunden werden kann durch die LIKE %;...;% - Technik:



Viel Spass damit
Gerd

19. Januar 2009

Forms Function Nummern

Die Ressourcendatei fmrweb.res zu editieren war noch nie ganz trivial. Die Syntax ist zwar in der Datei sehr gut und ausführlich beschrieben, jedoch sind nur die Parameter JFN, JMN, URKS und URFD vollständig erklärt. FFN-IDs werden nur zum Teil dort aufgelistet.

# JFN : JMN : URKS : FFN : URFD (whitespace ignored)
#
# JFN = Java function number
# JMN = Java modifiers number
# URKS = User-readable key sequence (double-quoted)
# FFN = Forms function number
# URFD = User-readable function description (double-quoted)

Die vollständige Liste aller IDs ist hier nun aufgeführt:

FFN Beschreibung
-----+---------------
1 Next Field
2 Previous Field
3 Clear Field
4 Left Arrow
5 Right Arrow
6 Up Arrow
7 Down Arrow
8 Goto Beginning of Line
9 Goto End of Line
10 Goto Extreme Vertical Up
11 Goto Extreme Vertical Down
12 Scroll Up
13 Scroll Down
14 Scroll Left
15 Scroll Right
16 Delete Character Left
17 Delete Character Right
18 Delete Line
19 Move Cursor Left
20 Move Cursor Right
21 Scroll-Up
22 Invoke Editor for Field
23 Delete Character ??
/ 23 Insert Line ??
24 Search
25 Toggle Insert/Replace Mode
26 Select Item
27 Return
28 Invoke Menu
29 List of Values
30 Help
31 Redraw Screen
32 Exit
35 Show Keys
36 Accept
61 Next Primary Key
62 Clear Record
63 Delete Record
64 Duplicate Record
65 Insert Record
66 Next Set
67 Next Record
68 Previous Record
69 Clear Block
70 Block Menu
71 Next Block
72 Previous Block
73 Duplicate Field
74 Clear Form
75 Enter
76 Enter Query
77 Execute Query
78 Display Error
79 Print
80 Count Query
81 Update Record
82 User Defined Key 0
83 User Defined Key 1
84 User Defined Key 2
85 User Defined Key 3
86 User Defined Key 4
87 User Defined Key 5
88 User Defined Key 6
89 User Defined Key 7
90 User Defined Key 8
91 User Defined Key 9
92 Clear Eol
95 List Tab Pages
11022 Accelerator Key 1
11023 Accelerator Key 2
11024 Accelerator Key 3
11025 Accelerator Key 4
11026 Accelerator Key 5
11027 Accelerator Key 6
11028 Accelerator Key 7
11029 Accelerator Key 8
11030 Accelerator Key 9
11031 Accelerator Key 10



Viel Spass mit den Forms Function Nummern !
Das Problem mit der Doppelbelegung der Nr. 23 werde ich so schnell als möglich versuchen zu lösen
Gerd

17. Dezember 2008

Registerkarten und F2

Gerade eben fand ich ein interessantes undokumentiertes Feature:


Wenn der Cursor in einer Registerkarte ist und man F2 drückt,


dann wird in der oberen rechten Ecke ein kleines List-Item angezeigt mit den Namen aller Registerseiten. Hier kann man mit den Cursortasten navigieren und dann Enter oder Return drücken.


Dies lässt einen WHEN-TAB-PAGE-CHANGED-Trigger starten. Hier würde man nun z.B. eine Navigation in einen anderen Block einbauen.

Viel Spass damit
Gerd

20. November 2008

Neues Statement of Direction, Oktober 2008

Dies ist das neue Statement of Direction vom Oktober 2008. (Hier ist der Link zu meinem letzten SoD-Post)



Was hat sich geändert?

Die graphische Darstellung der Timeline wurde entfernt. Ansonsten wurde in dem Dokument nichts verändert. Warum dann eine neue Version herausgegeben wurde ist auf den ersten Blick nicht nachvollziehbar.


Hier sind einige Links zu älteren Statement of Directions:
SoD 2008 / 07
SoD 2007 / 11
SoD 2005 / 09
SoD 2005 / 05
SoD 2005 / 03
SoD 2004 / 06

16. Oktober 2008

SQL Developer Data Modeling

Die Beta-Version ist draussen! Und hier sind schon die ersten Screenshots, die ich auf meinem Notebook generieren konnte.

Dies wird also der Nachfolger vom guten alten Oracle Designer werden. Der Name ist: Oracle SQL Developer Data Modeling (OSDM) und wird im SQL Developer enthalten sein.


Als Erstes habe ich den Datenmodell-Capture getestet. Ein paar Klicks im Menü und schon hatte ich die ersten Tabellen im OSDM drin. Gespeichert wurden die Tabellen im relationalen Bereich


Über ein "Engineer to Logical Model" kann man das Datenmodell ins ER-Modell überführen. Das funktionierte genauso einfach und ohne Probleme


Der Link zum OTN-Download-Bereich des OSDM: Oracle SQL Developer Data Modeling

In den nächsten Tagen werde ich weitere Tests machen und ich hoffe, dass der gute erste Eindruck weiter so bleibt!
Gerd

15. Oktober 2008

Views, die auf Jahr, Monat und Tag basieren

Bei der Applikations-Entwicklung braucht man häufig Wertelisten, die einem Jahre, Monate oder Tage zurückgeben.

Man könnte dort natürlich jedes Mal ein Select-Statement fest in einer LOV verdrahten und diese Daten dann anzeigen.

Eleganter geht's aber mit einer View, die man zur Datenselektion benutzt. Hier sind 3 Beispiele für solche Views :

CREATE OR REPLACE FORCE VIEW JAHRE_V
(DATUM) AS
SELECT add_months (trunc (sysdate, 'YYYY'), 12 * (50 - Level))
FROM Dual
CONNECT BY Level <= 100;

CREATE OR REPLACE FORCE VIEW MONATE_V
(DATUM) AS
SELECT add_months (trunc (sysdate, 'MM'), 500 - Level)
FROM Dual
CONNECT BY Level <= 1000;

CREATE OR REPLACE FORCE VIEW TAGE_V
(DATUM) AS
SELECT trunc (sysdate) + 15000 - Level
FROM Dual
CONNECT BY Level <= 30000;


Diese Views ermöglichen nun den einfachen Select auf

- Aktuelles Jahr +/- 50 Jahre
- Aktueller Monat +/- 500 Monate
- Aktueller Tag +/- 15000 Tage

In einer Record-Group verwendet man diese Views dann so:

Werteliste der nächsten 10 Jahre

SELECT Datum
FROM Jahre_V
WHERE Datum BETWEEN trunc (sysdate, 'YYYY')
AND add_months (trunc (sysdate, 'YYYY'), 10*12);


Werteliste der letzten 30 Tage und der nächsten 10 Tage

SELECT Datum
FROM Tage_V
WHERE Datum BETWEEN trunc (sysdate-30) AND trunc (sysdate+10);


Einfacher geht es kaum noch
Gerd

26. September 2008

Neuer Oracle Designer ? Teil 2

Gerade eben fand ich einen interessanten Link zu den ersten Bilder des neuen "Oracle Designer".

Das Datenmodell kann demnächst im SQL Developer editiert werden.

Viel Spass beim Lesen von Jared's Artikel: Daten Modellierung mit SQL Developer

5. August 2008

Neues Statement of Direction, Juli 2008

Vor einigen Tagen veröffentlichte Oracle sein neuestes Statement of Direction.


Was ist neu?

1) Ein Link zum Oracle Lifetime-Support Dokument. Intern wird dann weitergeleitet zu einer neuen URL

2) und 4 Jahre erweiterten Support (mindestens). Im letzten Statement of Direction war 2013 als Mindest-Supportdatum angegeben. Nun ist es 2017!

21. Juli 2008

Alle Objekte des Layout-Editors markieren

Falls man auf der Suche nach Objekten ist, die im Layout-Editor nur schwer zu finden sind, kann man den "Markiere Alle" - Trick benutzen. Danach werden dann alle Objekte des Layout-Editors im Objekt-Navigator markiert angezeigt.



Nach dem Ctrl+A sind alle Objekte im Navigator markiert und geöffnet



Viel Spass damit
Gerd

2. Juli 2008

Neuer Oracle Designer ?

Ich kann's noch gar nicht glauben...

Oracle SQL-Developer unterstützt die DB-Modellierung in einem der nächsten Releases.

Hier die wichtigsten Features:

Database Data Modeling to support:

* Designing logical Entity Relation Diagrams
* Building physical schema designs
* Generating and executing DDL scripts
* Reverse and forward engineering of existing relational data structures
* Data domain administration
* Naming standardization
* Model formatting (font, colors)
* Importing data models from CA Erwin and Oracle Designer
* Compare and merge facilities
* Multiple database support
o Oracle Database
o DB2 (Mainframe & UDB)
o Microsoft SQL Server
* Logical and physical multi-dimensional modeling
* Object relational Data Types
* Spatial Modeling
* Multi-level logical and physical design environments
* Model validation rules
* Offline (file based) and Repository based modeling

da kann man sich ja mal ehrlich drauf freuen. Der Designer ist nun doch schon ein wenig in die Jahre gekommen, seit er nicht mehr weiterentwickelt wird

Gerd