Sunday, June 27, 2010

What is consumer finance?

The division of retail banking that deals with lending money to consumers. This includes a wide variety of loans, including credit cards, mortgage loans, and auto loans, and can also be used to refer to loans taken out at either the prime rate or the subprime rate.

Prime rate or prime lending rate is a term applied in many countries to a reference interest rate used by banks. The term originally indicated the rate of interest at which banks lent to favored customers, i.e., those with high credibility, though this is no longer always the case. Some variable interest rates may be expressed as a percentage above or below prime rate.

subprime lending means making loans that are in the riskiest category of consumer loans and are typically sold in a separate market from prime loans.

Friday, June 25, 2010

Delete duplicate records from a table

delete from test a
where rowid <> ( select max(rowid)
from test b
where a.sno = b.sno
and a.sname = b.sname )

Monday, June 21, 2010

How to work with APIs or DLLs in Excel VBA ?

An API is exactly as its acronym suggests, an interface. Just like the interface between your screen and yourself is the keyboard or mouse, so the underlying code just translates your actions to the screen....everything between these 2 is handled by Library files that call other functions to perform actions. You use API while programing in VBA, you just don't realise it...the VBA just acts like a translator in converting your code to the appropriate Op-codes so that the underlying library files can perform some action/function.

The plus side of using API's means that the libraries can be updated independently of the application, and many applications can share a single DLL. The down side is that if you get it wrong you may not receive an error and/or your system will become unstable or crash causing you to reboot.

Always good practice to constantly save when working with APIs. Also can be difficult to debug your program, in fact you can't debug API calls in VBA.

In VBA before you can call a function in a DLL, you must provide VBA with information about where that function is and how to call it. There are two ways to do this:

1) by setting a reference to the DLL's type library (.tlb)

2) by using a Declare statement in a module as above.

The Declare keyword alerts VBA that you want to include the definition for a DLL function in your project. A Declare statement in a standard module can be public or private, depending on whether you want the API function to be available to only a single module or to the entire project. For class modules, a Declare statement must be private so .........................

The Public Function >

Public Declare Function sndPlaySound Lib "winmm.dll" _
Alias "sndPlaySoundA" ( _
ByVal lpszSoundName As String, _
ByVal uFlags As Long) As Long

In most cases you will see API calls with No explicit path as you would use the core window library files which are located in your system dir.

If a procedure does not return a value, write the declare as a Sub:


Declare Sub publicname Lib "libname" [Alias "alias"] [([[ByVal] variable [As type] [,[ByVal] variable [As type]]...])]

As per Std Sub Procedure set-up, DLL procedures declared in standard modules are public by default and can be called from anywhere in your application. DLL procedures declared in any other type of module are private to that module, and you must identify them as such by preceding the declaration with the Private keyword. Procedure names are case-sensitive in 32-bit versions of Visual Basic. In previous, 16-bit versions, procedure names were not case-sensitive.

Lets look @ the above Function;


Specifying the Library

The Lib clause in the Declare statement tells Visual Basic where to find the .dll file that contains the procedure. When you're referencing one of the core Windows libraries;

User32 [user interface functions],

Kernel32 [operating system kernel functions],

GDI32 [graphics device interface functions], and

shell32.dll [Windows shell functions],

you don't need to include the file name extension:


Declare Function RegisterClass Lib "user32" Alias "RegisterClass" (Class As WNDCLASS) As Long

For other DLLs, the Lib clause is a file specification that can include a path:

Declare Function lzCopy Lib "c:\windows\lzexpand.dll"

_(ByVal S As

_ Integer, ByVal D As Integer) As Long

If you do not specify a path for libname, Visual Basic will search for the file in the following order:

1. Directory containing the .exe file

2. Current directory

3. Windows 32-bit system directory \Windows\System32

4. Windows directory \Windows

5. Path environment variable (See here to get these)

In most cases you will see API calls with No explicit path as you would use the core window library files which are located in your system dir. So in the above example we are Looking @ the winmm.dll

sndPlaySound = The name by which Visual Basic will refer to the function everywhere else in your code. You can make this any name you want (as long as you use the proper Alias clause), but it's safest to make this the Actual name of the function in the Windows API.


The Alias clause in the declare statement is needed to specify the correct character set. Windows API functions that contain strings actually exist in two formats: ANSI and Unicode.

It is the A (ANSI) @ end that signifies this in "sndPlaySoundA"

The Unicode version ends with the letter W (WCHAR type). So if the function has two entry points then you would expect to see the Alias used.

ANSI or Unicode

