Showing posts with label PowerBuilder Tips. Show all posts
Showing posts with label PowerBuilder Tips. Show all posts

Wednesday, September 8, 2010

Bye Bye for SetRedraw( )

A common Classic PB code technique when modifying the displayed contents of window controls, is to turn off screen refresh by calling SetRedraw( false ), performing the update activity and then calling SetRedraw (true).

Setredraw( ) is one of those graphic object methods that falls by the wayside when migrating to .NET. It is no longer supported. Is this a bad thing that will give your users a migraine headache or a non-issue?

This post and the accompanying video will give you a refreshing understanding of the issue and help set your expectations when you migrate and see those unsupported feature warnings.

First some background:

In classic Windows UI and .NET WinForm, each window (and remember internally each control is a window) is constantly redrawing itself; when it's first created, when it's covered and re-exposed, and when something about its look and feel needs to change. When the application is told to paint itself (draw in PB terms), it works with an abstraction called a device context which is wrapped in a Graphics object. The context deals with the drawing surface as a field of colored dots which each of which it turns on in a color or off to match the request. The whole process is built upon the 1990's hardware and device driver technology that was current when MS Windows 3.x was designed Whew, I bet you're begin to get the feeling that constantly repainting a display during a dynamic refresh process is a lot of work for the application program!

Monday, August 30, 2010

Powerbuilder Interview question _ part 9

STRING FUNCTION

1. What does a string manipulation function Left( ) do?
Obtains a specified number of characters from the beginning of a string. Left(string, n)

2. What does a string manipulation function LeftTrim( ) do?
Removes spaces from the beginning of a string. LeftTrim(string)

3. What does a string manipulation function RightTrim( ) do?
Removes spaces from the end of a string. RightTrim(string)

4. What does a string manipulation function Mid( ) do?
Obtains a specified number of characters from a specified position in a string.
Mid(string, start{, length})

5. What does a string manipulation function Lower( ) do?
Converts all the characters in a string to lowercase. Lower(string)

6. What does a string manipulation function Right( ) do?
Obtains a specified number of characters from the end of a string.
Right( string )

7. What does a string manipulation function String( ) do?
Convert variables of other datatype into sting String ( data, { format } )

8. What does a string manipulation function Trim( ) do?
Removes leading and trailing spaces from a string Trim(string )

9. What is the function of SelectText( )?
Selects text in an editable control. We specify where the selection begins and how many characters to select: editname.SelectText ( start, length )

10. Write a function to find one string within another and return position of that sub-string?
String msg, putin
long NewPos, l_NewPos
msg = mle_text.text
putin = sle_find.text
NewPos = Pos(msg, putin, 1)
l_NewPos = Pos(msg, putin,NewPos)
SetFocus(mle_text)
mle_text.SelectText(l_NewPos,len(putin))

STRUCTURE
1. What is a Structure? What is Structure Data type?
The structure is a collection of one or more related variables of the same or different data type grouped under a single name. There are Global and Object level structure.

2. How do you use a Structure in your script ?
We define structures using the Structure painter. In scripts we must create instances of the structure in order to use them. When we refer to an individual variables within a structure, we need to prefix them with the name of the structure instance.

3. Which attribute of the Message Object is used to pass a structure between windows ?
PowerObjectParm attribute of the Message Object is used to pass a structure between windows as the parameter in the OpenSheetWithParm( ) function.

4. Show me how to send a structure to a function.
You can pass a structure as an argument in user-defined functions. Simply name the structure as the structure data type when defining the argument.

5. Can an array be an element of the Structure? Can a User Object be?
YES. An array and a User Object can be an aliment of the structure. Any object can be an element of the structure.
Example
S_struct s_str
for I = 1 to 10
s_str.array[i] ……..
next

6. How to reference structure variables in the script?
If the structure is Global, you have to declare the variables of this structure type and use dot notation to reference the structure variables. E.g.,
emp_data emp1
emp 1.emp_id =100
If the structure is object level and you want to use it in the script for the object itself declare a variable of this structure type and use dot notation. If you want to make this object level structure accessible outside the object: in the object that defines the structure, declare an instance variable of the structure type. In any script of the application reference a variable in the structure using syntax:
object .instance_variable .variable

7. Could you pass structure as argument in user defined function?
YES. We just have to name structure as a data type when we defining argument.

8. When do you use = operator?
It is used to compare one structure to another structure of the same type.

9. Can an array be an element of the Structure? Can User Object be?
Yes, an array can be in the structure, because it is also a variable that can hold multiple storage values. Unlike an array which has a single variable name and a range of numeric index values, a structure is composed of many variable names that are related in some way. These variables may be of different data types. How to process an array:
s_struct s_str.
For I = 1 to 10
s_struct.array[I] = …

Yes, a user object can be a part of a structure. How to process a user object:
s_str.ou_obj = Create u_obj
open s_structure.window

10. Can you assign a structure to a structure?
Yes, we can copy all elements of a structure to another structure with a single assignment statement. At first, we declare a structure as a class and then assign values of the first structure to another structure.

TARGET OBJECT

1. What are the Target Object events?
DragDrop
DragEnter
DragLeave
DragWithIn

2. What is a drag mode?
A Drag mode is the state of the object when the user has clicked a draggable control and is holding the left mouse button down.

3. In what case did you use Drag and Drop?
We want to create a trash can in our program to make it look more user friendly

4. What are automatic and manual drag modes?
In automatic drag mode, PowerBuilder automatically switches the application into drag mode when the control is clicked. or
DragAuto is a boolean indicating whether PowerBuilder puts the control into a drag mode automatically. DragAuto has these boolean values.
True – when the user clicks the control, PowerBuilder puts the control in drag mode.
When DragAuto is True, clicking a control triggers a DragDrop event, not a Clicked event.
False – when the user clicks the control, PowerBuilder does not put the control in drag mode; we have to call the Drag function to put the control manually into a drag mode.
With manual drag mode, PowerBuilder does not switch the application into drag mode when the control is clicked. We must control when the drag mode is initiated using command drag(Begin!), drag(Cancel!), drag(End!).

TRANSACTION OBJECT

1. When do you use AutoCommit?
1. If you set AUTO COMMIT to FALSE, all SQL commands are part of a transaction and you must issue COMMIT and ROLLBACK commands from time to time to complete your work.
If AUTO COMMIT = TRUE, there are no transactions and each SQL command is immediately committed. In this case explicit COMMIT and ROLLBACK commands in the script have no effect
2. When we need to create a temporary table.
3. When a window has a lot of display activity only.

2. What is a Transaction Object? What is the purpose of a transaction object?
A Transaction Object is an NVO which stores information required to connect to a specific DB.

3. Explain the difference between SetTrans and SetTransObject.
The SetTrans() function provides another way of managing the database connection. SetTrans, which sets transaction info in the internal transaction object for the DW control or DataStore, manages the connection automatically. You do not explicitly connect to the DB; the DataWindow connects and disconnects for each database transaction, which is less efficient but necessary in some situations.
SetTransObject causes a DW control or DataStore to use a programmer-specified transaction object.

USER OBJECT
1. What are Non-Visual User Objects?
Non-visual user object is an object that encapsulates attributes and functions but is not visible to the user. NVO is a collection of business user functions. They can be Custom Class and Standard Class. NVOs are useful because they allow you to encapsulate application operations into objects making them easier to develop, manage and maintain and also to encapsulate all security management for an application into a single object.

2. Explain the purpose of a non-visual user objects
The purpose of non-visual user objects is to define business rules and other processing (which are checked in different windows in your application) that act as a unit. We implement them in PowerBuilder using Class User Objects.

3. What types of a non-visual user object do you know?
There are two types of non-visual user objects :
Standard user object inherits its definition from one built-in, PB NVO such as the Trans-action object or Error object. We modify its definition to make the object specific to our application.
Custom user objects are objects of our own design that encapsulate properties and
functions but are not visible to the user.

Typically, we use Custom Class User Objects to define processing in our application that has no visual component. We typically use class user objects to define processing that acts as a unit; for example if our application calculates sales commissions, we might create a custom class UserObject to perform the commission calculation.

After we build and save a visual user object, we can use it as we use a PB control. We can place it in a window or in other user objects, and we can size it, change its style, and build scripts for its events.
After we build and save a class user object, we declare a variable of the UserObject type and create an inheritance of it using the CREATE statement in a script. Once we have instantiated the class UserObject, its attributes and functions are available within the scope of the variable declaration. After using the UserObject, we destroy it with the DESTROY statement to free up memory.
We can also build new user objects that inherit attributes, events, structures, and functions from an existing user object.

4. What are facilities of the User Objects ?
We define a component once, then reuse it many times as we need without any additional work.

5. Give me an example of Standard & Custom visual user objects you have created
and what was the purpose of each?
Standard – Any single control can be placed in a standard user object
Custom – Many controls can be placed in a custom user object

6. What does OpenUserObject( ) do?
OpenUserObject( ) adds a user object to the specified window and makes all its properties and controls available to scripts.
windowname.OpenUserObject ( userobjectvar, userobjecttype {, x, y } )
This function is used when you want dynamically, at runtime place some user objects on a window. This function displays this user object, makes all its attributes available to scripts. You must open a user object before you can access the attributes of the user object. If you access the user object’s attributes before you open it, it will cause an execution error.

7. How can you dynamically place an User Object on the window?
By using functions : OpenUserObject( ), OpenUserObjectWithParm( )

8. When would you use a Standard User Object?
We use a standard UserObject to extend the standard set of predefined attributes, events, and functions or to encapsulate common controls into an object that can be reused without any additional work.

9. Can a standard visual User Object contain another User Object? No.

10. In what situations would you use a custom visual UserObject?
We use a visual custom UserObject when we frequently group controls in a Window and use the controls to perform the same processing.

11. What Events does the Custom Class have?
Constructor and Destructor

12. What events are available to a standard class User Object?
Constructor and Destructor

13. What events are available to a standard visual User Object?
It has all events that standard PowerBuilder control has it.

14. How can you instantiate non-visual object (class) in memory?
First we need to declare a variable of our User Object data type. We have to create an instance of our object in memory using command CREATE. Now we have access to the attributes and functions encapsulated in our User Object. When we don’t need this object anymore, we should Destroy it before we close an application to avoid memory leaking.
First we need to declare a variable having our object’s type:
uo_business_rules my_object
CREATE my_object - This will create an instance of our object in memory.
When we don’t need this object anymore, you should Destroy it to avoid memory leaking:
DESROY my_object or
We need to create (instantiate) a variable of the class UserObject type when we use the class
We create custom transaction object MY_TRANS
Then you have to declare and create this UserObject
MY_TRANS l_my_trans
l_my_trans = create MY_TRANS
Now we have access to the attributes and functions encapsulated in the UserObject.
We have to destroy MY_TRANS before we close the application

15. Once a standard user object is placed on a window, can you override its attributes? Yes, we can.

16. How can you override User Object’s function?
Using polymorphism: In the User Object that we put on the window (a descendant of original UserObject) we can declare a function with the same name as the function in an ancestor we want to override.

17. How many custom user events can you define and what triggers them?
In PB 4 we could have not more then 75 custom event ID’s that we use for each object. In PB5 we may have as many as we need but with no mapping to PB custom events, however the events can work as a functions. We trigger them manually by using functions in our scripts. New syntax to trigger the custom event is
object.event ue_cancel( )
object.event post ue_cancel( )

18. How is a custom visual UserObject different from a standard UserObject?
A custom visual user object is an object that has several controls that work as a unit.
A standard visual user object inherits its definition from a standard control. We modify the definition to make the control specific to our applications.

