Getting filter table
Hello
We are having a table-view with two columns as input fields. The requirement is all these values are required to be saved in transparent tables. I can achieve this using getting values of inputfields by passing p_cell_id. accordingly i am modifying the internal table attached to the tableview and then inserting the same to transparent table.
My problem is the filter is active on the columns. Hence there is the possibility that users will input into the input fields and then click save. In such case presently i am looping at entire itab and checking if the values of input field are changed.
Hence is there any way by which I will get filtered table and so that i will loop only in filtered values?
thanks in advance.
Regards
Rajeev
Hi,
to filter your table you can get the values of these inputfields by their IDs also. In all cases the IDs contain 'filter_', eg. 'idoftableview_filter_columnnumber', have a look at your source code in the Browser to find the correct IDs.
With the values of the filter-fields you cansearch for the according sets in your table.
Reagrds,
Sebastian
Similar Messages
-
How to get the table with no. of records after filter in webdynpro
Dear Gurus,
How to get the table with no. of records after filter in webdynpro?
Thanks in advance.
SankarHello Sankar,
Please explain your requirement clearly so that we can help you easily.
To get the table records from your context node use method get_static_attributes_table()
data lo_nd_mynode type ref to if_wd_context_node.
data lt_atrributes_table type wd_this->elements_mynode.
lo_nd_mynode = wd_context->get_child_node( name = wd_this->wdctx_mynode ).
lo_nd_mynode->get_static_attributes_table( importing table = lt_atrributes_table ).
Note: You should have already defined your context node as a Dictionary Structure.
BR,
RAM -
RUN Time error while use filter table in query generator
Hai..
I have 2 Functions under "Scalar valued functions" in SQL Server,i try to call this functions in Query generator its working fine,result also display correctly, but i click filter table system showing Error Message " Run Time Error,Abnormal program termination" then SAP is get closed,i tested this scenario in 3 Database am getting same error , Is this BUG in SAP B1?There is no error number in error messageThis is my function
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
ALTER function [dbo].[Get_TransObjName](@Obj_type NUMERIC(20,5))
returns varchar(500) as
BEGIN
DECLARE @Obj_type_Name varchar(100)
select @Obj_type_Name =
case @Obj_type
when -2 then 'Opening Balance'
when -3 then 'Closing Balance'
when 1 then 'oChartOfAccounts'
when 2 then 'oBusinessPartners'
when 3 then 'oBanks'
when 4 then 'oItems'
when 5 then 'oVatGroups'
when 6 then 'oPriceLists'
when 7 then 'oSpecialPrices'
when 8 then 'oItemProperties'
when 12 then 'oUsers'
when 13 then 'A/R Invoices'
when 14 then 'A/R Credit Memo'
when 15 then 'A/R DeliveryNotes'
when 16 then 'A/R Returns'
when 17 then 'oOrders'
when 18 then 'A/P Invoice'
when 19 then 'A/P Credit Memo'
when 20 then 'Goods Receipt PO'
when 21 then 'Goods Returns'
when 22 then 'PurchaseOrders'
when 23 then 'Quotations'
when 24 then 'IncomingPayments'
when 25 then 'Deposit'
when 28 then 'oJournalVouchers'
when 30 then 'JournalEntries'
when 31 then 'oStockTakings'
when 33 then 'oContacts'
when 36 then 'oCreditCards'
when 37 then 'oCurrencyCodes'
when 40 then 'oPaymentTermsTypes'
when 42 then 'oBankPages'
when 43 then 'oManufacturers'
when 46 then 'VendorPayments'
when 48 then 'oLandedCostsCodes'
when 49 then 'oShippingTypes'
when 50 then 'oLengthMeasures'
when 51 then 'oWeightMeasures'
when 52 then 'oItemGroups'
when 53 then 'oSalesPersons'
when 56 then 'oCustomsGroups'
when 57 then 'ChecksforPayment'
when 58 then 'Stock List'
when 59 then 'Goods Receipt'
when 60 then 'Goods Issue'
when 64 then 'oWarehouses'
when 65 then 'oCommissionGroups'
when 66 then 'oProductTrees'
when 67 then 'Inventory Transfers'
when 68 then 'oWorkOrders'
when 69 then 'Landed Costs'
when 70 then 'oCreditPaymentMethods'
when 71 then 'oCreditCardPayments'
when 73 then 'oAlternateCatNum'
when 76 then 'Postdated Deposit'
when 77 then 'oBudget'
when 78 then 'oBudgetDistribution'
when 81 then 'oMessages'
when 91 then 'oBudgetScenarios'
when 97 then 'oSalesOpportunities'
when 93 then 'oUserDefaultGroups'
when 101 then 'oSalesStages'
when 103 then 'oActivityTypes'
when 104 then 'oActivityLocations'
when 112 then 'oDrafts'
when 116 then 'oDeductionTaxHierarchies'
when 117 then 'oDeductionTaxGroups'
when 125 then 'oAdditionalExpenses'
when 126 then 'oSalesTaxAuthorities'
when 127 then 'oSalesTaxAuthoritiesTypes'
when 128 then 'oSalesTaxCodes'
when 134 then 'oQueryCategories'
when 138 then 'oFactoringIndicators'
when 140 then 'oPaymentsDrafts'
when 142 then 'oAccountSegmentations'
when 143 then 'oAccountSegmentationCategories'
when 144 then 'oWarehouseLocations'
when 145 then 'oForms1099'
when 146 then 'oInventoryCycles'
when 147 then 'oWizardPaymentMethods'
when 150 then 'oBPPriorities'
when 151 then 'oDunningLetters'
when 152 then 'oUserFields'
when 153 then 'oUserTables'
when 156 then 'oPickLists'
when 158 then 'oPaymentRunExport'
when 160 then 'oUserQueries'
when 162 then 'Inventory Valuation'
when 163 then 'oCorrectionPurchaseInvoice'
when 164 then 'oCorrectionPurchaseInvoiceReversal'
when 165 then 'oCorrectionInvoice'
when 166 then 'oCorrectionInvoiceReversal'
when 170 then 'oContractTemplates'
when 171 then 'oEmployeesInfo'
when 176 then 'oCustomerEquipmentCards'
when 178 then 'oWithholdingTaxCodes'
when 182 then 'oBillOfExchangeTransactions'
when 189 then 'oKnowledgeBaseSolutions'
when 190 then 'oServiceContracts'
when 191 then 'oServiceCalls'
when 193 then 'oUserKeys'
when 194 then 'oQueue'
when 198 then 'oSalesForecast'
when 200 then 'oTerritories'
when 201 then 'oIndustries'
when 202 then 'oProductionOrders'
when 203 then 'A/R Down Payment'
when 204 then 'A/P Down Payment'
when 205 then 'oPackagesTypes'
when 206 then 'oUserObjectsMD'
when 211 then 'oTeams'
when 212 then 'oRelationships'
when 214 then 'oUserPermissionTree'
when 217 then 'oActivityStatus'
when 218 then 'oChooseFromList'
when 219 then 'oFormattedSearches'
when 221 then 'oAttachments2'
when 223 then 'oUserLanguages'
when 224 then 'oMultiLanguageTranslations'
when 229 then 'oDynamicSystemStrings'
when 231 then 'oHouseBankAccounts'
when 247 then 'oBusinessPlaces'
when 250 then 'oLocalEra'
when 280 then 'oSalesTaxInvoice'
when 281 then 'oPurchaseTaxInvoice'
when 300 then 'BoRecordset'
when 305 then 'BoBridge'
when 260 then 'oNotaFiscalUsage'
when 258 then 'oNotaFiscalCFOP'
when 259 then 'oNotaFiscalCST'
when 261 then 'oClosingDateProcedure'
when 10 then 'oBusinessPartnerGroups'
when 278 then 'oBPFiscalRegistryID'
else cast(@Obj_type as char(20)) end
return @Obj_type_Name
END -
DB2 on AS/400. SQL0418 error from Filter tables, advanced search.
We're using ADF 11g against an AS/400 Database.
When using a filter table, or using any advanced search with starts with , .... we are getting an SQL error SQL0418 -- "A statement contains a use of parameter marker that is not valid ..."
The generated SQL looks something like:
SELECT Customer.CGVMSTCST,
Customer.PARENTCUSTOMER, ...
FROM CSTTBLMP Customer,
NADADRMP Address
WHERE Customer.CGVADRLOC = Address.NADADRLOC
AND ( ( (Customer.CGVADRSTE LIKE ( ? || '%') ) ) )
Running this query in test tools confirms that this is not acceptable SQL. However, this is
SELECT Customer.CGVMSTCST,
Customer.PARENTCUSTOMER, ...
FROM CSTTBLMP Customer,
NADADRMP Address
WHERE Customer.CGVADRLOC = Address.NADADRLOC
AND ( ( (Customer.CGVADRSTE LIKE ( cast(? as varchar(255)) || '%' ) ) ) );
DB2 needs the parameter marker to be typed.
We've created CustomerViewImpll.java (view for above examples) and overridden buildWhereClause() to replace
with
cast(? as varchar(255)).
In debug, we verify that the buffer passed to buildWhereClause (1st param) is being changed,
but when the query runs, it is not reflecting the changed value.
Is there anything else we need to change?
CustomerViewImpl.java:
@Override
protected boolean buildWhereClause(java.lang.StringBuffer sqlBuffer, int noBindVars) {
// call ViewObjectImpl's buildWhereClause() to allow the framework to do its processing
boolean hasWhereClause = super.buildWhereClause(sqlBuffer, noBindVars);
if (hasWhereClause) { // framework added a WHERE clause
sqlBuffer = replace(sqlBuffer, "?", "cast(? as varchar(255))");
else { // framework did not add a WHERE clause, so we need to add it ourselves
hasWhereClause = true; // ensure that is set to notify the framework
return hasWhereClause; // return true/false to indicate whether a WHERE clause was added
public StringBuffer replace (StringBuffer strBuffer, String searchString, String newString) {
String str = strBuffer.toString();
// Need to use Regex functionality, or the '?' replacement parm is construed as a regex instead of a literal
String newStr = str.replaceFirst(Pattern.quote(searchString), Matcher.quoteReplacement(newString));
return new StringBuffer(newStr);
...Thanks Nick -- as you suggested, the problem was in my code.
For anyone who runs into this, here's my working example:
(in CustomerViewImpl.java -- the view object implementation)
@Override
protected boolean buildWhereClause(java.lang.StringBuffer sqlBuffer, int noBindVars) {
// call ViewObjectImpl's buildWhereClause() to allow the framework to do its processing
StringBuffer sqlADF = new StringBuffer();
boolean hasWhereClause = super.buildWhereClause(sqlADF, noBindVars);
if (hasWhereClause) {
String str = sqlADF.toString();
String strInit = "?";
String strReplace = "cast(? as varchar(255))";
str = str.replaceFirst(Pattern.quote(strInit), Matcher.quoteReplacement(strReplace));
sqlBuffer.append(str);
else {
hasWhereClause = false; // ensure that is set to notify the framework
return hasWhereClause; // return true/false to indicate whether a WHERE clause was added
Should probably override the View Object base classes and set up project defaults to use overridden versions. -
Not able to get the tables in crystal report 2008
Hi,
I am using crystal report 2008 and trying to connect MS SQL using OLE DB (ADO) connection. After giving all DB credentials data base tables are not appearing in the connection. how to get the tables for selection in crystal report 2008.
Regards,
SreeIn the CR Designer, select the connection and press the right mouse button. Select Options in the context menu and check if there is an entry in the Table name fiel. Maybe you have a placeholder there that does not match the names of the tables in the database. Just remove it, close the window by pressing OK and refresh the connection browser (press F5). Unfold the connection again and check if you can see the tables now.
Regards,
Stratos -
How to get the table name in the trigger definition without hard coding.
CREATE TRIGGER db.mytablename
AFTER UPDATE,INSERT
AS
INSERT INTO table1(col1)
SELECT InsRec.col1
FROM
INSERTED Ins
--Below i am calling one sp for which i have to pass the table name
EXEC myspname 'tablename'
In the above trigger,presently i am hard coding the tablename
but is it possible to get the table name dynamically on which the trigger is defined in order to avoid hard coding the table nameI really liked your audit table concept. You inspired me to modify it so that, the entire recordset gets captured and added a couple of other fields. Wanted to share my end result.
USE [YourDB]
GO
/****** Object: Trigger [dbo].[iudt_AutoAuditChanges] Script Date: 10/18/2013 12:49:55 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[iudt_AutoAuditChanges]
ON [dbo].[YourTable]
AFTER INSERT,DELETE,UPDATE
AS
BEGIN
SET NOCOUNT ON;
Declare @v_AuditID bigint
IF OBJECT_ID('dbo.AutoAudit','U') IS NULL BEGIN
CREATE TABLE [dbo].[AutoAudit]
( [AuditID] bigint identity,
[AuditDate] DateTime,
[AuditUserName] varchar(128),
[TableName] varchar(128) NULL,
[OldContent] XML NULL,
[NewContent] XML NULL
ALTER TABLE dbo.AutoAudit ADD CONSTRAINT
PK_AutoAudit PRIMARY KEY CLUSTERED
[AuditID]
) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
CREATE NONCLUSTERED INDEX [idx_AutoAudit_TableName_AuditDate] ON [dbo].[AutoAudit]
( [TableName] ASC,
[AuditDate] ASC
)WITH (STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
END
Select * Into #AuditDeleted from deleted
Select * Into #AuditInserted from inserted
While (Select COUNT(*) from #AuditDeleted) > 0 OR (Select COUNT(*) from #AuditInserted) > 0
Begin
INSERT INTO [dbo].[AutoAudit]
( [AuditDate], [AuditUserName], [TableName], [OldContent], [NewContent])
SELECT
GETDATE(),
SUSER_NAME(),
[TableName]=object_name([parent_obj]),
[OldContent]=CAST((SELECT TOP 1 * FROM #AuditDeleted D FOR XML RAW) AS XML),
[NewContent]=CAST((SELECT TOP 1 * FROM #AuditInserted I FOR XML RAW) AS XML)
FROM sysobjects
WHERE
[xtype] = 'tr'
and [name] = OBJECT_NAME(@@PROCID)
Set @v_AuditID = SCOPE_IDENTITY()
Delete from AutoAudit
Where AuditID = @v_AuditID
AND Convert(varchar(max),oldContent) = Convert(varchar(max),NewContent)
Delete top(1) from #AuditDeleted
Delete top(1) from #AuditInserted
End
END -
How to get the table of value field? and can we expand the technical limits
Dear
I have created value field in COPA with KEA6. And now, I need the table which the value fields are saved. Yet, I have tried a lot to find it and get failure? Can any guy help me? Please tell me how to get the table of a value field.
And another question is that, can we extend the technical limits for the number of value field for ECC6.0?
We have a note for R.4.x Please see below:
OSS note 160892
You can display the length of a data record using Transaction KEA0 ('Maintain Operating Concern'). After you have navigated to the 'Characteristics Screen' or to the 'Value field Screen' choose menu path 'Extras -> Technical Limits'.
The maximum displayed here under 'Length in bytes on the DB' is the maximum length permitted by the Dictionary. The reserve required for the release upgrade must be subtracted from this value.
To increase the allowed number of the value fields, increase the value that is assigned to field ikcge-bas_max_cnt (FORM init_ikcge_ke USING fm_subrc, approx. line 165) in Include FKCGNF20. It specifies the number of the possible value fields. The corresponding part of the source code is attached to the note as a correction.
David Sun
Regards!how to extend the limit of value numbers? please see the original question.
-
Can any of you suggest a function module from which I can get the list of tables used in a transaction?
I have tried function module GET_TABLE which returns only the tables used in a program.But if there are any function module calls inside the program I need to get the tables used in the function module also.
Any ideas ??HI,
Try this func. module.
RS_PROGRAM_TABLES
give values to parameters:
OBJECT_TYPE - TRAN
OBJECT_NAME - ME31K ->(transaction name)
Regards,
Karthick. -
How get all table name from database
hi master
sir
how get all table name from databaseThe big question is 'why'.
Selecting from view 'dba_tables' will indeed give the list of all tables in the database, but that includes the dictionary tables and the internal tables, and many others that are probably not of interet to a person who needs to ask this question. Besides, the dba_tables view requires access to a DBA account.
There are several other views: "user_tables" will list all the tables in this user's schema; and "all_tables" will list all the tables this user can access in some way.
The above do not, of course, include any information about synonyms, sequences, views, indexes and so on.
The correct answer and the meaningful answer may be two different things. -
I currently am using PPT to expose data from a Microsoft Analysis Server cube. The cube is wide open and requires no permissions to access.
The behavior of my filters is odd as sometimes they work perfectly fine, and other times I receive the following error upon report run:
Unable to get filter values.
An unexpected error occurred. Error 10828. Additional details have been logged for your administrator.
I have looked at the ULS logs and found the following:
An unexpected error occurred. Error 10828. Exception details: System.NullReferenceException: Object reference not set to an instance of an object.
at Microsoft.PerformancePoint.Scorecards.Server.PmServer.QueryTimeIntelligenceInternal(DataSource dataSource, DateTime currentTime, String formula)
at Microsoft.PerformancePoint.Scorecards.Server.PmServer.QueryTimeIntelligence(RepositoryLocation dataSourceLocation, DateTime currentTime, String formula)
An exception occurred while rendering a Web control. The following diagnostic information might help to determine the cause of this problem: Microsoft.PerformancePoint.Scorecards.BpmException: Unable to get filter values. PerformancePoint Services
error code 20700.
This is odd to me, as I can trick the report to run by changing the date filters to another day, then back to the original days that error'ed out and everything is fine. Some guidance would be appreciated.Hi,
Do you mean that you have Office 2007 and Office 2010 both installed in you computer?
Based on my test, I copy a Access 2010 database into a computer only installed Offic 2007, then using Excel 2007 to import Access database data, no error occurred.
So double click the Access database to see whether the databased is opened with Access 2007 or Access 2010. If it is opened with Access 2010, then try to save it as Access 2007 to
check the issue.
Jaynet Zhang
TechNet Community Support -
How do I get the table of contents to toggle? It has remained open since I opened it while reading two books ago. Thanks for the help.
Thank you for your advice. I followed your directions, but came up with the same results. However, I did discover that whenever I open up the iPhoto Library that is already existing on my MacBook a certain set of pictures shows up. But then when I open up the iPhoto Library from the Hard drive another set of pictures shows up. BUT not ALL of my pictures are showing up on the iPhoto Library from the hard drive. At least the last two years of pictures are not showing up?! Actually, it appears that all the pictures are there from when I started using iPhoto about 5 years ago up until around the time that I got my iMac desktop computer and started using that (2 years ago). I have noticed that more recent videos I have made are showing up in a folder on the hard drive, but will not appear when I open up iMovie?! Any ideas on how to access my pictures from the last 2 years off of the hard drive???
-
How do you get a table to flow onto the second page?
Since upgrading to Yosemite, I cannot figure out how to get my table to continue on to the second page. If you look at my screenshot, you can see that my table was so big so the whole thing was moved to the next page. I want it to remain on the 1st page and have additional rows continue on to the second page. In the previous version of pages, the column titles would also appear on the second page. Thank you very much for your help.
Hi F.AD.;
Go to View > Show Invisibles (Shift+Command+I).
This will display Paragraph marks (¶) at the end of each paragraph.
Delete the paragraph mark (¶) that is at the end of the paragraph before the table, i.e. just between the table and the paragraph.
This will bring the table surely just beneath the paragraph (text), I suppose.
Hi BePositive26;
You didn't mention whether my suggestion made easy to solve your problem.
Regards, -
How to get the table name and bind columns names in an INSERT statement ?
I have an INSERT statement with input parameters (for example
INSERT INTO my_table VALUES (:a, :a, :a)) and I want to know
without parsing the statement which is the name of table to
insert to and the corresponding columns.
This is needed to generate the SELECT FOR UPDATE statement to
refetch a BLOB before actually writing to it. The code does not
know in advance the schema (generic code).
Thanks in advance,
Joseph CanedoOnce you have prepared your statement, you can execute the
statement with the OCI_DESCRIBE_ONLY mode before binding any
columns. Then you can use OCIParamGet to find out about each
column (column index is 1-based). You should get OCI_NO_DATA or
ORA-24334 if there are no more columns in the statement. Note
that the parameter descriptor from OCIParamGet is
allocated/freed internally by OCI; you do not need to manage it
explicitly. The parameter descriptor is passed to OCIAttrGet in
order to obtain for instance the maximum size of data in the
column OCI_ATTR_DATA_SIZE. You can also get the column name in
this way, although I do not remember the #define off the top of
my head. Getting the table name appears to be much more
difficult; I have never had to do that yet. Good luck. -Ralph -
Getting the table names in an MS Access database
Hi,
I am new to JDBC and making a client/server application that updates a MS Access database through jdbc:odbc.
I need to get a list of existing user tables in the db. I have found a great document on the net which has the code, however the code doesn't work. I have tried different ways and looked every where with no success. (link to the doco: http://www-128.ibm.com/developerworks/opensource/library/j-jdbc-objects/)
Here is my dbManager class that handles all db related services in my application. I would appreciate any help I can get as I have exhusted all my avenues.
Thanks
Sep,
* dbManager.java
* Created on 31 October 2005, 10:20
* To change this template, choose Tools | Options and locate the template under
* the Source Creation and Management node. Right-click the template and choose
* Open. You can then make changes to the template in the Source Editor.
import java.io.*;
import java.sql.*;
import java.util.regex.*;
* @author AUMahdavSe
public class dbManager {
/** Constant Declaration */
public static final String Driver = "sun.jdbc.odbc.JdbcOdbcDriver";
public static final
String sqlCreateTable = "create table TABLENAME (" +
"name varchar (100)," +
"surname varchar(100)," +
"computerType integer," +
"computerNAL varchar(20)," +
"haveMonitor integer," +
"monitorNAL varchar (20)," +
"auditDate varchar(10) );";
public static final String sqlUpdateTable = "insert into TABLENAME values" +
" (NAMEHOLDER, SURNAMEHOLDER, COMPTYPE, COMPNAL, HAVEMON, MONNAL);";
/** Attributes */
private String dbURL = "jdbc:odbc:";
private String Username = "admin"; // user input
private String Password = "purina123"; // user input
private String ODBCDataSource; // config file
private String dbPath; // set through config file or defaults to current folder
private String configFile = "config.txt"; // set either at commandline or defaults to current folder
private Connection con = null;
private Statement stmt = null;
private ResultSet tables;
private DatabaseMetaData dma;
private ResultSetMetaData rsmd;
private String CurrentAuditTable = "TestTable2";
int numCols, i;
/** Set Methodes */
public void setUsername( String usr ) {
this.Username = usr;
public void setPassword( String pswd ) {
this.Password = pswd;
public void setDbPath( String path ) {
this.dbPath = path;
public void setODBCDataSource( String ds ) {
this.ODBCDataSource = ds;
public void setDbURL( String dsname ) {
this.dbURL = this.dbURL + dsname;
/** Get Methodes */
public String getDriver() {
return this.Driver;
// can be run only after a connection obj is setup
public void getMDA() {
try {
this.dma = this.con.getMetaData();
catch (SQLException ex) {
System.err.println("database connection: " + ex.getMessage());
public void getDBTables() {
//now dump out the names of the tables in the database
String[] types = new String[1];
types[0] = "TABLES"; //set table type mask
//note the %-sign is a wild card (not '*')
try {
this.tables = this.dma.getTables(null, null, "%", types);
dumpResults("--Tables--");
this.tables.close();
//this.listTables();
catch (SQLException ex) {
System.err.println("database connection: " + ex.getMessage());
// listing tables
/*int count = 0;
int numCols = 0;
//ResultSetMetaData rsmd;
try {
System.out.println("Listing db tables ...");
//this.tables.beforeFirst();
rsmd = this.tables.getMetaData();
numCols = rsmd.getColumnCount();
System.out.println("number of cols: " + numCols);
boolean more = this.tables.first();
System.out.println("this is why: " + more);
while ( more ) {
count++;
for (int i = 1; i <= numCols; i++)
System.out.print( "Table-" + count + " -> " + this.tables.getString(count)+" " );
System.out.println();
more = this.tables.next();
catch ( SQLException ex ) {
System.out.println( "problem listing db tables: " + ex.getMessage() );
/** Other Methodes */
// Initialize the db parameters, like driver, username, passwd, etc.
public void dbInitialize() {
// load configuration from config.txt (dbPath and ODBC Data Source name)
this.loadDbConfig();
// loadDriver
this.loadDriver();
// get username and password for the ODBC from user
this.getDSSecurity();
// populate dbURL, username and password
this.setDbURL( this.ODBCDataSource );
// connect to db
this.dbConnect();
// get db metadata
this.getMDA();
// get a list of tables in db
this.getDBTables();
// load JDBC driver
public void loadDriver() {
try {
Class.forName( getDriver() );
} catch (Exception e) {
System.out.println("Failed to load JDBC/ODBC driver.");
return;
// connects to db and create a Connection obj and a Statement obj
public void dbConnect() {
try {
this.con = DriverManager.getConnection (
this.dbURL,
this.Username,
this.Password);
this.stmt = con.createStatement();
} catch (Exception e) {
System.err.println("problems connecting to "+this.dbURL);
// creates table tblname in db
public void CreateTable( String tblname ) {
try {
String sqlcommand = mergeTblName(sqlCreateTable, tblname);
this.stmt.execute( sqlcommand );
catch (SQLException ex) {
System.err.println("problems with SQL statement sent to "+this.dbURL+
": "+ex.getMessage());
System.out.println("SQL Command: " + mergeTblName(sqlCreateTable, tblname) );
// updates db with new record(s) by executing the SQL query sqlstmt
// and closes db connection
public void dbUpdate( String sqlstmt ) {
try {
// execute SQL commands to create table, insert data
this.stmt.execute( sqlstmt );
this.con.close();
} catch (Exception e) {
System.err.println("problems with SQL sent to "+this.dbURL+
": "+e.getMessage());
// list all user tables in the db
public void listTables() {
//now dump out the names of the tables in the database
int count = 0;
try {
System.out.println("Listing db tables ...");
//this.tables.beforeFirst();
while ( this.tables.next() ) {
count++;
System.out.print( "Table-" + count + " -> " + this.tables.getString(1) );
System.out.println();
catch ( SQLException ex ) {
System.out.println( "problem listing db tables: " + ex.getMessage() );
// checks whether tbname exist in db as a table
// this function has to be called after dbConnect
public boolean tableExists( String tbname ) {
boolean tbexists = false;
//get the database metadata
try {
dma = con.getMetaData();
catch (SQLException ex) {
System.err.println("database connection: " + ex.getMessage());
//now dump out the names of the tables in the database
String[] types = new String[1];
types[0] = "TABLES"; //set table type mask
//note the %-sign is a wild card (not '*')
try {
tables = dma.getTables(null, null, "%", types);
catch (SQLException ex) {
System.err.println("database connection: " + ex.getMessage());
try {
while ( tables.next() ) {
if ( tbname.equalsIgnoreCase( tables.getString(1) ) ) {
tbexists = true;
catch ( SQLException ex ) {
System.err.println("database connection: " + ex.getMessage());
return tbexists;
// merge tablename using REGEX
public String mergeTblName( String sqlcommand, String tbname ) {
String REGEX = "TABLENAME";
String INPUT = sqlcommand;
String REPLACE = tbname;
Pattern p = Pattern.compile(REGEX);
Matcher m = p.matcher(INPUT); // get a matcher object
INPUT = m.replaceAll(REPLACE);
//System.out.println(INPUT);
return INPUT;
// merge feildnames specific terms using REGEX
public String mergeFldName( Message msg ) {
String sqlcommand;
sqlcommand = "insert into TABLENAME values" +
" ('" + msg.getName() + "', '" + msg.getSurname() + "', " +
msg.getComputerType() + ", '" + msg.getComputerNAL() + "', " +
msg.getHaveMonitor() + ", '" + msg.getMonitorNAL() + "', '" +
msg.getDateOfMsg() + "');";
sqlcommand = mergeTblName( sqlcommand, CurrentAuditTable );
return sqlcommand;
// get users input char
/**public char getChar() {
int i = System.in.read();
while (i != -1) {
// here's your character
char c = (char) i;
i = System.in.read();
return (char) i;
// load the config parameters from config.txt
public void loadDbConfig() {
// make a file obj pointing to the config file config.txt
File configFile = new File( this.configFile );
//...checks on configFile are elided
StringBuffer contents = new StringBuffer();
//declared here only to make visible to finally clause
BufferedReader input = null;
try {
//use buffering
//this implementation reads one line at a time
input = new BufferedReader( new FileReader(configFile) );
String line = null; //not declared within while loop
int count = 0;
while (( line = input.readLine()) != null){
//first line in config file is dbPath
if(count == 0) this.setDbPath( line.trim() );
//second line in config file is ODBCDataSource
if(count == 1) this.setODBCDataSource( line.trim() );
count++;
//contents.append(line);
//contents.append(System.getProperty("line.separator"));
catch (FileNotFoundException ex) {
System.err.println("the file congif.txt cannot be found ...");
System.err.print("Enter the path to db file (e.g. c:\\temp): ");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// read the db path from the command-line; need to use try/catch with the
// readLine() method
try {
this.setDbPath( br.readLine() );
catch (IOException ioe) {
System.out.println("IO error trying to read user input.");
System.exit(1);
System.err.print("Enter the name of the ODBC Data Source: ");
// read the ODBC Data Source name from the command-line; need to use try/catch with the
// readLine() method
try {
this.setODBCDataSource( br.readLine() );
catch (IOException ioe) {
System.out.println("IO error trying to read user input.");
System.exit(1);
ex.printStackTrace();
catch (IOException ex){
//ex.printStackTrace();
finally {
try {
if (input!= null) {
//flush and close both "input" and its underlying FileReader
input.close();
catch (IOException ex) {
//ex.printStackTrace();
//return contents.toString();
// get datasource security details i.e. username and password
public void getDSSecurity() {
// get username
System.out.print("Enter username for the ODBC DataSource: ");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// read the username from the command-line; need to use try/catch with the
// readLine() method
try {
this.setUsername( br.readLine() );
catch (IOException ioe) {
System.out.println("IO error trying to read username.");
System.exit(1);
// get password
System.out.print("Enter password: ");
// read the username from the command-line; need to use try/catch with the
// readLine() method
try {
this.setPassword( br.readLine() );
catch (IOException ioe) {
System.out.println("IO error trying to read password.");
System.exit(1);
private void dumpResults(String head)
//this is a general routine to print out
//column headers and the contents of each column
System.out.println(head);
try
//get the number of columns from the metadata
this.rsmd = this.tables.getMetaData();
numCols = this.rsmd.getColumnCount();
//print out the column names
for (i = 1; i<= numCols; i++)
System.out.print(rsmd.getColumnName(i)+" ");
System.out.println();
//print out the column contents
boolean more = this.tables.next();
while (more)
for (i = 1; i <= numCols; i++)
System.out.print(this.tables.getString(i)+" ");
System.out.println();
more = this.tables.next();
catch(Exception e)
{System.out.println(e.getMessage());}
/** Creates a new instance of dbManager */
public dbManager() {
this.dbInitialize();
}here is the result when I make a new dbManager obj from my server class which is a multithreaded one.
H:\java>java EchoServer
Enter username for the ODBC DataSource: admin
Enter password: purina123
Tables
TABLE_CAT TABLE_SCHEM TABLE_NAME TABLE_TYPE REMARKS
Listening for clients on 12111...
here is the code of my server class called EchoServer:
import java.net.*;
import java.io.*;
public class EchoServer
ServerSocket m_ServerSocket;
dbManager haDB;
public EchoServer()
// db methods to setup a jdbc connection to the database
haDB = new dbManager();
// list tables
//haDB.listTables();
//haDB.getDBTables();
// create table
//haDB.CreateTable("TestTable2");
// update table
// server code
try
// Create the server socket.
m_ServerSocket = new ServerSocket(12111);
catch(IOException ioe)
System.out.println("Could not create server socket at 12111. Quitting.");
System.exit(-1);
System.out.println("Listening for clients on 12111...");
// Successfully created Server Socket. Now wait for connections.
int id = 0;
while(true)
try
// Accept incoming connections.
Socket clientSocket = m_ServerSocket.accept();
// accept() will block until a client connects to the server.
// If execution reaches this point, then it means that a client
// socket has been accepted.
// For each client, we will start a service thread to
// service the client requests. This is to demonstrate a
// multithreaded server, although not required for such a
// trivial application. Starting a thread also lets our
// EchoServer accept multiple connections simultaneously.
// Start a service thread
ClientServiceThread cliThread = new ClientServiceThread(clientSocket, id++, haDB);
cliThread.start();
catch(IOException ioe)
System.out.println("Exception encountered on accept. Ignoring. Stack Trace :");
ioe.printStackTrace();
public static void main (String[] args)
new EchoServer();
class ClientServiceThread extends Thread
Socket m_clientSocket;
int m_clientID = -1;
dbManager m_db;
boolean m_bRunThread = true;
ClientServiceThread(Socket s, int clientID, dbManager db)
m_clientSocket = s;
m_clientID = clientID;
m_db = db;
public void run()
// Obtain the input stream and the output stream for the socket
// A good practice is to encapsulate them with a BufferedReader
// and a PrintWriter as shown below.
BufferedReader in = null;
PrintWriter out = null;
Message msg = new Message();
// Print out details of this connection
System.out.println("Accepted Client : ID - " + m_clientID + " : Address - " +
m_clientSocket.getInetAddress().getHostName());
try
in = new BufferedReader(new InputStreamReader(m_clientSocket.getInputStream()));
out = new PrintWriter(new OutputStreamWriter(m_clientSocket.getOutputStream()));
// At this point, we can read for input and reply with appropriate output.
// Run in a loop until m_bRunThread is set to false
while(m_bRunThread)
// read incoming stream
String clientCommand = in.readLine();
if ( clientCommand.indexOf(",") != -1 ) {
msg.deserialize( clientCommand );
System.out.println("SQL command: " + m_db.mergeFldName(msg) );
m_db.dbUpdate( m_db.mergeFldName(msg) );
//System.out.println("Name :" + msg.getName() );
//System.out.println("Surname :" + msg.getSurname() );
//System.out.println("ComputerType :" + msg.getComputerType() );
//System.out.println("ComputerNAL :" + msg.getComputerNAL() );
//System.out.println("HaveMonitor :" + msg.getHaveMonitor() );
//System.out.println("Monitor NAL :" + msg.getMonitorNAL() );
//System.out.println("AuditDate :" + msg.getDateOfMsg() );
System.out.println("Client Says :" + clientCommand);
if(clientCommand.equalsIgnoreCase("quit"))
// Special command. Quit this thread
m_bRunThread = false;
System.out.print("Stopping client thread for client : " + m_clientID);
else
// Echo it back to the client.
out.println(clientCommand);
out.flush();
catch(Exception e)
e.printStackTrace();
finally
// Clean up
try
in.close();
out.close();
m_clientSocket.close();
System.out.println("...Stopped");
catch(IOException ioe)
ioe.printStackTrace();
}I find that taking any problem and reducing it to the simplest thing is the best way to approach it.
Why you had to post all that bloody code (especially since you didn't write it) is beyond me.
This will list all the tables in an Access database (or any other, for that matter):
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.jdom.Element;
import org.jdom.Document;
import org.jdom.output.XMLOutputter;
public class TableLister
public static final String DRIVER = "sun.jdbc.odbc.JdbcOdbcDriver";
public static final String DATABASE = "jdbc:odbc:DRIVER={Microsoft Access Driver (*.mdb)};DBQ=c:\\Edu\\Java\\Forum\\DataConnection.mdb";
public static final String USERNAME = "admin";
public static final String PASSWORD = "";
public static void main(String [] args)
try
String driver = ((args.length > 0) ? args[0] : DRIVER);
String url = ((args.length > 1) ? args[1] : DATABASE);
String username = ((args.length > 2) ? args[2] : USERNAME);
String password = ((args.length > 3) ? args[3] : PASSWORD);
Class.forName(driver);
Connection conn = DriverManager.getConnection(url, username, password);
DatabaseMetaData meta = conn.getMetaData();
// Bring back ALL tables and views, including SYSTEM tables.
ResultSet tables = meta.getTables(null, null, null, null);
ResultSetMetaData rsmd = tables.getMetaData();
int numColumns = rsmd.getColumnCount();
List columnNames = new ArrayList();
for (int j = 0; j < numColumns; ++j)
columnNames.add(rsmd.getColumnName(j+1));
Element root = new Element("tables");
int tableCount = 0;
while (tables.next())
Element table = new Element("table");
table.setAttribute("id", Integer.toString(++tableCount));
for (int j = 0; j < numColumns; ++j)
Element column = new Element((String)columnNames.get(j));
column.setText(tables.getString((String)columnNames.get(j)));
table.addContent(column);
root.addContent(table);
conn.close();
Document doc = new Document(root);
XMLOutputter outputter = new XMLOutputter(" ", true);
System.out.println(outputter.outputString(doc));
catch (ClassNotFoundException e)
System.err.println("Couldn't load JDBC driver class");
e.printStackTrace();
catch (SQLException e)
System.err.println("SQL state: " + e.getSQLState());
System.err.println("SQL error: " + e.getErrorCode());
e.printStackTrace();
catch (Exception e)
e.printStackTrace();
}Run it and see if it works for you. If it does, put the essence of the code into your stuff.
% -
How to get the table name of a field in a result set
hi!
i have a simple sql query as
select tbl_customerRegistration.*, tbl_customerAddress.address from tbl_customerRegistration, tbl_customerAddress where tbl_customerAddress.customer_id = tbl_customerRegistration.customer_ID
this query executes well and gets data from the database when i get ResultsetMetaData from my result set (having result of above query) i am able to get the field name as
ResultSetMetaData rsmd = rs.getMetaData();//rs is result set
String columnName = rsmd.getColumnName(1);
here i get columnName = "Customer_id"
but when i try to get the tabel name from meta data as
String tableName = rsmd.getTableName(1); i get empty string in table name....
i want to get the table name of the respective field here as it is very important to my logic.....
how can i do that.....
please help me in that regard as it is very urgent
thanks in advance
sajjad ahmed paracha
you may also see the discussion on following link
http://forum.java.sun.com/thread.jspa?threadID=610200&tstart=0So far as I'm aware, you can't get metadata information about the underlying tables in a query from Oracle and/or the Oracle drivers. I suspect, in fact, that the driver would have to have its own SQL parser to get this sort of information.
I'm curious though-- how do you have application logic that depends on the name of the source table but not know in the application what table is involved? Could you do something "cheesy" like
SELECT 'tbl_customerRegistration' AS tbl1_name,
tbl_customerRegistration.*
...Justin
Distributed Database Consulting, Inc.
http://www.ddbcinc.com/askDDBC
Maybe you are looking for
-
.I>m using windows7 OS IE9 downloaded and installed fifty times and it always say download and installation was sucessful ,that I"m now using flashplayer 10.5 ect. there is the flashplayer icon sitting right on my desktop .from control panel in progr
-
ITunes 10 not working with external drive
I am using iTunes 10 on my MacBook Pro..I wanted to move my library to an external drive due to its large size. I correctly created the folder in Advanced Preferences and "consolidated" my library. However, iTunes despite having the correct drive des
-
ITunes won't start and asks to reinstall after iTunes10 update.
iTunes won't start and asks to reinstall after iTunes10 update. I have tries reinstalling, but it comes up with it again. I have uninstalled every Apple program and reinstalled them but still the same.
-
Firefox scrolls slowly on websites with background images.
I find that when I go to websites that have background images, such as my tumblr (deshaunic.us) or the call of duty websites (http://www.callofduty.com/missions), scrolling is very slow and stutters, even though I have smooth scrolling enabled. I hav
-
On very few occasions, when I receive a new e mail, old e mails (from 2+ years ago) show up in the body of the new email (subject line and sender are current, info in body is old deleted e mail)