Restricting SELECT to return 'n' hits only
Hi everybody!
I have a problem that I hope you can help me solve, and it is regarding the SELECT statement.
I am using SELECT to check user input and make sure there is data to be output on the screen..The problem is that I do not need to query the entire table (BSEG in my case) but only to make sure there is at least one result of the query.
So my question is: How do you tell a SELECT query to restrict the number of returned hits to 1 or 2 or n hits? Or is there a way to leave the SELECT loop once a hit is found? Is there a way to do this without using SELECT SINGLE? (I tried SELECT SINGLE, but honestly, it makes things complicated for me - it means i have to introduce some new structure, and I'd like to avoid this, if possibile)
Please help if you are able to, points will be awarded.
Thanks!
S.
Hi,
you can use select up to 1 rows..
Check this example..
SELECT * UP TO 1 ROWS FROM BSEG
WHERE BUKRS = '0001' " Company code
AND BELNR = 'xxxxxx' " Accounting document
AND GJAHR = '2006'.
ENDSELECT.
OR
*It can be a variable also..
DATA: V_INT TYPE I.
V_INT = 2.
SELECT * UP TO V_INT ROWS FROM BSEG
WHERE BUKRS = '0001' " Company code
AND BELNR = 'xxxxxx' " Accounting document
AND GJAHR = '2006'.
ENDSELECT.
Thanks,
Naren
Similar Messages
-
Report execute time nd how many records will be returned before hitting the "run" option?
Post Author: Prasad15
CA Forum: WebIntelligence Reporting
Is there any way to know how long the report executes and how many records will be returned before hitting the "run" option?
Regards
PrasadTo know if the report is going to return more than 10,000 records, you first have to run the query with a 'select count(1) from ... where ...' (with the same from and where clauses as you normal query). Since this takes about the same time as runnng your report, I wonder if you really gain anything (although formatting may take some time too).
You may simplify the select count(1) query by omitting all the lookup tables that are only needed for formatting. That way your query may run a lot faster. You can put this in your after parameter form trigger. -
"select count(*)" and "select single *" returns different result
Good day!
product version SAP ECC 6.0
oracle10
data transfers from external oracle db into customer tables using direct oracle db link
sometimes I get case with different results from 2 statements
*mytable has 10 rows
*1st statement
data: cnt type I value 0.
select count( * ) into cnt from mytable WHERE myfield_0 = 123 and myfield_1 = '123'.
*cnt returns 10 - correct
*2nd statement
select single * from mytable WHERE myfield_0 = 123 and myfield_1 = '123'.
*sy-dbcnt returns 0
*sy-subrc returns 4 - incorrect, 10 rows are "invisible"
but
1. se16 shows correct row number
2. I update just one row from "invisible" rows using se16 and 2nd statement returns correct result after that
can not understand why
thank you in advance.Thank you, Vishal
but,
general problem is that
1. both statements have the same WHERE conditions
2. 1st return resultset with data (sy-dbcnt=10), 2nd return empty dataset, but must return 1 in sy-dbcnt
Yes, different meaning, you are right, but must 2nd must return 1, because of "select single *" construction, not 0.
Dataset to process is the same, WHERE conditions are equal...
I think the problem is that how ABAP interperets select count(*) and "select single *".
Maybe "select count (*)" scans only PK from index page(s)? and "select single *" scans data pages? and something is wrong with that?
I'm new in SAP and didn't find any SAP tool to trace dump of data and indexes pages with Native SQL.
se16 shows all records.
And why after simple manual update of just one record using se16 "select single *" returns 1?
I've just marked one row to update, didn't change any data, then pressed "save". -
I am using a logical database in HR.I use the selection screen of the logical database but i want to restrict a select options for only permit introduce one value.
I restrict in abap to only use values ,nor intervals by example and other conditions.Now i have to restrict to only one value.
it must be work like a parameterHi,
U can use No-extension to restrict multiple selcet option button.
See this link
http://www.sapdevelopment.co.uk/reporting/selscr/selscr_restrictso.htm
*: Report: ZRESTRICT_SELOPT :
*: Author: www.SAPdev.co.uk :
*: Date : 2004 :
*: Description: Demonstrates how to restrict select options to only :
*: allow specific restriction options: :
*: i.e.. EQ, NE, BT etc.. :
REPORT ZRESTRICT_SELOPT.
* Include type pool SSCR
TYPE-POOLS sscr.
TABLES: EKPO.
* Selection-screen
select-options : so_ebeln for ekpo-ebeln,
so_ebelp for ekpo-ebelp.
* Variables for populating restriction data
DATA: gd_restrict TYPE sscr_restrict. "structure containing 2 tables
DATA: gd_optlist TYPE sscr_opt_list, "header line for table 1
gd_*** TYPE sscr_***. "header line for table 2
*INITIALIZATION.
INITIALIZATION.
* Restrict SO_EBELN to only except EQ, BT and NE.
gd_optlist-name = 'KEY1'. "Can be anything
gd_optlist-options-eq = 'X'.
gd_optlist-options-bt = 'X'.
gd_optlist-options-ne = 'X'.
APPEND gd_optlist TO gd_restrict-opt_list_tab.
clear: gd_optlist.
gd_***-kind = 'S'.
gd_***-name = 'SO_EBELN'.
gd_***-sg_main = 'I'.
gd_***-sg_addy = SPACE.
gd_***-op_main = 'KEY1'. "Must be same as above
APPEND gd_*** TO gd_restrict-***_tab.
clear: gd_***.
* Restrict SO_EBELP to only except CP, GE, LT.
gd_optlist-name = 'KEY2'. "Can be anything
gd_optlist-options-cp = 'X'.
gd_optlist-options-ge = 'X'.
gd_optlist-options-lt = 'X'.
APPEND gd_optlist TO gd_restrict-opt_list_tab.
clear: gd_optlist.
gd_***-kind = 'S'.
gd_***-name = 'SO_EBELP'.
gd_***-sg_main = 'I'.
gd_***-sg_addy = SPACE.
gd_***-op_main = 'KEY2'. "Must be same as above
APPEND gd_*** TO gd_restrict-***_tab.
clear: gd_***.
CALL FUNCTION 'SELECT_OPTIONS_RESTRICT'
EXPORTING
* PROGRAM =
restriction = gd_restrict
* DB = ' '
EXCEPTIONS
TOO_LATE = 1
REPEATED = 2
SELOPT_WITHOUT_OPTIONS = 3
SELOPT_WITHOUT_SIGNS = 4
INVALID_SIGN = 5
EMPTY_OPTION_LIST = 6
INVALID_KIND = 7
REPEATED_KIND_A = 8
OTHERS = 9.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
Kindly reward points for the answer which helped u and close the thread if ur problem got solved.
Message was edited by: Judith Jessie Selvi -
Restrict Select-Options for Logical Database field
The way we restrict select options for custom defined select option fields on selection screen.. can we restrict select options for standard Logical Database fields?
i.e. report uses PNPCE logical database and has field called PERNR. I want to restrict select options for this PERNR field so that it has options for 'Select single values' only.
Thanks,
Falguni
Edited by: Falguni V on Nov 13, 2010 6:42 AMYou can user AT SELECTION-SCREEN event, and check whether any record is having high value for PNPPERNR.
-
Restrict selection from LDB 'DDF' based on FI Doc number(BELNR)?
Hi all,
I am trying to restrict selection from LDB 'DDF' based on FI Doc number(BELNR).
Even if i pass only one document number in selection-screen, the program is still printing lot of documents?
Where I am going wrong?
*& Report ZSUB_READ_LDB
REPORT ZSUB_READ_LDB.
DATA wa_BSEG TYPE BSEG.
SELECT-OPTIONS s_BELNR FOR wa_BSEG-BELNR.
DATA: callback TYPE TABLE OF ldbcb,
callback_wa LIKE LINE OF callback.
DATA: seltab TYPE TABLE OF rsparams,
seltab_wa LIKE LINE OF seltab.
callback_wa-ldbnode = 'BSEG'.
callback_wa-get = 'X'.
callback_wa-get_late = 'X'.
callback_wa-cb_prog = sy-repid.
callback_wa-cb_form = 'CALLBACK_BSEG'.
APPEND callback_wa TO callback.
CLEAR callback_wa.
seltab_wa-kind = 'S'.
seltab_wa-selname = 'BELNR'.
LOOP AT s_BELNR.
MOVE-CORRESPONDING s_BELNR TO seltab_wa.
APPEND seltab_wa TO seltab.
ENDLOOP.
CALL FUNCTION 'LDB_PROCESS'
EXPORTING
ldbname = 'DDF'
variant = ' '
TABLES
callback = callback
selections = seltab
EXCEPTIONS
ldb_not_reentrant = 1
ldb_incorrect = 2
ldb_already_running = 3
ldb_error = 4
ldb_selections_error = 5
ldb_selections_not_accepted = 6
variant_not_existent = 7
variant_obsolete = 8
variant_error = 9
free_selections_error = 10
callback_no_event = 11
callback_node_duplicate = 12
OTHERS = 13.
IF sy-subrc ne 0.
WRITE: 'Exception with SY-SUBRC', sy-subrc.
ENDIF.
*& Form CALLBACK_BSEG
text
-->NAME text
-->WA text
-->EVT text
-->CHECK text
FORM CALLBACK_BSEG USING name TYPE ldbn-ldbnode
wa TYPE BSEG
evt TYPE c
check TYPE c.
CASE evt.
WHEN 'G'.
WRITE: / wa-BELNR.
ULINE.
WHEN 'L'.
ULINE.
ENDCASE.
ENDFORM. "CALLBACK_BSEGHi Andreas,
I have included bukrs and gjahr too...but if I input only one invoice number the report is printing a lot of invoices.
Not sure from where the data is being picked up?
Sorry of poor formatting of code.
Thanks ,
Subba
*& Report ZSUB_READ_LDB
REPORT ZSUB_READ_LDB.
TYPE-POOLS: RSDS, RSFS.
DATA wa_BSEG TYPE BSEG.
SELECT-OPTIONS s_BELNR FOR wa_BSEG-BELNR.
SELECT-OPTIONS s_BUKRS FOR wa_BSEG-BELNR.
SELECT-OPTIONS s_GJAHR FOR wa_BSEG-BELNR.
DATA: callback TYPE TABLE OF ldbcb,
callback_wa LIKE LINE OF callback.
DATA: seltab TYPE TABLE OF rsparams,
seltab_wa LIKE LINE OF seltab.
DATA: TEXPR TYPE RSDS_TEXPR,
FSEL TYPE RSFS_FIELDS.
start-of-selection.
callback_wa-ldbnode = 'BSEG'.
callback_wa-get = 'X'.
callback_wa-get_late = 'X'.
callback_wa-cb_prog = sy-repid.
callback_wa-cb_form = 'CALLBACK_BSEG'.
APPEND callback_wa TO callback.
CLEAR callback_wa.
seltab_wa-kind = 'S'.
seltab_wa-selname = 'BELNR'.
*seltab_wa-LOW =
LOOP AT s_BELNR.
MOVE-CORRESPONDING s_BELNR TO seltab_wa.
APPEND seltab_wa TO seltab.
ENDLOOP.
seltab_wa-kind = 'S'.
seltab_wa-selname = 'BUKRS'.
*seltab_wa-LOW =
LOOP AT s_BELNR.
MOVE-CORRESPONDING s_BUKRS TO seltab_wa.
APPEND seltab_wa TO seltab.
ENDLOOP.
seltab_wa-kind = 'S'.
seltab_wa-selname = 'GJAHR'.
*seltab_wa-LOW =
LOOP AT s_BELNR.
MOVE-CORRESPONDING s_GJAHR TO seltab_wa.
APPEND seltab_wa TO seltab.
ENDLOOP.
CALL FUNCTION 'LDB_PROCESS'
EXPORTING
ldbname = 'DDF'
variant = ' '
EXPRESSIONS = TEXPR
FIELD_SELECTION = FSEL
TABLES
callback = callback
selections = seltab
EXCEPTIONS
ldb_not_reentrant = 1
ldb_incorrect = 2
ldb_already_running = 3
ldb_error = 4
ldb_selections_error = 5
ldb_selections_not_accepted = 6
variant_not_existent = 7
variant_obsolete = 8
variant_error = 9
free_selections_error = 10
callback_no_event = 11
callback_node_duplicate = 12
OTHERS = 13.
IF sy-subrc ne 0.
WRITE: 'Exception with SY-SUBRC', sy-subrc.
ENDIF.
*& Form CALLBACK_BSEG
text
-->NAME text
-->WA text
-->EVT text
-->CHECK text
FORM CALLBACK_BSEG USING name TYPE ldbn-ldbnode
wa TYPE BSEG
evt TYPE c
check TYPE c.
CASE evt.
WHEN 'G'.
WRITE: / wa-BELNR.
ULINE.
WHEN 'L'.
ULINE.
ENDCASE.
ENDFORM. "CALLBACK_BSEG -
SAP APO SNP - Restricting Selections
Hello All,
Is there any way by which I can restrict the users to access shuffler (create & save selection) for one planning book and allow access of shuffler in other planning book, although both the planning books belong to same planning area.
When I try to restrict planner to access shuffler I only find function C_SELCTION, but using this the user is restricted on Planning Area level. So the planner is restricted for both planning books of the planning area.
Please let me know if the above case is possible to implement.
Regards,
Piyush Nandan.Hello,
Thanks for the reply.
I checked the auth obj C_APO_SEL, but it is not helpful. It doesn't resrtict the access to shuffler.
I want to restrict shuffler access in one planning book and provide access in other planning book, both planning books are of same planning area.
Is there any BADI by which we can remove the shuffler icon from the planning book.
For example there are two planning books PB1 & PB2 belonging to same planning area PA1. Now can I remove shuffler Icon from PB1 and keep shuffler icon in PB2.
Regards,
Piyush Nandan. -
XML - ORA-19025: EXTRACTVALUE returns value of only one node
Hi,
I am new to XML DB. Can somebody help me with the below XML
I use the following XML ... (I have pasted only a part of it coz i require data only till this section )
XML
<?xml version="1.0" encoding="UTF-8"?><SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-
instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><SOAP-ENV:Body>
<ns:PicklistWS_GetPicklistValues_Output xmlns:ns="urn:crmondemand/ws/picklist/">
<ListOfParentPicklistValue xmlns="urn:/crmondemand/xml/picklist">
<ParentPicklistValue>
<Language>ENU</Language>
<ParentFieldName>plProduct_Team</ParentFieldName>
<ParentDisplayValue>Marketing On Demand</ParentDisplayValue>
<ParentCode>Marketing On Demand</ParentCode>
<Disabled>N</Disabled>
<ListOfPicklistValue>
<PicklistValue>
<Code>OCP/SME Escalation</Code>
<DisplayValue>OCP/SME Escalation</DisplayValue>
<Disabled>N</Disabled>
</PicklistValue>
<PicklistValue>
<Code>Fusion Request</Code>
<DisplayValue>Fusion Request</DisplayValue>
<Disabled>N</Disabled>
</PicklistValue>
Code
SELECT distinct
EXTRACTVALUE(VALUE(SR), '/ParentPicklistValue/ListOfPicklistValue/PicklistValue/Code','xmlns="urn:/crmondemand/xml/picklist"') AS Display,
EXTRACTVALUE(VALUE(SR),'/ParentPicklistValue/ListOfPicklistValue/PicklistValue/DisplayValue','xmlns="urn:/crmondemand/xml/picklist"') AS Return,
EXTRACTVALUE(VALUE(SR),'/ParentPicklistValue/ParentDisplayValue','xmlns="urn:/crmondemand/xml/picklist"') AS parent_display,
EXTRACTVALUE(VALUE(SR),'/ParentPicklistValue/ParentCode','xmlns="urn:/crmondemand/xml/picklist"') AS parent_return
FROM TABLE(XMLSEQUENCE(EXTRACT(
WEB_SERVICE('<?xml version="1.0" encoding="UTF-8" standalone="no"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<PicklistWS_GetPicklistValues_Input xmlns="urn:crmondemand/ws/picklist/">
<FieldName>Type</FieldName>
<RecordType>Service Request</RecordType>
</PicklistWS_GetPicklistValues_Input>
</soap:Body>
</soap:Envelope>'
,'document/urn:crmondemand/ws/picklist/:GetPicklistValues', Sessionid),
'/soap:Envelope/soap:Body/*/*/*','xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/'))) SR
ERROR
ORA-19025: EXTRACTVALUE returns value of only one node
UNDERSTANDING
As my Xpath points only until the node - ParentPicklistValue and not the child nodes under it. Hence when i try to query the child nodes - /ParentPicklistValue/ListOfPicklistValue/PicklistValue/Code, I recieve the above mentioned error.
REQUIREMENT
Can somebody help me to recieve the Parent values and also its child values based on the above query and xml.Hi,
That's a classic ;)
You need a second XMLSequence that will shred the collection of PicklistValue into relational rows :
select extractvalue(value(sr2), '/PicklistValue/Code', 'xmlns="urn:/crmondemand/xml/picklist"') AS Display
, extractvalue(value(sr2), '/PicklistValue/DisplayValue', 'xmlns="urn:/crmondemand/xml/picklist"') AS Return
, extractvalue(value(sr1), '/ParentPicklistValue/ParentDisplayValue', 'xmlns="urn:/crmondemand/xml/picklist"') AS parent_display
, extractvalue(value(sr1), '/ParentPicklistValue/ParentCode', 'xmlns="urn:/crmondemand/xml/picklist"') AS parent_return
from table(
xmlsequence(
extract( WEB_SERVICE( ... )
, '/soap:Envelope/soap:Body/ns:PicklistWS_GetPicklistValues_Output/ListOfParentPicklistValue/ParentPicklistValue'
, 'xmlns="urn:/crmondemand/xml/picklist"
xmlns:ns="urn:crmondemand/ws/picklist/"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"' )
) sr1
, table(
xmlsequence(
extract( value(sr1)
, '/ParentPicklistValue/ListOfPicklistValue/PicklistValue'
, 'xmlns="urn:/crmondemand/xml/picklist"' )
) sr2
;What's your database version BTW?
On 10.2 and up, you may use XMLTable instead. -
Select wich returns the shortest time
Hi,
I don't know how to do a select. I'm goig to explain what I want to get to see wheter somebody can help.
I've a select that returns the following columns (table t):
handle_id, logon_id, object_name
I've another table with the following columns (table t0):
time0, handle_id, logon_id, object_name, source, eventid
If I do this select:
select t0.time0, t0.source, t0.eventid
from t, t0
where t.handle_id = t0.handle_id and t.logon_id = t0.logon_id and t.object_name = t0.object_name
It returns me several records with the same condition (handle_id, logon_id, object_name) because, obviously, I've repeated recors with the same conditions but with diferent time0.
I would like to get only one record for each condtion with the shortest time0.
How can I do it?
I've tried with distinct but it isn't what I want.
Thanks in advance.
Regards.select *
from (
select t0.time0, t0.source, t0.eventid........ , t0.accesses,
row_number() over(partition by t0.handle_id,t0.logon_id,t0.object_name order by t0.time0) rn
from t,
t0
where t.handle_id = t0.handle_id
and t.logon_id = t0.logon_id
and t.object_name = t0.object_name
where rn = 1
/If there can be more than one row with "shortest time0" for same handle, logon_id, object_name the above query will return olny one of such rows. If you want to get all such rows use:
select *
from (
select t0.time0, t0.source, t0.eventid........ , t0.accesses,
dense_rank() over(partition by t0.handle_id,t0.logon_id,t0.object_name order by t0.time0) rn
from t,
t0
where t.handle_id = t0.handle_id
and t.logon_id = t0.logon_id
and t.object_name = t0.object_name
where rn = 1
/SY. -
BatchUpdateException :Results returned for UPDATE ONLY.
I got an error message at the statement stmt.executeBatch();
java.sql.BatchUpdateException: Results returned for UPDATE ONLY.
There are 3 SQL commands in the batch and it throws the above exception while executing the first command.
(The first command is a SELECT command with COUNT returned to a variable
eg. SELECT @ABC := COUNT(*) ....
The second and the third commands use the returned variable to make updates)
I printed out the updated information using BatchUpdateException.getUpdateCounts and I got
-3 1 1 (-3 means Statement.EXECUTE_FAILED)
However, I checked the database (mysql) and I discovered those two update commands were executed correctly ???!!!
An interesting thing is: if I use stmt.execute or stmt.executeQuery instead of executeBatch, it works fine and doesn't throw any exception.
I wonder if anybody experience similar situation before or have idea on this problem. Thanx :)Can somebody help me, please?
-
The selected data source is read-only
Anyone know how to fix this "issue"
The selected data source is read-only. You cannot change the view configuration.
Thanks in Advance.Assuming that it's not actually read-only (because you're trying to hit a follower node or a data source that is currently loading non transactionally, etc.), you should be able to just click the Data Source edit button and click Save to "wake it up".
In previous versions of the product there was a "Refresh Data Sources" that would do the trick but I haven't seen it in the 3.0 version of Studio.
If enough people need it, maybe we'll just write it or something.
Patrick Rafferty
http://branchbird.com/ -
Java.nio select() method return 0 in my client application
Hello,
I'm developing a simple chat application who echo messages
But my client application loop because the select() method return 0
This is my code
// SERVER
package test;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.util.Iterator;
import java.util.Set;
public class Server {
private int port = 5001;
public void work() {
try {
ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
serverSocketChannel.configureBlocking(false);
InetSocketAddress isa = new InetSocketAddress(port);
serverSocketChannel.socket().bind(isa);
Selector selector = Selector.open();
serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT);
System.out.println("Listing on "+port);
while(selector.select()>0) {
Set keys = selector.selectedKeys();
for(Iterator i = keys.iterator(); i.hasNext();) {
SelectionKey key = (SelectionKey) i.next();
i.remove();
if (key.isAcceptable()) {
ServerSocketChannel keyChannel = (ServerSocketChannel)key.channel();
SocketChannel channel = keyChannel.accept();
channel.configureBlocking(false);
channel.register(selector, SelectionKey.OP_READ );
} else if (key.isReadable()) {
SocketChannel keyChannel = (SocketChannel) key.channel();
String m = Help.read(keyChannel );
Help.write(m.toUpperCase(), keyChannel );
} catch (IOException e) {
e.printStackTrace();
public static void main(String[] args) {
Server s = new Server();
s.work();
// CLIENT
package test;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.SocketChannel;
import java.util.Iterator;
import java.util.Set;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
public class Client extends JFrame {
private String host = "localhost";
private int port = 5001;
private SocketChannel socketChannel;
private Selector selector;
public void work() {
try {
socketChannel = SocketChannel.open();
socketChannel.configureBlocking(false);
InetSocketAddress isa = new InetSocketAddress(host, port);
socketChannel.connect(isa);
selector = Selector.open();
socketChannel.register(selector, SelectionKey.OP_CONNECT | SelectionKey.OP_READ );
while(true) {
selector.select();
Set keys = selector.selectedKeys();
for(Iterator i = keys.iterator(); i.hasNext();) {
SelectionKey key = (SelectionKey) i.next();
i.remove();
if (key.isConnectable()) {
SocketChannel keyChannel = (SocketChannel) key.channel();
if (keyChannel.isConnectionPending()) {
System.out.println("Connected "+keyChannel.finishConnect());
} else if (key.isReadable()) {
SocketChannel keyChannel = (SocketChannel) key.channel();
String m = Help.read(keyChannel);
display(m);
} catch (IOException e) {
e.printStackTrace();
private void display(final String m) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
area.append(m+"\n");
textFieed.setText("");
private void sendMessage(final String m) {
Thread t = new Thread(new Runnable() {
public void run() {
try {
Help.write(m, socketChannel);
} catch (IOException e) {
e.printStackTrace();
t.start();
public Client() {
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(1);
textFieed.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
if (e.getKeyCode()== KeyEvent.VK_ENTER) {
String m = textFieed.getText();
sendMessage(m);
area.setEditable(false);
getContentPane().add(textFieed, "North");
getContentPane().add(new JScrollPane(area));
setBounds(200, 200, 400, 300);
show();
private String messageToSend;
private JTextArea area = new JTextArea();
JTextField textFieed = new JTextField();
public static void main(String[] args) {
Client s = new Client();
s.work();
// HELPER CLASS
package test;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.channels.SocketChannel;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CharsetEncoder;
public class Help {
private static Charset charset = Charset.forName("us-ascii");
private static CharsetEncoder enc = charset.newEncoder();
private static CharsetDecoder dec = charset.newDecoder();
private static void log(String m) {
System.out.println(m);
public static String read(SocketChannel channel) throws IOException {
log("*** start READ");
int n;
ByteBuffer buffer = ByteBuffer.allocate(1024);
while((n = channel.read(buffer)) > 0) {
System.out.println(" adding "+n+" bytes");
log(" BUFFER REMPLI : "+buffer);
buffer.flip();
CharBuffer cb = dec.decode(buffer);
log(" CHARBUFFER : "+cb);
String m = cb.toString();
log(" MESSAGE : "+m);
log("*** end READ");
//buffer.clear();
return m;
public static void write(String m, SocketChannel channel) throws IOException {
log("xxx start WRITE");
CharBuffer cb = CharBuffer.wrap(m);
log(" CHARBUFFER : "+cb);
ByteBuffer buffer = enc.encode(cb);
log(" BUFFER ALLOUE REMPLI : "+buffer);
int n;
while(buffer.hasRemaining()) {
n = channel.write(buffer);
System.out.println(" REMAINING : "+buffer.hasRemaining());
log("xxx end WRITE");Here's the fix for that old problem. Change the work method to do the following
- don't register interest in things that can't happen
- when you connect register based on whether the connection is complete or pending.
- add the OP_READ interest once the connection is complete.
This doesn't fix all the other problems this code will have,
eg.
- what happens if a write is incomplete?
- why does my code loop if I add OP_WRITE interest?
- why does my interestOps or register method block?
For code that answers all those questions see my obese post Taming the NIO Circus
Here's the fixed up Client code
// CLIENT
package test
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.SocketChannel;
import java.util.Iterator;
import java.util.Set;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
public class Client extends JFrame {
private String host = "localhost";
private int port = 5001;
private SocketChannel socketChannel;
private Selector selector;
public void work() {
try {
socketChannel = SocketChannel.open();
socketChannel.configureBlocking(false);
InetSocketAddress isa = new InetSocketAddress(host, port);
socketChannel.connect(isa);
selector = Selector.open();
int interest = 0;
if(socketChannel.isConnected())interest = SelectionKey.OP_READ;
else if(socketChannel.isConnectionPending())interest = SelectionKey.OP_CONNECT;
socketChannel.register(selector, interest);
while(true)
int nn = selector.select();
System.out.println("nn="+nn);
Set keys = selector.selectedKeys();
for(Iterator i = keys.iterator(); i.hasNext();)
SelectionKey key = (SelectionKey) i.next();
i.remove();
if (key.isConnectable())
SocketChannel keyChannel = (SocketChannel) key.channel();
System.out.println("Connected "+keyChannel.finishConnect());
key.interestOps(SelectionKey.OP_READ);
if (key.isReadable())
SocketChannel keyChannel = (SocketChannel) key.channel();
String m = Help.read(keyChannel);
display(m);
} catch (IOException e) {
e.printStackTrace();
private void display(final String m) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
area.append(m+"\n");
textFieed.setText("");
private void sendMessage(final String m) {
Thread t = new Thread(new Runnable() {
public void run() {
try {
Help.write(m, socketChannel);
} catch (IOException e) {
e.printStackTrace();
t.start();
public Client() {
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(1);
textFieed.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
if (e.getKeyCode()== KeyEvent.VK_ENTER) {
String m = textFieed.getText();
sendMessage(m);
area.setEditable(false);
getContentPane().add(textFieed, "North");
getContentPane().add(new JScrollPane(area));
setBounds(200, 200, 400, 300);
show();
private String messageToSend;
private JTextArea area = new JTextArea();
JTextField textFieed = new JTextField();
public static void main(String[] args) {
Client s = new Client();
s.work(); -
In Contacts version 8, how can I print ALL information in each individual card? When I select the print command the only thing printed is the name and address. I need phone number(s) and all other information in the cards. We enter various pieces of data, other than the standard name address & phone numbers and we print all information on each card so it fits in a 5x7 inch loose binder. We have used InTouch software for many years and it has served us extremely welll, however, the publisher (The Prairie Group) has not, and apparently has no plans to update their software to be compatible with any Mac OSX OS beyond 10.6. Any help will be appreciated!
You can select what you want included in a list format. In the Print command from Contacts, click the Show Details button. Then in the Style pulldown menu select "Lists" and there you'll be able to select what you want included. You can also select what you wish included if you select the Pocket Address Book style.
If neither of those options will work for you, then you will need to look to third-party software. Here's one possibility that seems to get good reviews:
https://www.macupdate.com/app/mac/15485/labels-&-addresses
I haven't done more than try it to make sure that it works with OS X 10.9's Contacts, which it does, but you can download their demo and try it yourself.
Regards. -
Can we restrict a Procedure to be called only once in a session or package?
Hi,
I am having a procedure which is called for each insert statement.
The code is non-Editable.
So, I want to restrict the procedure to be called only once for the entire session or package.
Could any one please suggest me, can we do this?
Thak you,
Regards,
Gowtham Sen.Hi,
Actually, I am using OWB tool. I used a procedure with output parameters, to map to the target table. So, OWB creates a package. In that package its calling the procedure for each record.
So, in order to avoid that, can I do any thing else, which would restrict it to call for each record.
Thank you,
Regards,
Gowtham Sen. -
My new Photoshop Elements 12 has a RAW file plug-in, but when I try OPEN to select a photograph, there are only generic icons instead of pictures-- I can't tell one photograph from another! How can I fix this so I can tell which photograph I want to open? Thank you!
Thanks R_Kelly:
Adobe Photoshop Elements Version: 12.0 (12.1 (20140303.12.1.49334)) x32
Operating System: Windows Vista 32-bit
Version: 6.0 Service Pack 2
System architecture: Intel CPU Family:6, Model:15, Stepping:11 with MMX, SSE Integer, SSE FP, SSE2, SSE3
Physical processor count: 4
Processor speed: 2400 MHz
Built-in memory: 3069 MB
Free memory: 1631 MB
Memory available to Photoshop Elements: 1598 MB
Memory used by Photoshop Elements: 69 %
Image tile size: 128K
Image cache levels: 8
Video Card: ATI Radeon HD 4800 Series
Video Mode: 1680 x 1050 x 4294967296 colors
Video Card Caption: ATI Radeon HD 4800 Series
Video Card Memory: 512 MB
Application folder: C:\Program Files\Adobe\Photoshop Elements 12\
Photoshop Elements scratch has async I/O enabled
Required Plug-ins folder: C:\Program Files\Adobe\Photoshop Elements 12\Required\
Primary Plug-ins folder: C:\Program Files\Adobe\Photoshop Elements 12\Plug-Ins\
The first thing I did was UPDATE. I have all the latest updates available (according to the updater). The Camera Raw Plug-in says it is version 8.0.
The RAW files are from a Canon T3i. It's a very common camera, I can't believe it wouldn't be supported.
Maybe you are looking for
-
Hi there. I am creating an iPad app with In Design CS5.5. I want to add a link from an image with a button to a Google map showing where the image was taken. I can successfully add the map and load it but I cannot find out how to add the marker show
-
Hi I want report which should list customer balances pending like aging report . I was seeing Aging report in which it was showing some amount in (). What does it mean . How we can get list of only those customers whose payments is due. Thanks
-
NEED TO DETERMINE USERS THAT HAVE LOGGED IN WITH A SPECIFIC ROLE
I have a requirement to determine which users have logged in with a specific role or accessing a specific application. I know I can use the ORASSO.WWSSO_AUDIT_LOG_TABLE_T table to see the users that have logged in, but need to know which table to joi
-
I've been in possession of a 2011 MacBook Pro with OS X Lion since October. Ever since the second or third month I received my MacBook, it has had this problem of shutting down whenever I even touch the monitor, and then occassionally refuses to turn
-
Multiple Session Workflow in DAC
Hi Is it possible to run a workflow which has two sessions arranged parallely in DAC? I was told that DAC can run workflows with only one session.