Powerbuilder Interview Questions Part 6

APPLICATION


How PowerBuilder looks for variables


When PowerBuilder executes a script and finds an unqualified reference to a variable, it searches for the variable in the following order:


1 A local variable

2 A shared variable

3 A global variable

4 An instance variable


As soon as PowerBuilder finds a variable with the specified name, it uses the variable’s value.


1. What events do you know for the application object?

OPEN – the user starts application.

IDLE – no mouse or keyboard activity happens in a specified number of seconds

SystemError – A serious error occurred during execution

CLOSE – the user closes the application

ConnectionBegin –in a distributed computing environment, occurs on the server when a client establishes a connection to the server by calling the ConnectToServer function.

CONNECTIONEND — In a distributed computing environment, occurs on the server when a client disconnects from the server by calling the DisconnectServer function.


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

We could do it using PB function Run( ). Run (string {, WindowState}), where string is a string whose value is the filename of the program we want to execute. Optionally, the string can contain one or more parameters of the program; WindowState (optional) is a value of the WindowState enumerated data type indicating the state in which we want to run the program. E.g., Run(“c:\winword.exeleter.doc”, Maximized!)


3. How do you know that the application is already running?

(How do you avoid MessageBox “Application is already running”?)

Use Handle( ) function. Handle( ) returns the object’s name if the object exists.


4. What are the two structures every application has?

Every PowerBuilder application has the MessageObject and the ErrorObject. ErrorObject is used to report errors during execution. MessageObject–to process messages that are not PowerBuilder-defined events, and pass parameters between windows.


5. What are the ways to close your application?

HALT, HALT CLOSE, CLOSE

6.What is HALT? HALT CLOSE? What is the difference between them?

The HALT statement forces the application to terminate immediately. This is most often used to shut down the application after a serious error occurred.

HALT CLOSE Halt Close does the same thing but triggers the application object’s Close event before terminating.


7. What do you do to find out how fast your select is being executed on a client site?

Put TRACE option in the .INI file ( SQL_OPT_TRACE—Connect Option DBParm parameter) Purpose – Turns on/off the ODBC Driver Manager Trace in PB to troubleshoot a connection to an ODBC data source. It provides detailed information about the ODBC API function calls made by PB when connected to an ODBC data source. Values – The values you can specify are:

SQL_OPT_TRACE_OFF (Default) – Turns off the ODBC Driver Manager Trace. SQL_OPT_TRACE_ON – Turns on the ODBC Driver Manager Trace.


8. What are the ways to test correctness of your SQL? SQL Time?

Put TRACE option in the .INI file.


9. What is the purpose of the PB.INI files?

INI stands for “initialization”. They are primarily intended to be a standard format that applications can make use of to hold info from one run to the next. Rather than hard-coding the values of transaction properties in scripts, which is too inflexible for most real-world applications, you’ll want your scripts to read some or all of them from an .INI file. You could use PB.INI

.INIs are always in the same format:

[Database]

DBMS = Sybase

Database = Video Store DB

User Id =

DB Password =

Log Password =

Server Name =

Log Id=

Lock =

DBParm=ConnectString=’DSN=VideoStore DB;UID=dba’



10. How do you manipulate .INI file through PowerBuilder functions?

Set Profile String( )

ProfileString( )

ProfileInt( )


11. How do you set calculator in PB application?

Run (“c:\ calculator” )

SQL

What is SQL?

SQL is A Structure Query Language.

1. Is a standard way of specifying data sets.

2. Is a way to retrieve and manipulate data in DataBase.

3. Is used for all DataBase functions.

4. Can be used in the form of “embedded SQL” from an application program.


1. Which attributes of a Transaction object in PowerBuilder are required to be set for a Sybase/SQLServer connection?

DBMS

Database

UserID

DBPass

Lock

LogID

LogPass

ServerName

AutoCommit

DBParm


2. What is a temporary table?

A temporary table exists only during the current work session.


2a. How do we create temporary tables in Sybase?