19. What events do you know for custom visual user objects?
Constructor - occurs after window’s open event or when a user object is dynamically placed in the window
Destructor -occurs after window’s Close event or when a user object is dynamically removed from the window
DragDrop When a dragged object is dropped on the user object
DragEnter - when a user object enters the user object etc.
Drag within
Drag leave
Other
RightButtonDown

20. How can you communicate between the window and user object in the window?
When we placed user object into the window we can write the script s for User Object event (conctructor, dectructor) but we cannot write the scripts for controls inside the user object. But we can use user object level functions or user events.

VARIABLES
1. What is a variable?
Variables are storage locations that hold values. The values can be entered by user, retrieved from a Database, calculated by the application. Variables must be declared before they are referenced in a script.

2. What does the scope determine?
The scope of a variable determines which scripts can access the variable to use or change its value. The scope of a variable determines the scripts in which the variable can be referenced.

3. What types of variables do you know?
Local—defined within a script for a control and can be accessed only within that script.
Instance—defined for an object (e.g., window or User Object) and can be accessed only with in an object.
Shared—defined for an object. All descendants of that object can access the variable (i.e. there is one variable with one value for the object and all of its descendants). Shared has a scope very similar of the instance but it also will be known for all instances of the object. Shared variable retains its value when instances of the object are closed and opened again. If the value of the shared variable is changed in one instance and then accessed in another, the second instance gets the new value.
Global variables can be accessed by any object and are known through the scope.

4. What is a local variable?
A local variable is declared in the script for a control or object that can only be referenced in that script. We use local variables when the value only needs to be known while the particular script is executing.

5. When do you use reserve word PARENT?
We can use it in the script for different events of controls. In this case it refers to window this control belongs to. If we use it in a script for a control in a custom user object, it refers to the user object. When we use it in a script for MenuItem it refers to the MenuItem on the level above.

6. What does the pronoun THIS refer to.?
It refers to the object or control we are writing script for.

7. What does the pronoun PARENT WINDOW refer to?
The pronoun PARENT WINDOW refer to the window that menu is associated with at the execution time.

8. When do you use instance variable?
You use an instance variable when you have data that have to be accessible in more then one script within the object, but don’t need to be global.

9. What access level for instance variable do you know?
PUBLIC - accessible for all scripts
PRIVATE - accessible in the scripts for events in the object for which the variable was declared
PROTECTED - accessible in the scripts for events in the object for which the variable was declared and its descendants.

10. What the difference between instance and shared variable?
An instance variable is initialized when the object is opened. When you close the object, it ceases to exist. When you open the object again, the instance variable is initialized again. But the Shared variable continues to exist when you close the object and if you open the object again the shared variable will have the value it had when you closed the object.

11. What does the qualified reference mean?
A qualified reference is a variable (or object) name made specific by prefixing a window or object name to the variable name. We qualify references to refer to a variable in a child within its parent. E.g.,
w_customers.sle_address
Qualifying variables or column name in the SQL statement also eliminate ambiguity.

12. What is a shared variable? An Instance variable? How do you use them?
A shared variable is a variable that belongs to an object definition and exists across all instances of the object. Shares variables retain their value when an object is closed and opened again. Shared variables are always private. They are accessible only in scripts for the object and for controls associated with the object. Shared variables can belong to the application object, a window, a user object, or a menu.
An instance variable is a variable that belongs to an object and is associated with an instance of that object (you can think of it as a property of the object). Instance variables have access keywords that determine whether scripts of other objects can access them. Instance variables can belong to the application object, a window, a user object, or a menu. (Difference: they have different scope. The value of the shared variable is the same in each instance of the object. Instance variables are associated with one instance of an object such as a window and each instance can have different values in the instance variable.)

1. What is Check-in, Check-out options on a Library Painter?
It is a Version control.
Check- in, Check-out are options on a Library painter, which control an access to Library entries. For example, when more then one programmer are working on a project, we want to prevent them from modifying a library entry at the same time. To control the access to library entries we can use Check-in and Check-out. When you Check-out an entry, PB makes a copy of the entry, stores it in a specified library( a test or development library), and sets the status of the entry to check out. As long as the status of an entry is checked out, we can change only to the working copy. If we try to open the original copy, PB displays a warning message. When we finish working with an entry that you checked out , we can Check-in entries on to replace the entry in the original library with the working copy of the entry. Check-in clears the check-out status from the entry, and delete the working copy from the library in which it is saved.

2. What is an access control system for developers?
Check-in, Check-out.

3. Did you use any Version Control systems such as PVCS?
No, we have used PowerBuilder’s own Check-in/Check-out feature in the Library painter.

WINDOW OBJECT

1. For the following window types, describe typical uses or provide examples of how they are used in commercially available products:
Main is initial window of an application.
Characteristics: operates independently of all other windows.
Child is subordinated to its parent window.
Characteristics: can exist only within parent; thus, automatically closed when its parent window is closed;
is never the active window;
appears as an icon within the parent window when it is minimised.
cropped when a user attempts to move it beyond its parent;
moves with its parent, since its position is always relative to the parent;
Uses: the main window for a customer displays information in textual form and a child window displays it graphically.
Response is application modal
Characteristics: cannot be minimized;
the user cannot go to other windows in the same application;
the user cannot go to other Windows applications;
remains the active window until the user responds.
Uses: displaying error or warning messages to the user;
requesting a critical item of information from the user before work can begin
(Select Window in the Window painter)
Popup is
Characteristics: has a parent window;
is never hidden behind its parent;
can display outside the parent window;
appears as an icon outside the parent window, at the bottom of the screen, when minimized;
minimizes within its parent, when its parent is minimized.
Uses: online help.
MDI is a style of application used to manage multiple documents of the same or different types within one.
Characteristics: Each of the document types in its own window, but all of the windows appear framed within a foundation window for the application.
MDI with Microhelp has the same behaviour as an MDI frame window without Microhelp, but it also permits the display of microhelp information in the status bar.
Characteristics: provides the Microhelp facility to deal with the limited number of words allowed in a Menu. In the status bar at the bottom of the frame we can display additional information about a MenuItem to help the user to understand what the MenuItem does.

2. What are the Types of Windows and how is each one used?
Main is used as a top-level, foundation window( or as a sheet in an MDI application)
Child is used as a subordinate window.
Pop-up is used to provide subordinate information and it is never covered by the parent window.
Response is used to obtain information from and provide information to the user.
MDI and MDI with microhelp is a window frame in which users can open multiple document windows (sheets).

3. What is a control?
Controls are objects that we place in a Window to allow the user to interact with the Application.


4. What kind of windows should be closed using the function CloseWithReturn( )?
Response Windows.

powerbuilder interview question _ part 8

POLYMORPHISM

1. What is polymorphism ?
Polymorphism is functions with the same name that can do different things for different objects and give different results . For example, 1 + 1 = 2 mathematics plus
“John” + “Smith” Concatenation plus
Polymorphism is a feature of an object-oriented language which defines same methods for different objects. Example: Let’s say, you are going to have several windows in your program, all of them with DataWindows and Retrieve buttons. We want to be generic and put code for the retrieve event in the function of the ancestor window. But some of these DataWindows are with external data source and have to be handled differently than the rest. Our solution is to create a generic function for retrieve in the window-ancestor and for the window with special handling create their own functions with the same name as in the ancestor. The function in a descendant will overload the ancestor’s function. We can define a Print function for a different kinds of objects. Each has its own definition of what print does.

2. How do you understand using Overloading functions in Polymorphism?
Overloading is functions with the same names with different parameters that can be used in the same object. Away in which polymorphism works in PowerBuilder. Means that when several functions the same name exist in ancestors and descendants call to another (with different function body) will overload (change) function’s body in the memory.

3. What is overloading?
When the function of the object has the same name but different arguments.

4. What is polymorphism?
Polymorphism is when functions have the same name but behavior varies with the type of the object to which it is applied.

5. Give examples of polymorphic functions in PowerBuilder.
For example, 1 +1 = 2 mathematics plus
“John” + “Smith” Concatenation plus
Another example: When you implement polymorphism, it’s common to create an ancestor object that has a method in it but no code. E.g., suppose, that you have a custom class called u_Invoice and one called U-check. They are both descendants of the custom class called u_Document. U_Document has a Print method but it has no code in it. Both u_invoice and u_Check also have a Print method, each with different code. Why create this structure? Because then an application that uses your objects can refer to any document using variables of type u_Document. And when they want to print a document, they can just call the Print method.
Uo_document doc

//NextDocument() may return a u_Invoice or u_Check document
doc = NextDocument()
doc.Print()
This is called dynamic binding. The specific function you are calling isn’t actually resolved until runtime. It just depends on whether the variable doc is holding a u_Invoice or u_Check object.

6. What is polymorphism?
Polymorphism is an object-oriented feature. Different object classes can have functions with the same name which can be used more than once to do different things for different objects. There are situations in which you want to send the same kind of message to different kinds of objects and have each object respond to that message in its own unique way.


1. What is Regenerate option in the Library painter? When is it most useful?
It compiles all codes of an object(s). Regeneration is important during the development of our PB application. Regeneration is useful:
n when we have an error message with no reason for it;
n When we upgrade to a new version of PB, the new version should regenerate all its source code to update it;
n When we make a change to an ancestor window that has many descendants, the changes can be immediately rippled throughout all child window through regeneration.
Regenerating could be called “recompiling”. When you regenerate an entry, PowerBuilder recompiles the source form stored in the library and replaces the existing compiled form with the recompiled form.

2. You are working with inherited windows, and your application does not work or produces ambiguous errors. You are tracing the program though the DEBUGGER, and still - nothing. What can you do next? REGENERATE



SCRIPT

1. How is a script associated with an object ?
When an event occurs, PowerBuilder executes the script for that event.

2. With which objects can a script be associated ? Any.

3. Code the broad outlines of the code necessary to check the value in the integer variable Count against the following ranges of values :
n less than or equal to zero(0)
n equal to 1, 2, or 3
n between 4 and 10 (including 4 and 10)
n over 10.

4. What is a script ?
A script defines the processing that take place when an event occurs for an object or control. When an event occurs, PowerBuilder executes the script for that event. Types of statements in a script are : variable declaration
calls to function
assignment statement
flow of control statement (IF and CHOOSE statements)
embedded SQL statement.

5. Under what circumstances do you need to declare multiple instances of a window class?

6. Assume that when the instance w_cust_maint1 of the window w_cust_maint is displayed, you want its title to read “Referenceable Customer”. Given the following declaration, code the statements to display the window appropriately.
w_cust_maint w_cust_maint1
w_cust_maint1.Title = “Referenceable Customer”

6. What is a focus ?
A focus identifies where on the Window the next action will take place.

7. How do you pass an array as an argument?
To pass an array we should define it as an argument in the window function with brackets. In a script we have to assign an array to a veritable in order to use it.

8. What is an array?
An array is an indexed massive of variables of the same Data Type.
EX. Prise[ ] or Prise[50]
9. Why are static arrays preferable over dynamic arrays?
Static arrays tell us how many elements an array will have by specifying number in brackets. Static arrays are faster.
Dynamic arrays grow dynamically what is more convenient .
Because the memory needed for a static array is located immediately on creation, so there is no reason to reallocate and copy anything and also because boundaries of the array are known when the array is accessed, so there is no processing overhead while checking the validity of the array subscript.

10. What is Array Data type?
Array is a massive of variables of the same Data Type

11. You need to process an array in a loop. Which function should you use if you don’t know array’s size (i.e., number of array elements)?
UPPERBOUND(Array)
int i
FOR i =1 TO UPPERBOUND(Array)
statementblock
NEXT

