Date function problem(Interval adding)
Hi all,
I have a table with a column named interval(Unfortunately! )and another column named start_time.
I want to submit a select query against this table like this one:
SELECT * FROM TABLE1
WHERE (start_time + INTERVAL 'interval' minute) < systimestamp;
As you see the lowercase interval is the name of that column but It gots error:
PL/SQL: ORA-01867: the interval is invalid
What should I do?
SQL> desc t
Name Null? Type
START_TIME TIMESTAMP(6)
INTERVAL NUMBER(38)
SQL> insert into t values(current_timestamp - numtodsinterval(10,'minute'), 10);
1 row created.
SQL> select * from t;
START_TIME INTERVAL
17.08.05 18:22:10,593000 10
SQL> select * from t where (start_time + numtodsinterval(t.INTERVAL,'minute')) < systimestamp;
START_TIME INTERVAL
17.08.05 18:22:10,593000 10Rgds.
Similar Messages
-
Date function problems with dates from core not recognized as dates
Our core provides dates in two formats: YYYYDDD and MMDDYY (YYYYDDD for today [2/21/12] would be 2012052). We have determined that Crystal Reports is not viewing them as dates, but rather numbers. If querying on just a specific date, no problem. But if I want to use a date function like DayOfWeek, then things don't work.
I need a report to always provide yesterday's data - except on Monday, where it needs to look back at Friday.
I tried a criteria of:
if DayOfWeek(CurrentDate) = 1 then {DDMAST.DATOP7} = CurrentDate - 2 else
if DayOfWeek(CurrentDate) = 2 then {DDMAST.DATOP7} = CurrentDate - 3 else
{DDMAST.DATOP7} = CurrentDate -1
{DDMAST.DATOP7} is the date field from our core.
I tried this but got an error message of "A Number is Required Here" and it highlights the CurrentDate - 2.
Since we believe that Crystal Report is not viewing our dates as dates - but viewing them as numbers, what do I need to do to correct this? Someone suggested I'd need to extract each date portion (month, date, and year) and create variables to "build" a date that Crystal Reports would understand. Any suggestions?Hi,
You're correct. There appears to be two branches in this thread.
To address your issue, Crystal only recognizes actual date types, ie. Months, Days and Years. Your serial date isn't a recognized date type so we have to:
1) Determine which format your date field is
2) Convert your number to a date using the appropriate formatting.
I am assuming your dates will either be 6 (MMddyy) or 7 (yyyyddd) characters long. If there are other patterns you'll need to determine that.
The problem I found is what does your date for today (March 6, 2012) look like in MMddyy format?
Any month before October would never have a leading 0 if your date is stored as a number. So you should take that into account as well using my logic.
I added that into the logic by checking for a length of 5.
NumberVar Full := 030612;
StringVar myDate;
myDate := ToText (Full, 0, "", "");
Select Length (myDate)
Case 5: Date (2000 + ToNumber (myDate [4 to 5]), ToNumber (myDate [1]), ToNumber (myDate [2 to 3]))
Case 6: Date (2000 + ToNumber (myDate [5 to 6]), ToNumber (myDate [1 to 2]), ToNumber (myDate [3 to 4]))
Case 7: Date (ToNumber (myDate[1 to 4]), 1, 1) + (ToNumber (myDate [5 to 7]) - 1)
Default: Date (0, 0, 0);
If you edit the first line and change it to:
NumberVar Full := 2012066;
You will also get today's date. -
i am student and using Oracle 11g XE, now while trying out the date function..when time 15:00:00 was entered an error is being shown
the * is being shown under 15:00:00
SQL> create table ticket_header(ticket_no number(5), doi date, dot date, time_travel date, board_place varchar2(15), origin varchar2(15), destination varchar2(15), adults number(5), children number(5), total_fare number(5), route number(5));
SQL> insert into ticket_header values(01, '01-apr-96', '10-may-96', '15:00:00', 'Parrys', 'Madras', 'Madhurai', 1, 1, 60, 101);
insert into ticket_header values(01, '01-apr-96', '10-may-96', '15:00:00', 'Parrys', 'Madras', 'Madhurai', 1, 1, 60, 101)
ERROR at line 1:
ORA-01843: not a valid monthWhat's the purpose of time_travel column ? Will you do calculations on it, or it's only for reporting ? If the former, then date is better, otherwise you could use a varchar2 column. See this example :SQL> create table test(a date, b varchar2(8));
Table created.
SQL> insert into test values(to_date('15:00:00','hh24:mi:ss'),'15:00:00');
1 row created.
SQL> select to_char(a,'hh24:mi:ss'),b from test;
TO_CHAR(A,'HH24:MI:SS') B
15:00:00 15:00:00
SQL>About the error, you get it because your date format is 'DD-MON-RR' (the default), and inserted values have to conform with it, as in your other date columns, or you have to format them (e.g. to_date). -
Problem during summer time switch with all date functions
Hello,
During the summertime switch, we faced some issues in MII (12.1.9 Build(116)).
We are receiving the date/time in GMT XML format from our shop floor system.
I noticed when the date/time is between 02:00 and 03:00, all date functions are not working in expression editor (like in assign block).
For example : datefromxmlformat("2014-03-30T02:00:01","yyyyMMdd HHmmss") will return nothing... Even adding the Z to tell it's UTC does not help :
datefromxmlformat("2014-03-30T02:00:01Z","yyyyMMdd HHmmss"), but no success...
Even worst, the expression dateaddminutes("2014-03-30T02:00:01","10") will lead to a conversion exception...
Is there a solution to this ?
ThanksDaylight Savings Problem
Problems since new Daylight Savings Time
Java 1.6 07 vs xMII v11.5 and MII v12
Date duration calculation in the BLS
Server Downtime, Daylight saving time, and Time Shift - Using Central Development Services - SAP Library
Hi Olivier,
These all cover the topic, but many are for MII versions prior to yours. However each has some explanations which are worth reading. I would recommend the last one for an explanation of how Java and schedulers work during DST.
Regards, Mike
SAP Customer Experience Group - CEG -
Problem in adding new tabs in master data screens for RE-FX in ECC 6.0
Dear members,
I am working on RE-FX in ECC 6.0. I need some advice on the foll matter:
When displaying master data for Rental Object (Rental Space) (Tcode REBDRO) there are three tabs that are visible. They are General Data, Measurement and Area Shares. I would like the tab "Supplementary Texts" to also appear as the fourth tab. I have gone to the node Screen Sequence under the Dialog node under Usage View under Master Data in RE-FX.
I have added this screen to the sequence and have saved it successfully. Now when i am trying to display the rental space (RS) it is still not showing the tab that I just added. When I am trying to remove one of the existing tabs, by going into the same screen sequence I am successful in doing that. I am also able to add some of the other tabs. However every time I am trying to add the tab "Supplementary texts", I am failing to display it in the master data.
Request you to please help me as I am not an expert in RE-FX.
Regards,
Suvarghya DuttaHi Survaghya,
We are facing problem in adding tab to transaction RESCSU. We have followed all the steps mentioned by you , like
1. Go to transaction BUPT .
2. Select Application Object - transactuion BUS0.
3.Selected Application object as RESU.
4. And then went to all the following transactions.
RESCSU0002 SU: Field Groups
RESCSU0003 SU: Views
RESCSU0004 SU: Sections
RESCSU0005 SU: Screens
RESCSU0006 SU: Screen Sequences.
5. Created one z function group , having 2 FM for PBO and PAI.
6. Also one subscreen having the field mapped to CI_INCLUDE - CI_VISCSU.
But still we are not able to see the tab on the settlemet screen.
We tried changing the screen sequence of existing tabs, we could change that, but after performing all the steps mentioned above we could not add new tab.
Please suggest where are we committing a mistake.
Thanks & Regards,
Deepti -
Problem overloading "set data" function on Button DataGrid Renderer
Hi all, I'm hoping this is something simple.
I have a class that extends mx.controls.Button and implements mx.core.IDataRenderer. I need to set the button icon whenever the Data property is set from the DataGrid. My problem is that my overloaded set/get Data function are never called (I've stepped through the code in debug). Instead the set/get functions in Container.as (Flex 3.4 SDK) get called.
Here's the basics code:
exportButtonRenderer.as
package controls
import flash.events.Event;
import flash.events.MouseEvent;
import mx.controls.Button;
import mx.core.IDataRenderer;
import mx.controls.dataGridClasses.DataGridListData;
import mx.controls.listClasses.BaseListData;
import mx.events.FlexEvent;
import mx.controls.Alert;
import model.descriptors.compDescriptor;
import events.exportClickedEvent;
public class exportButtonRenderer extends Button implements IDataRenderer
// embed your icons
[Embed(source='/assets/icons/export.png')]
[Bindable]
public static var imageExport:Class;
[Embed(source='/assets/icons/blank.png')]
[Bindable]
public static var imageBlank:Class;
public function exportButtonRenderer()
super();
private var _listData:DataGridListData;
override public function get listData():BaseListData
return _listData;
override public function set listData(value:BaseListData):void
_listData = DataGridListData(value);
private var _data:Object;
override public function get data():Object
return _data;
override public function set data(value:Object):void
_data = value;
override protected function clickHandler(event:MouseEvent):void
super.clickHandler(event);
Now I know I'm using the Flexlib TreeGrid and not a standard DataGrid but when I trace through all the code all code firing the set/get functions is coming from the DataGrid anyway.
Here's the my Grid def in my main app mxml:
Header 1
<flexlib:TreeGrid
id="MKTXGrid"
dragEnabled="false" sortableColumns="false" showRoot="false"
disclosureClosedIcon="@Embed(source='/assets/icons/arrow_right.png')"
disclosureOpenIcon="@Embed(source='/assets/icons/arrow_down.png')"
folderOpenIcon="@Embed(source='/assets/icons/psd.png')"
folderClosedIcon="@Embed(source='/assets/icons/psd.png')"
click="MKTXGrid_clickHandler(event)"
doubleClickEnabled="true" doubleClick="MKTXGrid_doubleClickHandler(event)" left="0" right="0" top="0" bottom="16">
<flexlib:columns>
<flexlib:TreeGridColumn dataField="Name" headerText = "Name" minWidth="200" width="200" editable="true"/>
<mx:DataGridColumn dataField="ExportName" headerText = "Export Name"/>
<mx:DataGridColumn dataField="Export" headerText = "Export" width="50" minWidth="20" resizable="false">
<mx:itemRenderer>
<mx:Component>
<mx:Box horizontalAlign="center" width="100%" verticalScrollPolicy="off" horizontalScrollPolicy="off">
<controls:exportButtonRenderer label="Export" icon="@Embed(source='assets/icons/export.png')" width="12" height="12" useHandCursor="true">
<controls:click>
<![CDATA[
import events.exportClickedEvent;
var e:exportClickedEvent = new exportClickedEvent();
e.itemData = data;
dispatchEvent(e);
]]>
</controls:click>
</controls:exportButtonRenderer>
</mx:Box>
</mx:Component>
</mx:itemRenderer>
</mx:DataGridColumn>
</flexlib:columns>
</flexlib:TreeGrid>
Nothing too special going on.
I know this can be done, I've seen examples in the SDK:
http://opensource.adobe.com/svn/opensource/durango/trunk/ExternalFlexTools/com/dougmccune/ containers/accordionClasses/AccordionHeader.as
By the way I've stepped through the code of the TreeGridItemRenderer class in Flexlib which works correctly and the class def starts like this:
TreeGridItemRenderer.as
import flash.display.DisplayObject;
import flash.display.InteractiveObject;
import flash.display.Shape;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.geom.Point;
import flash.geom.Rectangle;
import flexlib.controls.TreeGrid;
import mx.controls.Image;
import mx.controls.dataGridClasses.DataGridListData;
import mx.controls.listClasses.BaseListData;
import mx.controls.listClasses.IDropInListItemRenderer;
import mx.controls.listClasses.IListItemRenderer;
import mx.core.IDataRenderer;
import mx.core.IFlexDisplayObject;
import mx.core.IToolTip;
import mx.core.SpriteAsset;
import mx.core.UIComponent;
import mx.core.UITextField;
import mx.events.FlexEvent;
import mx.events.ToolTipEvent;
import mx.events.TreeEvent;
import mx.managers.ILayoutManagerClient;
import mx.styles.IStyleClient;
public class TreeGridItemRenderer extends UIComponent
implements IDataRenderer,
IDropInListItemRenderer,
ILayoutManagerClient,
IListItemRenderer
Any help would be great!That's because you put your component in a Box. The DataGrid is setting the Box's .data property and no code is setting the one on your component. You shouldn't really need Box. You can override updateDisplayList to center your Button instead.
Alex Harui
Flex SDK Developer
Adobe Systems Inc.
Blog: http://blogs.adobe.com/aharui -
Problem in adding data to database thru UDO object
hi i have created udo object thru b1 udo wizard...successfully with object type as "d1". and table name is "dummy".
in that dummy table(master data table) i have added 3 user fileds called country, phone, email.
and i have designed a screen with 5 controls called code, name, country, phone and email and 2 buttons OK(1) and Cancel(2) with (unique id's).
and when i write the program where i have connected to B1 using UI DI....and successfully loaded the screen in to B1 and also enabled the menu controls (First Record, Next Record, Previous Record and Last record and also ADD). and when i entere some values in the controls and click on ADD i got a error message saying that """INVALID CODE ( dummy--Code)""""...
and even next previous first and last are also not working........
even i have also mentioned object type as "d1" in .srf file...
in my program even i have mentioned item event with out any logic.....
plz reply me the solution.......Dim oForm As SAPbouiCOM.Form
Dim creationPackage As SAPbouiCOM.FormCreationParams
creationPackage = sbo_application.CreateObject(SAPbouiCOM.BoCreatableObjectType.cot_FormCreationParams)
creationPackage.UniqueID = "UDO_TEST"
creationPackage.FormType = "UDO_TEST"
creationPackage.ObjectType = "UDO_TEST"
creationPackage.BorderStyle = SAPbouiCOM.BoFormBorderStyle.fbs_Fixed
oForm = sbo_application.Forms.AddEx(creationPackage)
oForm.Visible = True
oForm.Width = 300
oForm.Height = 400
Dim oItem As SAPbouiCOM.Item
oItem = oForm.Items.Add("1", BoFormItemTypes.it_BUTTON)
oItem.Top = 336
oItem.Left = 5
oItem = oForm.Items.Add("2", BoFormItemTypes.it_BUTTON)
oItem.Top = 336
oItem.Left = 80
oItem = oForm.Items.Add("3", SAPbouiCOM.BoFormItemTypes.it_EDIT)
oItem.Top = 5
oItem.Left = 100
oItem.Width = 100
oItem = oForm.Items.Add("30", SAPbouiCOM.BoFormItemTypes.it_STATIC)
oItem.Top = 5
oItem.Left = 5
oItem.Width = 90
oItem.Specific.caption = "Code"
oItem = oForm.Items.Add("4", SAPbouiCOM.BoFormItemTypes.it_EDIT)
oItem.Top = 20
oItem.Left = 100
oItem.Width = 100
oItem = oForm.Items.Add("40", SAPbouiCOM.BoFormItemTypes.it_STATIC)
oItem.Top = 20
oItem.Left = 5
oItem.Width = 90
oItem.Specific.caption = "Country"
oItem = oForm.Items.Add("5", SAPbouiCOM.BoFormItemTypes.it_EDIT)
oItem.Top = 35
oItem.Left = 100
oItem.Width = 100
oItem = oForm.Items.Add("50", SAPbouiCOM.BoFormItemTypes.it_STATIC)
oItem.Top = 35
oItem.Left = 5
oItem.Width = 90
oItem.Specific.caption = "Phone"
oItem = oForm.Items.Add("6", SAPbouiCOM.BoFormItemTypes.it_EDIT)
oItem.Top = 50
oItem.Left = 100
oItem.Width = 100
oItem = oForm.Items.Add("60", SAPbouiCOM.BoFormItemTypes.it_STATIC)
oItem.Top = 50
oItem.Left = 5
oItem.Width = 90
oItem.Specific.caption = "Email"
oForm.Items.Item("3").Specific.DataBind.SetBound(True, "@UDO_TEST", "Code")
oForm.Items.Item("4").Specific.DataBind.SetBound(True, "@UDO_TEST", "U_COUNTRY")
oForm.Items.Item("5").Specific.DataBind.SetBound(True, "@UDO_TEST", "U_PHONE")
oForm.Items.Item("6").Specific.DataBind.SetBound(True, "@UDO_TEST", "U_EMAIL")
oForm.DataBrowser.BrowseBy = "3"
Edited by: János Nagy on Oct 15, 2009 1:53 PM -
Date Functions in Discoverer Query
Hi,
It has been a while since I logged into the forum. Sorry at present my contribution is only to get help. Hope to help others in future.
Here is teh problem I am facing.
We have frequent requirement to get the sales comparison by last year to this year
in Week to Date, Month to Date, Year to Date timeline.
To accomplish I use Custom Date functions in my Discoverer which results in query like below
SELECT o100229.curr_division_code,
SUM (DECODE (discotw_admin.fiscal_cal_by_wk.flyrweek (:fyrweek),
o100059.fiscal_year_week, o100341.tot_lines_ext_i_s_avg_cst,
0
The "discotw_admin.fiscal_cal_by_wk.flyrweek (:fyrweek)" is the function I use to get the Last year week number nased on the parameter for this week number.
But the problem with this approach is it fires the Function every time a record is read by the query which makes the query to run long time.
Is there anyway I can use a subquery that fires the function only once and use the value of the function in the main query in Discoverer.
I did tried to create a custom folder for the Date functions and use it in the query so that the query references the field on the cusom folder. But still I do not see any improvement in the performance.
Thanks in advance
JayHi Jay
Yes, calculating like this on every row will have a drag on performance.
Have you considered using one of the analytic functions LAG or LEAD? They are designed for this type of reporting.
If you have considered them and rejected them can you explain why.
Another possibility is to use a SUM analytic like this:
SUM(Selling Price SUM)
OVER(PARTITION BY Size,Product
ORDER BY TO_DATE("Year",'YYYY')
RANGE BETWEEN INTERVAL '1' YEAR PRECEDING
AND INTERVAL '1' YEAR PRECEDING )
The caveat here is that RANGE INTERVAL must be a YEAR and the ORDER BY must return a date!
Does this help?
Best wishes
Michael -
ContextMenuItem with a single respond function problem...
I am dynamically generating a context menu much like this:
cmia = new Array();
var ccc:int =1;
for each (var m:XML in matched) {
cmi = new ContextMenuItem(m.info.toString(), true);
trace(m._id.toString());
cmi.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,
function (e:Event) {contextMenuItem_menuItemSelect(e,m,ccc);});
cmia.push(cmi);
ccc++;
(This is mostly test code)
And my responder function look smuch like this:
private function contextMenuItem_menuItemSelect(e:Event,
m:XML, c:int):void {
trace("contextMenuItem_menuItemSelect:"+e);
Alert.show(m._id.toString(), ":"+c );
My problem is as follows,
when I create for example two context menu's, then the Alert
and trace always shows data of the latest added item,
in the case where I show the number it's always 3 (not even
2!!!!)
Is there a way to figure out from the event listener to know
what menu item was pressed? Currently I have no way of knowing.
thanks,
Ries van TwiskYou should (or would ) have used the control properly,
but to know, why it did not show up, we need to see the template.
send me your to fusionDOTobjectATgmailDOTcom -
Data Federator Universe Date Functions
Hi,
I created a Data Federator Universe from target tables (Source Tables from: Sql Server 2005 and Oracle 10g). Now, I want to create a object in the universe: "Days between 2 dates"(coming from 2 different target tables). I don't see any other date functions other than CURDATE(). How to create my object?
Alternatively, Can I create a caliculated column in the existing target table? For Example, I want to create a new column "Days between 2 Dates" from 2 different tables by using a formula in Default mapping of the target table.
Thanks & Regards,
PeterHi Amit,
Thanks for your reply.
Ok. So, Universe on top of Data Federator has limited functionality.
And, other option you mentioned is on report level. I am creating an adhoc universe and I have few objects which will calculate days between 2 dates coming from 2 different tables.
But, how can I achieve this on Data Federator level. I have no function there to find Days Between 2 dates. I see lot of time and date functions but not the one I required. Also, I added a column in the target table and tried to apply the formula there in the default mapping area. But, I see only the selected target table. I need another date column from another table, which is not displayed in the default mapping area.
How can I achieve this?
Regards,
-Peter -
Hello friends
I am facing a problem in the data load. I modified a cube by adding few Characteristics. The characteristics were first added in the communication structure and in the transfer rules. Then I reactivated the update routine. Finally, I deleted any previous data load request for the cube and did a full load. However i wasn't able to find any data for the newly added fields in the Cube.
Did I miss something. Any help will be appreciated in this regard.
Thanks
Rishihow come ODS came in to picture,this was not mentioned in ur prev post,are u loading it from ODS to CUbe and having problems??
looks u are not using DTP ,in that case check the change log for the newly added fields and then have data flow as ODS>PSA>Cube and check the PSA if those fields are present ..if yes check for update rules in debugging mode of those gets deleted
Hope it Helps
Chetan
@CP.. -
Date function doesn't work in Message Subject when scheduling batch
Hi,
When I was scheduling a batch and went to PDF attached E-Mail panel, in the Message Subject line I added a function <<Date(yyyy-MM-dd)>>,but when the email was sent, the date function in the subject didn't show the actual date, just showed the original function text <<Date(yyyy-MM-dd)>>, Is there anyone can help on this? Thanks in advance.Hi,
Can I know the Hyperion Version you referring ?
regards,
Harish. -
JTable sorting - problem when adding elements (complete code inside)
I�m writing this email with reference to a recent posting here but this time with the code example. (I apologize for the duplicated posting � this time it will be with the code)
Problem: when adding more elements to the JTable (sorted) the exception: ArrayIndexOutOfBoundsException is thrown.
Example: If the elements in the table are 10 and then the user requests for 8 � the table will produce the correct result. However, if the user will ask for 11 items (>10) the exception will be thrown.
The program: The program below (compiles and running). A JTable is constructed with 3 items, when you click the button - the return result should be 4 items - this will generate the error, WHY?
I would highly appreciate your thoughts why this is happening and most importantly � how to fix it.
Thanks a lot
3 files:
(1) TableSorterDemo
(2) Traveler
(3)TableSorter
//TableSorterDemo:
package sorter;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
* TableSorterDemo is like TableDemo, except that it
* inserts a custom model -- a sorter -- between the table
* and its data model. It also has column tool tips.
public class TableSorterDemo implements ActionListener
private JPanel superPanel;
private JButton clickMe = new JButton("click me to get diff data");
private boolean DEBUG = false;
private DefaultListModel defaultListModel;
private JTable table;
public TableSorterDemo()
superPanel = new JPanel(new BorderLayout());
defaultListModel = new DefaultListModel();
init1();
TableSorter sorter = new TableSorter(new MyTableModel(defaultListModel)); //ADDED THIS
table = new JTable(sorter); //NEW
sorter.setTableHeader(table.getTableHeader()); //ADDED THIS
table.setPreferredScrollableViewportSize(new Dimension(500, 70));
//Set up tool tips for column headers.
table.getTableHeader().setToolTipText(
"Click to specify sorting; Control-Click to specify secondary sorting");
//Create the scroll pane and add the table to it.
JScrollPane scrollPane = new JScrollPane(table);
//Add the scroll pane to this panel.
superPanel.add("Center", scrollPane);
superPanel.add("South",clickMe);
clickMe.addActionListener(this);
public JPanel getPanel()
return superPanel;
public void init1()
//in real life this will be done from the db
Traveler a = new Traveler();
Traveler b = new Traveler();
Traveler c = new Traveler();
a.setFirstName("Elvis");
a.setLastName("Presley");
a.setSprot("Ping Pong");
a.setNumYears(3);
a.setVegetarian(true);
b.setFirstName("Elton");
b.setLastName("John");
b.setSprot("Soccer");
b.setNumYears(2);
b.setVegetarian(true);
c.setFirstName("shaquille");
c.setLastName("oneil");
c.setSprot("Golf");
c.setNumYears(22);
c.setVegetarian(true);
defaultListModel.addElement(a);
defaultListModel.addElement(b);
defaultListModel.addElement(c);
public void init2()
//in real life this will be done from the db
Traveler d = new Traveler();
Traveler e = new Traveler();
Traveler f = new Traveler();
Traveler g = new Traveler();
d.setFirstName("John");
d.setLastName("Smith");
d.setSprot("Tennis");
d.setNumYears(32);
d.setVegetarian(true);
e.setFirstName("Ron");
e.setLastName("Cohen");
e.setSprot("Baseball");
e.setNumYears(12);
e.setVegetarian(true);
f.setFirstName("Donald");
f.setLastName("Mac Novice");
f.setSprot("Vallyball");
f.setNumYears(1);
f.setVegetarian(true);
g.setFirstName("Eithan");
g.setLastName("Superstar");
g.setSprot("Vallyball");
g.setNumYears(21);
g.setVegetarian(true);
defaultListModel.addElement(d);
defaultListModel.addElement(e);
defaultListModel.addElement(f);
defaultListModel.addElement(g);
class MyTableModel extends AbstractTableModel
private DefaultListModel myModel;
public MyTableModel(DefaultListModel m)
myModel=m;
private String[] columnNames = {"First Name",
"Last Name",
"Sport",
"# of Years",
"Vegetarian"};
public int getColumnCount()
return columnNames.length;
public int getRowCount()
return myModel.size();
public String getColumnName(int column)
return getNames()[column];
public String[] getNames()
String[] names = {"First Name", "Last Name", "Sport", "# of Years", "Vegetarian"};
return names;
public Object getValueAt(int row, int col)
return distributeObjectsInTable(row, col, (Traveler) myModel.elementAt(row));
public Object distributeObjectsInTable(int row, int col, Traveler tr)
switch(col)
case 0:
return tr.getFirstName();
case 1:
return tr.getLastName();
case 2:
return tr.getSprot();
case 3:
return new Integer(tr.getNumYears());
case 4:
return new Boolean (tr.isVegetarian());
default:
return "Error";
public Class getColumnClass(int c)
return getValueAt(0, c).getClass();
private static void createAndShowGUI()
//Make sure we have nice window decorations.
JFrame.setDefaultLookAndFeelDecorated(true);
//Create and set up the window.
JFrame frame = new JFrame("TableSorterDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Create and set up the content pane.
TableSorterDemo newContentPane = new TableSorterDemo();
newContentPane.getPanel().setOpaque(true); //content panes must be opaque
frame.setContentPane(newContentPane.getPanel());
//Display the window.
frame.pack();
frame.setVisible(true);
public static void main(String[] args)
//Schedule a job for the event-dispatching thread:
//creating and showing this application's GUI.
javax.swing.SwingUtilities.invokeLater(new Runnable()
public void run()
createAndShowGUI();
public void actionPerformed(ActionEvent ae)
if (ae.getSource()==clickMe)
defaultListModel.removeAllElements();
init2(); //if the size of the model was less than 2 items - the result will be ok.
//in other words, if you commens the last 2 rows of this method (addElement(f) & g)
// the result will be fine.
table.updateUI();
}//(2) Traveler
package sorter;
public class Traveler
private String firstName;
private String lastName;
private String sprot;
private int numYears;
private boolean vegetarian;
public String getFirstName()
return firstName;
public String getLastName()
return lastName;
public int getNumYears()
return numYears;
public String getSprot()
return sprot;
public boolean isVegetarian()
return vegetarian;
public void setFirstName(String firstName)
this.firstName = firstName;
public void setLastName(String lastName)
this.lastName = lastName;
public void setNumYears(int numYears)
this.numYears = numYears;
public void setSprot(String sprot)
this.sprot = sprot;
public void setVegetarian(boolean vegetarian)
this.vegetarian = vegetarian;
}//(3)TableSorter
package sorter;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.util.List;
import javax.swing.*;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.*;
public class TableSorter extends AbstractTableModel {
protected TableModel tableModel;
public static final int DESCENDING = -1;
public static final int NOT_SORTED = 0;
public static final int ASCENDING = 1;
private static Directive EMPTY_DIRECTIVE = new Directive(-1, NOT_SORTED);
public static final Comparator COMPARABLE_COMAPRATOR = new Comparator() {
public int compare(Object o1, Object o2) {
return ((Comparable) o1).compareTo(o2);
public static final Comparator LEXICAL_COMPARATOR = new Comparator() {
public int compare(Object o1, Object o2) {
return o1.toString().compareTo(o2.toString());
private Row[] viewToModel;
private int[] modelToView;
private JTableHeader tableHeader;
private MouseListener mouseListener;
private TableModelListener tableModelListener;
private Map columnComparators = new HashMap();
private List sortingColumns = new ArrayList();
public TableSorter() {
this.mouseListener = new MouseHandler();
this.tableModelListener = new TableModelHandler();
public TableSorter(TableModel tableModel) {
this();
setTableModel(tableModel);
public TableSorter(TableModel tableModel, JTableHeader tableHeader) {
this();
setTableHeader(tableHeader);
setTableModel(tableModel);
private void clearSortingState() {
viewToModel = null;
modelToView = null;
public TableModel getTableModel() {
return tableModel;
public void setTableModel(TableModel tableModel) {
if (this.tableModel != null) {
this.tableModel.removeTableModelListener(tableModelListener);
this.tableModel = tableModel;
if (this.tableModel != null) {
this.tableModel.addTableModelListener(tableModelListener);
clearSortingState();
fireTableStructureChanged();
public JTableHeader getTableHeader() {
return tableHeader;
public void setTableHeader(JTableHeader tableHeader) {
if (this.tableHeader != null) {
this.tableHeader.removeMouseListener(mouseListener);
TableCellRenderer defaultRenderer = this.tableHeader.getDefaultRenderer();
if (defaultRenderer instanceof SortableHeaderRenderer) {
this.tableHeader.setDefaultRenderer(((SortableHeaderRenderer) defaultRenderer).tableCellRenderer);
this.tableHeader = tableHeader;
if (this.tableHeader != null) {
this.tableHeader.addMouseListener(mouseListener);
this.tableHeader.setDefaultRenderer(
new SortableHeaderRenderer(this.tableHeader.getDefaultRenderer()));
public boolean isSorting() {
return sortingColumns.size() != 0;
private Directive getDirective(int column) {
for (int i = 0; i < sortingColumns.size(); i++) {
Directive directive = (Directive)sortingColumns.get(i);
if (directive.column == column) {
return directive;
return EMPTY_DIRECTIVE;
public int getSortingStatus(int column) {
return getDirective(column).direction;
private void sortingStatusChanged() {
clearSortingState();
fireTableDataChanged();
if (tableHeader != null) {
tableHeader.repaint();
public void setSortingStatus(int column, int status) {
Directive directive = getDirective(column);
if (directive != EMPTY_DIRECTIVE) {
sortingColumns.remove(directive);
if (status != NOT_SORTED) {
sortingColumns.add(new Directive(column, status));
sortingStatusChanged();
protected Icon getHeaderRendererIcon(int column, int size) {
Directive directive = getDirective(column);
if (directive == EMPTY_DIRECTIVE) {
return null;
return new Arrow(directive.direction == DESCENDING, size, sortingColumns.indexOf(directive));
private void cancelSorting() {
sortingColumns.clear();
sortingStatusChanged();
public void setColumnComparator(Class type, Comparator comparator) {
if (comparator == null) {
columnComparators.remove(type);
} else {
columnComparators.put(type, comparator);
protected Comparator getComparator(int column) {
Class columnType = tableModel.getColumnClass(column);
Comparator comparator = (Comparator) columnComparators.get(columnType);
if (comparator != null) {
return comparator;
if (Comparable.class.isAssignableFrom(columnType)) {
return COMPARABLE_COMAPRATOR;
return LEXICAL_COMPARATOR;
private Row[] getViewToModel() {
if (viewToModel == null) {
int tableModelRowCount = tableModel.getRowCount();
viewToModel = new Row[tableModelRowCount];
for (int row = 0; row < tableModelRowCount; row++) {
viewToModel[row] = new Row(row);
if (isSorting()) {
Arrays.sort(viewToModel);
return viewToModel;
public int modelIndex(int viewIndex)
return getViewToModel()[viewIndex].modelIndex;
private int[] getModelToView()
if (modelToView == null) {
int n = getViewToModel().length;
modelToView = new int[n];
for (int i = 0; i < n; i++) {
modelToView[modelIndex(i)] = i;
return modelToView;
// TableModel interface methods
public int getRowCount() {
return (tableModel == null) ? 0 : tableModel.getRowCount();
public int getColumnCount() {
return (tableModel == null) ? 0 : tableModel.getColumnCount();
public String getColumnName(int column) {
return tableModel.getColumnName(column);
public Class getColumnClass(int column) {
return tableModel.getColumnClass(column);
public boolean isCellEditable(int row, int column) {
return tableModel.isCellEditable(modelIndex(row), column);
public Object getValueAt(int row, int column) {
return tableModel.getValueAt(modelIndex(row), column);
public void setValueAt(Object aValue, int row, int column) {
tableModel.setValueAt(aValue, modelIndex(row), column);
// Helper classes
private class Row implements Comparable {
private int modelIndex;
public Row(int index) {
this.modelIndex = index;
public int compareTo(Object o) {
int row1 = modelIndex;
int row2 = ((Row) o).modelIndex;
for (Iterator it = sortingColumns.iterator(); it.hasNext();) {
Directive directive = (Directive) it.next();
int column = directive.column;
Object o1 = tableModel.getValueAt(row1, column);
Object o2 = tableModel.getValueAt(row2, column);
int comparison = 0;
// Define null less than everything, except null.
if (o1 == null && o2 == null) {
comparison = 0;
} else if (o1 == null) {
comparison = -1;
} else if (o2 == null) {
comparison = 1;
} else {
comparison = getComparator(column).compare(o1, o2);
if (comparison != 0) {
return directive.direction == DESCENDING ? -comparison : comparison;
return 0;
private class TableModelHandler implements TableModelListener {
public void tableChanged(TableModelEvent e) {
// If we're not sorting by anything, just pass the event along.
if (!isSorting()) {
clearSortingState();
fireTableChanged(e);
return;
// If the table structure has changed, cancel the sorting; the
// sorting columns may have been either moved or deleted from
// the model.
if (e.getFirstRow() == TableModelEvent.HEADER_ROW) {
cancelSorting();
fireTableChanged(e);
return;
// We can map a cell event through to the view without widening
// when the following conditions apply:
// a) all the changes are on one row (e.getFirstRow() == e.getLastRow()) and,
// b) all the changes are in one column (column != TableModelEvent.ALL_COLUMNS) and,
// c) we are not sorting on that column (getSortingStatus(column) == NOT_SORTED) and,
// d) a reverse lookup will not trigger a sort (modelToView != null)
// Note: INSERT and DELETE events fail this test as they have column == ALL_COLUMNS.
// The last check, for (modelToView != null) is to see if modelToView
// is already allocated. If we don't do this check; sorting can become
// a performance bottleneck for applications where cells
// change rapidly in different parts of the table. If cells
// change alternately in the sorting column and then outside of
// it this class can end up re-sorting on alternate cell updates -
// which can be a performance problem for large tables. The last
// clause avoids this problem.
int column = e.getColumn();
if (e.getFirstRow() == e.getLastRow()
&& column != TableModelEvent.ALL_COLUMNS
&& getSortingStatus(column) == NOT_SORTED
&& modelToView != null) {
int viewIndex = getModelToView()[e.getFirstRow()];
fireTableChanged(new TableModelEvent(TableSorter.this,
viewIndex, viewIndex,
column, e.getType()));
return;
// Something has happened to the data that may have invalidated the row order.
clearSortingState();
fireTableDataChanged();
return;
private class MouseHandler extends MouseAdapter {
public void mouseClicked(MouseEvent e) {
JTableHeader h = (JTableHeader) e.getSource();
TableColumnModel columnModel = h.getColumnModel();
int viewColumn = columnModel.getColumnIndexAtX(e.getX());
int column = columnModel.getColumn(viewColumn).getModelIndex();
if (column != -1) {
int status = getSortingStatus(column);
if (!e.isControlDown()) {
cancelSorting();
// Cycle the sorting states through {NOT_SORTED, ASCENDING, DESCENDING} or
// {NOT_SORTED, DESCENDING, ASCENDING} depending on whether shift is pressed.
status = status + (e.isShiftDown() ? -1 : 1);
status = (status + 4) % 3 - 1; // signed mod, returning {-1, 0, 1}
setSortingStatus(column, status);
private static class Arrow implements Icon {
private boolean descending;
private int size;
private int priority;
public Arrow(boolean descending, int size, int priority) {
this.descending = descending;
this.size = size;
this.priority = priority;
public void paintIcon(Component c, Graphics g, int x, int y) {
Color color = c == null ? Color.GRAY : c.getBackground();
// In a compound sort, make each succesive triangle 20%
// smaller than the previous one.
int dx = (int)(size/2*Math.pow(0.8, priority));
int dy = descending ? dx : -dx;
// Align icon (roughly) with font baseline.
y = y + 5*size/6 + (descending ? -dy : 0);
int shift = descending ? 1 : -1;
g.translate(x, y);
// Right diagonal.
g.setColor(color.darker());
g.drawLine(dx / 2, dy, 0, 0);
g.drawLine(dx / 2, dy + shift, 0, shift);
// Left diagonal.
g.setColor(color.brighter());
g.drawLine(dx / 2, dy, dx, 0);
g.drawLine(dx / 2, dy + shift, dx, shift);
// Horizontal line.
if (descending) {
g.setColor(color.darker().darker());
} else {
g.setColor(color.brighter().brighter());
g.drawLine(dx, 0, 0, 0);
g.setColor(color);
g.translate(-x, -y);
public int getIconWidth() {
return size;
public int getIconHeight() {
return size;
private class SortableHeaderRenderer implements TableCellRenderer {
private TableCellRenderer tableCellRenderer;
public SortableHeaderRenderer(TableCellRenderer tableCellRenderer) {
this.tableCellRenderer = tableCellRenderer;
public Component getTableCellRendererComponent(JTable table,
Object value,
boolean isSelected,
boolean hasFocus,
int row,
int column) {
Component c = tableCellRenderer.getTableCellRendererComponent(table,
value, isSelected, hasFocus, row, column);
if (c instanceof JLabel) {
JLabel l = (JLabel) c;
l.setHorizontalTextPosition(JLabel.LEFT);
int modelColumn = table.convertColumnIndexToModel(column);
l.setIcon(getHeaderRendererIcon(modelColumn, l.getFont().getSize()));
return c;
private static class Directive {
private int column;
private int direction;
public Directive(int column, int direction) {
this.column = column;
this.direction = direction;
}The table listens to the TableModel for changes. Changing the table by adding/removing
rows or columns has no affect on its table model. If you make changes to the table model
the table will be notified by its TableModelListener and change its view. So tell
MyTableModel about the change of data:
public class TableSorterDemo implements ActionListener
MyTableModel tableModel;
public TableSorterDemo()
defaultListModel = new DefaultListModel();
init1();
tableModel = new MyTableModel(defaultListModel);
TableSorter sorter = new TableSorter(tableModel);
public void actionPerformed(ActionEvent ae)
if (ae.getSource()==clickMe)
defaultListModel.removeAllElements();
init2();
tableModel.fireTableStructureChanged();
} -
Date popup problem in APEX 3.1
Hi
I have a date picker (DD-MM-YYYY HH24:MI) and after upgrading to APEX 3.1 from APEX 3.0.1 the popup window height is too small.
The end user is having to resize the window to click on the OK button.
Is there a file I can edit to increase the height, couldnt find it in templates/themes.
Regards
AdamHi Adam,
This is a bug in APEX 3.1. It was discussed here:
Apex 3.1 Upgrade Issue - dba_lock and date picker display
and here:
Date Picker problem in Apex 3.1
I'll let Carl investigate and provide an official response and recommendation. Although I know where this problem is occurring.
The size of the popup calendar window is hard-wired in the file apex/images/javascript/apex_3_1.js. In APEX 3.0, the size of the popup window was determined programatically at runtime and was a function of the date format, if it included a time component or not.
The uncompressed, readable version of this same file is in apex/images/javascript/uncompressed/apex_3_1.js. Look for p_DatePicker and you'll see what I'm talking about. You'll see the height is hard-wired to 210 and width to 258. In APEX 3.0, the height was set to 255 if the date format contained a time component.
So my suggestion, until Carl provides an official response, is to look for '210' in apex/images/javascript/apex_3_1.js and change this to 255. Granted, all calendar popup windows will be this big, but it won't put as great a burden on the end-user.
I hope this helps.
Joel -
Help with Date function in sql query....
My question I guess is really 2...I'm trying to use the date function as a comparison in my WHERE clause in my sql command.
1. My date format is dd-MMM-yy eg. (01-Apr-06) ... my problem is the Apr is lower case where my field in the database is 01-APR-06 so when I compare 01-Apr-06 to 01-APR-06 is doesnt find any rows. Is there away that I can make the Apr all upper case so that it is APR.
2. My second problem is getting this "date" field to work in my sql stmt I keep getting errors and it works fine if I take my attempts at trying to compare the date.
--------------Date Code----------------------------------------------------------
<%!
String getFormattedDate(java.util.Date d)
SimpleDateFormat simpleDate = new SimpleDateFormat("01-MMM-yy");
return simpleDate.format(d);
%>
<%
java.util.Date d = new java.util.Date();
String dateString = getFormattedDate (d);
%>
---------------------------Sql statment------------------------------------------
ResultSet rset = stmt.executeQuery ("SELECT name " + " FROM table where rdate = '01-APR-06' order by name ");
Currently Im just hard coding the date but I need to make it so it uses the date code...so....
rdate should equal the date from the formatted date in upper case
something like
rdate = <%= dateString %>
Thanks in advance for any ideas anyone may have...There are sql functions upper & lower.
SELECT name FROM table where upper(rdate) = '01-APR-06' order by name Or you could convert the date to a string, and use the toUpperCase & toLowerCase java.lang.String methods. It doesn't make much of a difference--do you want the java compiler to do the string conversion or the database?
Maybe you are looking for
-
Create Vendor manually by XK01
Dear Gurus , I am not able to create a Vendor with internal number range assignment. I have defined a vendor account group 8598 for services provider account group vendors and assigned a number range 85980001 to 85989999 to it with internal number
-
Getting an error when installing BI Publisher Desktop
Hi, Is anyone getting an error when installing BI Publisher Desktop? I'm getting an error when I'm installing BI Publisher Desktop and the error message is compile error in hidden module: Module_ini. Any feedback would be appreciated.
-
I lost my applications on my Iphon4 as I upgrade to ISO 5. hoto retrive them?
I lost my applications on my Iphon4 as I upgrade to ISO 5. hoto retrive them?
-
Changing DNS Server on Lion OD/Kerberos Master
I have an interesting task ahead of me, but am unsure how best to proceed. I spent days setting-up my new Lion Server and attached Pegasus RAID array. There are 140 users, 8 share points, and hundreds of different ACL permutations within the AFP sha
-
Can i export my iphotos to my iphone 4s?
can i export my iphotos to my iphone?