We use the pound sign( # ) before the name of the table in the Create Table command, the new table will be temporary. The new table will be created in the Temporary DB, no matter what DB you use when you create it. It exists only during the current work session. If you do not use the pound sign before the table, the table is created as a permanent.

Create table #temppubs

(pub_id pid,

pub_name varchar(30) null)

select title_id, total_orders = sum(qty)

into #qty_table

from salesdetail

group by title_id


3.What is usage of the temporary tables?

Temporary tables are used to hold a set of intermediate results and hold results of queries that are too complex for a single query.


4. What are locks?

Locks are the restriction of data access or modification for specific subset of data in the

DataBase. Locking is handled automatically by SQL Server.


5. Why do we need locks?

We need locks to restrict data access or modification for specific subset of data in the DB.


6. What types of locks in Sybase do you know?

There are Shared (read only) and Exclusive (write only) locks.

Exclusive locks allow only one process to read or write the page. It is used for Update, Insert, Delete. Exclusive locks exist for the duration of a transaction.

Shared locks allow many processes to read, but not one can write. It is used for Select.

Shared locks are normally released as soon as the page has been read.


7. What is a Deadlock?

Deadlock is a condition where two processes, each holding an exclusive lock on the page

that the other processes needs. The process with the lowest accumulated CPU time since login has its transaction rolled back; the other process proceeds to completion.


8. What is an isolation level?

Isolation levels means: higher levels include the restrictions imposed by lower levels.

Defines 4 levels of isolation for SQL transaction:

0 (read uncommitted) allows dirty reads, non-repeatable reads, and phantom rows. (You can see data changed, but not necessarily committed, by another user)

1 (read committed) Prevents dirty reads. Allows non-repeatable reads, and phantom rows.

2 (repeatable read) Prevents (non-repeatable reads) dirty reads and guarantee repeatable reads. Allows phantom rows.

3 (Serializable) prevents phantom reads. Do not allow dirty reads, guarantee repeatable reads and do not allow phantom rows.

The default is 0.


9. What is a DataBase referential integrity?

Referential integrity ensures that data between Primary & Foreign keys is kept consistent.


10. What helps us to support referential integrity?

Triggers help us to support database referential integrity. In relational database system it means that key fields should have correct values across related tables, and also that all changes are propagated to related or associated fields in the database (or distributed DB).

11. What is Primary key? Foreign 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 with the primary key. Primary keys must be unique and not null. A foreign key reference a primary key in another table.(one or more columns that refer to the primary key of another table) When one table’s column value are presented in another table’s column, the column from the first table refers to the second. OR

A foreign key is a value or combination of values in one table that exist as a primary key in another table. A foreign key defines a relationship between tables. Because a particular table can be related to several different tables, a table may have more than one foreign key. OR

The primary key is one or more columns that uniquely identify a row. The primary key must be unique and not null. (If the primary key has more than one column, it is also known as a composite or compound key.) Foreign key is one or more column that refer to the primary key of another table.

OR

Foreign key is a column (or set of columns) that match the primary key of another table and when the match is found, the data is available for retrieve.


12. What is common key?

Common Key (alternative) One or more columns that are frequently used to join tables.


13. What is an Index?

Index is a pointer which is used to improve performance.

OR

Index is a separate storage structure created for a table to allow direct access to specific data row(s). (Logical pointer to allow faster retrieval of physical data)


14. What is the usage of indexes and how do you create them?

Indexes optimize data retrieval since the data can be found without scanning an entire table. Indexes can also force unique data value in a column.

OR

Indexes are used to improve performance when finding rows, correlating data across tables, ordering results of queries. E.g., to create an index named Cust_ind using the ID column of the Customers table you have to issue the following command in DB Painter:

CREATE INDEX Cust_ind on Customers(ID);

To create unique index:

CREATE INDEX Cust_ind on Customers(ID);


15. What types of indexes do you know in Sybase ?

There are clustered and non-clustered indexes in Sybase. By default indexes are non-clustered, non-unique. We can have only one clustered index and up to 249 non-clustered indexes per table.

Clustered indexes determine the physical order of data in the table

Non-clustered indexes do not affect the data pages and simply provide pointers to rows.


16. When is usage of indexes not effective?

1. The optimiser would prefer the entire table scan if there are < 500 rows in the table.

2. When we have to update our table frequently. We can see if an optimizer chose to use an index by using ‘showplan on’ option. Generally it is up to the optimizer to use indexes or not. It is common opinion that on a small table (<500 rows) the optimiser would prefer a table scan. On a big table (>10 000 rows) usage of indexes is more probable.


17. When does the optimiser ignore the indexes?

When we use like in SQL statement.


18. 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 (by the indexed column). Non-clustered indexes do not reorder the actual data (the data is in the order in which it is inserted).


19. 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-clustered?

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.


20. What do you know about fill factor?

Fill factor of an index specifies how many levels of non-leaf pages the index has.


21. What is the difference between indexes and keys?

Keys are not the same as indexes. Keys are defined at logical design time while indexes are defined at physical design time for performance and other reasons.


22. What is a Transaction?

Transaction is a logical unit of work. We may say it is a set of SQL statements.


23. What is a View? What is the main purpose for a View?

A View is a stored select statement that behaves like a table. The primary purpose of a view is:

Security

Simplify long Query

Ad Hoc Query.

A View is a pseudo-table which contains a select statement from one or more databases.

a. Allows us to combine two databases or two or more tables.

b. For security reasons (it does not let the user obtain real database table.)

c. It is stored as a query in the database.

A View is a virtual table (it is not a real table, it is just an entry in the system catalog). It is a DB object which we use for security purposes or to narrow the scope of data (View does not occupy any space. Only the view created as a result of simple select of all columns from one table can be updated. Cannot use: ORDER BY, COMPUTE, INTO, DISTINCT when creating a rule)


24. What is a Trigger? How do you create a Trigger?

Triggers are a special kind of stored procedures that go into effect when you insert, delete, update data in a specified table or column. Or

Triggers are SQL statements which automatically execute when a row is inserted, deleted, updated in a table. We create a trigger by specifying the table and the data modification commands that should ‘fire’ or activate the trigger. We can create a trigger using the Create clause which creates and names the trigger, the ON clause gives us the name of the table that activates the trigger (called trigger table). The FOR clause tells us that the action for which trigger was created. Example: Create trigger t1

on titles

for insert, update, delete

as

SQL_statement

for (insert, update)

as

if update(column_name)

[(and/or} update(column_name)]. . .

SQL statement

Triggers cannot be called directly. Triggers do not take parameters


25. Which Sybase system tables are used when you write triggers?

The Inserted and Deleted tables are used when writing triggers. Inserted Table holds any rows added to a table when you execute Insert or Update SQL statement. Deleted Table holds any rows removed from

the table when you execute Delete or Update SQL statements.


26. How many triggers can you specify for one DataBase Table?

A table can have a maximum of three triggers : Update trigger,

Insert trigger,

Delete trigger.

However, we can create a single trigger that will apply to all three user actions (Update, Delete, Insert).


27. Which statements are not allowed in a trigger?

In SQL Server’s triggers are not allowed:

Alter Table, Alter Database;

  1. Truncate table;

  2. Grant and Revoke statements;

  3. Update statistics; select into.

5. Creation of objects

6. Neither views nor temporary tables can have triggers.


28. Why do we need Triggers?

To ensure referential integrity. Declarative integrity cannot be used to perform cascaded updates or deletes when the primary key is updated or deleted. The programmer can implement alternative solutions using triggers.


29. How can you obtain the source code of a trigger in SQL Server?

Using sp_helptext <trigger name>


30. Can you call Stored Procedures from Triggers?

Yes.

31. Can you create temporary tables in Triggers?

No, we cannot.


32. What is the difference between HAVING and WHERE keywords in SQL?

WHERE filters out the rows. Where clause limits the rows displayed (eliminates rows, cannot include aggregate functions)

HAVING filters out the groups. HAVING clause limits the groups displayed (eliminates groups, can include aggregate functions, be used with GROUP BY clause). GROUP clause is the command to search through the specified rows and treat all the rows in which the contents of the specified column is identical as one row. As the result, only contents of the specified rows and aggregate functions can be included in the select list for a SQL command using the GROUP BY clause. WHERE clause specifies the connection between tables named in a FROM clause and restricts the rows to be included in the result. HAVING sets conditions for the GROUP BY clause and restricts the groups in the result.


33. Are you familiar with the following terminology:

  • Open Client

  • ISQL

  • Transact-SQL

  • APT-WB

  • bcp

  • DBLib

  • OpenServer

  • ServerLib

Open Client is a collection of libraries that provides the Application Programming Interface (API) functionality allowing the client to communicate with SQL Server. OR

Sybase Open Client is required in the client application to send request to the SQL Server.

ISQL is a character-based utility that comes with SQL Server. ISQL submits SQL commands to SQL Server and displays the result.

Transact-SQL is used by developers to program organization-wide business rules, queries, transactions and within stored procedures to increase programming efficiency and Database performance.

APT-WB

bcp (bulk copy) is high-speed utility for copying table data to or from an operating system file.

DBLib one of the component of the open client

Open Server is a server that you write. (developer’s tool kit which enables any data source or service to become a multi-threated server

ServerLib


34. What is Data Dictionary? How is it used?

Data Dictionary is stored in each database. The info regarding the database(s) structure and components is contained in the data dictionary for the database. The data dictionary, also called the “system catalog”, is stored as data in the “system tables” in each database.


35. What is the name of the DataBase in which system-related information is stored?

Master Database which has system catalog, system procedure . .


36. What are the system databases in SQL server?

Beside user’s databases SQL SERVER always has 3 databases: MASTER, MODEL, and TempDB. Stored procedure DB

MASTER is used internally by SQL Server to store information about user’s databases;

MODEL is used as a template to create a new user’s database.

TempDB is used to store temporary info like temporary tables if you use them in SPs.


  1. How do you create a DataBase? What parameters can you specify while doing Create?

We have to use Create Database statement and define Database name, devices for our database and size in Mbytes.


38. How do you display information about the DataBase?

sp_helpdb


39. How can you switch to another database?

Connect using db_name


40. What is a Rule? What are the steps for creating and using a Rule?

A Rule is a DataBase object that defines a restriction on a column. A Rule can specify an edit mask for a column or user-defined datatype. A Rule can be a list of values, a range of values or an edit picture. 1. Create a rule with the CREATE RULE command

create rule age_rule as

@age < 110

2. Bind a rule to a column with sp_bindrule

sp_bindrule ‘age_rule’, ‘my_table_age’

sp_bindrule ‘pub_rule’, ‘publishers.pub_id’

3. Unbind a rule from an object with sp_unbindrule

sp_unbindrule ‘authors.zip”

4. Drop a rule using drop rule rulename.

We cannot drop a rule if it is bound to a column. Unbind it first.

The last rule bound to a datatype/the column is the only one that takes effect on the datatype/the column. The rule bound to a column overrides the rule bound to the column’s datatype.

Rules are a specification that controls what data can be entered in a particular column.

1.Create a rule : create rule age_rule as @age<8

2.Bind a rule to a column : sp_bindrule ‘age_rule’,’mytable.age’

3.Unbind a rule from an object :sp_unbindrule ’mytable.age’

4.Drop a rule : drop rule age_rule

5. Examining rules using the Data Dictionary.(in SQL you can sp_helptext

sp_helptext pub_idrule( writes all information about our rules)


41. What is a Default? How do you use it?

A Default is a value that is applied on an insert if no value is supplied.

Defaults specify the data to be entered into a column if user does not specify it on input.

Or

Default is the data to be entered in a column if none is provided by user.


42. How can you remove a column from a table?

We cannot. We can either drop or recreate the table without the column, or copy selected columns of your table into a new table with a different definition.


43. What does the following SQL do:

SELECT title FROM titles

WHERE title like ‘%[Ss]ecret%’


44. What does the following SQL do:

SELECT distinct type, price, title FROM titles

WHERE price > (SELECT avg(price) FROM titles)


45. What are the inserted and deleted tables?

The deleted table stores copies of the affected rows during delete and update statements.

The inserted table stores copies of the affected rows during insert and update statements.

These are temporary tables used in trigger tests. Use these tables to test the effect of some data modification and set conditions for trigger actions. You can’t directly alter the data in the trigger test tables but you can use these tables in Select statement to detect the effects of an insert, update, delete.


46. What is the SA? DBO? What are their purposes?

SA—system administrator—(super-user with a broad range of privileges. Can assume the identity, and thus the privileges, of any other user). The user with SA role allocates resources and maintains the data server.

DBO—DataBase Owner—a special user within a database having certain database-wide capabilities.


47. Write an SQL to find an average price for all titles published between 1975-1980.

SELECT avg( price )

FROM titles

WHERE publishers .date > 1975 AND publishers .date < 1980 or using between keyword.

48. What is the purpose of IF EXITS clause?

IF EXIST stops processing a query once it finds the first match.

Is there an author with the last name ‘Smith’?

Declare @lname varchar (40)

select @lname = “Smith”

IF EXIST (select * from authors

where au_lname = @lname)

select “There is a” + @lname

ELSE

select “There is no author called” + @lname


49. What is a Cursor?

A Cursor is a symbolic name that is associated with a Transact-SQL statement. A Cursor provides the ability to step through the result set row by row. The application program can perform processing on each row.


50. What is the purpose of CURSOR? How and when can you declare a CURSOR?

The purpose of Cursor is to allow a program to take action on each row of a query result set rather than on the entire set of rows returned by select statement. A Cursor must be declared before it is used. The syntax to declare a Cursor can be included in a stored procedure or an application. Provides the ability to delete or update a row in a table based on the cursor position. Acts as a bridge between the set orientation of an RDBMS and row-oriented programming.


51. What is the syntax to use a Cursor?

To use a Cursor :

Declare the cursor for the select operation you are performing

Open the cursor

Fetch each row in the cursor for processing, repeating until all rows are processed

Close the cursor

Deallocate the cursor


52. What is an outer join? What kind of outer joins do you know?

An outer join is defined as a join in which both matching and unmatching rows are returned. We use *= to show all the rows from the first defined table. (Left outer-join)

We know left outer join and right outer join.


53. How do we join two or more tables?

We use Select statement with Where clause, where we specify the condition of join.


54. Give an example of outer join?

An outer join forces a row from one of the participating tables to appear the result set if there is no mattering row. An asterisk(*) is added to the join column of the table which might not have rows to satisfy the join condition. For example:

SELECT cust.cust_id, cust.cust_lname, sal.sal_id

FROM customer cust, salesman sal

WHERE cust.sal_id *= sal.sal_id

Used for reports. There is no matching between two columns.


55. How do you understand left join?

56. How do you get a count of returned rows?

Using a global variable @@rowcount.


57. How do you get a Count of non null values in a column?

Count (column_name) returns number of non null values in the column.


57. What are the aggregate functions? Name some.

Aggregate functions are functions that work on groups of information and return summary value.

Count(*) number of selected rows;

count(name_column) number of non-null values in a column;

max( ) highest value in a column;

sum( ) total of values in a column;

min( ) lowest value in a column

avg( ) average of values in a column.

Aggregates ignore Null value (except count(*)).

Sum() and avg() work with numeric values.

Only one row is returned (if a GROUP BY is not used).

Aggregates may not be used in WHERE clause unless it is contained in subquery:

(select title_id, price

from titles

where price >(select avg(price) from titles).


58. What can be used with aggregate functions?

1. More than one aggregate function can be used in a SELECT clause.

SELECT min(advance), max(advance)

2. DISTINCT eliminates duplicate value before applying aggregate. Optional with sum(), avg() and count. Not allowed with min(), max() and count(*)

SELECT avg(distinct price)


59. What is a Row?

A Row contains data relating to one instance of the table’s subject. All rows of a table have the same set of columns.


60. What is a Column?

A Column contains data of a single data type (integer, character, string), contains data about one aspect of the table’s subject.


61. Where do you use GROUP BY?

GROUP BY organizes data into groups.

1. Typically used with an aggregate function in the SELECT list. The aggregate will then be calculated for each group.

2. All Null values in the group by column are treated as one group

SELECT type, price = avg(price)

FROM titles

GROUP BY type;

3. With a WHERE clause – WHERE clause eliminates rows before they go into groups. Will not accept an aggregate function

SELECT title_id, sum(qty)

FROM salesdetail

WHERE discount > 5

GROUP BY title_id

4. With HAVING – HAVING clause restricts group. Applies a condition to the group after they have been formed. HAVING is usually used with aggregates.

SELECT avg(price), type

FROM titles

GROUP BY type

HAVING avg(price) > 12.00


62. What is a subquery or a nested select?

A Subquery is a select statement used as an expression in a part of another select, update, insert or delete statement. Subquery is used as an alternative method to Join clause and provides additional functionality to the Join clause

SELECT title

FROM titles

WHERE pub_id = (SELECT pub_id

FROM publishers

WHERE pub_name = “New Age Book”)


63. Why do you use a Subquery instead of a join?

Because they are sometimes easier to understand than a join which accomplishes the same purpose. To perform some tasks that would otherwise be impossible using a Join clause (using an aggregate).


64. What are restrictions on a Subquery?

Subqueries cannot be used with : 1. Keyword INTO:

2. With ORDER BY

3. With computed clauses.

The DISTINCT keyword cannot be used with Subqueries that include a GROUP BY clause.


65. What is Simple Retrieval?

Used to retrieve data from DataBase.


66. What operators in SQL do you know?

= equal

> greater than

< less than

>= greater than or equal to

<= less than or equal to

!= not equal

<> not equal

!> not greater than

!< not less than

Logical operators

67. What is Re-ordering Columns?

The order of column names in the SELECT statement determines the order of the column in the RESULT.

SELECT state, pub_name

FROM pub

RESULT

state pub_name


68. How do you eliminate Duplicates?

DISTINCT eliminates duplicate in the output.


69. How do you Rename Columns?

Use new_column_name = column_name

SELECT ssn = user_id, last_name = lname.

Use a space to separate column_name and new_column_name

SELECT user_id ssn, lname last_name


70. What is Aliases?

To save typing the table name repeatedly, it can be aliased within the query.

SELECT pub_name, title_id

FROM titles t, publishers p

WHERE t.pub_id = p.pub_id and price = 19.9

71. Can you join more than two tables?

Yes. The Where clause must list enough Join conditions to connect all the tables.

72. Can you use Joins with ORDER BY and GROUP BY?

Yes, we can. SELECT title. title_id, qty, price * qty, price

FROM titles, salesdetail

WHERE title.title_id = salesdetail.title_id

ORDER BY price * qty;

SELECT stor_name, salesdetail.stor_id, sum(qty)

FROM salesdetail.stor_id = stores.stor_id

WHERE salesdetail.stor_id = stores.stor_id

GROUP BY stor_name, salesdetail.stor_id;


73. Can you use Joins with additional conditions?

Yes, we can SELECT s.stor_id, qty, title_id, store_name

FROM salesdetail sd, stores s

WHERE sd.stor_id = s.stor_id and qty > 35


74. What is Character String in Query result?

Adding character string to the SELECT clause

SELECT “The store name is”, stor_name

FROM

Result stor_name

The store name is PowerBuilder


75. What does ORDER BY do?

The ORDER BY clause sorts the query results(in ascending order by default)

  1. Items named in an ORDER BY clause need no appear in the select-list.

  2. When using ORDER BY, Nulls are listed first.


76. What is a Cartesian Product?

Cartesian Product is a set of all possible rows resulting from a join of more than one table. If you do not specify how to join rows from different tables, the system will assume you want to join every row in each table. Cartesian Product is concatenation of every row in one table with every row in another table. This way if first table has n rows and second has m rows, so the product table will have n*m rows.


77. 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: SELECT customer_name, order_No

FROM customers, orders

If customer had 100 rows and orders had 500 rows, the Cartesian product would be every possible combination – 5000 rows. The correct way to get each customer and order listed (a set of 500 rows) is: SELECT customer_name, order_No

FROM customers, orders

WHERE customer.cust_No = orders.cust_No


78. What are the SQL differences?

Differences in object naming, facilities available on a server, implementation, syntax, data definition language, commenting, and system table technique differences. When we are trying to build an application using data from multiple sources, we should be aware of it.


79. If you ensure referential integrity in Sybase DataBase with both foreign keys and triggers, which one will be fired (checked) first?

Foreign key.


80. How can you convert data from one data type 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 DataTime column into 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”)

81. What is a Union?

The Union operator is used to combine the result sets of two or more Select statements. The source of data could be different, but each Select statement in the Union must return the same number of columns having the same data type. If we use Union, all it will return all rows including duplicates. UNION operator combines the results of two or more queries into a single result set consisting of all the rows belonging to A or B or both. Union sorts and eliminates duplicated rows.


82. From Employee table how to choose employees with the same Last Name, First Name can be different?

Use SelfJoin. (look at the table as at two different)

SELECT a.first_name, b.last_name

FROM a.student,b.student

WHERE a.student.student_id = b.student.student_id


83. How can you handle Nulls values in DataBase?

We have to make sure that columns that are part of the primary key( or just an important column) are not nulls in table definition.

If IsNull (column)

if not IsNull(column)


84. How can you generate unique numbers in DataBase?

DataBase has special system column that keeps all used unique numbers. Special system function reads last used number and return next to use.

85. What’s the minimal data item that can be locked in a DataBase?

Data page.


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

There are 4 types of Dynamic SQL in PowerBuilder:

Format 1 Non-result set statements with no input parameters

Format 2 Non-result set statement with input parameters

Format 3 Result set statements in which the input parameters and result-set columns are known at compile time

Format 4 Result set statements in which the input parameters, the result-set columns, or both, are unknown at compile time


87. When and why do we need Dynamic SQL?

To perform some execution of the SQL statements at runtime.


88. We have table T and columns C1 and C2. Prepare Select statement which would have all possible combinations of values from C1 and C2.

SelfJoin


91. Find employees who work in the same state with their managers? (2 tables, 1 – for employee, the other for managers’ info. 1st may have only manager but they can work in different states, 1 manager has many employees in different states)

Use outer join

COMMON TECHNICAL QUESTIONS


1. Deleting a row that is a foreign key in another table violates what kind of DB rule? Referential integrity


2. Why would you code a commit?

To complete a unit of work


3. What is a Database transaction?

Logical unit of work


4. What is the language for creating and manipulating Database?

  • DML

  • DDL

  • DLL


5. User defined function for a window can only be called if the window is active?


6. In the script painter for an inherited window, you can either Extended or ———— the ancestor script?


7. What is the method to validate a numeric column in a DW?


8. When a ORDER_NUM is selected by user, how do you highlight the details of the specific ORDER?



9. What does the “pass by value” in the function definition mean?


  1. The database-specific error codes for connect/update/retrieve are stored in what attribute of the transaction object?


11. Why would you use THIS or ParentWindow? (pick all correct answers)

-polymorphism

-inheritance

-instance

12. Which are valid for a menu?

-ParentWindow.Title = “Title”

-Close(ParentWindow)

-ParentWindow.st_title = “title”


  1. What do a Pop-up and Response windows have in common?

-they both open on top


14. What type of a window is modal?

-response


15. What is a class?

-definition of an object

-instance of an object

Data Pipeline

  1. What is the Data Pipeline?

The Data Pipeline lets us copy tables and their data from one Database to another even if the Databases are on different DBMS. We can also use the Data Pipeline to copy data within the same database (several tables into a single table).


  1. What is the data sources for a data pipeline?


Quick Select

SQL Select

Query

Stored Procedure


3. What can you do with the Data Pipeline ?

We can use the Data Pipeline to:

Create (add) a table in the destination (target) database

Replace (drop/add) an existing table in the destination database

Refresh (delete/insert) rows in the destination database

Insert rows in the destination database

Update rows in the destination database


4. What happens if an error occurs when piping data ?

When errors occurs in a Data Pipeline, an Error Message window appears. It shows:

the name of the table in the destination database where the error occurred

the option that was selected in the Data Pipeline dialog box

each error message

the values in the row in which each error occurred.


5. How do you create a Pipeline as a part of an application?

Including data pipeline in an application involves Window Painter, Data Pipeline Painter, User Object Painter and scripts. A number of objects are involved in setting up a pipeline in an application:

  • two transaction objects

  • pipeline object

  • standard class pipeline user object

  • DataWindow control (to display row errors).


6. In what event can you access the current number of row errors ?

In PipeMeter event using RowsInError attribute.

A pipeline has the following events:

  • PipeStart, when a Pipeline or Pipe Repair operation starts

  • PipeMeter, when a block of rows has been read or written

  • PipeEnd, when a Pipeline or Pipe Repair operation ends

Attributes:

  • RowsRead

  • RowsWritten

  • RowsInError

1. What is a DataStore?

A DataStore is a nonvisual DataWindow control.

A DataStore acts just like a DataWindow control except that many of the visual properties associated with DataWindow controls do not apply to a DataStore. However, because you can print a DataStore, PowerBuilder provides some events and functions for a DataStore that pertain to the visual presentation of the data.


2. When do you use a DataStore?

If I have some data which need to be displayed in more than one window of my application, I would use a DataStore instead of the Retrieve( ) function.


DATABASE PAINTER


1. What is the Relational DataBase model?

Data in a relational DB is stored in tables; tables are composed of rows and columns; each row describes 1 occurrence of entity; each column describes 1 characteristic of an entity.


2. What is the DataBase?

DataBase is a body of data in which there are relationships among the data elements.


3. What is DataBase Management System?

DBMS is Software that facilitates the function of DataBase structures and the storage and retrieval of data from those structures.


4. What are extended table and column attributes? Why are they useful?

Extended table and column attributes are defaults that provide a standard appearance to the data and headings in DW objects. We don’t have to specify the characteristics every time we create a DW object from columns in the table. Extended column attributes create and maintain the display and validation formats, edit masks, and initial values for columns as they appear in PB applications. They are stored in the DB in system tables that are created by PB. Once we define them, we can apply them to as many columns as we need. Extended table definition are data in a table, column headings, labels for columns.

Extended column attributes are :

1. Format -select the default display format for the data in the column

  1. Edit – selects the default edit mask for the data in the column

Validation Select the default validation rule for the data in the column

Header – enters the heading to be used for the column in all reports/data window

comment – enters comments to further the columns content. Any comments entered for the column automatically generates a tag value for that column

Justify selects the justification for the column(left, right, centred)

Height – enters a default height for the column

Width – enters a default width for the column

Initial – enters an initial value for this column to be set to for new records

10. label enters the label to be used for the column in all reports/data windows

The extended table and column attributes are defaults that are useful in application development because:

1. They provide a standard appearance to the data and heading in DataWindow object.

2. Relieve the burden of specifying the characteristics every time you create a DW object from columns in the table


5. What is a Table?

A Table is Relational Model. In a relational DataBase, all data is in tables. A table holds data relating to particular class of objects (an entity).


6. What are validation rules? Why are they useful?

Validation rules are expressions that PowerBuilder uses to validate user-entered data. Validation rules are automatically checked by the DataWindow object when data are entered in the column. DBMS has no knowledge of it.


7.What is the difference between an edit style and a display format?

Do these attributes depend on the Database being used?

FORMAT is used to display data in the column.

EDIT is used to enter data in the column

No. They do not depend on Database being used.


8. For what purpose can you use the Data Manipulation tool?

The Data Manipulation tool within the database painter provides an easy to use interface to allow you to add, update and delete data from tables on the database.


9. For what purpose can you use the Database Administration tool?

The Database Administration tool within the DB painter provides a workspace for you to control access to the DB and the DB tables, paint or enter SQL statements or execute any SQL statement that you have created.


10. What is the purpose of a transaction object?


11. While in Database Painter, you can alter the extended attributes for the table.


12. When do you need to perform Synchronise PowerBuilder attributes (menu Options (Design) in the DataBase Painter)?

If you drop a table or column outside of PB, orphaned info remains in the PB tables that contains extended table/column definition info (PBCATTBL, PBCATCOL, PBCATFMT, PBCATVLD, PBCATEDT). So you use this option to delete this orphaned info.


59. What types of Database constrains do you know?

user-defined data type;

default;

rule;

primary – foreign key.


2. What are validation rules? What are they useful for?

Validation rules are expressions that PowerBuilder uses to validate user-entered data. Validation rules are automatically checked by the DataWindow object when data are entered in the column. DBMS has no knowledge of it.


3. What is the difference between an edit style and a display format?

Edit style is format of a column during user input.

Display format is format of the data when it is displayed.


4. What is the Data Manipulation tool?

For what purposes can you use the Data Manipulation tool?

Data Manipulation tools allow us to display data, add or delete rows and change existing values. They provide an easy-to-use interface to allow us to add, update, and delete data from tables in the Database and perform various Database administration functions.


5. What is the Database Administration tool?

For what purposes can you use the Database Administration tool?

The Database Administration tool allows you to code and execute SQL commands that you have created.


6. Could you describe what a database consists of?

A Database consists of Tables, Indexes, Datatypes, Defaults, Rules, Triggers and Stored Procedures.

A Table is a data repository structured as a grid with columns and rows. The columns are the data items (or fields). The rows are iterations of that data in the form of records. (Also, a collection of records referred to as rows that associates fields that are referred to as columns.)

Indexes are a set of pointers that are logically ordered by the value of a key and are used to provide quick access to the data.

Datatypes specify what type of information each column will hold and how the data will be stored.

Defaults default data to be entered in a column if none is provided by the user.

Rules are a specification that controls what data can be entered in a particular column.

Triggers are special kinds of SPs that go into effect when you insert, delete or update data in a specific table. Triggers are used to maintain the referential integrity of your data by enforcing the consistency among logically related data in different tables.

Stored Procedures is a collection of SQL statements and control-of-flow language.

7. How do you create a database?

We have to use Create Database statement and define Database name, devices (rules) for our Database and size in Mbytes.


8. How do you obtain information about a specific Database?

Using System Stored procedure SP_Helpdb


9. How can we modify the existing tables?

We can add one or more columns (always allow NULL) but we cannot remove columns from the table. The table must be dropped and recreated.


10. What Microsoft server tools do you use when working with Databases?

SQL Administrator—to connect to the Database to manage devices, log in databases.

Object Manager—to manage tables, indexes, triggers, stored procedures and rules.

Microsoft ISQL—to write and run SQL statements.


11. What do you use triggers for?

Triggers are used for referential integrity processing to maintain relationship between primary and foreign keys.


12. How do you maintain referential integrity between primary and foreign keys?

If we delete rows from the table with primary keys, we have to do something with tables where these PRIMARY KEYS ARE FOREIGN KEYS. We can delete rows with a foreign key or set them to NULL or give a message to the user and let them decide. If we change or create Foreign keys, we have to validate them against their associated Primary key.

13. Do we have to execute the Trigger?

No, if the triggers are defined for a specific table for a specific process (insert, delete, update) and if we have a trigger for, say, the delete process for a specific table DELETE trigger will be executed automatically.


14. If there is a problem with the DATABASE during data retrieval, which DW event will be triggered? Where will the error code be stored?

DB Error Event

DB Error Code


Connecting to a Database

15. What is a transaction?

A transaction is a sequence of one or more SQL statements that together form a logical unit of work. A transaction is a sequence of operations or events in the DB. The beginning of a Transaction is the first SQL statement in the logical unit of work; the end of the Transaction is marked by a Commit or Rollback or their equivalents. The SQL statements we use to make and break Database connections and manage database transactions are:

Connect—establishes the connection to the database

Commit—applies all changes made to the Database since the last point of Database integrity Commit executes all changes to the database since the start of transaction (or since the last Commit or Rollback) become permanent.

Rollback—rolls out all changes made to the DB since the last point of DB integrity

Disconnect—breaks the connection to the Database.

Rollback executes all changes since the start of the current transaction are undone.


16. What transactions do you know?

Commit, Rollback, Connect, Disconnect


17. Why is the concept of transaction important?

We need to manage Database connections and transactions through the use of embedded SQL statements Connect, Commit, Rollback, and Disconnect, especially for transactions involving updates to the Database.


18. What is a PB Transaction object?

PB transaction object is a communication area between PC and the database. For each database that we use in our project there has to be a separate transaction object.

The Transaction object specifies the parameters that PB uses to connect to a DB.)


19. What is a Transaction Object?

A Transaction object is a global nonvisual PowerBuider object used to store connection information for a particular server and provide error checking. It is a structure used to specify DB info and provide error checking. (Info in the object is used for the initial connection, and the messages from the server are returned to the application through the object. This object is fundamental to maintaining connections to multiple data sources.


20. What do you have to do to connect to the database in your project?

We have to assign values to the attributes of our transaction object such as DBMS, Server name. . . We usually keep these values in the application .INI file, and in the Open event for our Application object we use ProfileString() function to get these values and assign them to the attributes of the transaction object.

21. What is a logical unit of work?

It is a transaction.


22. What statement inside PB deals with a transaction?

Connect starts the transaction (establishes connection to DB)

Disconnect terminates a transaction.

Commit executes all changes to the DB since the start of transaction (or since the last Commit or Rollback) become permanent.

Rollback cancels all database operations in the specified database since the last COMMIT, ROLLBACK, or CONNECT


23. What is SQLCA?

It is a default transaction object that PB provides for us to communicate with one Database. We don’t have to create this transaction object and destroy it.

24. What is SQLCode?

SQLCode is an attribute of the transaction object that we check after any SQL statement to find out if the transaction was successful or failed.


25. To use multiple databases in your application, what do you do?

We use the default Transaction object for one and for the others we have to create the

Transaction object with CREATE transaction statement and at the end DISCONNECT to destroy this transaction with DESTROY statement.

26. How do we handle errors in the script?

We test the success or failure of any SQL statement, checking SQLCode attribute. If it fails (-1), we give the message using MessageBox() and display SQLErrorText attribute.


27. What is the purpose of a transaction object ?

The purpose of a transaction object is to identify a specific Database connection within a PowerBuilder application.


28. How can you do Transaction Management in PowerBuilder?

We can do it using the AutoCommit attribute of the Transaction object. If the value of AutoCommit is TRUE, PowerBuilder just passes our SQL statements directly to server and each statement is then automatically committed to the Database as soon as it is executed. If we set the value of AutoCommit to FALSE (default value), PowerBuilder requires that we use the Commit and RollBack key words to commit and rollback our transaction when we are finished with it. In this case PowerBuilder begins the new transaction automatically as soon as we Connect, Commit or RollBack, Disconnect.


29. How can you provide Transaction Management in PowerBuilder?

By using statements CONNECT; DISCONNECT; COMMIT; ROLLBACK. We can improve performance by limiting the number of Connects and Disconnects.


30. The attributes of a transaction object can be divided into two groups.

Describe the purpose of those two groups.

Some attributes are used to make the connection to the database. They are:

  • DBMS

  • Database

  • UserID

  • DBPass

  • Lock

  • LogID

  • LogPass

  • ServerName

  • AutoCommit

  • DBParm

Some attributes return status info to the application, returned by DBMS. They are :

SQLDBCode

SQLErrText

  • SQLReturnData

  • SQLCode

  • SQLNRows


31. Under what circumstances is it necessary to define and instantiate a

transaction object in addition to SQLCA?

If our application needs to access more than one Database, we will need to define and

instantiate (create) additional transaction objects.


32. List the steps required to establish a connection between a PowerBuilder

application and a Database.

The sequence of coding tasks to connect to a Database is

  • Define (declare) and instantiate (create) a Transaction object;

  • Assign values to the attributes of the Transaction object

  • Do CONNECT;

  • Check the success or failure of the Database connection.


33. What must you code at the end of every embedded SQL statement?

All embedded SQL statements must end with a semicolon (;).


34. What is embedded SQL ?

Embedded SQL refers to the use of SQL statements in our PowerScript code. All embedded SQL statements begin with an SQL verb and end with a semicolon (;).

When we need a reference to PowerBuilder variables in embedded SQL statements, we put a colon (🙂 before the PB variable.


35. What syntax do we use to connect with our own transaction object?

If we are using a Transaction object we have defined, we must use the full statement:

CONNECT using trans_name;


36. How can you define an additional Transaction object? When might you need it?

To create an additional transaction object, we first declare a variable of type transaction, then we create the object and then define the attributes that will be used. Declare a variable of a transaction object type and then specify parameters to connect to the database.

Define (declare) — Transaction To_Sybase

Instantiate a Transaction object; To_Sybase = Create transaction

Assign values to the attributes of the Transaction object

To_Sybase.DBMS = “Sybase”

To_Sybase.DataBase = “Personnel”

To_Sybase.LogId = “DD25”

Do CONNECT;

connect using To_Sybase;

Check the success or failure of the Database connection.

If SQLCA.SQLCode <>0 then

MessageBox (“Warning”, “SQLErrCode”)

We create an additional Transaction object if we need to access data in our application from more than one DataBase. You can create an instance of the standard Transaction object. You have to populate it and destroy after using. You might need it when you want to connect to several DB at the same time.


37. Name some attributes of a transaction object.

DATABASE (String)—The name of the database with which you are connecting.

DBMS (String)—PowerBuilder vendor identifier.

DBParm (String)—DBMS-specific parameters.

DBPass (String)—The password that will be used to connect to the database.

Lock (String)—The isolation level.

LogID (String)—The name or ID of the user who will log on to the server.

UserID (String)—The name or ID of the user who will connect to the database.

LogPass (String)—The password that will be used to log on to the server.

Server Name (String)—The name of the server on which the database resides.

SQLCode (Long)—The success or failure code of the most recent operation.

Return codes: 0—Success; 100—Not Found; -1—Error (use SQLDBCode or SQLErrText to obtain the details)

SQLDBCode (Long)—The database vendor’s error code.

SQLErrText (String)—The database vendor’s error message.

SQLNRows (Long)—The number of rows affected (the DB vendor supplies this number, so the meaning may not be the same in every DBMS).

SQLReturnData (String)—DBMS-specific information.

AutoCommit (Boolean)—The automatic commit indicator (SQL Server only).

Values are: True — Commit automatically after every database activity

False — Do not commit automatically after every database activity.


38. The end user cannot connect to the Database w/o a PB.INI?

true


  1. In Client/Server the Database engine must be on a dedicated server

false


DATAWINDOW OBJECT


1. Describe the two major aspects or components of a DataWindow object.

Data Source is a way to populate a DataWindow object with data.

Presentational style provides a default format for the data. The styles include Tabular, Grid, FreeForm, Labels, N-up, Groups, Graphs and Crosstabs. We can use any of the presentation styles with any of the data sources. PowerBuilder also provides extensive facilities such as rearranging data items, sorting them, or adding graphical elements such as lines, circles or boxes.


2. DataWindow objects most often obtain their data from relational Databases.

Name three other sources of their data.

  • User Input

  • .TXT or .DBF files

  • DDE with another Windows application



3. Which Data Source in the DataWindow painter is itself an object?

  • Query


4. What Data Sources do you know and how do you use them?

The Data Source determines how we select the data that will be used in the DW object.

If the data for the DataWindow object is retrieved from a database, we may choose one of the following Data Sources:

Quick Select is a select from one or multiple tables that are joined through foreign keys and may include simple selection criteria which appear on the WHERE clause. We can only choose columns, selection criteria, and sorting. We cannot specify grouping before rows retrieved, include computed columns, or specify retrieval arguments.

SQL Select is an SQL Select statement from one or more tables in a relational database

and may include selection criteria that appear on any of the possible Select statement clauses (can include selection criteria (WHERE clause), sorting criteria (ORDER BY clause), grouping criteria (GROUP BY and HAVING clauses), computed columns, one or more arguments to be supplied during execution.

Query is a predefined SQL Select statement, which must be previously constructed and saved as a Query object.

Stored Procedure indicates that the DataWindow will execute a Stored Procedure and display the data in the first result set. This Data Source only appears if the DBMS to which PowerBuilder is connected and which supports Stored Procedures. We can specify that the data for a DataWindow object is retrieved through a stored procedure if our DBMS supports Stored Procedures.

External is used when the data is not in the database and the DataWindow object will be populated from a script or data will be imported from a DDE application. If the data is not in the DB, we select External as the Data Source. This includes the following situations:

  • If the DataWindow object is populated from a script

  • If data is imported from a DDE application

  • If data is imported from an external file, such as a tab-separated text file (.TXT file) or a dBASE file (.DBF file).

External indicates that we have coded a script that supplies the DataWindow object with

its data. We use this Data Source when the data is in a .TXT or .DBF file or obtained through DDE. We may also use it when we plan to obtain the data by embedding our own SQL Select statement in a script. With this Data Source the DataWindow object does not issue its own SQL statement. We specify the data columns and their types so that PB can build an appropriate DataWindow object to hold the data. These columns make up the result set. In a script, we will need to tell PowerBuilder how to get data into the DataWindow in our application. Typically, we will import data during execution using a PowerScript Import function (such as ImportFile() and ImportString() or do some data manipulation and use the SetItem( ) function to populate the DataWindow.


5. Under what circumstances will PowerBuilder automatically join tables that

you select in the Select painter?

If we select tables that have one or more columns with identical names, the Select painter

automatically displays the join, assuming equality between the two columns.


6. What Presentation Styles do you know and when do you use them?

The Tabular presentation style presents data with the data columns going across the page and headers above each column. As many rows from the database will display at one time as can fit in the DataWindow object. We can reorganize the Tabular presentation style any way we want by moving columns and text. Tabular style is often used when we want to group data.

The Freeform style presents data with the data columns going down the page and labels next to each column. We can reorganize the default layout any way we want by moving columns and text. Freeform style is often used for data entry form.

The Grid style presents data in a row-and-column format with grid lines separating rows and columns. Everything we place in a grid DataWindow object must fit in one cell in the grid. We cannot move columns and headings around as we can in the Tabular and Freeform styles. But, unlike the others styles, users can reorder and resize columns with the mouse in a grid DataWindow object during execution.

The Label style presents data as labels. We choose this style to create mailing labels or other kinds of labels. If we choose the Label style, we are asked to specify the attributes for the label in the Specify Label Specification.

The N-Up style presents two or more rows of data next to each other. It is similar to the Label style. We can have information from several rows in the database across the page, but the information is not printed on labels. The N-Up presentational style is useful if we have periodic data; we can set it up so each period repeats in a row.

We are asked how many rows to display across the page. For each column PowerBuilder defines n columns in the DataWindow (column_1 to column_n), where n is the number we specified in the preceding dialog box.

The Group presentation style provides an easy way to create grouped DW objects, where rows are divided into groups, each of which can have statistics calculated for it. It generates a tabular DW that has one group level and some other grouping properties defined. We can customise the DataWindow in the DataWindow painter workspace.

The Composite presentation style allows us to combine multiple DWs in the same object. It is handy if we want to print more than one DataWindow on a page.

The Graph presentation style creates a DataWindow object that is only a graph – the underlying data is not displayed. As the data changes, the graph is automatically updated to reflect the new values. We use a graph to enhance the display of information in the DataWindow object such as a tabular or freeform DataWindow.

Crosstab processes all the data and presents the summary information that we have defined for it. We use if we want to analyse data. Crosstab analyses data in a spreadsheet. Instead of seeing a long series of rows and columns, users can look at a Crosstab that summarises the data.

OLE 2.0 presentation style using a process called uniform data transfer; info from PB supported data sources can be sent to an OLE 2.0 server application. The OLE 2-compliant application uses the PB supplied data to formulate a graph, map, a spreadsheet or the like to be displayed in the DW.

RichText presentation style using a RichText DW, you can create letters of other documents by merging info in your DB into a formatted DW. Master word processing oriented features such as headers, footers and multiple fonts are available in an easy-to-use format.


7. Describe the difference between the grid and tabular presentation styles.

In the Grid presentation style, we cannot move columns and headings around as we can in the Tabular presentation style but in Grid presentation style users can reorder and resize columns with the mouse during execution.


8. Describe the difference between the labels and N-up presentation styles.

In N-up style, we can also have information from several rows in the database across the page, but the information is not printed on labels.


9. How often must you set the Transaction object ?

Just once when we define the DW control. If we change the association of a DataWindow object with a DataWindow control in a script, we must re-issue the SetTransObject () before the next retrieval or update.


10. What function changes the current row?

ScrollToRow( )


11. If you need to highlight a row and bring it into view, which function would you

issue first: SelectRow() or ScrollToRow()? Why ?

1. SelectRow( )

2. ScrollToRow( )

Because the row may already be displayed.


12. Name the three DataWindow buffers.

There are officially 3 buffers:

Primary–contains all data that have been modified but has not been deleted or filtered out.

Filter – data that was filtered out.

Delete – contains all deleted data from the DataWindow object.

Therefore we know 4th Original that keeps original data from Database.


13. When do the four levels of validation for DataWindow occur?

As a user tabs from one item to the next, PowerBuilder performs four levels of validation

  • when user modifies column

  • when user tabs or clicks elsewhere in the DataWindow

  • when item loses focus


14.Which two events may be involved in the four levels of validation ?

An ItemChanged Event occurs when an item in a DataWindow has been modified and loses focus.

An ItemError Event occurs when a user has entered or modified data in an item in a DataWindow control and one of the following occurs:

– the data type of the input does not match the data type of the column (#2)

– the input does not meet the validation criteria defined for the column (#3)

– the input does not satisfy the processing in the script for the ItemChanged event (#4)


15. How would you define validation rules for the Datawindow object?

We can define validation rules in the DataWindow painter. We can use the SetValidate( ) function in a script to set validation rules dynamically (at run time) in a script for DW.


16. What is the difference between a DataWindow control and object?

Datawindow control is a container for a DW object and is placed on the window.

DW control has attribute and functions.

Datawindow object is a PB object which has connection to database and GUI.

DW object has attributes. Datawindow object represents the data source. It encapsulates your database access into a high level object that handles the retrieval and manipulation of data use for displaying data and capturing user input. Datawindow object consist of :

data intelligence (perform test validation rules)

user interface (presentation style)

It is used to display data or capture user input. DW is an object that we use to retrieve, present and manipulate data from a relational DB or other data source in an intelligent way. (The DW control is the container for the DW object. The DW object is created using the DW painter; a DW control is placed on the window. A DW object has attributes. A DW control has attributes and functions. A DW object represents the data source. It encapsulates your database access into a high level object that handles the retrieval and manipulation of data. It is used for displaying data and capturing the user input. A DW object consists of data intelligence (performs test validation rules) and user interface (presentation style)


17. What are the strongest points of using the DataWindow control?

  1. Displaying data.

  2. Entering data.

  3. Scrolling.

  4. Reporting.

(true or false) The events for all PowerBuilder objects have action codes that can

be used to change PowerBuilder default processing for that event.

False! Action codes are a feature unique to the events for DW controls. Different events have a different number of action codes and different meanings for the same numbers.

ItemChanged event 0 — (Default) Accept the data

1 — Reject the data value

2 — Reject the data value but allow the focus to change

ItemError event 0 — (Default) Reject the data value and show a system error message

1 — Reject the data value but do not show a system error message

2 — Accept the data value

3 — Reject the data value but allow the focus to change


19. (true or false) PowerBuilder sends a request to the DBMS to perform an insert or delete operation following the call to the InsertRow( ) or DeleteRow( ) function

False! Only when a script issues the DataWindow function Update( ) and Retrieve() for the DataWindow control are the changes sent to the DBMS in order to update the DB.


20. What is the difference between SQLCA.SQLCode and the value returned by

the DBErrorCode() function?

The DBErrorCode() function (not SQLCA.SQLCode) checks the results of Database access performed by a DataWindow. We check SQLCA.SQLCode after explicitly issuing embedded SQL statements, such as Commit.


21. Which feature of the DataWindow painter greatly simplifies the creation of a report having only one group?

The easiest way to create a report that has a single group is to select the Group presentation style from the New DataWindow dialog box.


22. What can you do with a Query?

We can use queries as a Data Source for DataWindow objects. Queries provide reusable objects or segments of code.

  • They enhance developer productivity since they can be coded once and reused as often as necessary.

  • They provide flexibility in the development of DataWindow objects.


23. When do you need to create a Query?

A query object is an SQL Select statement that we construct using the Query painter when we need to use this Select frequently.


24. Where is a Query stored ?

In a .PBL file.


25. How do you create a DataWindow object dynamically?

We use SyntaxFromSQL() and Create() functions:

SQLCA.SyntaxFromSQL (select string, presentation string, Error string)

dw_1.Create(syntax, Error string)

dw_1.SetTransObject(SQLCA)

dw_1.Rerieve( )

To create a DataWindow dynamically we have to:

1. build a string to hold a SQL Select statement;

2. build a string to specify the presentation characteristics of the DataWindow object;

3. associate the syntax and description with an existing DataWindow control;

4. associate the DataWindow control with a transaction object, and perform a retrieval.

The DataWindow that is created exists only for the life of the DataWindow control, unless we use the LibraryImport( ) function to save it in a library. Dynamic DW objects allow us to create and modify DW objects on the fly. To create a DW dynamically, use the Create( ) function. Creating takes two arguments: the name of the DataWindow object that will be replaced by the new DW object, and the syntax for creating the new DW object. We can create the DW object syntax in a script, but it is easier to use the SyntaxFromSQL() to generate the syntax from a SELECT statement.


27. What is the purpose of the presentation string?

The presentation string holds information about the appearance of the DataWindow.


28. What kind of information can be specified in the presentation string?

We can specify six DataWindow properties in the presentation string:

DataWindow object, Presentation Style, Column, Text, Group, Title.

ls_present_str = “ ” takes the defaults from the Powersoft repository tables. These defaults cover fonts, colors, validation rules, etc.


29. Why must you specify the transaction object for a DataWindow control

after creating the DataWindow object?

The Create() function must be followed by SetTransObject() function because Create( ) destroys any previous association between the DataWindow and a transaction object. Then, we can issue a Retrieve().


30. Can you dynamically assign a DataWindow object?

Yes, using DataWindow’s control attribute “DataObject”.

DataWindow control has the attribute DataObject. If we want to change an associated DataWindow object at runtime we need to put a line in the script that changes the value of the DataObject attribute.

For example:

dw_1.DataObject = “d_name”


31. Let’s say, you share two DW buffers and the primary DW has some DDDW columns. Will this DDDW be shared automatically as well?

NO. After we have shared 2 DataWindows, we have to share all DropDowns as well. First, we have to get the reference for the Child DataWindow using GetChild( ) function and then do sharing by using ShareData() function.

DataWindowChild dwc_1, dwc_2

dw_1.getchild(“employee”, dwc_1)

dwc_1.SetTransObject(sqlca)

dwc_1.Retrieve( )

dw_2.getchild(“employee”,dwc_2)

dwc_1.ShareData(dwc_2)


32. How can you update multiple DataBase tables from one DataWindow?

Using Modify() function. When a DataWindow is based on a join of multiple tables, we can update all of those tables by modifying attributes DataWindow.Table, UpdateTable and column attributes Update and Key using Modify() function. For example, if the data initially came from DEPARTMENT and EMPLOYEE tables, and DEPARTMENT table was specified as an Update Table when we painted the DataWindow, we need to:

Refer Modify Method (Datawindow) Help

1. Update the DEPARTMENT table using the Update() function:

iRet = dw_1.Update (TRUE (AcceptText(), FALSE (ResetBuffer))

2.Modify the Update characteristics of the DataWindow to point to the Employee table:

IF iRet = 1 THEN

dw_1.Modify(“Dep_id.Update = NO”)

dw_1.Modify(“Dep_name.Update = NO”)

dw_1.Modify(“Dep_id.Key = NO”)

dw_1.Modify(“DataWindow.Table.Updatetable = ‘employee’“)

dw_1.Modify(“Dep_id.Update = YES”)

dw_1.Modify(“Dep_name.Update = YES”)

dw_1.Modify(“Dep_id.Key = YES”)

dw_1.Update( )

END IF

Update Embedded SQL

33. What is the method to validate a numeric column in a DataWindow?

SetValidate( )

34. In what attribute of the Transaction object are the database-specific error codes for Connect/Update/Retrieve stored?

SQLDBCode


35. How can you change a Select statement of the DataWindow at runtime?

We can change the select statement by using functions SetSQLSelect( ) or by changing the data attributes Table.Select by calling function Modify().

Modify() is preferable because it works faster.

dw_1.Modify(“datawindow.Table.Select = ‘Select * from customer’”)


Limitations to using SetSQLSelect

Use SetSQLSelect only if the data source for the DataWindow object is a SQL SELECT statement without retrieval arguments and you want PowerBuilder to modify the update information for the DataWindow object:


dw_1.Modify(“DataWindow.Table.Select=’select…'”)


Modify will not verify the SELECT statement or change the update information, making it faster but more susceptible to user error. Although you can use Modify when arguments are involved, it is not recommended because of the lack of checking.


36. What is an Update flag?

We use them when we need to update multiple DataBase tables from one DataWindow.


37. What is the difference between nested and composite reports?

In a nested report each report has its own data source.

Composite report does not have its own data source-it is just a container for other reports.


38. You have 5 DWs with DDDWs in each of them. How can you open all DDDWs at the same time? Using an array.


39. After the data has been retrieved, how can you find out the status of rows ?

By using GetUpdateStatus( ) (became obsolete and replaced by row in DBError event)

Status could be a) NewModified — Row only

b) Modified — Column

c) New – Row only

  1. NotModifed Row and Column


40. Modification status – how many of them do you know and which one refers to rows only or to column only?


New and NewModified—Row only

NotModified—Row and Column

Modified—Column


41. What functions do you use to change the row status?

dw_1.SetUpdateStatus( ) …dw_1.SetItemStatus()

dw_1.GetUpdateStatus( ) dw_1.GetItemStatus()


42. How do you stop the user from editing data that is displayed in a field of a DataWindow?

Change the tab value of the field to zero in the DataWindow painter.


43. The Where clause in a SQL statement has the effect of pairing down the number of rows returned to the client from the server. How can the number of rows be reduced on the client within PowerBuilder? Use a Filter.


44. In order to sort the contents of a DataWindow, two commands must be used.

What are they and what does each do?

SetSort() and Sort().

SetSort() defines the sort criteria (primary, secondary sort files – ascending or descending order, etc.).

Sort() performs the actual sort.


45. What is the difference between computed columns and computed fields in a DataWindow object?

Computed columns are created as a result of a SQL query on the server side.

Computed fields–as a result of internal processing by DataWindow on the client side.


46. When you implement incremental search, there is no Current row, so how do you highlight the row you are looking for?

SelectRow( )

ll_row = Find( )

if ll_row > 0 then SelectRow (ll_row)


47. Explain how you understand the process of deleting data from DataWindows and Databases?

DataWindow delete puts its records into the deleted buffer of the Datawindow.

DataBase delete deletes records from a table of our database completely.


48. What are Extended column attributes? How can you change them dynamically?

It’s DataWindow object property (Expressions) which we can change dynamically using Modify() function.


49. What is a code table?

Specifies whether PowerBuilder uses the code table for the column to validate data. Values are Boolean: True—Uses code table to validate data; False—Does not use code table to validate data. The appearance of the text is specified by the edit mask. Each row in the Code Table is a pair of corresponding values: a display value that user sees and data values—those that are saved in the database.

Code Tables are used with DropDownListBox and RadioButtons.

50. How can you modify a code table during execution?

Using GETVALUE() and SETVALUE() functions.


Reports


51. In a nested report, how can the two reports be related to each other?

They are usually related by arguments or by criteria.


52. How can you pass arguments to a report nested inside a composite report?

To pass arguments to component report in a composite report, we define matching

arguments for the composite report and relate these to the arguments of the components report.


53. If you wanted to specifically reference a report nested inside a composite

report, for example, to retrieve or share data, how would you do it?

We can use retrieval arguments with a composite report to control the rows retrieved for each report:

1. Define one or more retrieval arguments for the component reports.

2. Right-click the composite report, choose Retrieval Arguments from the properties sheet and add to the composite report every argument that is needed for the component reports.

3. Right-click each component report with arguments to display the properties dialog box.

In the Arguments tab, relate each argument in the component report to an argument in the composite report. We can use DataWindow property expressions to refer to the properties of objects in a nested report.


54. What is the difference between Print() and PrintDataWindow() functions?

Print() sends the contents of a DW control or DataStore object to the printer as a print job.

PrintDataWindow (PrintJobNumber, dwcontrol) prints the contents of a DataWindow control as a print job.

PrintJobNumber—The number the PrintOpen function assigned to the print job

dwcontrol—The name of the DataWindow control or child DataWindow containing the DW object you want to print

Return value: Integer. Returns 1 if it succeeds and -1 if an error occurs. If any argument’s value is NULL, PrintDataWindow returns NULL.


55. What is a ChildDataWindow, a DropDownDataWindow? Difference?

DropDownDataWindow is an edit style for DataWindow column. It is like a DDLB which has connection to the database.

ChildDataWindow is a regular, physical, real DataWindow for an edit style DDDW. (It is a DDDW in a DW object). A combination box that combines the features of a DW object and an SLE. The DataWindow portion of the DDDW behaves like an LB but is populated from a DW object. A Child DW object is a DDDW in a DW object. A DDDW behaves as a child window of the DW object that contains them. To use a Child DW, use dwGetChild() function to obtain the child (data type DataWindowChild), assign it a transaction object, and then populate it. For example:

DataWindowChild dwc

dw_emp.GetChild(“emp_id”, dwc) // dwgetchild( ) becomes obsolete in pb 5

dwc.SetTransObject(SQLCA)

dwc.Retrieve(“argument”)


56. How do you get the name of a DropDownDataWindow? GetChild( )

57. How do you trap errors from the DataBase in the DataWindow?

Write some code in the DBError Event

For example:

if SQLCA.SQLCode <> 0 then

MessageBox( )

return 1

end if


58. What two types of computed columns are allowed in a DataWindow?

One from the database side

One from the client side


59. What is IF( ) function? (Hint: used in the DataWindow)

IF( ) function evaluates a condition and returns a value based on that condition.

60. How could you link two DataWindows having Master/Detail relationship?

Let’s say we have 2 DataWindows in an application’s window. One is just a list of employees and another contains more detailed personal info on the selected employee. To link these two DWs, we could place, for example, in the script for the first DataWindow’s DoubleClicked event, functions to retrieve the detailed info for the selected employee. We would call the Retrieve() function for the second DW with a retrieval argument which is selected in the first DataWindow Employee ID.

Data in the Detail DataWindow gets retrieved based on the retrieval argument taken from the selected row of the Master DataWindow by using function GetItemX( )

Int li_emp_num

li_row_num = dw_emp_list.GetClickedRow()

if li_row_num > 0 then

dw_emp_detail.Retrive(dw_emp_list.GetItemNumber(li_row_num, “emp_id”))

To link two DataWindows we could place, for example, in Double Clicked event function to retrieve the detailed information for selected employee.

Row = dw_1.GetRow( )

dw_emp.Retrieve(row)

and row is retrieval argument for dw_emp.

To link two DataWindows we have to retrieve data based on a retrieval argument taken from a selected row of the Master DataWindow by using function GetItemX( ), depends on data type.


61. How can you set the DataWindow to a particular row?

If you mean that a row is in the DW buffer and not on the display, I would use the ScrollToRow( ) function. If I need to make some row current, I will use SetRow( ).

long row

dw_name.SetRow(row)

dw_name.ScrollToRow(row)


62. How can you print multiple DataWindows?

We should open the print job by calling the PrintOpen( ) function. After that, we can print DWs by using PrintDataWindow( ) function. After that, we close the print job by calling PrintClose( ). When we use PrintDataWindow( ) with PrintOpen( ) and PrintClose( ), we can print several DataWindows in one print job. The info in each DataWindow control starts printing on a new page. Example:

long job

job = PrintOpen( ) //Each DataWindow starts printing on a new page.

PrintDataWindow(job, dw_EmpHeader)

PrintDataWindow(job, dw_EmpDetail)

PrintDataWindow(job, dw_EmpDptSum)

PrintClose( )


63. How many tables can be updated at the same time in a DW?

One is updated by default. If we want to update multiple tables from DW, we have to write a script for this using MODIFY().


64. Explain how a DW generates SQL select statement for each row after issuing ‘update’ function?



65. When do you use Quick Select for Data source?

If the data is coming from one table and we need only to choose columns selection criteria and sorting, we can choose Quick Select.


66. When do you use SQL Select for data source?

If we want to join tables to use retrieval arguments, or to Group data.


67. When do you choose ‘external’ for the data set and what do you have to define in this case?

If the data is not coming from the DB, for example, DW will be populated from the script (using SetItem() function) or imported from an external file (using Import file() function), we have to define the result set for DW object to type and size column in the result set.

What do you use computed fields for?

We use computed fields if we need some calculation based on column data that change for each retrieved row, some summary statistics system information (as current date and time).

69. What are the rules for update tables in the Datawindow?

If the DW contains columns from one table, PB defines all columns of this table as updatable by default. If the DataWindow contains columns from more than one table, all these tables by default are not updatable. We can modify this in the DW painter and define only one table as updatable. If we want to update multiple tables from DW, we have to write a script for this using MODIFY().

70. How do you control the update in multi-user environment?

If users are accessing the same table at the same time, we need to decide when to allow our application to update the Database. We use the Check-In and Check-Out procedures.

71. How do you assign the transaction object to the DW control?

We use SETTRANS() or SETTRANSOBJECT(). When we use SETTRANS(), the DW control uses its own Transaction object and automatically performs connect, disconnect, commit and rollback. The SetTransObject() tells the DW control to share the transaction object with other DW controls. We have to control the database processing and we are responsible for managing database transactions. Application performance is better when we use SetTransObject().


72. How do you stop the retrieval of the DW immediately? Use DBCancel()

73. If the source for a DW is a stored procedure and this stored procedure has parameters, where do we have to pass these parameters? In the RETRIEVE()


74. What are 3 buffers used by a DataWindow object?

Officially, there are 3 buffers:

Primary – data that have been modified but has not been deleted or filtered out.

Filter – data that was filtered out.

Delete – data deleted from DataWindow object.

4thOriginal– the buffer that keeps the original data from the Database.

76. What is the BLOB data type?

Unbound data type that stands for binary large object. Usually used to hold pictures in database, window’s wave sound file or MIDI music.


77. Can you call batch SQL from your DataWindow? YES.


Debugging and running an application


1. What can you do in Debug mode?

We can insert stops or a single stop through the code and display the contents of variables.


2. How can you look at instance variables in debug mode?

Instance variables are part of an object’s definition so PB lists instance variables as attributes of that object itself at the end of the list.

3. If a serious error occurs during execution, what event will be triggered?

System Error event will be triggered in the application object and we can write a script for this event.

DW Functions


  1. Explain the difference between SetTrans() and SetTransObject()?

SetTransObject( ) works faster because it doesn’t perform Connect and Disconnect each

time we call it. When we specify SetTrans( ) system Does all transaction Automatically. When we specify SetTransObject( ) we have to manage all Transaction by ourselves. When we use SetTrans( ) in a script, the DataWindow uses its internal transaction object and automatically connects and disconnects as needed; any errors that occur cause an automatic rollback. Use SetTrans( ) when we want PowerBuilder to manage the database connections automatically because we have a limited number of available connections or will be used the application from a remote location. SetTrans( ) is appropriate when we are only retrieving data and do not need to hold database locks on records the user is modifying. However, for better performance, we should use SetTransObject( ).


2. When would you use SetTrans( )?

We use SetTrans() when only a limited No. of connections to the DB is allowed or we are only retrieving data and do not need to hold DB locks on records the user is modifying.


3. Explain SetActionCode(). Do DW events support this function?

The SetActionCode() function changes the action that follows a DW event. This function overrides the standard behavior of an event. Not all DW events have action codes, only those that can have different outcomes. In PB5 SetActionCode() became obsolete. We use key word “return” from 0 to 3 depending on the event. Default is (0). Return must be the last line in a script or statement.


4. How do you use ShareData() between two different DataWindows?

If we want to share the data between 2 DW controls we use dw_1.ShareData(dw_2).

Two DataWindows must have the same select but may have a different display.

In PB5 I use it with DataStore. The controls do not share formatting; only the data is shared, including data in the primary, delete, and filter buffers, and the sort order.

To turn off the sharing of data buffers for DataWindow controls we use the function dw_1.ShareDataOff(dw_2) .


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

TriggerEvent ( ) function makes the event occur immediately. This function does not return until the processing for the event is complete.

PostEvent( ) function makes the event occur when the current event is finished executing. In other words, it stands in the queue. The difference between them lies in timing.


6. What is the purpose of Yield( ) function?

We use YIELD( ) to allow the user to interrupt a tight loop in order to receive any messages there may be. We must call Yield( ) and check for an interruption each time we pass through the loop. We must also close the script when we close the window. Yield( ) checks the message queue and if there are message in the queue, it pulls them from the queue. Yields control to other graphic objects including objects that are not PowerBuilder. Include Yield( ) within a loop so that other processes can happen. E.g., use Yield( ) to allow end users to interrupt a loop. By yielding control, we give the user time to click on a cancel button in another window. We can also use Yield( ) in a loop in which we are waiting for something to finish so that other processing can take place, in either our or some other application.


7. What is the purpose of AcceptText( ) function?

The AcceptText( ) function validates the last item in the DataWindow control that a user worked on. Never call AcceptText( ) in the ItemChanged event. If a user enters the data and wants to close the window without pressing the tab or the update command button, we have to be responsible for saving the last modification: dwcontrol.AcceptText( )

When a user moves from item to item in a DW control, the control validates and accepts

data the user has edited. When a user modifies a DW item then immediately changes focus to another control in the window, the DW control does not accept the modified data—the data remains in the edit control. Use the AcceptText function in this situation to ensure that the DW object contains the data the user edited. A typical place to call AcceptText( ) is in a user event that is posted from the DataWindow’s LoseFocus event.

(Applies the contents of the DataWindow’s edit control to the current item in the buffer of a DataWindow control or DataStore. The data in the edit control must pass the validation rule for the column before it can be stored in the item.

Applies to DataWindow controls, DataStore objects, and child DataWindows

Syntax dwcontrol.AcceptText ( )

Argument Description

dwcontrol The name of the DataWindow control, DataStore, or child DataWindow in which you want to accept data entered in the edit control

Return value Integer. Returns 1 if it succeeds and -1 if it fails (for example, the data did not pass validation). If dwcontrol is NULL, AcceptText returns NULL.

Usage: When a user moves from item to item in a DataWindow control, the control validates and accepts data the user has edited. When a user modifies a DataWindow item then immediately changes focus to another control in the window, the DataWindow control does not accept the modified data—the data remains in the edit control. Use the AcceptText function in this situation to ensure that the DataWindow object contains the data the user edited. A typical place to call AcceptText is in a user event that is posted from the DataWindow’s LoseFocus event.

AcceptText in the ItemChanged event

Calling AcceptText in the ItemChanged event has no effect.

Events: AcceptText may trigger an ItemChanged or an ItemError event.)



8. When do you use AcceptText()?

Sometimes if user changed the data and immediately changed the focus the data is not accepted yet. We have to use AcceptText() in the ItemChange event to accept the data.


9. You want to know how fast your code is being executed.

How do you time execution of your code?

use CPU( ) function

Long. Returns the number of milliseconds of CPU time elapsed since the start of your PowerBuilder application.

These statements determine the amount of CPU time that elapsed while a group of statements executed:

Long ll_start, ll_used // Declare start and used as long integers.

ll_start = CPU( ) // Set the start equal to the current CPU usage.

… // Executable statements being timed

// Set used to the number of CPU seconds

// that were used (current CPU time – start).

ll_used = CPU( ) – ll_start


10. What is the purpose of Describe( ), Modify( )?

Modify( ) and Describe( ) functions are DW object level functions. Describe( ) reads the attributes of a DW object at runtime. Modify( ) changes the attributes at runtime.

Typical uses for Modify () are:

· Changing colors, text settings, and other appearance settings of objects

· Changing the update status of different tables in the DW so that you can update more than one table

· Modifying the WHERE clause of the DataWindow object’s SQL SELECT statement

· Turning on Query mode or Prompt For Criteria so users can specify the data they want

· Changing the status of Retrieve Only As Needed

· Changing the data source of the DataWindow object

· Controlling the Print Preview display

· Deleting and adding objects, for example, lines or bitmaps, in the DataWindow object

dw_customer.Modify(“DataWindow.Color = 255”)

where “DataWindow.Color = 255” is modstring.

Use Describe( ) to understand the structure of a DataWindow.

Typical uses for Describe () are:

  • bands the DataWindow uses

  • data types of the columns.

  • to find out the current value of a property and use that value to make further modifications.

  • to obtain the DataWindow’s SELECT statement in order to modify it (for example, by adding a WHERE clause).

dw_1.Describe(“salary.ColType”)

where “salary.ColType” is attribute list


11. How can you find out what object is under the mouse pointer in a DataWindow?

Using ObjectAtPointer( ) function that finds out where the user clicked in a graph. ObjectAtPointer() reports the region of the graph under the pointer and stores the associated series and data point numbers in the designated variables. Applies to graph controls in windows and user objects, and in DataWindow controls.


13. What is the difference between GetText() and GetItem()? Get Text() gives you the content of the text control , when the data is not accepted yet and you can use it for example in ItemChanged Event to obtain the data that did not pass validation rule. GetItem() gives you value that accepted and is in the DW buffer already.

14. How can you copy data from one DW to another if they have the same structure?

We could use the function RowsCopy() The function copies a range of rows from one DataWindow control (or DataStore object) to another, or from one buffer to another within a single DataWindow control (or DataStore). Uses for RowsCopy() include:

  • Making copies of 1 or more rows so that users can create new rows based on existing data.

  • Printing a range of rows by copying selected rows to another DW and printing the second DW.

dw_1.RowsCopy(dw_1.GetRow(), dw_1.RowCount(), Primary!, dw_2, 1, Primary!)


15. What is the function of Find( ) ?

Finds the next row in a DW in which data meets a specified condition.

Find (expression, start, end). The search is case-sensitive. When you compare the text to the value in a column, the case must match.


16. What is the function of SetTabOrder( )?

Changes the tab sequence number of a column in a DW control to the specified value. E.g., dwcontrol.SetTabOrder (column, TabNumber)

Use SetTabOrder( ) to change a column in a DW object to read-only by changing the tab sequence number of the column to 0.


17. What is the function of DeleteRow( )?

Deletes a current row from a DW control or Child DataWindow.

dwcontrol.DeleteRow (row)

DeleteRow( ) deletes the row from the DataWindow’s primary buffer.


18. How can you override a PB function, e.g., DeleteRow( ), for a DW control?

We need to create a User Object of the DataWindow type and declare the DeleteRow( ) function for this object having the same parameters as PowerBuilder’s DeleteRow( ). When we call the function, PB tries to find this function on the object level first, that’s why our function will be executed and not PowerBuilder’s. But we can still call PowerBuilder’s DeleteRow( ) by using Call Super :: DeleteRow( )


19. What is the function of DBErrorCode( )?

Reports the database-specific error code that triggered the DB Error event.

DBErrorCode() is obsolete. The DB error code is available as an argument SQLDBCode in the DB Error event: dwcontrol.DBErrorCode ( )

When a DB error occurs while a DW control is interacting with the DB, PB triggers the DB Error event. Since DBErrorCode is meaningful only if a DB error has occurred, we should call the function only in the DB Error event.


20. What is the function of DBErrorMessage( )?

Reports the database-specific error message that triggered the DB Error event.

DBErrorMessage( ) is obsolete. The DB error message is available as an argument SQLErrText in the DB Error event. dwcontrol.DBErrorMessage( )

When a DB error occurs while a DW control is interacting with the DB, PB triggers the DB Error event. Since DBErrorCode is meaningful only if a DB error has occurred, we should call the function only in the DB Error event.


21. What is the function of ScrollToRow( )?

Scrolls a DW control to the specified row. ScrollToRow( ) changes the current row. dwcontrol. ScrollToRow( row )

After we call ScrollToRow( ), the specified row becomes the new current row. If that row is already visible, the displayed rows do not change. If it is not visible, the displayed rows change to display the row. ScrollToRow( ) does not highlight the row. Use SelectRow( ) to let the user know what row is current. ScrollToRow( ) may trigger these events:

  • ItemChanged

  • ItemError

  • ItemFocusChanged

  • RowFocusChanged



23. What is the function of SetFilter( )?

Specifies filter criteria for a DW control.


24. What does the function ModifiedCount( ) do?

Reports the number of the rows that have been modified but not updated in a DW. dwcontrol.ModifiedCount ( )


25. What is the function of ShareData( )?

If we need to share data between a primary DW and more than one secondary DW control, we call ShareData( ) for each secondary DW control. When we call functions in either the primary or secondary DW that change the data, PB applies them to the primary DW control and all secondary DW controls are affected.

dw_primary.ShareData ( dw_secondary )

Shares data retrieved by one DW control, which is referred to as the primary DW, with another DW control, referred to as the secondary DW. The controls do not share formatting; only the data is shared, including data in the primary buffer, the delete buffer, the filter buffer, and the sort order.


26.What is the function of Create( ) ?

Creates a DW object using DW source code and puts that object in the specified DW control or DataStore object. This dynamic DW object does not become a permanent part of the application source library.

dwcontrol.Create ( syntax {, errorbuffer } )

The Create( ) function is used to associate the DW object syntax with an existing DW control. dw_1.Create( ls_syntax_str, ls_errmsg)


27. What does function SelectRow( ) do?

Highlights or dehighlights rows in a DW control. SelectRow( ) does not affect which row is current. dwcontrol.SelectRow(0, FALSE)

dwcontrol.SelectRow(row, TRUE)

If a row is already selected and we specify that it be selected (boolean is TRUE), it remains selected. If a row is not selected and we specify that it not be selected (boolean is FALSE), it remains unselected.


28. When do RetrieveAsNeeded( ) stop working?

If we use Filter( ) and Sort( ).


29. Give an example of a case sensitive functions?

Find( )


30. What will happened if we place AcceptText() in ItemChangeevent?

We get an error message


31. What functions used for creating DW dynamically?

Modify(),Describe()

ENCAPSULATION


What is encapsulation?

Encapsulation means that the functionality of one object does not effect the functionality of another one.


1. What are benefits of using encapsulation? Give examples of encapsulation in PB.

Encapsulation gives us a way to hide and protect data inside an object to avoid a conflict with objects, all information is protected. To hide data, we use private and protected variables. For example, the code to make a CommandButton appear depressed is encapsulated into the CommandButton itself. Encapsulation is a method of encapsulating data inside an object, having function to manipulate the data and not allow access directly, only trough functions. Variables are private, functions to access those variables are public. Example: Let’s say you have a RadioButton on your window. To check it in the script, you can just state: rb_1.checked = true. If you want to use encapsulation, you would create a UO inherited from the RadioButton and complete with the user-object function which would have the script to check or uncheck this RadioButton and direct all the check/uncheck calls to this user-object function.

EVENTS


1. Explain ItemChanged and ItemError events?

ItemChanged event occurs when the item has changed the value in a DW control and all validation rules are passed successfully, in other words, all three conditions are met:

Is anything changed?

Is the data of correct data type?

Does data pass validation rules?

ItemError event occurs when the item does not pass validation test for its column.


2. What is the OTHER event?

Any non-standard event is other event. The Other event occurs when a Windows event that is not a PB event occurs. For example, when the user presses the middle mouse button on a 3-button mouse.


3. If there is a problem with the DB during data retrieval :

  • Which DW event will be triggered?

  • Where will the error code be stored?

A DBError event will be triggered when a DB error occurs in a DW. The action codes for this event are: 0 – (Default) Display the error message.

1 – Do not display the error message.

The Error code will be stored in DBErrorCode, which PB 5 provides to us as an argument in the DBError Event.


4. What is the difference between an Open and Activate events?

The Open Event occurs after the window has been opened but before it is displayed.

The Activate event occurs just before the window becomes active. When the Activate event occurs, the first control in the tab order for the window gets focus, if there are no visible controls in the window, the window gets focus.


4a. What problem could be with Activate event?

Problem with Activate event is we cannot put FocusChanged commands such as MessageBox( ) in this event, because we will be in a loop.


5. What is CloseQuery event? When do you use it?

The CloseQuery event occurs before Close event when we remove the window from display (close it). We use CloseQuery event when we’d like to perform some processing or do some checking before user closes the window. If we do not want to allow the user to close the window, we set Return 1 else Return 0. Return 1 prevents the window from closing and must be the last statement in the script for the CloseQuery event. Be sure to set Return 0 when processing is complete so the window can be closed. To perform some processing or do some checking before you close the window set the value of Message.ReturnValue to 1 and then write a script for the CloseQuery event to perform the desired processing. The statement that sets message.ReturnValue to 1 to prevent the window from closing must be the last statement in the script for the CloseQuery event.


6. Which events do not “like” the MessageBox( ) function to be in their scripts?

All FOCUS events such as Vertical Scroll, Horizontal Scroll, Activate, LoseFocus event.


7. What functions cannot be used in the ItemChanged Event?

AcceptText( )

SetRow( )


8. What are Constructor and Destructor events?

Constructor event occurs in all draggable controls immediately before the Open event. Constructor event is also triggered when a user object is placed dynamically in a window. Destructor event occurs in all draggable controls immediately after Close event. Destructor event is also triggered when a user object is removed dynamically from the window.

9. What is Timer event ?

This is an event triggered by the Timer(n) function that occurs every n seconds after the function is called. E.g., we can display a message, beep, or open a window every n sec.

10. What do you use the SQL Preview event for?

You can use the SQL Preview event to display SQL statement right before its execution. It is useful for the debugging. In PowerBuilder 5: MessageBox(“SQL”, SQLSyntax)

SQL Preview event occurs immediately before Retrieve(), Update(), or ReselectRow () are executed. In PowerBuilder 4 to get the current SQL statement you could use either dw_1.Describe( ) or dw_1.GetSQLPreview( ) functions. For example:

string s_temp

s_temp = dw_1.Describe(“DataWindow.Table.Select”)

MessageBox(“My SQL”, “s_temp”)

Also, we could use SQL Preview event if we want to use Stored Procedures to perform Update in the Database.

11. When does SQL Preview event occur and what action codes does this event have?

The SQL Preview event has action codes that specify the action that takes place when the event occurs after an Update( ) function call. To set action code we use Return key word function.

The action codes are :

0 – (default) Continue;

1 – Stop processing;

2 – Skip this request and execute the next request.



12. What is the usage of the DBError Event?

We want to override the default error message. The DBError Event is used when a DB error occurs as a result of the operation performed by DataWindow Update( ) function.


13. When does PB trigger the DBError event?

Whenever there is an error following retrieval or update in the DW, for example, if we try to insert a row that does not have values for all columns that have been defined as not allowing NULL.

14. What events are triggered by Update( )?

SQL Preview

Update Start

Update End


  1. How do you create your own custom event?

Why would you consider doing it altogether?


.EXE FILE

1. What is .EXE file?

.EXE file is a form of an application that can be executed outside of PB.


2. (true or false) You must have either .PBR or .PBD for every application. False


3. (true or false) You must have both .PBR and .PBD for every application. False


4.When do you need to use .PBD ? We use .PBD when:

the number and size of the objects in our application would otherwise make a very large .EXE (1.2 to 1.5 megabytes).

we need to share components among several applications.

distribute application components selectively, for example, to upgrade an application or fix a bug.


5. When do you need to use a .PBR ?

We create .PBR if we have any dynamically assigned objects, bitmaps or icons and to reduce the number of files we need to distribute with the .EXE. We typically use a .PBR when we have scripts in our application in which we dynamically assign resources to attributes of objects or controls in the application. If we do not use a .PBR, we must distribute various .BMP, .RLE, .ICO files with the application. We must place in .PBD’s any objects that we reference dynamically in scripts in the application.


6. Why do we create PBR, PBD files?

We create .PBR if we have any dynamically assigned objects, bitmaps or icons to reduce the number of files we need to distribute with the .EXE. We have to create .PBD if we have more than one PBL. It allows us to break the application into smaller units that are easier to manage and makes the executable file smaller, and at execution time we can load any objects that are not contained in the application’s executable file. It makes sense to use PBD when our application is really large.


7. How many .PBDs can you have for one application ?

As many as we need and depending on available memory.


8. How many .PBRs can you have for one application ?

One

9. (true or false) If you have created a .PBD and a .PBR for an application, you must distribute the .EXE, the PBD, and the .PBR to the users.

True

10. What do you need to do before creating an .EXE file?

Before we create the .EXE for an application, we need to make sure that:

the application is the current application;

we have listed all of the necessary .PBLs in the library search path for the application;

if we are using a .PBR, we have created it.


11. What do you have to distribute with your application to the end-user?

1 The .EXE File

2 The .DDL Files

3 Deployment kit .DLLs


12. What is .PBR file?

PBR file is an ASCII File in which we list resource names or DW object names that were referenced dynamically in the script.


12a. What are PBR, PBD files? How do you generate them?

.PBR file is a resource file that contains BMP files, icons or objects assigned dynamically in a script such as DW objects that have been used in our application. A .PBD file is PB dynamic library. It contains all compiled objects that the .PBL file has and is linked to the application at runtime. We generate them through the Project options of PB. If you use .PBR files you don’t need to distribute to user separately .EXE file and resource files – all these pictures, for example, will be included into .EXE file. To create .PBR file simply name the resources in a text file. In it, you can reference all these objects by including the name and the path of the .PBL and the object name. PB copies objects referenced in a .PBR into the .EXE file when the file is generated. PBD does not have any data source. It cannot be run alone and must be specified in the library search path. All .PBD’s must be specified in the library search path.

13. What are advantages of using .PBD s ?

PBD makes the size of your .EXE smaller, and objects that we put in PBDs will be loaded at runtime only when we need it.


14. What is the difference between DLL and PBD?

DLL is a file we compile using machine code in a 32-bit environment. With DLL files the system (our application) works faster. PBD is a file we compile using Pcode. When PB builds a dynamic library, it copies the compiled versions of all objects from the source library (PBL file) into dynamic library (PBD file).


15. How do you create a .PBR file?

Through any file editor or Shift F6.


16. How do you include a DataWindow in a .PBR file?

To include a DW in the list we have to write the name of the library (with extension .PBL) and name of the DataWindow object enclosed in the parenthesis. For example: Tutorial.pbl(d_emplist)

If the DataWindows library is not in the directory that will be current when the .EXE is built, we have to fully specify the full search path of a DataWindow object and put the DataWindow object name in parentheses: c:\pb\tutorial.pbl(d_emplist)


17. What is the recommended size of .PBL?

The recommended size is less than 800 KB and not more than 50-60 entries. Larger libraries could decrease the performance of the application. You should split large libraries.


18. How can you create in PB an executable that can receive parameters?

PowerBuilder has a function CommandParm( ) that retrieves the parameter string, if any, when the application is executed. For example:

Open Event string ls_command_line

ls_command_line = CommandParm( )

If the command line holds several parameters, you can use string functions Pos(), Left(), Right(), Mid(), etc., to separate the parameters.


19. What are DLL files and how can we access DLL functions from PB?

Dynamic Link Library is a store of executable code that an executable file (EXE) may dynamically link to, in order to make use of its functions. PB libraries may be compiled into DLLs to reduce the size of the primary EXE and allow the objects to be shared with other PB applications. Note: unlike standard DLLs, PB-generated DLLs may not be used from applications written in other languages. PB-generated DLLs may be accessed only from PB applications.


20. What is the difference between P-Code and Machine code?

Machine code is new and was introduced in PB5. P-code is compiled faster than the machine code but it creates .PBDs. Machine code creates DLLs

PB uses P-code.


21. What type of resources can we list in .PBR file?

Bitmaps, icons, cursors, sound wave files, etc.—all files that are not PB files.


22. What does the .EXE file contain?

The executable file contains code that application need to run a Windows application, compiled versions of application’s objects and resources that application uses.

23. Is it always necessary to create the PBR File to include resources in your EXE?

No, if resources were assigned in a painter they are automatically copied in your EXE but if they were referenced dynamically through the string variables, PB cannot identify them when compiling, and we have to include them into PBR file or distribute them separately.

24. Where can we create .EXE? We can create .EXE in the Project Painter.


25. What is the minimum that you must deliver for a PB application? (pick all)

– .EXE

– PBD

– .PBR

– .DLL

– resource file

– PB.INI

The PB.EXE must be on the client machine – true

If you have bitmaps or icons in your app., you must have a resource file – false


26. What do you need to do to distribute your application to the end-user?

The .EXE, any .PBDs, and the DB Development and Deployment Kit DLLs.

(We need to create an executable file (.EXE) of our application for distribution to users. To do so, we can choose from several options. Two of the options are:

you can incorporate all of the PB objects, all bitmaps, all icons, etc. into one executable file. (Variation—incorporate all of the PB objects into the .EXE, and distribute it with separate files containing the bitmaps, icons, etc.) Additional options are: you can incorporate some of the PB objects and all of the bitmaps, icons, etc. into the .EXE file, but place the remaining PB objects in PB dynamic libraries (.PBD). (Variation: incorporate some of the PB objects into the .EXE; place the remaining PB objects in .PBDs; and distribute the .EXE and .PBDs with separate files containing the bitmaps, icons, etc. When distributing your applications, you must also distribute the PB runtime libraries (.DLLs).)

EXTERNAL FUNCTIONS


External functions are functions that are written in languages other than PowerScript and are stored in Dynamic Link Libraries (DLL’s).

A DLL is a file containing executable Windows code. This code can be called from a PB program even through it is written in another language such as C, Pascal or in any other language that supports the Pascal calling sequence for 16-bit and the standard calling sequence for 32-bit.


FUNCTION

1. What is a function?

A function is a pre-defined procedure that performs a specific task. A function is a set of some type PowerScript statements that performs some type of processing and return a value. Functions have two defining characteristics :

  • all functions return a value

  • all functions have a return type, i.e., the data type of the value that the function returns.


2. What is the difference between a function and a subroutine?

Subroutines do not return a values, and thus, they do not have a return type.

Subroutine is a set of some type PowerScript statements that performs some type of processing.


3. What can you do with the return value from a function?


4. Describe how object-level and global functions are stored.

Global functions are stored in .PBL as independent objects, not encapsulated within some other object.

Object-level functions are encapsulated within the object for which they are defined.


5. Which does PowerScript statement appear at least once in every function? Why ?

Return statement. Because every function returns a value, our code must include the Return statement.


6. If the statement “return ‘Complete’” appears in the code for a function, what conclusion can you draw about the function declaration?

The data type of the value that the function returns is String.


7. What is the difference between call by reference and call by value?

By reference means that the function has access to the value of original variable and can change it directly.

By value means that no matter what happens to variable in the function the value will be the same.

By reference means that receiving parameters get the address(memory location of the variable instead of value. This means when any new is assign to the parameters value, the value of original variable is changed. When we pass by value, we are passing the function a temporary local copy of the argument. The function can alter the value of the local copy within the function, but the value of the argument is not changed in the calling script for function.


8. Explain Function access types.

There are three function access types:

Public – lets the function be referenced externally using dot (.) notation

Private – restricts access to scripts within the object.

Protected – restricts access to scripts within the object or within objects inherited from this object.


11. What is the difference between private, protected & public functions?

Private function you can only call in scripts for events in the object, in which the function was defined.

Protected function you can call in scripts for events in the object in which the function was defined and its descendant.

Public functions you can call in any place in the object


12. What is a user-defined function?

User-defined function is the collection of Pscript statements that perform some processing.

13. What kind of user-defined function do you know?

Global – that are accessible anywhere in the application Object level which are defined for the particular type of window menu or user object. These function may be accessible to other scripts or may be not.

14. How do you have to define the access for object level function if you want to make it accessible for scripts for other object?

It has to be defined as Public


15. What is the difference between Private and Protected Object level functions?

Private function you can only call in scripts for events in the object, in which the function was defined.

Protected function you can call in scripts for events in the object in which the function was defined and its descendant.


16. If function return the value what statement inside function do you have to use to assign value?

We have to use Return Statement and when we define a function we have to define the data type of returned value.



17. How could you pass argument to the function?

We can pass arg. By value and by reference When we pass by value we are passing to the function a temporary local copy of the argument and the value of argument in the calling script is not changed If we pass by reference the function has access to the original argument and can change it directly.


How do you look up functions for controls (for example, Listbox)

In the Help topic.


19. 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()


20. What is the purpose of Yield function?


21. A function must be defined in the Function painter in order to be public? False


15. What is the difference between TriggerEvent and PostEvent?

TriggerEvent() stops the program and lets the program continue after it finishes.

PostEvent() stands in a queue and executes at the same time with the script. One difference between these events is timing. Postevent puts a custom window message at the back of the stack where it awaits its turn. TriggerEvent() program-matically causes code to be executed before the next message is processed. For example: cb_OK.TriggerEvent(Clicked!)


16. What is the difference between call by reference and call by value?

Calling by reference is a two-way argument passing: changes that the function makes to the argument value are passed back to the caller.

Calling by value is a one-way argument passing: the calling script passes a copy of the argument value into the function. Changes that the function makes to the argument value are not passed back to the caller.

What is PowerBuilder?

PowerBuilder is a powerful Windows-based professional client/server application development tool, which allows teams of developers to quickly and easily build sophisticated, graphical applications with access to database information stored locally or on networked servers.


What are PowerBuilder features?

A set of tools, known as painters, that provide a graphical point-and-click environment for creating windows, menus, and other objects and for database administration.

A powerful scripting language, PowerScript, for building event-driven applications.

Support for all Microsoft Windows objects and Visual Basic custom controls.

A custom Windows object, the DataWindow object, for database manipulation and reporting.

Open integration with configuration control tools, such as PVCS.

Support for Dynamic Data Exchange(DDE), Dynamic Link Libraries(DLL),

and Object Linking and Embedding(OLE).

Support for importing and exporting popular file formats.

Extensive on-line help.

3. What are PowerBuilder benefits?

PowerBuilder allows an application developer to:

– Quickly develop object-based windows database applications without coding in C or C++.

– Take advantage of client/server architecture.

– Create attractive, easy-to-use applications taking full advantage of Graphic User Interface (GUI) (GUI) design principles.

– Create applications that can be independent of the database management system being used.


4. What is the strongest and weakest points of PowerBuilder?

Strongest :

  1. DataWindow.

  2. Inheritance

  3. Encapsulation

  4. Polymorphism

Weakest :

  1. Bad performance

  2. Not fully Object-Oriented.

5. What are PowerBuilder applications?

PowerBuilder applications are object-oriented, event-driven applications that execute within Windows, typically within a client/server architecture.


6. What are Windows?

Windows is an operating environment that uses graphics and symbols as a Graphic User Interface (GUI) between the user and the operating system. This interface enables you to select and execute commands by using a mouse to point to and click on illustrations, symbols (icons), or data.


7. What is a menu bar?

To navigate in Windows, you can also select options or activities from a menu bar that run across the top of the window. This menu bar contains items such as File, Edit, Help. By clicking on the item on the menu bar, you access pull-down menus that list more options or commands for an activity.


8. What is Event-driven processing?

In a PB application, the user is responsible for the sequence of processing that takes place, not the programmer. The processing is dependent on the action that the user takes(“event-driven”). Processing can be associated with the application, a window, or objects in a window.


9. What is Object-oriented development?

Object-oriented development views the analysis, design, and implementation of systems from the perspective of objects, which have specific collections of attributes and events.


10. What is object?

Object is an application component that combine characteristics and behaviors. The characteristics are called attributes. The behaviors are called events. Well-designed object is discrete, self-contained package. Often it knows nothing about other object except its name. Objects communicate with one another through messages.

PB applications are developed by combining objects of the following types:

Application

Window

DataWindow

Function

Menu

Query

Structure

User Object


11. What are attributes?

Attributes are characteristics of objects. The combination of an object’s attributes primarily defines what the object looks like, but some attributes also prescribe or limit its behavior.


12. What is an event?

An event is the component of an object that permits it to recognize and respond to a Windows message. In PB you write scripts, as needed, to describe the processing that should occur in response to the message. Events often form the connection between the objects in an application system.


13. What is an application object?

An application object is an entry point into an organized collection of windows and other objects that perform these activities. It is a non-visual object that maintains default values for various high-level characteristics or features of the application.


14. What are window objects?

Window objects are visual objects that provide the main interface between the user and PB applications. Windows can display information, request it from a user, and respond to mouse or keyboard actions.

Controls are objects that you place in a window to allow the user to interact with the application. You use different controls for different purposes. For example, some controls may display data, others accept and validate user input, and still others act upon input, such as responding to a mouse click.


15. What is a menu?

A Menu is a visual object that provides the user with lists of commands, or alternate ways of performing a task. The individual commands or options are known as menuitems.


16. What is a DataWindow object?

A DataWindow object is an intelligent object unique to PB, combining data access intelligence with an user interface. You may use DataWindow objects whenever your applications need to display or capture data.


17. What is a query?

A query is a non-visual object consisting of a SQL statement that you associate with a DW object to indicate its data source. Queries enhance developer productivity, since they can be coded once but reused as often as necessary. Thus, they provide flexibility in the development of DW objects.


18. What are user objects?

User objects are custom objects that you build. They typically consist of one or more standard PB objects, with scripts written for particular events to perform processing used frequently in your applications. After you build an UO, you can use it in your applications as you would any PB object. The processing encapsulated in user objects is often generic; thus when you use the UO in an application, you make its processing specific to the application by modifying or extending the scripts for the events in the UO. User objects can be visual or non-visual. They can display information, request it from an user, and respond to mouse or keyboard actions. They extend, enhance, or otherwise customize standard built-in objects and their behaviors.


19. What is a function?

A function consist of a set of PowerScript statements that performs some type of processing and returns a value. There are two types of functions within PB:

Object-level functions

Global functions, that is, function objects

Object-level functions, such as a window function, are encapsulated within the object for which they are defined.

Global functions are independent objects, they are not encapsulated within some other object.

Both types of functions may be called from scripts for any other object in an application, however, they are called in different ways.


20. What is a structure?

A structure is a collection of one or more related variables of the same or different data types grouped under one name. Used in scripts, structures allow you to refer to related objects as an unit rather than individually. In some languages, for example Pascal or COBOL, structures are called records.


21. What is a painter?

A painter is a graphical tool within PB that you use to create a PB objects.


22. How can you configure your toolbar?

You may configure your PainterBar and the PowerBar in several ways:

Choose Toolbars… from the Window menu; the Toolbars response window appears.

Click the right mouse button on the toolbar to display the popup menu of options.

Both methods provide the same options.


23. Where are PB objects stored?

PB objects are stored in PB library files (.PBL).


24. Which of the following can be PUBLIC?

function -Yes

-script

-instance variable

-window

-application


PowerBuilder

25. Why is PowerBuilder a client/server application development tool ?

Because PowerBuilder Applications request services from a server Database through SQL statements.

26. What is event-driven processing ?

The user is responsible for the sequence of processing that takes place, not the programmer. The processing is dependent on the action that the user takes (“event-driven”)


27. What is Object-Oriented?

You can say that the programming language is object-oriented if it has 3 main features:

  1. Inheritance.

  2. Encapsulation.

  3. Polymorphism.

PowerBuilder has all of these features.

It speeds up the development process and improves code quality and efficiency.


3.What two qualities do all objects have?

Attributes are the characteristics of objects, which collectively define an object’s appearance.

Events are the components of an object that permit it to recognize and respond to a Windows message.


4.List at least four of the eight PowerBuilder objects.

Application object

Queries

Windows

User objects

Menus

Functions

DataWindow objects

Structures





What is a painter ?

A painter is a graphical tool within PB that we use to create a PB object.

6. What is the Power Panel? What is Power Bar?

They are a collection of icons through which we have an access to a painter.


7. Where are all PowerBuilder objects stored?

PowerBuilder objects are stored in PowerBuilder library files. Many different objects may be stored in the same library.


8. What is Client/Server architecture?

Client/Server architecture is when an application requests services from a server DB through SQL statements. DB can be located anywhere once the data requested has been passed to the client processing takes place at the client level. The data available to many users but processing takes place locally.


9. Where in PowerBuilder can you do interactive SQL?

-database painter in data manipulation

-DataWindow painter

-query painter

-script

PART 1


9. What is new in PowerBuilder 5.0?

Windows 95 controls

compiled code

new DataWindows

event can have value and return value using return keyword

Function can be overloaded.

may not use SetActionCode( ) function – became RETURN

new syntax for Modify( )

Class Library (pfc)—PowerBuilder Foundation Class Library

Functions that became obsolete:


Instead of New in PB5 Event

SetActionCode return n Clicked

DB Error

ItemChanged

ItemError

Print Page

RetrieveRow

Retrieve Start

Update Start

Get SQL Preview() SQL Syntax

DB Error

SQL Preview


GetUpdateStatus(r, buff) r = row DB Error

ec=DBErrorCode() SQLDBCode DB Error (it also became an Object

argument in Transaction)

DBErrorMessage() SQLErrorText DB Error

GetClickedColumn() IF dwo.type=”column”

THEN c = integer(dwo.ID)

ELSE c=0

END IF Clicked

Double Clicked

GetMessageText s = text Custom Event for

pbm_dwnmessagetext

GetClickedRow() r = row Clicked

Double Clicked

3. What is an object? a class? an instance? Class is a group of objects that have common characteristics and behavior Object is an instance of the class. Instance is a copy of an object in memory. When we declare copies of window class in PowerBuilder, we are declaring window instances. The instances do not actually exist, however, until we open them. The window definition simply indicates what the window will look like, once it is instantiated (opened).

Is PowerBuilder an object-oriented language? Why?


Yes. You can say that a programming language is object-oriented if it has 3 main features:

Inheritance.

  1. Encapsulation.

  2. Polymorphism.

PowerBuilder has all of these features. PB is a Client/Server application development tool, which allows us to build a new graphical appl. with access to the DB that could be stored locally or at network system.


5. What is an object? (Encapsulation)

An object is a collection of variables programmed and packaged together as a single, self-contained unit. The contents of an object are protected from the outside world. The program-ming inside the object can see and change the variables, but no programming outside the object can do so. The programming inside the object is similarly protected: programming outside the object can execute the object’s programming only under strictly limited conditions. In a PB application everything is an object: a window, a button, a DW, a transaction object. A window, for example, is an encapsulation of variables and programming. The variables in the window object describe the window: its size, position, the text in its title bar, whether it has maximize and minimize buttons… The programming in the window object can perform such tasks as max, min, moving, and resizing the window. A button is an object. It is an encapsulation of variables and programming. The object’s variables describe the button…A DW is an object. Actually, there are two kinds of DW objects: the object created with the DW painter—named “DW Object”, and the DW Control which is the control object on a window. Each of these objects is an encapsulation of variables and programming, and they work together to provide the DW functionality in an application. A Transaction Object (e.g. SQLCA), is an object. It is a special PB variable that connects to a DB and serves as the interface between your scripts and the DB. A Transaction object is different from other PB objects in that it is a non-visual object.

EMBEDDED SQL


  1. How do we refer to the PB variables inside SQL statements?

We have to precede them by colon, for example: Insert into Employee (salary)

Values (:sal_var)

2. How do we use SELECT statement in PB?

If we expect only one row to in our Result Set, we use single SELECT, for example:

Select employee Emp_lName, employee EMP_FNAME

into :sle_LNAME.text, sle_FNAME.text

from Employee

where Employee EMP _nbp=:Emp_num

If we expect multiple rows we use cursor statements. Declare cursor as a select statement, then OPEN the Cursor and then fetch rows(with fetch statement). Usually we do fetching

in the LOOP while SGLCA.SQLCODE=0


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.




  1. 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

  1. 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?

  • global variables;

  • shared variables;

  • 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.

  • OpenWithParm( )

  • 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?

OpenWithParm( )

OpenSheetWithParm( )

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”;

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 :

A script for a control in a window.

A script for a custom UserObject.

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.


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?

  1. 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 object 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 a business logic in a separate application. In this

case your application consistsof the front end, middle tier and back end parts.

Sometimes multi-tier applicaitons 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.


On the front end: 1. Consider Retrieve As Needed option in slow

datawindows.

2. Minimize the number of controls on the windows –

use user objects instead.

3. Use datawindows or datastores instead of

embedded SQL.

4. Use Datastores instead of datawindows where

possible.

5. Use .PBD’s to speed up the application loading

  1. List three benefits of using a service-oriented framework.

  2. List three responsibilities of requester objects.

  3. List two responsibilities of service objects.

  4. List two advantages of using extension levels to customize code in a framework.

  5. What PFC library contains the window from which you would inherit to create a frame in an MDI application? What object would you use? What is the name of the ancestor object from which this object is derived?

  6. What library contains the PFC application services you would use in your applications?

  7. What type of PB objects is used to implement most of PFC Services? Why does this type of object works best?

  8. How do you identify predefined events in PFC objects?

  9. In general, how do you enable and access PFC services? How are they destroyed?

  10. What is the role of reference variables in implementing PFC services?

  11. Why are events redirected in PFC objects?

  12. In the following list, circle the name of the object (and the library in which it is stores) that you use to create an application manager for PFC applications.

  13. Write the code to create an instance of a PFC application manager and begin using it. Name the object and its event in which you would include this code.

  14. Circle the PFC services that you can enable in the application manager.

  15. Write the name of the global variable to define the application manager.

  16. Name the event in the application manager where application services are automatically destroyed.

  17. How do you redirect events in an application object to the application manager?

  18. What function do you use to specify the name of an application INI file? What function do you sue to return the name of an application INI file to an application? Name the object and its event where you initialize the application INI file.

  19. Describe a situation when you might use the Data Window caching service. Name the function you use to register an object to use this service.

  20. Name the object (and the library in which it is stored) that you use to create a menu for a frame in a PFC MDI application.

  21. Name the object (and the library in which it is stored) that you use to create a sheet in a PFC MDI application.

  22. What function do you use to send a message between a menu item and a window? What do you pass with the function?

  23. Why must you create all PFC Data Window controls from the u_dw user object?

  24. Name the ancestor object for all Data Window service.

  25. What is the first step in using any Data Window service?

  26. What method results in the display of the Filter dialog box? Where is this code implemented?

  27. List the one required step you take to implement the find and replace service?

  28. Name the function you use to link a detail Data Window to a master Data Window.

  29. What is the advantage of using the linkage service function to established a transaction object for Data Window in linkage chain? Write the code to implement this function.

  30. Why must insert an extension level before the PFC extension level?

  31. List the four major steps required to add an extension level to the PFC.

  32. List the four major steps required to add a Data Window service object to the PFC.

  33. List the major steps you take to implement utility services.

  34. How is implementing utility services different from implementing the other PFC services?

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 :

  • when we have an error message with no reason for it;

  • When we upgrade to a new version of PB, the new version should regenerate all its source code to update it;

  • 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 :

  • less than or equal to zero(0)

  • equal to 1, 2, or 3

  • between 4 and 10 (including 4 and 10)

  • 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