The 32-bit versions of Windows (Windows 95+ and Windows NT) support two separate character sets: ANSI, in which each character takes 1 byte of storage and there are only 256 different possible characters; and Unicode, in which each character takes up 2 bytes of storage and there are 65,536 different possible characters ie. 16-bit Unicode character. VBA, Access' programming language, supports Unicode only. In general, this works in your favour, allowing support for many languages, including those that use character sets different from the English ones. In the Windows header files, therefore, you'll get both ANSI and Unicode versions of each function that contains a string. Have a look for winmm.dll and right click to select Quickview, you should get something like this;

Export table

Ordinal | Entry Point | Name

0004 00012d0 CloseDriver

0005 0008db3 DefDriverProc

etc....listing all the entry points or LP Long pointers to the various functions with in the library.

Now for the Arguments and Types;

(ByVal lpszSoundName As String, ByVal uFlags As Long) As Long

lpszSoundName = a string that specifies the sound to play. This must be the Fullpathname. If this parameter is NULL, any currently playing waveform sound is stopped. ie To stop a currently playing sound then send the VBA Const VBNullString and NOT "" !!

ByVal = when a value is passed ByVal, the actual value is passed directly to the function, the exception to this is string variables, but that is another story, and when passed ByRef, the address of the value is passed, so you may see something like LPWORD which is actually a Long Pointer to a memory address.

As String = value passed is a string = the full path name to the sound file

ByVal uFlags As Long

The function is expecting some Flags to be declared here as the data type Long (Look up data Type for Long) = Long (long integer) variables are stored as signed 32-bit (4-byte) numbers ranging in value from -2,147,483,648 to 2,147,483,647. The type-declaration character for Long is the ampersand (&).

As for the Public Constants

Public Const SND_SYNC = &H0

Public Const SND_ASYNC = &H1

Public Const SND_NODEFAULT = &H2

Public Const SND_MEMORY = &H4

Public Const SND_LOOP = &H8

Public Const SND_NOSTOP = &H10

What does &H0, &H1, &H2, &H4, &H8, &H10 mean?? They are Hexadecimal values (Base 16)

The function will recognize various Constants or flags that tell it how/what to do eg.

Flags for playing the sound;


The sound is played asynchronously and PlaySound returns immediately after beginning the sound. To terminate an asynchronously played waveform sound, call PlaySound with lpszSoundName set to VBNullString.


The sound plays repeatedly until PlaySound is called again with the lpszSoundName parameter set to VBNullString. You must also specify the SND_ASYNC flag to indicate an asynchronous sound event.


No default sound event is used. If the sound cannot be found, PlaySound returns silently without playing the default sound.


The specified sound event will yield to another sound event that is already playing. If a sound cannot be played because the resource needed to generate that sound is busy playing another sound,the function immediately returns FALSE without playing the requested sound. If this flag is not specified, PlaySound attempts to stop the currently playing sound so that the device can be used to play the new sound.


If the driver is busy, then return immediately without playing the sound.


Synchronous playback of a sound event. PlaySound returns after the sound event completes.

The values; &H0, &H1, &H2, &H4, &H8, &H10 are the Long Hex values of these constants eg.

&[Long] H(Hex) 0 or &H0 = 0 Decimal

&[Long] H(Hex) 10 or &H10 = 16 Decimal

How to pause the execution of vba script?

Public Sub

‘Stops the execution of the code and continues after 10 seconds.
Application.Wait Now + TimeValue("00:00:10")

End sub

Monday, June 14, 2010

How will you delete duplicate rows from a table?