12. What is enumerated data type? How is it represented and what is its purpose ?
Some functions which were written in some other languages and build into PowerBuilder and PowerBuilder recognises them by the exclamation point at the end.

13. Can you always use CHOOSE…..CASE instead of IF-THEN-ELSE ?
Yes. We can. CHOOSE…..CASE More readable

14. What is the difference between DO… WHILE and DO… UNTIL clauses?
DO… WHILE will perform an action only while the condition is TRUE:
int A = 1, B = 1
DO WHILE condition DO WHILE A <= 15
statementblock BEEP(A)
LOOP A = (A + 1) * B
LOOP
DO… UNTIL will perform an action only until the condition is TRUE:
DO UNTIL condition int A = 1, B = 1
statementblock DO UNTIL A > 15
LOOP BEEP(A)
A = (A + 1) * B
LOOP

15. What is the difference between DO WHILE ….LOOP and DO….LOOP WHILE ?
DO WHILE ….LOOP performs an action only while the condition is TRUE:
DO WHILE condition
statementblock
LOOP
DO….LOOP WHILE performs an action at least once and repeat while the condition is TRUE
DO
statementblock
LOOP WHILE condition

16. What do you use to exit the loop before the condition in the loop is met?
What are the 2 choices?
We use EXIT inside the loop if we want to terminate the loop. EXIT jumps to the first
statement after the loop. Continue skips the rest of the statement inside the loop and returns to the beginning of loop to start the next iteration.

17. What is ANY Data Type ? How is it used?
Any is a chameleon data type — it takes the data type of the value assigned to it.

18. What is a BLOB data type?
BLOB is Unbound data type that stands for binary large object. Usually used to hold pictures, window’s wave sound file or very large text files.
19. How would you display a toolbar on a left side of screen, floating?
Syntax:
window_name .ToolbarAlignament = AlignLeft! (AlignAtTop!,
.... AlignRight!,
.... AlignAtBottom!
.... Floating!)
enumerated datatype

20. How do you put the time in the status bar?
On the open event of a window call Timer(1). On the timer event Time = Now( )
SetMicroHelp(Time)

21. Can Script#1 share a local variable declared in Script#2?
No, it cannot. Local variables are accessible only in the script in which they are declared.

22. What data types do you know?
There are following data types in PowerBuilder :
1. Standard (string,…..)
2. Enumerated data types its a some functions which were made in other languages and pb recognise it by exclamation point at the end
3. Array is a massive of variables of the same Data Type
4. Structure is a collection of one or more related variables of different or the same data types grouped under one name.


23. Where would you put a code to make sure that everything has been saved on the window in case if a user is closing the window?
I would write this code on CloseQuery event of the window. A CloseQuery event occurs every time when the window is to about to be closed. At this moment PowerBuilder checks the value of the attribute. If after performing some processing we don’t want to allow a user to close the window, set Return 1. When we close a window, PowerBuilder triggers the CloseQuery event and inspects the value of Message.ReturnValue. If the Message Return Value 1, the window cannot be closed. Note: Closing any window causes PowerBuilder to close all Child and Pop-up windows that is opened, and closing an MDI frame window causes PowerBuilder to close all sheet windows within it. Any window thus being closed can set Message.ReturnValue to cancel the close operation.

24. Where can external functions be declared?
External functions can be declared in the Application Object, User Object or Window Object. To declare an external functions, select External Functions on the Declare Menu of the current object painter or the PowerScript Painter.

25. What is the maximum number of characters that you can enter into a control?
The maximum size is a little bit more then 32KB


26. What can you do if you want to leave the PowerScript Painter but the script won’t compile?
I’ll put comments(//) on my code. When we are leaving the PowerScript Painter, it automatically compiles our script. We can have a script containing the errors, To save the script without correcting the errors, comment out any lines in errors.

27. What statement evaluates one variable?
Statement Choose Case evaluates one variable.

28. What should be done to make sure that several RadioButtons understand that they belong to the same group (the user can select only one button in the group)?
By using GroupBox control. If the GroupBox contains RadioButtons, the user can select only one RadioButton in the GroupBox at a time.

29. How to update a ListBox without using a DataWindows?
AddItem( )

30. How to pass control as parameter(for ex. DataWindow)?
Specify as an argument in a function a chosen type of this control

31. How many Windows can be in the application?(maximum)
No more then 60 but we have more then 100.

32. Could you invoke DOS editor from PowerBuilder?
Yes pressing Shift-F6 anywhere.
33. How could you invoke help about specific function or reserved word from Power Script painter?
To highlight this function or reserved word and press shift-F1

34. How do we specify processing that takes place in our application?
By writing a script for different events that occurs. PB applications are event-driven.

35. How do you refer to the attribute inside the scripts?
Using syntax calling dot notation:.

36. How can you use enumerated data types?
As an arguments in functions or to specify the attributes of an object or control.

37. What is the array?
An array is an indexed collection of elements of a single data type. Could be fixed or variable size. Fixed-size arrays could be multidimentional.

38. What kind s of iteration(repeated) statements do you know?
For . . .NEXT uses to execute statementblock a specified number of times;
4 formats of DO. . LOOP
DO UNTIL . . . LOOP executes statementblock until condition is TRUE. If condition is TRUE in the first statement statementblock does not execute.
DO WHILE . . . LOOP executes statementblock while condition is true. If condition is FALSE on the first evaluation statementblock does not execute.
DO. . . LOOP UNTIL The same as DO. . . UNTIL LOOP, but statement always executes at least once.
DO. . . LOOP WHILE the same as DO WHILE . . LOOP, but statementblock always executes at least once.

39. What will be the outcome of the following code:
int I = 5
string name = “fox”
If int I = 5 then
if name = “rabbit” then
if I < 10 then
MessageBox(“Status”, “one”)
else
MessageBox(“Status”, “two”)
end if
else
if I <10 then
MessageBox(“Status”, “three”)
elseif I = 5 then
MessageBox(“Status”, “four”)
else
MessageBox(“Status”, “five”)
end if
MessageBox(“Status”, “five”)
end if
elseif I > = 5 then
MessageBox(“Status”, “six”)
end if
MessageBox(“Status”, “three”) and MessageBox(“Status”, “five”)

40. What’s wrong with the logic in the following code:
if years_of_service > 10 then
vacation = 4
bonus_factor = 1.5
elseif years_of_service > 6 and years_of_service < 10 then
vacation = 3
bonus_factor = 1.2
else
vacation = 2
bonus_factor = 1.0
end if
There is nothing said about years_of_service = 10

41. Can we prevent window from closing?
On the close query event we have to write script:
IF MessageBox("Closing window", "Are you sure?", Question!, YesNo!) = 2 THEN
RETURN 1
ELSE
RETURN 0
END IF
0 - Allow the window to be closed
1 - Prevent the window from closing

Powerbuilder Interview question _part 7

NULL

1. What is NULL? What happens when you use NULL in expressions?
Null is an Undefined, Unknown value. If we use Null in arithmetic expression the expression becomes Null. If we use Null in a Boolean expression, Null and some value, expression becomes Null (False). If we use Null in a Boolean expression, the Null or some values it gives value and becomes True. PB does not initialize to NULL. To set NULL to the variable we use SetNull() function. Use SetNull() to set a variable to NULL before writing it to the DB. Note that PB does not initialize variables to NULL; it initializes variables to the default initial value for the data type unless you specify a value when you declare the variable. If you assign a value to a variable whose data type is Any and then set the variable to NULL, the data type of the NULL value is still the data type of the assigned value. You cannot un-type an Any variable with the SetNull function.

2. How can a variable become NULL?
Can be read from database or SetNull() function can be used

3. How to test whether variable or expressions is NULL?
Using ISNULL()

4. How does NULL behave in boolean expressions?
In AND logical operators that contain NULL result is always False In OR logical operators that contain NULL result is always True.

21. What is NULL? What happens when you use NULL in expressions?
What NULL means:
NULL means undefined. Think of NULL as unknown. It is not the same as an empty string or zero or a date of 0000-00-00. For example, NULL is neither 0 nor not 0.
Null is an unknown variable. When you use null in expressions they become null.
When a NULL value is read into a variable, the variable remains NULL unless it is changed in a script.
NULL means “no value”, “undefined”, “unknown”. It is not the same as an empty string or zero, or false. A common way for a variable to get a NULL value is when you retrieve its value from a DB column that has never been filled in –a missing zip code for a customer, for example.
Any variable, regardless of its type, can be set to NULL using the PowerScript SetNull function. E.g.
string i1
SetNull (i1)
If any part of the expression is NULL, the result of the entire expression is NULL.
OBJECT BROWSER

1. How do you look up functions for control (for example, ListBox) ?
Using Object Browser. We have to select the control and click on object browser.

2. What is the purpose of the Object Browser?
Purpose of an Object Browser is to look up for function, attributes, events which belong to the specified object .In the Window and User Object painters, PowerBuilder searches all attributes, scripts, variables, functions, and structures associated with the controls in the Window or User Object for the search string.

3. Where can you see all system object data types?
From library painter opening Select Browser class Hierarchy from the utilities menu.



OLE

OLE (object linking and embedding) is a standard that allows Windows programs to share both data and program functionality
1. In OLE, what is a server application?
A server application is the program that creates, displays, and edits embedded objects.

2. What is the role of a container application?
A container application is an application that contains references to an object embedded within.

3. Explain in-place activation.
The server application appears in the foreground and its menus replace those of the DataWindow painter or PowerBuilder application.

4. Where can you find information on OLE server applications for your Windows
environment?

5. How do you know what data type to use to store blobs in your Database?
Different DBMS have different data types that can be used to hold blobs.
Sybase SQL Anywhere ---- long binary
Oracle ---- long row
Sybase SQL Server ---- image

6. How should a blob column be defined in a data table?
Blob columns in the table definition must allow NULL values. (When a row is inserted or updated in the table and the Update() function is called, all non-blob columns are handled first using standard SQL statements. The blob column is then updated separately).

7. In what ways can you use OLE with a DataWindow?
As a presentation style.

8. How do you place a blob column in a DataWindow object?
Include blobs in a DataWindows object and define the data source.
1. What is the difference between an instance variable and a shared variable?


They have different scope. The value of the shared variable is available
from all instances of the same object. Instance variables are associated with one instance of
an object such as a window and each instance can have different values in instance
variable.

2.Why should you optimize libraries?


The library entity can become fragmented over time, increasing seek times.

3. What is the difference between reserved words Parent and ParentWindow when
they are used in the scripts for the menu item ?


When you use Parent in the script for a MenuItem, Parent refers to the
MenuItem on the level above the MenuItem the script is for.


The reserved word ParentWindow refers to the window a menu is associated
with.

4. How can you override user object's function?


To override an object's function , create a descendant object and declare
in there a function with the same name and arguments as in its ansestor.

5. What are object name pronouns and how do you use them?


You use them to refer to objects or controls instead of using actual
name. Pronouns are reserved words This,Super, Parent and ParentWindow.

This is used to refer to an object or control from within any script coded
for it.
Super reffers to an immediate anscestor of the object.
Parent is used to refer the window from any script for a control on the
window.
ParentWindow is used to refer to a window from a menu script.

6. How many clustered and non-clustered indexes can you create for a table in
Sybase?


You can create 1 clustered and up to 249 non-clustered indexes in Sybase.

7. What is the difference between Where and Having clauses?


Where clause eliminates unneeded rows before creating a result set as
opposed
to Having clause that gets rid of unwanted rows after the result set is
built.

8. How can you create multiple instances of the same window object?

To create an instance of a window type w_name
1.Declare a variable of type w_name : w_name w_mywindow
2. To open a new instance (and display the window) use the function call
like Open (w_mywindow)

Another way of creating multiple instances is by declaring a global
array having
type of your window (w_name w_mywindow[]) and use this array to store
references to
multiple instances when you open the window (Open (w_mywindow[iCounter]).


9. What's the usage of DECODE() function in Oracle?

Remove the pseudocolumn reference or function call from the procedural statement. Or, replace the procedural statement with a SELECT INTO statement; for example, replace

bonus := DECODE(rating, 1, 5000, 2, 2500, ...);

with the following statement:

SELECT DECODE(rating, 1, 5000, 2, 2500, ...) INTO bonus FROM dual;


Usually you use it in Select statements to provide descriptions for encoded values. Decodes could be nested. It's like a statement within select. For example, if you have a code table for Condition codes for a Repair shop, you do
Select item_id, decode(Condition_Code,
'DS', 'Dents',
'ES', 'Electrical short','Unnown condition code')
from repair_items.

10. How can you dynamically place an User Object on the Window?


You do this by using function OpenUserObject().
If you want to open the User Object with passing some parameters to it
you use
the function OpenUserObjectWithParm().
If you don't need this object anymore you have to call the function
CloseUserObject.

11. If there are both - foreign key and triggers on a Sybase table which one
will be fired (checked) first?

Foreign keys.

12. Let's say you've developed a window w_customers. After some time you
developed a base ancestor window w_base_win and want to use all functionality that you put
in this ancestor in your w_customer window. How can you do this?


If you developed a window without using any ancestors, it will be
inherited from PowerBuilders Window Object. To change the inheritance you should
Export existing window in a text file (Library Painter), change manually all references to
a standard Window object to w_base_win and Import the window back from this text file.

13. What are automatic and manual drag modes?


In automatic drag mode, PowerBuilder automatically switches the
application into drag mode when the control is clicked.
With manual drag mode, PowerBuilder does not switch the application into
drag mode when the control is clicked. You must control when the drag mode is
initiated.

14. What is ROWID in Oracle?

A ROWID is pseudo column for a table with the logical address for each row. It is unique and can be used in Select and Where clauses.It's the fastest way of getting the row from a table (where ROWID=..)


15. What is an object? a class? an instance?

Class - A definition of object
Object- A manifestation of a class
Instance - A copy of an object in the memory

16. What are the benefits of using encapsulation? Give an example of
encapsulation in PowerBuilder.


Encapsulation gives you the way to hide and protect data inside an object . To hide data we use private and protected variables. Private variables are accessible from scripts of the object only, and protected variables are available not only for the object's scripts, but also for all descendants' scripts.

For example, the code providing User Object functionality is written in the scripts and functions inside the User Object .

17. Is PowerBuilder object-oriented language? Why?

Yes it is. It has 3 main features of object-oriented languages - inheritance, encapsulation and polymorphism.

18. What types of objects can be inherited?

Windows, menus and user objects .

19. What utility could be used to create stored procedure in a database?


You can use PowerBuilder's Database Administrator painter,
ISQL utility in Sybase , SQL*Plus utility in Oracle.

20. How can you run another application from within PowerBuilder?


You could do it using PowerBuilder's function Run(). For example:
Run("C:\winword.exe Letter.doc", Maximized!)

This statement runs the MS Word maximized and passes it the parameter
letter.doc to open the file letter.doc.

21. How can you create in PowerBuilder an executable that can receive
parameters?


PowerBuilder has a function CommandParm() that retrieves the parameter
string, if any, when the application was executed. For example, you could put in an
Open event of the application something like string ls_command_line
ls_command_line = CommandParm( )
If the command line holds several parameters, you can use string functions
like Pos(),Left() ... to separate the parameters..


22. What is polymorphism? Give an example.

With a polymorphism, the same functions calls give different result on
different objects.
For example, you can define an UpdateDatabase() function for different
kinds of objects. Each has its own definition of what Update should do.


23. If you have a column that gets updated frequently, what kind of index will
you create on this column to improve the performance - clustered or non-cludtered ?


Non-clustered. If you create a clustered index on this column, the
data will be physically re-arranged in the database after each update and this will slow down
the performance.



24. How can you instantiate non-visual object ( custom class) in memory?


You need to declare a variable of your object's type and use CREATE
command:
uo_business_rules my_object
my_object = CREATE uo_business
Version 5.0 has the new syntax of this command - CREATE USING...

After you are done with this object , you should destroy it to avoid
memory leaking:
DESTROY my_object

In PB5 you can check the Autoinstantiate attribute of NVO and it'll create
an instance of NVO automatically when you declare a variable of this object type,
i.e. uo_business_rules my_object.

An instance of this NVO will be destroyed automatically when object where
it was declared is closed,destroyed or, in case of local variables when the script
is finished.



25. Let's say you have stored procedure B that is being called from procedure A;
you performed commit in B and after that procedure A failed. Will changes that
have been made in the procedure B be rolled back?


Yes. In case of nested stored procedures changes are commited
only after successful commit in the outermost stored procedure.


26. How can you convert data from one datatype to another using Transact-SQL
in Sybase?


There is a function Convert() in Transact SQL which is used for
data conversion. For example, to convert DateTime column into a string you could write
something like
Select convert(char(8), birthdate,1)
in this case third parameter specifies format of returned string ("mm/dd/yy")



27. How do you manage Database Transactions in PowerBuilder?



You use AutoCommit attribute of the Transaction Object for that.
If the value of AutoCommit is TRUE, PowerBuilder just passes your SQL
statements directly to the Server without issuing a Begin Transaction command..

If you set the value of AutoCommit to FALSE (default value),
PowerBuilder requires that you use the COMMIT and ROLLBACK keywords to commit
and rollback your transactions when you are finished with them. In this case
PowerBuilder begins the new transaction automatically as soon as you CONNECT,COMMIT or
ROLLBACK.

When you work with stored procedures in Sybase, Autocommit must be
set to true to be able to execute DDL statements and work with temporary tables
from within stored procedures.

Autocommit attribute of SQLCA is ignored when you work with Oracle.



28. How could you change a DataWindow object, associated with the DataWindow
control during the runtime?

DataWindow control has the attribute DataObject. If you want to change an associated DataWindow object during runtime you need to put a line in the script that changes the value of the DataObject attribute. For example:
dw_cust.DataObject = "d_customer"

30. How can you set DataWindow to a particular row?
You can do it by using the function ScrollToRow().

31. What should be done to make sure that several radiobuttons understand
that they belong to the same group (the user can select only one button
in the group)?
You should place them in a Group box on your window.

32. When is usage of indexes not effective?
When the expected result set has more that 5-10% of all rows in the table.

33. How many triggers can you specify for one database table?

In Sybase any table can have up to three triggers: one update trigger, one
insert
trigger, and one delete trigger. However you can create a single trigger that
will apply to
all three user actions (Update, Delete and Insert).

In Oracle a single table can have up to 12 types of triggers -
6 row level triggers (BEFORE AFTER INSERT, UPDATE, DELETE) and
6 statement level triggers.

34.How can you check if there are any indexes on a table in Oracle?
You can do a select from such views as ALL_INDEXES or USER_INDEXES where
TABLE_NAME = your table name.

35. What's the difference between Composite and Nested reports?
Composite report does not have a data source - it's just a container for
several datawindows (reports).
Nested reports have datasource and main datawindow can pass data to the
nested datawindow through retrieval arguments.

36. How can you use stored procedures in PowerBuilder?
You could use them either as a data source for the DataWindows (only in
SQL Server)
or you can execute them using EXECUTE command in PB script.
If the stored procedure returns a result set you have to:
1.DECLARE variable for stored procedure for example,
DECLARE emp_pro PROCEDURE FOR
pr_GetName @emp_name = :EditEmpName, @emp_salary = 5000
2. EXECUTE (e.g. execute emp_pro)
3. FETCH in a loop
4. CLOSE procedure (CLOSE emp_pro).

If the stored procedure also has a return code and output parameters,
you need to do one extra FETCH to get them.


37. What are the four levels of validation ?

1. Has anything changed?
2. Is the data of the correct type?
3. Does the data pass validation rules (which could be defined for some
columns)?
4. Does the data pass the ItemChanged event?

38. How can you print multiple DataWindows?


You should open the print job by calling the PrintOpen() function, after
that you can print DataWindows by using PrintDataWindow () function and after that you
close the print job by calling PrintClose().
You can also create Nested Reports or use the Composite presentation style
of DataWindows to print multiple datawindows as one Print Job.


39. Did you use any Version Control systems such as PVCS?


No. We just used Check In/Check Out features of PowerBuilder. Version 5 of PB
comes with a new version control software - Object Cycle but we did not use it yet.


40. How can you call an ancestor script from a script from a descendant object?


There is a CALL command that calls an ancestor script from a script for a
descendant object. For example, CALL w_emp::Open

Also you can use the pronoun Super to refer to the immediate ancestor.
For example, CALL Super::Clicked

To execute ancestor's function you just do Super::of_calc_fee()


41. How could you define additional Transaction object? When might you need it?


To create an additional transaction object, you first declare a variable of
type transaction, then you create the object and then define the attributes that will
be used.

Transaction TO_Sybase
TO_Sybase=CREATE transaction

TO_Sybase.DBMS = "Sybase"
TO_Sybase.database = "Personnel"
TO_Sybase.LogId = "DD25"
...
You need to create (an) additional transaction object(s) if you retrieve data
in your application from more than 1 database.


42. What is the usage of the DUAL table in Oracle?


It's an Oracle worktable with only one row and column in it. It's used to
make some calculations or get the values of some pseudo columns that are not
dependent upon the columns in a table, i.e.
Select SYSDATE from DUAL
SELECT 2*35 from DUAL

43. Where would you put the code to make sure that everything has been saved on
the window when it's being closed?


I would write this code under CloseQuery event of the window.
A CloseQuery event occurs every time when the window is about to be
closed. At this moment PowerBuilder checks the value of the attribute ReturnValue of the
Message Object. If after performing some processing you don't want to allow user to
close the window, set the value of the Message.ReturnValue to 1.
In version 5 you just need to do Return 1.


44. What is the difference between SetItem and SetText functions?


When you use SetText function, it places the value into the edit control on
a DataWindow and it must pass through the validation process.
SetItem function inserts the value of a specific cell directly into the
DataWindow buffer and skips the validation.


45. How can you get access to a Child DataWindow?


To retrieve manually a child DataWindow, we use the GetChild() function to
obtain reference to it, then we assign a transaction object to it, and then retrieve.
For example:
DataWindowChild dwc
int rtncode
rtncode = dw_emp.GetChild("emp_id",dwc)
dwc.SetTransObject(SQLCA)
dwc.Retrieve("argument")

46. What is the usage of the Yield() function?


Yields control to other graphic objects, including objects that are not
PowerBuilder objects. Yield () checks the message queue and if there are messages
in the queue, it pulls them from the queue.
You can use Yield() to allow users to interrupt a tight loop. When you use
Yield() to interrupt a loop, you must call the Yield function and check for an interrupt
each time you pass through the loop.

47. How can you change select statement of the DataWindow at runtime?

You can change Select statment using functions SetSqlSelect() or
by changing the attribute DataWindow.Table.Select with the function
Modify().For example,

dw_1.Modify("datawindow.Table.Select='Select * from customers'")

In version 5 you can change attributes of datawindow object directly
by using a keyword Object like
dw_1.Object.DataWindow.Table.Select='Select * from customers'

SetSqlSelect works slower since it checks the syntax of SQL statement.

48. What kinds of DataWindow buffers do you know?

There are 4 buffers in Powerbuilder: Primary!, Filter!, Delete! and
Original! buffer.
Primary! buffer has the current data values;
Filter! buffer stores the rows that where filtered out as a result of
SetFilter() and Filter() functions;
Delete! Buffer keeps the rows that have been deleted by DeleteRow()
function;
Original! buffer is used by PowerBuilder to store original data values
retrieved into a datawindow. PowerBuilder uses this buffer to generate the Where clause
for the Update() function.

49. What is the recommended size of .pbl ?

The recommended size used to be less than 800kb and not more than 50-60 entries,
but from my experience even bigger pbl's work just fine.

50. Can you inherit DataWindow?


You cannot do it directly, but you can create a Standard User Object of
type DataWindow (which can be inherited) and use it instead of DataWindow controls.
You use the same method when you need to inherit any other control.

51. Where can external functions be declared?

External functions can be declared in User Objects or Windows.

52. Give a definition of a Union.

The Union operator is used to combine the result sets of two or more
Select statements. The source of the data could be different, but each Select statement
in the Union must return the same number of columns having the same data types.
If you use Union All it will return all rows including duplicates.


53. What functions can you use to pass parameters between windows in
PowerBuilder?

Open WithParm( ) , OpenSheetWithParm( ), and CloseWithReturn( ).

54. How do OpenWithParm() and CloseWithReturn() functions pass parameters?

They pass parameters using Message Object's attributes StringParm,
DoubleParm or PowerObjectParm.


55. Can you delete a menuitem in the descendant menu if it was created in the
ancestor one?


No you cannot. If you don't need an object that was defined in the
ancestor menu just make it invisible by setting its Visible attribute to FALSE or using
function Hide().


56. What are the 2 objects every application has?


Every PowerBuilder application has the MessageObject and the ErrorObject.

57. Describe the sequence of events which are triggered when you call the
Datawindow's function Update().
UpdateStart! event,
SQLPreview! event for every modified row,
UpdateEnd! event.

58. What's the difference between computed columns and computed fields in
DataWindow object?


You define a computed column in the Select painter and it's calculated by
the DBMS when the data is retrieved.
Computed field is defined in the datawindow painter and is calculated after the data
has been retrieved.
If you change values of some columns that are part of the computed field
expression they will be recalculated immediately. Computed columns are not
recalculated after the data is retrieved.

59. What are the system databases in Sybase?

Beside user's databases Sybase has databases: Master, Model,TempDB,
Pubs2 and some others like SYBSYSTEMPROCS, PUBS2.
Master is used internally by Sql Server to store information about users'
databases;
Model is used as a template to create a new user's database and TempDB is
used to store temporary information like temporary tables if you use them in
stored procedures.


60. What is a class or non-visual user object?

Non-visual user objects (or classes) are objects that encapsulate
attributes and functions, but are not visible to the user. You can use them, for example, to
code some business rules which are used in different windows.


61. Hou can you return user-defined error message from a stored procedure?

In SYBASE you use RAISERROR statement;

In ORACLE you need to declare a User exception and raise it using RAISE
statement or you can use special procedure RAISE_APPLICATION_ERROR (error_number,
error_message)

62. How can you share buffers between two DataWindows?

To share buffers between 2 DataWindow controls, we use ShareData()
function.
The result set description for both DataWindow objects must be the same,
but the presentation style could be different.
To turn off the sharing of data buffers for a DataWindow control you use
the function ShareDataOff().

63.What is the difference between TriggerEvent() and PostEvent() functions?

The TriggerEvent() function causes the event to occur immediately. This
function does not return until the processing for the event is complete.
PostEvent() function causes the event to occur when the current event is
finished executing.


66. Give an example of an outer join.

An outer join forces a row from one of the participating tables to appear
in the result set if there is no matching row. An asterisk is added to the equal
sign to specify outer joins.
For example, if some customers might not have orders yet, we could use:
Select customer.id, name
from customer, orders
where customer.id *= orders.id

(In Oracle you use (+) after the column name)

67. Give an example of Cartesian Product.

Cartesian product is the set of all possible rows resulting from a join of
more than one table. For example, if you forget about a join condition:
Select customer.name, orderno
from customers, orders
If customer had 100 rows and orders had 500 rows, the Cartesian product
would be every possible combination - 50000 rows.

68. What is the primary key?

The primary key of a table is the column or set of columns that are used
to uniquely identify each row. If you want to find a specific row in a table, you
refer to it using the primary key. Usually, you specify the primary key when you create a
table:
Create table customers ( id char(3),
lname char (20),
fname char(20),
primary key (id))
69. What is a foreign key?

A foreign key references a primary key in another table. When one table's
column values are present in another table's column, the column from the first
table refers to the second.

70. What is the usage of indexes and how to create them?

Indexes optimize data retrieval since the data can be found without scanning an entire table.
Indexes can also force unique data values in a column.
For example, to create an index named custind using the id column of the
customers table, you have to issue the following command:
create index custind on customers(id)
To create unique index:
create unique index custind on customers(id)
There are clustered and nonclustered indexes in Sybase.
Indexes are not effective if the result set has more that 10% of rows in a table.

71. Do indexes in Sybase affect the physical order of data in the table ?


If there is a clustered index on the table, the actual data is sorted
in the index order.
Nonclustered indexes do not reorder the actual data.

72. Which system objects are useful when you write triggers?

In SYBASE: The Inserted and Deleted table are used when writing triggers.
Inserted table holds any rows added to a table when you execute Insert or
Update Sql statements.
Deleted table holds any rows removed from the table when you execute
Delete or Update Sql statements.

In Oracle: You use :old.columname to refer to original value of the column
and :new.columname to get the new value for a column.

73. What is the message object and how is it used when passing parameters
between windows?

A message object is a PowerBuilder-defined global object populated with
information about an event. It has such attributes as WordParm and LongParm.
It is used to pass data between windows or objects. Data will be passed through
the Message.StringParm, Message.DoubleParm or Message.PowerObjectParm depending
on the type of data which you want to pass.

74. What is function overloading?

A function is overloaded when there are multiple versions of
this function with the same name but with different arguments.
When the function is called, PowerBuilder finds the function
whose argument list matches the function call from the script.
In PowerBuilder 4 you had to create a descendant object for every
overloaded function.
In Version 5 you can declare all overloaded functions in the same object.

75. What could you use the SQLPreview event for?


You could use SqlPreview event if you want to use stored procedures to
perform update in the database.
You can also use the SQLPreview event to display the SQL statement right
before its execution for the debugging purposes. To get the curent Sql Statement you use
GetSqlPreview() function.
In version 5 you don't even need to call this function since
SQLPreview event has an argument with SQL Statement.

76. What should be distributed to your user with your application?

The .EXE, .PBDs (if any), and the Database Development and Deployment Kit DLLs.

77. What is a .PBD and when do you use them?

A .PBD file is PowerBuilder dynamic libraries. It contains all the
compiled objects that the .PBL contains.
You use them to make the size of your executable smaller, and objects that you
put in PBD's will be loaded at runtime only when needed.



81. If you have an MDI Window, sheet1 with menu and sheet2 without the menu. You
open sheet2 after sheet1. Which menu will sheet2 have - MDI menu or Sheet1
menu?

It will have the menu of Sheet1 as the last menu that was displayed on the
MDI window.


84. What kind of windows can be closed using the function CloseWithReturn()?
Response Windows.

85. What do you know about Views?
A View is simply a select statement that has been STORED IN THE DATABASE.
Usually, Views are used to limit the access of users to data. Views are database
objects, so you can grant user permissions to them.

86. What do you know about fill factor in Sybase?
The fill factor is a percentage specifying how full you want your index
and/or data pages when the index is created.
A lower fill factor leaves more free space in the pages. It could improve
performance in environments where there are a lot of inserts and updates to the
data.
A higher fill factor is useful with relatively static data.

87. How can you change an object's ancestor without recoding it?
Export the object using Library Painter, then
change all references to the ancestor using any text editor and
import the object back.

88. How can you find out what's the object under mouse pointer in a datawindow?

The function GetObjectAtPointer() will tell you what's under the mouse -
column, header, etc.
The function GetBandAtPointer() will tell you the band name such as
detail, header, etc.

89. How do you handle Null values in a database?
In Sybase you use IsNull() function, in Oracle - NVL() function.

90. How can you generate unique numbers in a database?
In Sybase you can define an extra column of Identity type in a table.

In Oracle you create a Sequence. For example,

Create sequence Customer_id_seq;
Select Customer_id_Seq.nextval from dual;

91. What types of database constraints do you know?

Primary key, NOT NULL, Unique, Check, Foreign Key

92. What's a basic structure of PL/SQL block?
DECLARE
BEGIN
EXEPTION
END

93. What's an exception in Oracle?
In PL/SQL it's a warning or error condition.

94. What composite data types do you know in PL/SQL?

Record and Table.
PL/SQL Record is similar to a structure in other languages.
PL/SQL Table is similar to a one-dimensional array.

95. If you use a cursor in Oracle PL/SQL block, how can you determine when
fetching data when to enter
and exit the loop?

You use cursor attributes such as %ISOPEN, %NOTFOUND, %FOUND, %ROWCOUNT.

96. What's the minimal data item that can be locked in a database?

In Sybase System 10 it's a page (usually it's 2 kb);
In ORACLE it's a row.

97. What are the benefits of using stored procedures?

SP are stored in compiled mode in a database, reduce network traffic, modularize
application development, makes maintenance easier, provide additional security.

98. How many types of Dynamic SQL do you know in PowerBuilder?

There are 4 formats: 1. Non- result-set, no input parameters;
2. Non-result-set with input parameters;
3. Result-set, known input parameters and result-set
columns;
4. Result-set, unknown input parameters and/or result set
columns.
For format 1 you must use EXECUTE IMMEDIATE statement;
For formats 2,3 and 4 you need to prepare a dynamic staging area (SQLSA);
For format 4 you also need to use dynamic description area (SQLDA).

99. How can you obtain the source code of a trigger in Oracle?
You can get from Oracle's view USER_TRIGGERS from column TRIGGER_BODY.

100. What pseudo columns do you know in Oracle?

USER, SYSDATE, ROWID, ROWNUM, NULL...

101. How can you disable or enable trigger in Oracle?
You can do it using Alter trigger statement. For example:

ALTER TRIGGER delete_cusomer DISABLE

ALTER TRIGGER update_orders ENABLE

102. How can you check the definition of a table in SQL*Plus?

You can do it using command DESC. For example:

SQL>desc customers.

103. What's the difference between Class Library and Application Framework?

Class Library is usually a set of independent objects, while in an
application framework objects depend on each other's variables, messaging
and functions.

104. What kind of problems might you have if you want to use existing
application on laptop computers?

You need to take care of resizing windows and controls. You can do it by
placing code under resize event of the window (base window) or create a special NVO
to do resizing.

105. How can you lock a row in Oracle?

You need to do select of this row using syntax SELECT ...FOR UPDATE.
This way the row will be locked until the program issues commit or
rollback.

106. What are the new concepts of OOP that are implemented in PFC?

It's been built using service-based architecture.

The idea is to keep the ancestor object 'thin' and plug services into it when needed.
The services are implemented as NVO's.

107. How can you see execution plan of the SQL statement?

In Oracle you can use command Explain Plan 'select ...' in SQL*Plus.

In SYBASE you need to set an option SET SHOWPLAN ON in ISQL and then type
your select statement.

108. What are two methods of optimization in Oracle?

It could be either Cost based or Rule based optimization.

109. How can you avoid retrieving duplicate rows into a result set?

You should use DISTINCT keyword in the Select clause.

(In Oracle you can use the word UNIQUE instead of DISTINCT)

110. How can you see the list of existing objects in Oracle database such as
tables, views, synonyms?

Oracle has special view USER_CATALOG and you can do a select form this
view (or select * from CAT. CAT is a synonym of USER_CATALOG)

111. What is a synonym in Oracle?

It's an alias name assigned to a table or view. You can use it to simplify
SQL statements, for example, you can use synonims to hide links to remote
databases.

112. What are the normalization rules in RDBMS?

1st Normal form: There should be only one value for each row and column
intersection.
2nd Normal form: All non-primary columns must depend on the entire primary
key.
3rd Normal form: Non-primary columns should not depend on other non-primary
columns.

113. What is a Snapshot in Oracle?

Snapshots are a local copies of a remote table. Usually they are crated
automatically in specified time intervals.

114. What is a cluster in Oralce?

Cluster is a method to store related database tables in the same area on a
disk.
To use clusters you need to specify a cluster key column when you create
tables.

115. How are tables physically stored in Oracle database?

Table are created in a special areas on the disk called tablespace.
Each has segments and extents. Maximum number of extents is 121.

116. How can you see complilation errors in SQL*Plus when you create
stored procedure, function...?

If stored procedure had errors SQL*Plus gives a message that object was
created with compilation errors and you can see the errors by typing

SHOW ERRORS
or
Select * from user_errors.

117. How can you debug Powerbuilder's executable?

You need to put a /pbdebug key in the run line of any powerbuilder exe.
This will create a text file with extention .dbg where you can see
which events and functions were executed by your application.

118. How can you undelete a row in a datawindow?

You need to move row using a function RowsMove() from the Delete! buffer
into the Primary! buffer.

119. Where is it not recommended to put a breakpoint in the debugger?

It's not recommended under Activate and GetFocus Events.

120. Can you post event to an application?

No, you cannot.

121. How can you find a number of rows returned by an embedded SQL statement?

You can find it in the attribute SQLCA.SQLNRows.

122. How can you stop the processing in the Other Event of the datawindow?

You need to set Message.Processed to TRUE.

123. How can you stop the retrieval process in a datawindow after some number of
rows?

You need to declare a variable, increment it by one in the script
for the RetrieveRow event and check its value like

il_count++
If il_count > 10 then Return 1 // Stop the retrieval

124. How do you process database errors in case of a Datawindow and Embedded
SQL?

In case of Embedded SQL you check the value of SQLCA.SQLCode and if it's
less than 0,
Get the error code and error message from SQLCA.SQLDBCode and SQLErrText.

In a Datawindow you get the errors in a DBError event. In PB5 you get error
code and text from the arguments of this event, in PB4 you use the functions
DBErrorCode() and DBErrorMessage().

125. How do you declare an external function if it does not return a value?

You need to start a declaration with a keyword SUBROUTINE.

126. What is a correlated subquery?

A correlated subquery is a subquery that references columns in the tables
of its containing query. For example:

Select name from student s1
where age < (select max(age) from students s2
where s1.grade = s2.grade)

127. Can you update database using views?

You can do this only if the view is based on a Select from a
single table. If the view has been built based on a table join you
cannot do an update.

128. How can you retrieve, say, first 10 rows only from the result set
using ISQL?

In ISQL you should type SET ROWCOUNT 10 and after this line
your select statement.

To return back to full result set processing, type SET ROWCOUNT 0.

129. How many pbl's do you need to add to your application if you want to use
PFC in your app.?

You need to add 8 pbls:
4 pbls with names starting with PFC which are PFC objects
and 4 with names starting with PFE which are Extension Layer objects.

130. When do you use a Sybase command DUMP TRAN WITH NO_LOG

We use it when transaction log is full to remove inactive transactions.

131. Where are Sybase's system procedures stored?

They are stored in the table SYSCOMMENTS in the database SYBSYSTEMPROCS.

132. Name the two ways you can access values in a DataWindow?

You can access data values in a Data Window by using SetItem() or
GetItem() functions or using the new syntax in version 5.0:

dw_1.Object.emp_lname[1] = 'Smith'

133. How do windows and menus communicate in PFC?

They communicate using special object Message Router.
In the clicked event of the menu you call function of_SendMessage()
and Message router will send this message to the window, active control
and the last active Datawindow.

134. What is the use of quick-start libraries in PFC?

They contain pre-coded extention level objects so you can start a new
application without typing scripts like declaration of gnv_app variable,
etc.
You just need to include a copy of these libraries in your application's
library list instead of standard extension libraries.

135. What application services do you know in PFC?

There are DataWIndow Caching, Debugging, Error, Security and
Transaction registration services.

136. What DataWindow services do you know in PFC?

I know such services as Linkage, Sort, Filter, SelectRow and others.

137. What is the difference between functions and events in Powerbuilder?

They are almost the same in version 5. The major difference is that object-
level functions could be private and protected while events are always public.
You can specify a function name in the script even if the specified object
does not have such a function. You just need to add the keywords FUNCTION DYNAMIC.
For example:

invo_mine.FUNCTION DYNAMIC of_calc_salary().

138. How can you dynamically create a datawindow object at runtime if
you have a Select statement?
You can do it using the functions SyntaxFromSQL() and Create().

139. Can you use datawindows inside of a non-visual object?

You cannot use datawindows but starting from version 5 you can use
datastores inside NVO which has most of datawindow's functionality.

140. How can you extend functionality of, say, Transaction Object in PowerBuilder?

You need to create an object of type Standard Class inherited from
Transaction objects and add some properties/methods to it.


141. How can you get data from a database table based on data in another
table?

You can use correlated subquery for that. For example:

Select last_name
from customer where not exists
(select * from cust_order
where customer.id = cust_order.cust_id)

142. What command do you use in Unix to change the permission on files?

You do it using chmod command. For example, to revoke read, write and
execute permissions on a file my_file from other users you do

chmod g -rwx my_file

143. Which functions should you not call in the ItemChanged event to avoid an
endless loop?

You should not call AcceptText(), SetColumn() and SetRow()
in an ItemChanged event.

144. How can you find out if a table has any indexes in Sybase?

Call system stored procedure sp_helpindex, i.e.

sp_helpindex customers

145. How to ensure that SQL query is optimized in a Sybase stored procedure?

Execute or create stored procedure with option RECOMPILE

146. How to find out what columns a Sybase table has?

Use system stored procedure sp_columns

147. How to change your password in Sybase SQL Server?

Use system stored procedure sp_password

148. How to check if there are any currently locked tables in Sybase?

Use system stored procedure sp_lock

149. What's the name of the transaction object that comes with PFC?

n_tr.

150. If you can access object level public variables from the other object scripts - what's
the difference between global variables and object level public variables?

Global variables are always available when the application is running but
object level variables are available only if the object is instantiated.

151. Let's say you have local and instance variables with the same name X
and you are assigning the value to the variable: X=25. Which variable will be
equal to 25 - local or instance?

Local.

152. Write a code to update two datawindows in one transaction.

SQLCA.AutoCommit = FALSE // This Begins the Transaction

IF dw_1.Update( ) > 0 THEN
IF dw_2.Update( ) > 0 THEN
// Both updates succeeded, COMMIT the changes.
COMMIT;
ELSE
// Update of dw_2 failed, ROLLBACK the changes;
ROLLBACK;
END IF
ELSE
// Update of dw_1 failed, ROLLBACK the changes;
ROLLBACK;
END IF

// Clean up AutoCommit after COMMIT/ROLLBACK to prevent another transaction from beginning.
SQLCA.AutoCommit = TRUE

You might want to call the Update function with arguments (True, False)
to prevent resetting of row statuses. In this case you need to call function ResetUpdate()
after successful updates.

153. What's the maximum size of data you can store in integer and string variables respectively?

Integer can store values up to 32kb and string variables can hold up to 60000 bytes.

154. What are the different ways to pass arguments to a function?

You can pass arguments by value, by reference and read_only (in PB5).
If you choose 'by value' - PowerBuilder passes the copy of an argument to a function and any
changes to this value in a function will not affect the original.
'By Reference' means that PowerBuilder passes a pointer to the passed variable and all changes
to this value will be applied to the original.
'Read Only' passes argument by value without creating a copy of the variable but you cannot
change this argument within the function.

155. What happens to a PowerBuilder object when you regenerate it?

Powerbuilder recompiles all scripts of this object to make sure that all referred objects exist.

156. Give an example of delegation in PFC.

All application related services are implemented in n_cst_appmanager object. In the Open event
of the application you instantiate this object and trigger pfc_open event to this object.
In other words, you delegate the processing of the Open event to another object.

157. Which of the following DataWindow object settings will give you the highest row locking
protection, in a multiuser environment?
- Key Columns
- Key and Updatable Columns -- Correct answer
- Key and Modified Columns


158. What types of joins do you know?

Equijoin, Non-equijoin, Outer join, Self join

159. If you are developing an NVO that has a private variable - what would you do
to allow other objects to change the value of this variable?

I would create a public function in this object, for example, of_set_value().
This function will set the value to the private variable.

160. What do you know about MDI_1 control?

Whenever you create a window of type MDI_frame or MDI_frame with MicroHelp,
PowerBuilder automatically creates a control 'MDI_1'. This control represents the client
area in the window. You can open sheets only in the client area, i.e., in the MDI_1 control
only. MDI_1 is not a reserved word, so you can name another control with this name, but,
it is not advisable.

161. Let's say, SQL UPDATE statement modified 10 rows on a Sybase table that had a trigger
for Update. How many times will the trigger be fired?

It'll be fired once - Sybase has statement level triggers only.

162. How do you usually test your application and move it into production?

Initially each team member does unit test of his code. When it's done,
we build the executable and pbd's and perform the system test.
If we find some bugs, we perform the unit test again. If everything is OK,
we optimize and regenerate libraries and copy executable and pbd's into
a special directory on a file server and users can run the application
from there to perform the user acceptance test.
If they find a bug, we start from unit test again and re-build the pbd(s)
with the problem fixed. If users like the application, our team leader copies
files into production directories.

163. Can you start SQL Server's transaction from PB script?

You can write in PB script Execute Immediate "BEGIN TRAN".

164. When do you need to use the AcceptText() function ?

If the user changes data in the edit control of the datawindow
and after that clicks on some other control on the Window, this
changed value will stay in the edit control and will not go through the
validation process. This means that the data will not be placed in the
datawindow buffer.
The AcceptText() function will enforce the validation process from the
script.

165. If you need to write a script that will sort the data in a datawindow
when the user clicks on the column's header, how would you do this?

I'd use the function GetObjectAtPointer() to find out what column the user
clicked on and whether he clicked on the header or not. After that I'd use
functions SetSort() and Sort().

166. What is the BCP utility in Sybase for?

This is a Bulk Copy Program and it's used by Database Administrators
to copy big amounts of data between tables or databases.

167. What do you know about 3-tier architecture?

It's when you place business logic in a separate application. In this
Case your application consists of the front end, middle tier and back end parts.
Sometimes multi-tier applications are called Distributed Systems.

168. What are API calls and can you do API calls from PowerBuilder?

API (Application Program Interface) is a library of useful functions.
For example, you can use MS Windows API calls from PowerBuilder by declaring
external functions from such DLL's as User32, Kernel32 or GDI32.

169. Let's say you have two database tables Tab1 and Tab2. Tab1 has 3 rows and
Tab2 has one row with the following values:
Tab1: id Tab2: id
a b
b
c

Write an SQL statement to produce the result set which will exclude
the row with the b value. Use both tables.

Method 1. Select Tab1.id
from Tab1
where not exists
(select *
from Tab2
where Tab2.id = Tab1.id)

Method 2. Select id
from tab1
where id not in (select id
from tab2)

170. What would you do to improve performance of a PB application?

On the back end: 1. Create indexes where needed.
2. Use stored procedures instead of embedded SQL.
3. Try to minimize use of database cursors.

Powerbuilder interview question _part 6

INHERITANCE

1. What is inheritance?
Inheritance is the ability to define a new classes from existing ones. Inheritance lets the developer derive (make) a new class (object type )from existing base class. It enables you to build windows, user objects, and menus that are derived (made) from existing objects. Descendant inherits all of the components of the ancestor. It includes attributes, variables, structures, functions, events and scripts.

2. What is the benefit of inheritance?
Inheritance ensures consistency in the code and look of objects and helps initial coding.

3. What is SUPER keyword and how it is used?
PB has 4 special keywords used to refer to an object without having to specify its name:
This—used for a reflexive reference to the object itself (window, control or user object)
Parent—refers to the window that owns or contain the object making the reference
ParentWindow—reference from a menu item referring to the window to which is attach
Super—refers to the ancestor script
1. This is equivalent to the following more verbose (Syn. using more words) call (assuming the name of the ancestor is w_ancestor,
Call w_ancestor cb_calculate::clicked
This calls the script in the clicked event in the immediate ancestor of the cb_calculate
Call super :: Clicked

4. When we change an attribute in an inherited control, we break the connection to the parent for that attribute only. -- TRUE

5. Which PowerBuilder objects can be inherited?
MENUS; USER OBJECTS; WINDOWS

6. Give an example of how you would use inheritance in your project?
I used the base (class) library to inherit it for all my application objects in order to increase the development process.
A standard company logon window that requires minimal changes.


7. How can you customize a descendant?
We can change the values of attributes and variables, extend/override the script, add controls, reference an ancestor’s functions, events, or structures, or declare variables, events, functions and structures for the descendant.

8. Can you delete a MenuItem in the descendant menu if it was created in the ancestor one?
We cannot delete a MenuItem in the descendant menu if it was created in the ancestor one but we can make it disabled and invisible.

9. What happens when you change the ancestor?
The changes apply to the all descendants.

10. What can you do with ancestor scripts?
We can Override or Extend the ancestor script at the descendant level. We can also call it from the descendant script.
11. Let’s say, you developed a window w_customers. After some time you developed a base ancestor window w_base_win and want to use all functionality that you put in this ancestor in your w_customers window. How can you do this?
By exporting w_customers, editing the exported file and importing it back.

12. How many levels of inheritance do you usually use?
I try not to use more than 3 levels, because my opinion is that each extra level decreases the performance and makes the code more difficult to read, but Powersoft says that with PB5, if we use the right structure of inheritance, it will increase the performance.

13. How can you call an ancestor script from a descendant object? (see pronouns)
There is CALL command that calls an ancestor script from a script for a descendant object. For example, CALL w_emp :: Open
CALL w_emp.cb_close :: Clicked
We can also use the word SUPER to refer to the immediate ancestor (parent). For example, to call the parent’s Clicked script: CALL SUPPER :: CLICKED
You can name directly the ancestor in the call or use the reserved word SUPER
Call Super :: Clicked

14. How can you override ancestor script at descendent level with no script in descendant?
Put comments //

15. How can you customise a Descendant?
Override or extend script, add controls, change value of attributes and variables.

16. How can you change an object’s ancestor without recording it?
Export the descendant, edit it (changing the name of the ancestor) and import it back.

17. Can you inherit a DataWindow?
We cannot do it directly, but we can create a standard UserObject of DataWindow type (which can be inherited) and use it instead of DataWindow controls. You use the same method when you need to inherit any control.



18. What is the difference between inheriting and copying an object?
When you change the ancestor object the changes are reflected in all the descendants.
When copying, you have to manually make changes. In copying you can delete or add the same control from the window. In descendant you cannot delete control just can make it nonvisible.
P.S. Changes to an attribute in the ancestor affect only the descendant on which that attribute has not been changed. WHEN YOU CHANGE ATTRIBUTE IN AN INHERITED CONTROL, YOU BREAK THE CONNECTION TO THE PARENT FOR THAT ATTRIBUTE ONLY. To re-establish the link to the parent you can click on the control and choose Edit/Reset Attribute

19. How can you execute ancestor script from the descendant?
CALL calls an ancestor script from a script for a descendent object. Call Super::Clicked (execute the script on the clicked event in ancestor). You can call scripts for events in an ancestor of the user object, menu, or window. You can also call scripts for events for controls in an ancestor of the user object or window. The following statement calls a script for an event in an ancestor window.
CALL w_emp::Open
The following statement calls a script for an event in a control in an ancestor window.
CALL w_emp`cb_close::Clicked
In some circumstances, you can use the Super reserved word when ancestor object is the descendant object's immediate ancestor.

20. How you can call function in ancestor from descendant?
w_parent::functionname(arg)
If the descendant has a function with the same name
Supper:: wf_functionname( )
You can call function from the descendant: just put the function name and give it the arguments. The only exception is if another function in the descendant window has been named exactly the same as the ancestor window function. In this case calling this name would call the descendant window’s function, not the ancestor. The solution to this problem depends on where you are making the call from. If you are calling the ancestor function from the window script (open or other event) you can:
w_parent::functionname(arg)
If you are calling the function from within a control or user object event, you must create a new descendant window function that does nothing but make a qualified call to the ancestor window function (as previously). Then you call the new descendant window function from within the control or user object.

21. You are working with inherited windows, and your application does not work or produces ambiguous errors. You are tracing the program though the DEBUGGER, and still - nothing. What can you do next?


22. Which of the following can be inherited? (pick all)
-window -Y
-data window - Y
-application
-function
-query
-script
-user object -Y

23. You can create, delete and change controls in a descendent? False

24. A descendant can only have one ancestor? False

25. What is SUPER keyword and how it is used?
SUPER is a keyword used to make a reference to an object without having to specify its name: When you write a script for a descendant object or control, you can call scripts written for any ancestor. You can directly name the ancestor in the call, or you can use the reserved word Super to refer to the immediate ancestor (parent). If you are calling an ancestor function, you only need to use Super if the descendant has a function with the same name and the same arguments as the ancestor function. Otherwise, you would simply call the function with no qualifiers.You can only use Super in an event or function associated with a direct descend-ant of the ancestor whose function is being called.

INSTANTIATION

1. How do you instantiate one window from another?
Every object belongs to an object class and is called an instance of the class. Every window object, for example, is an instance of the “window” class. You can think of the object class as the “prototype” or “model” for the object. When you develop a PB appli-cation, you design its object classes. When you run the application, the object instances come into existence. The process of creating an object from an object class is called instantiation. Instantiation always occurs at runtime. For visual objects, instantiation typically occurs The objects you declare are themselves a data type. These kinds of data types are called instance of an object. Instantiation creates an instance of the same object in memory.
We have to declare a window object as a datatype and open it.
w_main w_main1, w_main2
OPEN(w_main1)
OPEN(w_main2)

2. What do you need Instantiation in your application for?
When we want to display several windows that are identical in structure but have different data values.

3. Give a definition of an instance of a window?
Instance is a copy of a window in memory. More than one instance of the same window object can be created in memory.

4. How can you create instances of the same window object?
1. Declare a variable of type w_name :
w_name w_my_window
2. To create an instance we use function open( )
open(w_my_window)
We can create an array of instances of the window. Saving a window in the Window painter saves the definition of the window and the definition becomes a class (a new data type) with the same name as the window. To create an array of instances of a window, declare an array of the data type of the window. For example:
w_employee_address w_ea_inst[5]
Tip: We usually create multiple instances of a pop-up or child window rather than a main window. Or we can create an instance of a window in the local script with a local variable of datatype of this window and call this script each time we need to create a new instance of the window.
Downside: We will not be able to call these windows by name: the handle to the window created this way is lost as soon as the script ends.

5. What the difference between Class and Instance?
Class is in data storage (hard drive). Instance is in memory. Instantiation is a process of creating of instance of an object from a class.

Libraries

1. What is Regenerate option in the Library painter? When is it most useful?
Regenerating could be called “recompiling”. It could also be understood as “synchroniz-ing” the source and the object versions of the object. Although the objects you create and modify are compiled when they are saved, sometimes it is necessary to recompile them. When? When you make a change to an ancestor window that has many descendants, the changes can be immediately rippled throughout all the child windows through regenerati-on. Or when you upgrade to a new version of PB, it is very likely that there are changes in the way compiles are done. The new version should regenerate all your source code to update it.
Tip: if you notice strange behavior or inconsistencies in the way your application works, it never hurts to regenerate the objects to be sure that everything is in synch. It might take several re-generations to fix the problem. If you use inheritance, you have to regenerate for each level of inheritance, because on the first pass one highest-level ancestor object will get fixed, but the descendant might have been regenerated before the ancestor object was touched. The second pass will fix the descendant object. A way around this is to regenerate inheritance trees from the object browser. It regenerates the ancestor first and then each descendant.

2. The Library List shows the DOS path to PowerBuilder…?

3. Why should you optimize libraries?
The library entity can become fragmented over time, increasing seek time.

4. What is Check-in, Check-out options on a Library Painter?
The Source menu functions provide project-team source control for your library—the ability to make sure that two people don’t try to edit the same object at the same time. PB has a rudimentary level of source control capability built into it. Or third-party product, such as Intersolv’s PVCS can be integrated into PB. It lets you “check out” an object by copying it from the main library to another library where, presumably, only one person can modify it. Later, you “check in” the object by copying the modified version back into the main library. While you have an object checked out, its original version remains in the library but other people are restricted to “read-only” access.
(What is the usage of the check in/check out feature in PB?)
When more than one programmer is working on the project, you want to prevent two users from modifying a library entry at the same time. To control access to library entries, you can use check in and check out. When you check out an entry, PB makes a copy of the entry, stores it in a specified library, (e.g. a test or development library), and sets the status of the entry to check it out. As long as the status of an entry is ‘checked out’, you can change only to the working copy. If you or another user tries to open the original copy, PB displays a warning message. When you finish working with the entry that you checked out, you can check in entries to replace the entry in the original library with the working copy of the entry. Check in clears the check out status from the entry, and deletes the working copy from the library in which it is saved.

MDI
1. What is an MDI application ?
MDI application is a frame used to manage multiple documents of the same or different types within one.

2. What is Microhelp? Where do you define it?
Microhelp is additional info about a MenuItem which is used to help the user understand what the MenuItem does. We define the Microhelp text in the Menu painter as part of the process of creating the Menu. It only displays if the frame window of the application is of the type MDI Frame with Microhelp.

3. Where do all Menus in an MDI application display?
All Menus, display in the menu bar of the frame window.

4. Which menu applies to an open sheet of a document type that has been
defined without its own Menu?
When a sheet without a Menu is opened, it uses the current Menu, that is, the Menu that was current when the sheet was opened.

5. What are the parts of MDI frame?
TitleBar
MenuBar
ToolBar
Client Area
Status Area
Frame Window

5. What is an MDI frame?
MDI stands for Multiple Document Interface. MDI window is a frame window in which we can open Multiple Documents Windows (sheets) and move around the sheets. An MDI frame is a window whose main purpose is to be a container for child windows, called sheets.

6. What types of an MDI frame do you know?
There are 2 types of an MDI frame windows: MDI frame and MDI frame with micro help.

7. What is the difference between SDI and MDI frame?
MDI allows the user to work with more than one document at a time.
SDI allows to work with only one document.

8.What is the difference between MDI frame and MDI frame with micro help?
MDI frame doesn’t have microhelp utility.
MDI frame with micro help has the microhelp on the bottom of the window.

9. What is a MDI_1 object? Can we place any controls on MDI_1?
MDI_1 is a client area or workspace within the frame between the toolbar or menu and status area (microhelp) in which open sheet is displayed. When we create and save an MDI frame, PB automatically creates a control called MDI_1. PB uses MDI_1 to identify the client area, the area that holds sheets. We can place any controls on MDI_1. We have to count the height, the width of a control and extract them from the client area.

10. Does MDI_1 have events? What are they?
NO. It does not have any events.

11. Is it a good idea to use CloseQuery Event in MDI window?
Yes. It is a good idea to send a message to the user about to exit from the application.
For example:
MessageBox(“Question?”, ”Are you sure you want to exit from the application?”)

12. How do you check if there are any MDI Sheets currently existing?
IsValid (w_name) determines whether the window is open

13. You have an MDI Window, Sheet 1 with Menu and Sheet 2 without the Menu.
You open Sheet 2 after Sheet 1. Which Menu will have Sheet 2 MDI Menu or Sheet 1 Menu?
It will have the Menu of Sheet1 as the last Menu that was displayed on the MDI window.
A sheet can have its own menu, but its not required to.

14. How do the Application components communicate with one another?
Direct access or manipulation by calling a function, trigger or posting an event using global variables, passing parameters.

15. How do we send parameters between two already opened windows?
n global variables;
n shared variables;
n send parameters by MessageObject using function Send( )

16. How can two sheets within MDI frame communicate with one another?
Global variable
Shared variable
Message object




MDI Applications

17. What is MDI?
MDI is an application style that we use to open multiple windows (sheets) in single window and move among the sheets. Usually MDI has a menu bar client area and Status area (if it is MDI with Microhelp)

18. What functions do we usually use working with MDI?
OpenSheet() - to open sheets inside the MDI frame GetActiveSheet() to keep track which sheet is active now, ArrangeSheet() to arrange sheet’s layout.

19. How can we display information to the users in the status area?
We can associate microhelp with the control defining its Tag attribute and then we will use SetMicroHelp() function to display this tag attribute.

20. How can we display toolbar picture under the MenuItem?
We have to associate a toolbar picture with MenuItem in the Menu Painter.

21. What is the function to open an MDI frame window?

22. What is the function to open a response window from an MDI sheet?

23. How do you use OpenSheetWithParm?
(Opens a sheet within an MDI frame window and creates a menu item for selecting the sheet on the specified menu, as OpenSheet does. OpenSheetWithParm also stores a parameter in the system's Message object so that it is accessible to the opened sheet.)
Applies to Window objects. Syntax:
OpenSheetWithParm ( sheetrefvar, parameter {, windowtype }, mdiframe {, position {, arrangeopen } } )
Example:
OpenSheetWithParm(w_child_1, "MA", MDI_User, 2, Original!)

MENU

1. What is purpose of a Menu object?
A Menu object is a visual object that provides the user with lists of commands, options, or alternate ways of performing a task.

2. What types of Menus do you know ?
DropDown
Cascading
Pop-up

3. What is the difference between the Clicked and Selected event of a MenuItem?
The Clicked event occurs when the user clicks the mouse on the MenuItem or selects the MenuItem with a keystroke and presses Enter.
The Selected event occurs when a user uses the arrow keys to move to a MenuItem or moves the mouse pointer to the item and holds the button down.

4. (fill in the blank) The ellipsis (…) is used after a MenuItem to indicate that a window will appear requesting more information before the command can be executed.

5. (fill in the blank)The underlined character is used before a letter in the text of a MenuItem to assign the letter as an accelerator key for the MenuItem.

6. What is the difference between an accelerator key and a shortcut key in the
way a user uses them to initiate a command or select an option on a Menu ?
Accelerator keys and shortcut keys provide alternative means of invoking commands or selecting options represented by the MenuItems to which they are assigned.
A shortcut key is a single keystroke or a combination of keystrokes (Ctrl + N or F1) annotated to the right of MenuItem. An Accelerator key underlines a character in the Menu or MenuItem. When the Accelerator key is in a Menu on the Menu bar, the user may press Alt + character to select the Menu.

7. What kind of menus do you use?
A DropDown menu is a menu under an item in the menu bar
Cascading menu is a menu to the side of an item in a DropDown menu.
Pop-up menu is not connected with a menu bar.

8. What attribute of the MenuItem do you know?
Checked. Whether the MenuItem displays with a check mark next to it.
Enabled. Whether the MenuItem can be selected.


14. How do you use menus in the window?
We can associate a menu with a window in the window style window or display a pop-up menu in the window using the Pop-up Menu function.

MESSAGE OBJECT

1. What is the Message object. How do you use it? Why do you use it?
Objects work with one another by sending messages. A message is a subroutine call directed at an object. Every object has a predefined set of subroutines (in PB methods) that you can call to send messages to the object.
Object.Method (parameters)
In PB, there are three types of messages:
1, 2. Functions & events which are collectively called “methods”;
3. Properties.
In PB, every object has a set of functions, events and properties for receiving messages. PB also has functions that are not directed to an object, such as a MessageBox.
MessageBox(“Hello”, “How are you?”)
For the transaction object, you do not use the object.function syntax. Instead, you use standard SQL syntax. A Message object is a PowerBuilder-defined global object. When we use functions OpenWithParm( ), OpenSheetWithParm( ), CloseWithReturn( ) (for response window only) specified parameters will be passed through the MessageObject. We can use this Message object to store a parameter when opening or closing a window.

2. How do you use OpenSheetWithParm( )?
We use function OpenSheetWithParm( ) to pass parameters between two Windows (sheets) in (MDI) application using Message Object’s attributes StringParm, DoubleParm or PowerObjectParm, depending on the variable datatype. The Parameters will be stored in MessageObject. OpenSheetWithParm( ) stores the parameter in the system's Message object so that it is accessible to the opened sheet. We use OpenWithParm( ) to open a window that is not an MDI sheet and pass information to the window. We use the OpenSheetWithParm( ) function to open MDI sheets when we need to pass information to the sheet that is being opened or use the information to open the sheet.

3. State briefly and in general terms when you would use each of the following functions. Be sure your answer reflects the difference between the two functions.
n OpenWithParm( )
n OpenSheetWithParm( )

4. (true or false) The Open() and OpenWithParm() are only used in (SDI) applications.

5. Assume you are coding the script for the Open event of a window to which a number has been passed. Code the statement that tests whether the value is greater than 100.

6. Can a Message object Pass Parameters?
Yes, using Send () command

7. What functions can you use to pass parameters between the Windows in PB?
1. OpenWithParm( )
2. OpenSheetWithParm( )
3. CloseWithReturn( )

8. How do OpenWithParm() and CloseWithReturn() functions pass parameters?
Using Message Object’s attributes StringParm, DoubleParm, PowerObjectParm depending on a variable datatype. OpenWithParm( ) also stores a parameter in the system’s Message object so that it is accessible to the opened window. Closes a window and stores a return value in the Message object. Use CloseWithReturn() only for response windows.

9. What is the usage for StringParm, DoubleParm and PowerObjectParm attributes of Message Object?

10. What attribute in the Message Object do we have to use if we want to store a Structure in it?
We have to use the PowerObjectParm attribute.

11. What is the Message Object?
It is a PB System object that is used to communicate parameters between windows. When we Open and Close them and in TriggerEvent and PostEvent functions.

12. What attributes of System Object do you use to pass parameters windows?
DoubleParm for numeric parameters, StringParm for strings and PowerObjectParm for any PB objects including structure.

013. What function do you use to communicate parameters between windows?
OpenWithParm and CloseWithReturn power script function.

14. How can you handle Error Messages (examples)?
Put some code into DB Error event (using SetActionCode)
int err_code
If SQLDB.Code <> 0 Then
MessageBox (“DB Error:”, “Number” + string (sqldbcode) + “” + &
sqlerrtext, StopSign!)
return 1
End if

33. What is the Message object? How do you use it? Why do you use it?
Objects work with one another by sending messages. A message is a subroutine call directed at an object. Every object has a predefined set of subroutines (in PB methods) that you can call to send messages to the object.
Object.Method(parameters)
In PB, there are three types of messages:
1, 2. Functions & events which are collectively called “methods”;
3. Properties.
In PB, every object has a set of functions, events and properties for receiving messages. PB also has functions that are not directed to an object, such as a MessageBox.
MessageBox(“Hello”, “How are you?”)
For the transaction object, you do not use the object.function syntax. Instead, you use standard SQL syntax.
Name Pronouns
1. Describe the circumstances under which you would use the pronoun This instead of the name of the object it represents.
The pronoun This refers to the MenuItem, object, or control for which the script is written.

2. What is SUPER keyword and how it is used?
SUPER is a reserved word used to refer to the immediate ancestor from a descendent level… If we are calling a script from an ancestor we have to use
Call SUPPER :: Clicked
This example calls the Clicked Event in the ancestor object. If you are calling an ancestor function, then you only need to use SUPER ::
SUPER :: wf_name( arguments )
If the script is for an event in a control : Call ancestor window control :: event or a user object in an ancestor window : Call ancestor window object :: event

3. What if you need to call a function from not an immediate ancestor?
We have to specify the full path to that function. For example:
w_name :: function_name( ) to call an event from not an immediate ancestor
Call ancestor window :: event.

4. What are :THIS, PARENT, PARENTWINDOW clauses?
They are Name pronouns and used to refer to current objects or controls instead of using actual names. This is used to refer to an object or control from any script coded for it. Parent is used to refer to the window from any script for a control on window. ParentWindow is used to refer to the window from a MenuItem script at execution time.

5. What is the difference between reserved word Parent an ParentWindow, When are they used in the script for the MenuItem?
ParentWindow refers to the window that associated with a Menu. ParentWindow can be used only in scripts for MenuItems. Parent is used in the following scripts :
1. A script for a control in a window.
2. A script for a custom UserObject.
3. A script for a MenuItem.
When we use Parent in the script for a MenuItem, Parent refers to the MenuItem on the level above the MenuItem the MenuItem the script is for. ParentWindow is the name of the window object that owns the menu.


6. What are Object Name pronouns and how do use them?
Name Pronouns are reserved words that are used to refer to objects or controls instead of using actual name. They are:
This is used to refer to an object or control from within any script coded for it.
Parent is used to refer to the window from any script for a control on the window.
ParentWindow can be used only in scripts for MenuItems.
Super is a reference used in a script of an inherited object to refer to the script in its immediate ancestor (parent).
When we use Parent in a script for a control, it refers to the window that contains the control. When we use Parent in the script for a MenuItem, Parent refers to the MenuItem on the level above the MenuItem the script is for. When we use Parent in a script for a control in a custom UO, Parent refers to the UO. The pronoun ParentWindow refers to the window with which the menu is associated at execution time. ParentWindow can be used only in scripts for MenuItem. The pronoun This refers to the window, UO, MenuItem, application object, or control itself. When we write a script for a descendant object or control, we can call scripts written for many ancestor. We can directly name the ancestor in the call, or we can use the reserved word Super to refer to the immediate ancestor (parent) CALL Super :: Clicked.

7. What reserve word for window do you know?
ParentWindow type refer to the window that the menu is associated with at runtime.
We can use ParentWindow to refer to attributes of the window a menu is associated with but not refer to attributes of controls or user objects in the window.
Custom Search