DELETE FROM our_table
WHERE rowid not in
(SELECT MIN(rowid)
FROM our_table
GROUP BY column1, column2, column3... ;Here column1, column2, column3 constitute the identifying key for each record.

Be sure to replace our_table with the table name from which you want to remove the duplicate rows. The GROUP BY is used on the columns that make the primary key for the table. This script deletes each row in the group after the first row.


DELETE FROM duptest WHERE rowid NOT IN (SELECT max(rowid) FROM duptest GROUP BY empid);

Explanation :- In the subquery I Select a unique rowid from all the rowid's It can be MAX, MIN any one and the group by clause should include all the UNIQUE columns I desire. Say I want a composite primary key then the group by should be group by id1,id2 ...

The the subquery returns one record for the dupliacte ID's and I delete all of them that are not in the subquery and that deletes all the dupliacte rows from the database.

How to count number of rows in a text file ?

Const ForReading = 1, ForWriting = 2, ForAppending = 8
Dim objfile
Set objfile = CreateObject("Scripting.FileSystemObject")
Set objref = objfile.opentextfile("C:\\Results.txt", ForReading, True)
i = 0
Do While objref.AtEndOfStream <> True
TextLine = objref.ReadLine
i = i + 1

MsgBox i

QTP Interview Questions

QTP Interview Questions can be found in this blog.Feel free to post or ask any questions on QTP.

Thursday, June 10, 2010

delete the highest earning employees in each department

SQL> select * from dept order by deptno;

---------- -------------- -------------

SQL> select empno,ename,job,sal,deptno from emp;

---------- ---------- --------- ---------- ----------
7369 SMITH CLERK 800 20
7499 ALLEN SALESMAN 1600 30
7521 WARD SALESMAN 1250 30
7566 JONES MANAGER 2975 20
7654 MARTIN SALESMAN 1250 30
7698 BLAKE MANAGER 2850 30
7782 CLARK MANAGER 2450 10
7788 SCOTT ANALYST 3000 20
7839 KING PRESIDENT 5000 10
7844 TURNER SALESMAN 1500 30
7876 ADAMS CLERK 1100 20
7900 JAMES CLERK 950 30
7902 FORD ANALYST 3000 20
7934 MILLER CLERK 1300 10

14 rows selected.
SQL> delete from emp a where
a.sal = (select max(sal) from emp b
where a.deptno = b.deptno);

4 rows deleted.

SQL> select ename, sal, deptno from emp
order by deptno, ename;

---------- ---------- ----------
CLARK 2916.67 10
MILLER 2916.67 10
ADAMS 2175 20
JONES 2975 20
SMITH 2175 20
ALLEN 1600 30
JAMES 1566.67 30
MARTIN 1566.67 30
TURNER 1566.67 30
WARD 1566.67 30

Tuesday, June 8, 2010

Correlated Subquery

A query is called correlated subquery when both the inner query and the outer query are interdependent. For every row processed by the inner query, the outer query is processed as well. The inner query depends on the outer query before it can be processed.

A correlated Oracle subquery is evaluated once FOR EACH ROW as opposed to a normal subquery which is evaluated only once for each table.

You can reference the outer query inside the correlated subquery using an alias which makes it so handy to use.

SQL> select ename ,sal ,deptno from emp a where
a.sal < (select avg(sal) from emp b
where a.deptno = b.deptno)
order by deptno;

---------- ---------- ----------
CLARK 2450 10
MILLER 1300 10
SMITH 800 20
ADAMS 1100 20
WARD 1250 30
MARTIN 1250 30
TURNER 1500 30
JAMES 950 30

8 rows selected.

1) You can nest as many queries you want but it is recommended not to nest more than 16 subqueries in oracle.
2) If a subquery is not dependent on the outer query it is called a non-correlated subquery.

write sql query to get the employees names under manager

It has emp table and mgr table.

To query the EMP table for the direct reports to the employee KING, you could write the following:

select ename from emp e
where mgr in (select empno from emp where ename = 'KING');

Monday, June 7, 2010

Software Development Life Cycle Model

Waterfall method:
For years, the primary methodology for delivering software projects was the "Waterfall Method". With the Waterfall method, all software requirements are gathered up front, designs are done for each requirement, and each feature is coded and tested before migrating to production. For projects that exceed one year of development and implementation, there are risks of the project being cancelled (according to the Standish Group, about 31% are cancelled before completion).

Weaknesses of the Waterfall Method:

Since all requirements are gathered (and designs done) upfront, the software life cycle is normally a year or longer.
Business rules change along with market conditions. Due to the long software life cycle, the software may no longer meet the needs of the company after being implemented.
Testing is performed after all features are analyzed, designed and coded. If a major design flaw is found during the testing phase, it may need to be addressed in many functional areas, causing the time to fix the defect much longer due to the large number of requirements.

Iterative Development Model

An alternative approach is the Iterative Development Life Cycle (sometimes referred to as the Spiral Life Cycle).

With the Iterative Life Cycle, analysis is done just the same as with the Waterfall method. However, once analysis is done, each requirement is prioritized as follows:

High - These are mission critical requirements that absolutely have to be done in the first release.
Medium - These are requirements that are important but can be worked around until implemented.
Low - These are requirements that are nice-to-have but not critical to the operation of the software.
Once priorities have been established, the releases are planned. The first release (Release 1.0) will contain just the High priority items and should take about 1 to 3 months to deliver.

Below are the advantages of the Iterative Life Cycle:

The Design phase goes much faster, as designs are only done on the items in the current release (Release 1.0 for example).
Coding and Testing go much faster because there are less items to code and test. If major design flaws are found, re-work is much faster since the functional areas have been greatly reduced.
The client gets into production in less than 3 months, allowing them to begin earning revenue or reducing expenses quicker with their product.
If market conditions change for the client, changes can be incorporated in the next iterative release, allowing the software to be much more nimble.
As the software is implemented, the client can make recommendations for the next iteration due to experiences learned in the past iteration.
Our experience has found that you should space iterations at least 2 – 3 months a part. If iterations are closer than that, you spend too much time on convergence and the project timeframe expands. During the coding phase, code reviews must be done weekly to ensure that the developers are delivering to specification and all source code is put under source control. Also, full installation routines are to be used for each iterative release as it would be done in production.