<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2222398033946644887</id><updated>2011-11-27T16:45:38.524-08:00</updated><category term='VB script Tips'/><category term='Database Management'/><category term='PowerBuilder'/><category term='Sun'/><category term='Microsoft'/><category term='Antivirus'/><category term='SQL'/><category term='SQL Anywhere'/><category term='PowerBuilder Tips'/><category term='News'/><category term='Visual Studio 2005'/><category term='SQL server'/><title type='text'>PowerBuilder</title><subtitle type='html'>PowerBuilder........                    PowerBuilder........  PowerBuilder........                    PowerBuilder</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>74</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-742269013762219456</id><published>2011-06-07T07:17:00.000-07:00</published><updated>2011-06-07T07:32:31.252-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>SQL interview question1</title><content type='html'>What is the difference between oracle,sql and sql server ? &lt;br /&gt;&lt;br /&gt;•Oracle is based on RDBMS.&lt;br /&gt;•SQL is Structured Query Language.&lt;br /&gt;•SQL Server is another tool for RDBMS provided by MicroSoft.&lt;br /&gt;&lt;br /&gt;why you need indexing ? where that is stroed and what you mean by schema object? For what purpose we are using view?&lt;br /&gt;&lt;br /&gt;We cant create an Index on Index.. Index is stoed in user_index table.Every object that has been created on Schema is Schema Object like Table,View etc.If we want to share the particular data to various users we have to use the virtual table for the Base table...So tht is a view.&lt;br /&gt;&lt;br /&gt;indexing is used for faster search or to retrieve data faster from various table. Schema containing set of tables, basically schema means logical separation of the database. View is crated for faster retrieval of data. It's customized virtual table. we can create a single view of multiple tables. Only the drawback is..view needs to be get refreshed for retrieving updated data.&lt;br /&gt;&lt;br /&gt;Difference between Store Procedure and Trigger?&lt;br /&gt;&lt;br /&gt;•we can call stored procedure explicitly.&lt;br /&gt;•but trigger is automatically invoked when the action defined in trigger is done.&lt;br /&gt;ex: create trigger after Insert on &lt;br /&gt;•this trigger invoked after we insert something on that table.&lt;br /&gt;•Stored procedure can't be inactive but trigger can be Inactive.&lt;br /&gt;•Triggers are used to initiate a particular activity after fulfilling certain condition.It need to define and can be enable and disable according to need.&lt;br /&gt;&lt;br /&gt;What the difference between UNION and UNIONALL?&lt;br /&gt;&lt;br /&gt;Union will remove the duplicate rows from the result set while Union all does'nt.&lt;br /&gt;&lt;br /&gt;What is the difference between TRUNCATE and DELETE commands?&lt;br /&gt;&lt;br /&gt;Both will result in deleting all the rows in the table .TRUNCATE call cannot be rolled back as it is a DDL command and all memory space for that table is released back to the server. TRUNCATE is much faster.Whereas DELETE call is an DML command and can be rolled back.&lt;br /&gt;&lt;br /&gt;Which system table contains information on constraints on all the tables created ? &lt;br /&gt;yes,&lt;br /&gt;USER_CONSTRAINTS,&lt;br /&gt;system table contains information on constraints on all the tables created&lt;br /&gt;&lt;br /&gt;Explain normalization ? &lt;br /&gt;Normalisation means refining the redundancy and maintain stablisation. there are four types of normalisation : &lt;br /&gt;first normal forms, second normal forms, third normal forms and fourth Normal forms.&lt;br /&gt;&lt;br /&gt;How to find out the database name from SQL*PLUS command prompt?&lt;br /&gt;Select * from global_name;&lt;br /&gt;This will give the datbase name which u r currently connected to.....&lt;br /&gt;&lt;br /&gt;What is the difference between SQL and SQL Server ? &lt;br /&gt;&lt;br /&gt;SQLServer is an RDBMS just like oracle,DB2 from Microsoft&lt;br /&gt;whereas &lt;br /&gt;Structured Query Language (SQL), pronounced "sequel", is a language that provides an interface to relational database systems. It was developed by IBM in the 1970s for use in System R. SQL is a de facto standard, as well as an ISO and ANSI standard. SQL is used to perform various operations on RDBMS.&lt;br /&gt;&lt;br /&gt;What is diffrence between Co-related sub query and nested sub query?&lt;br /&gt;&lt;br /&gt;Correlated subquery runs once for each row selected by the outer query. It contains a reference to a value from the row selected by the outer query.&lt;br /&gt;&lt;br /&gt;Nested subquery runs only once for the entire nesting (outer) query. It does not contain any reference to the outer query row.&lt;br /&gt;&lt;br /&gt;For example, &lt;br /&gt;&lt;br /&gt;Correlated Subquery: &lt;br /&gt;&lt;br /&gt;select e1.empname, e1.basicsal, e1.deptno from emp e1 where e1.basicsal = (select max(basicsal) from emp e2 where e2.deptno = e1.deptno)&lt;br /&gt;&lt;br /&gt;Nested Subquery: &lt;br /&gt;&lt;br /&gt;select empname, basicsal, deptno from emp where (deptno, basicsal) in (select deptno, max(basicsal) from emp group by deptno)&lt;br /&gt;&lt;br /&gt;What is cluster.cluster index and non cluster index ? &lt;br /&gt;Clustered Index:- A Clustered index is a special type of index that reorders the way records in the table are physically stored. Therefore table may have only one clustered index.Non-Clustered Index:- A Non-Clustered index is a special type of index in which the logical order of the index does not match the physical stored order of the rows in the disk. The leaf nodes of a non-clustered index does not consists of the data pages. instead the leaf node contains index rows.&lt;br /&gt;&lt;br /&gt;How can i hide a particular table name of our schema?&lt;br /&gt;you can hide the table name by creating synonyms.&lt;br /&gt;&lt;br /&gt;e.g) you can create a synonym y for table x&lt;br /&gt;&lt;br /&gt;create synonym y for x;&lt;br /&gt;&lt;br /&gt;What is difference between DBMS and RDBMS?&lt;br /&gt;The main difference of DBMS &amp; RDBMS is&lt;br /&gt;&lt;br /&gt;RDBMS have Normalization. Normalization means to refining the redundant and maintain the stablization. &lt;br /&gt;the DBMS hasn't normalization concept.&lt;br /&gt;&lt;br /&gt;What are the advantages and disadvantages of primary key and foreign key in SQL?&lt;br /&gt;&lt;br /&gt;Primary key&lt;br /&gt;&lt;br /&gt;Advantages&lt;br /&gt;&lt;br /&gt;1) It is a unique key on which all the other candidate keys are functionally dependent&lt;br /&gt;&lt;br /&gt;Disadvantage&lt;br /&gt;&lt;br /&gt;1) There can be more than one keys on which all the other attributes are dependent on.&lt;br /&gt;&lt;br /&gt;Foreign Key&lt;br /&gt;&lt;br /&gt;Advantage&lt;br /&gt;&lt;br /&gt;1)It allows refrencing another table using the primary key for the other table&lt;br /&gt;&lt;br /&gt;Which date function is used to find the difference between two dates?&lt;br /&gt;datediff&lt;br /&gt;&lt;br /&gt;for Eg: select datediff (dd,'2-06-2007','7-06-2007')&lt;br /&gt;output is 5&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;What is denormalization and when would you go for it?&lt;br /&gt;&lt;br /&gt;As the name indicates, denormalization is the reverse process of normalization. It's the controlled introduction of redundancy in to the database design. It helps improve the query performance as the number of joins could be reduced.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;How do you implement one-to-one, one-to-many and many-to-many relationships while designing tables?&lt;br /&gt;One-to-One relationship can be implemented as a single table and rarely as two tables with primary and foreign key relationships. One-to-Many relationships are implemented by splitting the data into two tables with primary key and foreign key relationships. Many-to-Many relationships are implemented using a junction table with the keys from both the tables forming the composite primary key of the junction table.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;What's the difference between a primary key and a unique key?&lt;br /&gt;Both primary key and unique enforce uniqueness of the column on which they are defined. But by default primary key creates a clustered index on the column, where are unique creates a nonclustered index by default. Another major difference is that, primary key doesn't allow NULLs, but unique key allows one NULL only.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;What are user defined datatypes and when you should go for them?&lt;br /&gt;User defined datatypes let you extend the base SQL Server datatypes by providing a descriptive name, and format to the database. Take for example, in your database, there is a column called Flight_Num which appears in many tables. In all these tables it should be varchar(8). In this case you could create a user defined datatype called Flight_num_type of varchar(8) and use it across all your tables.&lt;br /&gt;&lt;br /&gt;What is bit datatype and what's the information that can be stored inside a bit column?&lt;br /&gt;Bit datatype is used to store Boolean information like 1 or 0 (true or false). Until SQL Server 6.5 bit datatype could hold either a 1 or 0 and there was no support for NULL. But from SQL Server 7.0 onwards, bit datatype can represent a third state, which is NULL.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Define candidate key, alternate key, composite key.&lt;br /&gt;A candidate key is one that can identify each row of a table uniquely. Generally a candidate key becomes the primary key of the table. If the table has more than one candidate key, one of them will become the primary key, and the rest are called alternate keys.&lt;br /&gt;A key formed by combining at least two or more columns is called composite key.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;What are defaults? Is there a column to which a default can't be bound?&lt;br /&gt;A default is a value that will be used by a column, if no value is supplied to that column while inserting data. IDENTITY columns and timestamp columns can't have defaults bound to them. See CREATE DEFUALT in books online.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;What is a transaction and what are ACID properties?&lt;br /&gt;A transaction is a logical unit of work in which, all the steps must be performed or none. ACID stands for Atomicity, Consistency, Isolation, Durability. These are the properties of a transaction. For more information and explanation of these properties, see SQL Server books online or any RDBMS fundamentals text book.&lt;br /&gt;&lt;br /&gt;Explain different isolation levels&lt;br /&gt;An isolation level determines the degree of isolation of data between concurrent transactions. The default SQL Server isolation level is Read Committed. Here are the other isolation levels (in the ascending order of isolation): Read Uncommitted, Read Committed, Repeatable Read, Serializable. See SQL Server books online for an explanation of the isolation levels. Be sure to read about SET TRANSACTION ISOLATION LEVEL, which lets you customize the isolation level at the connection level.&lt;br /&gt;CREATE INDEX myIndex ON myTable(myColumn)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;What type of Index will get created after executing the above statement?&lt;br /&gt;Non-clustered index. Important thing to note: By default a clustered index gets created on the primary key, unless specified otherwise.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;What's the maximum size of a row?&lt;br /&gt;8060 bytes. Don't be surprised with questions like 'what is the maximum number of columns per table'. Check out SQL Server books online for the page titled: "Maximum Capacity Specifications".&lt;br /&gt;&lt;br /&gt;What are constraints? Explain different types of constraints.&lt;br /&gt;Constraints enable the RDBMS enforce the integrity of the database automatically, without needing you to create triggers, rule or defaults.&lt;br /&gt;&lt;br /&gt;Types of constraints: NOT NULL, CHECK, UNIQUE, PRIMARY KEY, FOREIGN KEY&lt;br /&gt;For an explanation of these constraints see books online for the pages titled: "Constraints" and "CREATE TABLE", "ALTER TABLE"&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Whar is an index? What are the types of indexes? How many clustered indexes can be created on a table? I create a separate index on each column of a table. what are the advantages and disadvantages of this approach?&lt;br /&gt;&lt;br /&gt;Indexes in SQL Server are similar to the indexes in books. They help SQL Server retrieve the data quicker.&lt;br /&gt;Indexes are of two types. Clustered indexes and non-clustered indexes. When you craete a clustered index on a table, all the rows in the table are stored in the order of the clustered index key. So, there can be only one clustered index per table. Non-clustered indexes have their own storage separate from the table data storage. Non-clustered indexes are stored as B-tree structures (so do clustered indexes), with the leaf level nodes having the index key and it's row locater. The row located could be the RID or the Clustered index key, depending up on the absence or presence of clustered index on the table.&lt;br /&gt;If you create an index on each column of a table, it improves the query performance, as the query optimizer can choose from all the existing indexes to come up with an efficient execution plan. At the same t ime, data modification operations (such as INSERT, UPDATE, DELETE) will become slow, as every time data changes in the table, all the indexes need to be updated. Another disadvantage is that, indexes need disk space, the more indexes you have, more disk space is used.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;What is RAID and what are different types of RAID configurations?&lt;br /&gt;RAID stands for Redundant Array of Inexpensive Disks, used to provide fault tolerance to database servers. There are six RAID levels 0 through 5 offering different levels of performance, fault tolerance. MSDN has some information about RAID levels and for detailed information, check out the RAID advisory board's homepage&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;What are the steps you will take to improve performance of a poor performing query?&lt;br /&gt;This is a very open ended question and there could be a lot of reasons behind the poor performance of a query. But some general issues that you could talk about would be: No indexes, table scans, missing or out of date statistics, blocking, excess recompilations of stored procedures, procedures and triggers without SET NOCOUNT ON, poorly written query with unnecessarily complicated joins, too much normalization, excess usage of cursors and temporary tables.&lt;br /&gt;&lt;br /&gt;Some of the tools/ways that help you troubleshooting performance problems are: SET SHOWPLAN_ALL ON, SET SHOWPLAN_TEXT ON, SET STATISTICS IO ON, SQL Server Profiler, Windows NT /2000 Performance monitor, Graphical execution plan in Query Analyzer.&lt;br /&gt;&lt;br /&gt;Download the white paper on performance tuning SQL Server from Microsoft web site. Don't forget to check out sql-server-performance.com&lt;br /&gt;&lt;br /&gt;What are the steps you will take, if you are tasked with securing an SQL Server?&lt;br /&gt;Again this is another open ended question. Here are some things you could talk about: Preferring NT authentication, using server, database and application roles to control access to the data, securing the physical database files using NTFS permissions, using an unguessable SA password, restricting physical access to the SQL Server, renaming the Administrator account on the SQL Server computer, disabling the Guest account, enabling auditing, using multiprotocol encryption, setting up SSL, setting up firewalls, isolating SQL Server from the web server etc.&lt;br /&gt;&lt;br /&gt;What is a deadlock and what is a live lock? How will you go about resolving deadlocks?&lt;br /&gt;Deadlock is a situation when two processes, each having a lock on one piece of data, attempt to acquire a lock on the other's piece. Each process  would wait indefinitely for the other to release the lock, unless one of the user processes is terminated. SQL Server detects deadlocks and terminates one user's process.&lt;br /&gt;&lt;br /&gt;A livelock is one, where a  request for an exclusive lock is repeatedly denied because a series of overlapping shared locks keeps interfering. SQL Server detects the situation after four denials and refuses further shared locks. A livelock also occurs when read transactions monopolize a table or page, forcing a write transaction to wait indefinitely.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-742269013762219456?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/742269013762219456/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=742269013762219456' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/742269013762219456'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/742269013762219456'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2011/06/sql-interview-question.html' title='SQL interview question1'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-3094582953691429627</id><published>2010-09-08T02:46:00.001-07:00</published><updated>2010-09-08T02:46:39.536-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder'/><title type='text'>Bye Bye for SetRedraw( )</title><content type='html'>A common Classic PB code technique when modifying the displayed contents of window controls, is to turn off screen refresh by calling SetRedraw( false ), performing the update activity and then calling SetRedraw (true).&lt;br /&gt;&lt;br /&gt;Setredraw( ) is one of those graphic object methods that falls by the wayside when migrating to .NET.  It is no longer supported.  Is this a bad thing that will give your users a migraine headache or a non-issue?&lt;br /&gt;&lt;br /&gt;This post and the accompanying video will give you a refreshing understanding of the issue and help set your expectations when you migrate and see those unsupported feature warnings.&lt;br /&gt;&lt;br /&gt;First some background:&lt;br /&gt;&lt;br /&gt;In classic Windows UI and .NET WinForm, each window (and remember internally each control is a window) is constantly redrawing itself; when it's first created, when it's covered and re-exposed, and when something about its look and feel needs to change.     When the application is told to paint itself (draw in PB terms), it works with an abstraction called a device context which is wrapped in a Graphics object.  The context deals with the drawing surface as a field of colored dots which each of which it turns on in a color or off to match the request.  The whole process is built upon the 1990's hardware and device driver technology that was current when MS Windows 3.x was designed Whew, I bet you're begin to get the feeling that constantly repainting a display during a dynamic refresh process is a lot of work for the application program!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-3094582953691429627?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/3094582953691429627/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=3094582953691429627' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/3094582953691429627'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/3094582953691429627'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2010/09/bye-bye-for-setredraw.html' title='Bye Bye for SetRedraw( )'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-4607643066900317504</id><published>2010-08-30T05:40:00.001-07:00</published><updated>2010-08-30T05:40:41.074-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder'/><title type='text'>Powerbuilder Interview question _ part 9</title><content type='html'>STRING FUNCTION &lt;br /&gt;&lt;br /&gt;1. What does a string manipulation function Left( ) do? &lt;br /&gt;Obtains a specified number of characters from the beginning of a string. Left(string, n) &lt;br /&gt;&lt;br /&gt;2. What does a string manipulation function LeftTrim( ) do? &lt;br /&gt;Removes spaces from the beginning of a string. LeftTrim(string) &lt;br /&gt;&lt;br /&gt;3. What does a string manipulation function RightTrim( ) do? &lt;br /&gt;Removes spaces from the end of a string. RightTrim(string) &lt;br /&gt;&lt;br /&gt;4. What does a string manipulation function Mid( ) do? &lt;br /&gt;Obtains a specified number of characters from a specified position in a string. &lt;br /&gt;Mid(string, start{, length}) &lt;br /&gt;&lt;br /&gt;5. What does a string manipulation function Lower( ) do? &lt;br /&gt;Converts all the characters in a string to lowercase. Lower(string) &lt;br /&gt;&lt;br /&gt;6. What does a string manipulation function Right( ) do? &lt;br /&gt;Obtains a specified number of characters from the end of a string. &lt;br /&gt;Right( string ) &lt;br /&gt;&lt;br /&gt;7. What does a string manipulation function String( ) do? &lt;br /&gt;Convert variables of other datatype into sting String ( data, { format } ) &lt;br /&gt;&lt;br /&gt;8. What does a string manipulation function Trim( ) do? &lt;br /&gt;Removes leading and trailing spaces from a string Trim(string ) &lt;br /&gt;&lt;br /&gt;9. What is the function of SelectText( )? &lt;br /&gt;Selects text in an editable control. We specify where the selection begins and how many characters to select: editname.SelectText ( start, length ) &lt;br /&gt;&lt;br /&gt;10. Write a function to find one string within another and return position of that sub-string? &lt;br /&gt;String msg, putin &lt;br /&gt;long NewPos, l_NewPos &lt;br /&gt;msg = mle_text.text &lt;br /&gt;putin = sle_find.text &lt;br /&gt;NewPos = Pos(msg, putin, 1) &lt;br /&gt;l_NewPos = Pos(msg, putin,NewPos) &lt;br /&gt;SetFocus(mle_text) &lt;br /&gt;mle_text.SelectText(l_NewPos,len(putin)) &lt;br /&gt;&lt;br /&gt;STRUCTURE &lt;br /&gt;1. What is a Structure? What is Structure Data type? &lt;br /&gt;The structure is a collection of one or more related variables of the same or different data type grouped under a single name. There are Global and Object level structure. &lt;br /&gt;&lt;br /&gt;2. How do you use a Structure in your script ? &lt;br /&gt;We define structures using the Structure painter. In scripts we must create instances of the structure in order to use them. When we refer to an individual variables within a structure, we need to prefix them with the name of the structure instance. &lt;br /&gt;&lt;br /&gt;3. Which attribute of the Message Object is used to pass a structure between windows ? &lt;br /&gt;PowerObjectParm attribute of the Message Object is used to pass a structure between windows as the parameter in the OpenSheetWithParm( ) function. &lt;br /&gt;&lt;br /&gt;4. Show me how to send a structure to a function. &lt;br /&gt;You can pass a structure as an argument in user-defined functions. Simply name the structure as the structure data type when defining the argument. &lt;br /&gt;&lt;br /&gt;5. Can an array be an element of the Structure? Can a User Object be? &lt;br /&gt;YES. An array and a User Object can be an aliment of the structure. Any object can be an element of the structure. &lt;br /&gt;Example &lt;br /&gt;S_struct s_str &lt;br /&gt;for I = 1 to 10 &lt;br /&gt;s_str.array[i] …….. &lt;br /&gt;next &lt;br /&gt;&lt;br /&gt;6. How to reference structure variables in the script? &lt;br /&gt;If the structure is Global, you have to declare the variables of this structure type and use dot notation to reference the structure variables. E.g., &lt;br /&gt;emp_data emp1 &lt;br /&gt;emp 1.emp_id =100 &lt;br /&gt;If the structure is object level and you want to use it in the script for the object itself declare a variable of this structure type and use dot notation. If you want to make this object level structure accessible outside the object: in the object that defines the structure, declare an instance variable of the structure type. In any script of the application reference a variable in the structure using syntax: &lt;br /&gt;object .instance_variable .variable &lt;br /&gt;&lt;br /&gt;7. Could you pass structure as argument in user defined function? &lt;br /&gt;YES. We just have to name structure as a data type when we defining argument. &lt;br /&gt;&lt;br /&gt;8. When do you use = operator? &lt;br /&gt;It is used to compare one structure to another structure of the same type. &lt;br /&gt;&lt;br /&gt;9. Can an array be an element of the Structure? Can User Object be? &lt;br /&gt;Yes, an array can be in the structure, because it is also a variable that can hold multiple storage values. Unlike an array which has a single variable name and a range of numeric index values, a structure is composed of many variable names that are related in some way. These variables may be of different data types. How to process an array: &lt;br /&gt;s_struct s_str. &lt;br /&gt;For I = 1 to 10 &lt;br /&gt;s_struct.array[I] = … &lt;br /&gt;&lt;br /&gt;Yes, a user object can be a part of a structure. How to process a user object: &lt;br /&gt;s_str.ou_obj = Create u_obj &lt;br /&gt;open s_structure.window &lt;br /&gt;&lt;br /&gt;10. Can you assign a structure to a structure? &lt;br /&gt;Yes, we can copy all elements of a structure to another structure with a single assignment statement. At first, we declare a structure as a class and then assign values of the first structure to another structure. &lt;br /&gt;&lt;br /&gt;TARGET OBJECT &lt;br /&gt;&lt;br /&gt;1. What are the Target Object events? &lt;br /&gt;DragDrop &lt;br /&gt;DragEnter &lt;br /&gt;DragLeave &lt;br /&gt;DragWithIn &lt;br /&gt;&lt;br /&gt;2. What is a drag mode? &lt;br /&gt;A Drag mode is the state of the object when the user has clicked a draggable control and is holding the left mouse button down. &lt;br /&gt;&lt;br /&gt;3. In what case did you use Drag and Drop? &lt;br /&gt;We want to create a trash can in our program to make it look more user friendly &lt;br /&gt;&lt;br /&gt;4. What are automatic and manual drag modes? &lt;br /&gt;In automatic drag mode, PowerBuilder automatically switches the application into drag mode when the control is clicked. or &lt;br /&gt;DragAuto is a boolean indicating whether PowerBuilder puts the control into a drag mode automatically. DragAuto has these boolean values. &lt;br /&gt;True – when the user clicks the control, PowerBuilder puts the control in drag mode. &lt;br /&gt;When DragAuto is True, clicking a control triggers a DragDrop event, not a Clicked event. &lt;br /&gt;False – when the user clicks the control, PowerBuilder does not put the control in drag mode; we have to call the Drag function to put the control manually into a drag mode. &lt;br /&gt;With manual drag mode, PowerBuilder does not switch the application into drag mode when the control is clicked. We must control when the drag mode is initiated using command drag(Begin!), drag(Cancel!), drag(End!). &lt;br /&gt;&lt;br /&gt;TRANSACTION OBJECT &lt;br /&gt;&lt;br /&gt;1. When do you use AutoCommit? &lt;br /&gt;1. If you set AUTO COMMIT to FALSE, all SQL commands are part of a transaction and you must issue COMMIT and ROLLBACK commands from time to time to complete your work. &lt;br /&gt;If AUTO COMMIT = TRUE, there are no transactions and each SQL command is immediately committed. In this case explicit COMMIT and ROLLBACK commands in the script have no effect &lt;br /&gt;2. When we need to create a temporary table. &lt;br /&gt;3. When a window has a lot of display activity only. &lt;br /&gt;&lt;br /&gt;2. What is a Transaction Object? What is the purpose of a transaction object? &lt;br /&gt;A Transaction Object is an NVO which stores information required to connect to a specific DB. &lt;br /&gt;&lt;br /&gt;3. Explain the difference between SetTrans and SetTransObject. &lt;br /&gt;The SetTrans() function provides another way of managing the database connection. SetTrans, which sets transaction info in the internal transaction object for the DW control or DataStore, manages the connection automatically. You do not explicitly connect to the DB; the DataWindow connects and disconnects for each database transaction, which is less efficient but necessary in some situations. &lt;br /&gt;SetTransObject causes a DW control or DataStore to use a programmer-specified transaction object. &lt;br /&gt;&lt;br /&gt;USER OBJECT &lt;br /&gt;1. What are Non-Visual User Objects? &lt;br /&gt;Non-visual user object is an object that encapsulates attributes and functions but is not visible to the user. NVO is a collection of business user functions. They can be Custom Class and Standard Class. NVOs are useful because they allow you to encapsulate application operations into objects making them easier to develop, manage and maintain and also to encapsulate all security management for an application into a single object. &lt;br /&gt;&lt;br /&gt;2. Explain the purpose of a non-visual user objects &lt;br /&gt;The purpose of non-visual user objects is to define business rules and other processing (which are checked in different windows in your application) that act as a unit. We implement them in PowerBuilder using Class User Objects. &lt;br /&gt;&lt;br /&gt;3. What types of a non-visual user object do you know? &lt;br /&gt;There are two types of non-visual user objects : &lt;br /&gt;Standard user object inherits its definition from one built-in, PB NVO such as the Trans-action object or Error object. We modify its definition to make the object specific to our application. &lt;br /&gt;Custom user objects are objects of our own design that encapsulate properties and &lt;br /&gt;functions but are not visible to the user. &lt;br /&gt;&lt;br /&gt;Typically, we use Custom Class User Objects to define processing in our application that has no visual component. We typically use class user objects to define processing that acts as a unit; for example if our application calculates sales commissions, we might create a custom class UserObject to perform the commission calculation. &lt;br /&gt;&lt;br /&gt;After we build and save a visual user object, we can use it as we use a PB control. We can place it in a window or in other user objects, and we can size it, change its style, and build scripts for its events. &lt;br /&gt;After we build and save a class user object, we declare a variable of the UserObject type and create an inheritance of it using the CREATE statement in a script. Once we have instantiated the class UserObject, its attributes and functions are available within the scope of the variable declaration. After using the UserObject, we destroy it with the DESTROY statement to free up memory. &lt;br /&gt;We can also build new user objects that inherit attributes, events, structures, and functions from an existing user object. &lt;br /&gt;&lt;br /&gt;4. What are facilities of the User Objects ? &lt;br /&gt;We define a component once, then reuse it many times as we need without any additional work. &lt;br /&gt;&lt;br /&gt;5. Give me an example of Standard &amp; Custom visual user objects you have created &lt;br /&gt;and what was the purpose of each? &lt;br /&gt;Standard – Any single control can be placed in a standard user object &lt;br /&gt;Custom – Many controls can be placed in a custom user object &lt;br /&gt;&lt;br /&gt;6. What does OpenUserObject( ) do? &lt;br /&gt;OpenUserObject( ) adds a user object to the specified window and makes all its properties and controls available to scripts. &lt;br /&gt;windowname.OpenUserObject ( userobjectvar, userobjecttype {, x, y } ) &lt;br /&gt;This function is used when you want dynamically, at runtime place some user objects on a window. This function displays this user object, makes all its attributes available to scripts. You must open a user object before you can access the attributes of the user object. If you access the user object’s attributes before you open it, it will cause an execution error. &lt;br /&gt;&lt;br /&gt;7. How can you dynamically place an User Object on the window? &lt;br /&gt;By using functions : OpenUserObject( ), OpenUserObjectWithParm( ) &lt;br /&gt;&lt;br /&gt;8. When would you use a Standard User Object? &lt;br /&gt;We use a standard UserObject to extend the standard set of predefined attributes, events, and functions or to encapsulate common controls into an object that can be reused without any additional work. &lt;br /&gt;&lt;br /&gt;9. Can a standard visual User Object contain another User Object? No. &lt;br /&gt;&lt;br /&gt;10. In what situations would you use a custom visual UserObject? &lt;br /&gt;We use a visual custom UserObject when we frequently group controls in a Window and use the controls to perform the same processing. &lt;br /&gt;&lt;br /&gt;11. What Events does the Custom Class have? &lt;br /&gt;Constructor and Destructor &lt;br /&gt;&lt;br /&gt;12. What events are available to a standard class User Object? &lt;br /&gt;Constructor and Destructor &lt;br /&gt;&lt;br /&gt;13. What events are available to a standard visual User Object? &lt;br /&gt;It has all events that standard PowerBuilder control has it. &lt;br /&gt;&lt;br /&gt;14. How can you instantiate non-visual object (class) in memory? &lt;br /&gt;First we need to declare a variable of our User Object data type. We have to create an instance of our object in memory using command CREATE. Now we have access to the attributes and functions encapsulated in our User Object. When we don’t need this object anymore, we should Destroy it before we close an application to avoid memory leaking. &lt;br /&gt;First we need to declare a variable having our object’s type: &lt;br /&gt;uo_business_rules my_object &lt;br /&gt;CREATE my_object - This will create an instance of our object in memory. &lt;br /&gt;When we don’t need this object anymore, you should Destroy it to avoid memory leaking: &lt;br /&gt;DESROY my_object or &lt;br /&gt;We need to create (instantiate) a variable of the class UserObject type when we use the class &lt;br /&gt;We create custom transaction object MY_TRANS &lt;br /&gt;Then you have to declare and create this UserObject &lt;br /&gt;MY_TRANS l_my_trans &lt;br /&gt;l_my_trans = create MY_TRANS &lt;br /&gt;Now we have access to the attributes and functions encapsulated in the UserObject. &lt;br /&gt;We have to destroy MY_TRANS before we close the application &lt;br /&gt;&lt;br /&gt;15. Once a standard user object is placed on a window, can you override its attributes? Yes, we can. &lt;br /&gt;&lt;br /&gt;16. How can you override User Object’s function? &lt;br /&gt;Using polymorphism: In the User Object that we put on the window (a descendant of original UserObject) we can declare a function with the same name as the function in an ancestor we want to override. &lt;br /&gt;&lt;br /&gt;17. How many custom user events can you define and what triggers them? &lt;br /&gt;In PB 4 we could have not more then 75 custom event ID’s that we use for each object. In PB5 we may have as many as we need but with no mapping to PB custom events, however the events can work as a functions. We trigger them manually by using functions in our scripts. New syntax to trigger the custom event is &lt;br /&gt;object.event ue_cancel( ) &lt;br /&gt;object.event post ue_cancel( ) &lt;br /&gt;&lt;br /&gt;18. How is a custom visual UserObject different from a standard UserObject? &lt;br /&gt;A custom visual user object is an object that has several controls that work as a unit. &lt;br /&gt;A standard visual user object inherits its definition from a standard control. We modify the definition to make the control specific to our applications. &lt;br /&gt;&lt;br /&gt;19. What events do you know for custom visual user objects? &lt;br /&gt;Constructor - occurs after window’s open event or when a user object is dynamically placed in the window &lt;br /&gt;Destructor -occurs after window’s Close event or when a user object is dynamically removed from the window &lt;br /&gt;DragDrop When a dragged object is dropped on the user object &lt;br /&gt;DragEnter - when a user object enters the user object etc. &lt;br /&gt;Drag within &lt;br /&gt;Drag leave &lt;br /&gt;Other &lt;br /&gt;RightButtonDown &lt;br /&gt;&lt;br /&gt;20. How can you communicate between the window and user object in the window? &lt;br /&gt;When we placed user object into the window we can write the script s for User Object event (conctructor, dectructor) but we cannot write the scripts for controls inside the user object. But we can use user object level functions or user events. &lt;br /&gt;&lt;br /&gt;VARIABLES &lt;br /&gt;1. What is a variable? &lt;br /&gt;Variables are storage locations that hold values. The values can be entered by user, retrieved from a Database, calculated by the application. Variables must be declared before they are referenced in a script. &lt;br /&gt;&lt;br /&gt;2. What does the scope determine? &lt;br /&gt;The scope of a variable determines which scripts can access the variable to use or change its value. The scope of a variable determines the scripts in which the variable can be referenced. &lt;br /&gt;&lt;br /&gt;3. What types of variables do you know? &lt;br /&gt;Local—defined within a script for a control and can be accessed only within that script. &lt;br /&gt;Instance—defined for an object (e.g., window or User Object) and can be accessed only with in an object. &lt;br /&gt;Shared—defined for an object. All descendants of that object can access the variable (i.e. there is one variable with one value for the object and all of its descendants). Shared has a scope very similar of the instance but it also will be known for all instances of the object. Shared variable retains its value when instances of the object are closed and opened again. If the value of the shared variable is changed in one instance and then accessed in another, the second instance gets the new value. &lt;br /&gt;Global variables can be accessed by any object and are known through the scope. &lt;br /&gt;&lt;br /&gt;4. What is a local variable? &lt;br /&gt;A local variable is declared in the script for a control or object that can only be referenced in that script. We use local variables when the value only needs to be known while the particular script is executing. &lt;br /&gt;&lt;br /&gt;5. When do you use reserve word PARENT? &lt;br /&gt;We can use it in the script for different events of controls. In this case it refers to window this control belongs to. If we use it in a script for a control in a custom user object, it refers to the user object. When we use it in a script for MenuItem it refers to the MenuItem on the level above. &lt;br /&gt;&lt;br /&gt;6. What does the pronoun THIS refer to.? &lt;br /&gt;It refers to the object or control we are writing script for. &lt;br /&gt;&lt;br /&gt;7. What does the pronoun PARENT WINDOW refer to? &lt;br /&gt;The pronoun PARENT WINDOW refer to the window that menu is associated with at the execution time. &lt;br /&gt;&lt;br /&gt;8. When do you use instance variable? &lt;br /&gt;You use an instance variable when you have data that have to be accessible in more then one script within the object, but don’t need to be global. &lt;br /&gt;&lt;br /&gt;9. What access level for instance variable do you know? &lt;br /&gt;PUBLIC - accessible for all scripts &lt;br /&gt;PRIVATE - accessible in the scripts for events in the object for which the variable was declared &lt;br /&gt;PROTECTED - accessible in the scripts for events in the object for which the variable was declared and its descendants. &lt;br /&gt;&lt;br /&gt;10. What the difference between instance and shared variable? &lt;br /&gt;An instance variable is initialized when the object is opened. When you close the object, it ceases to exist. When you open the object again, the instance variable is initialized again. But the Shared variable continues to exist when you close the object and if you open the object again the shared variable will have the value it had when you closed the object. &lt;br /&gt;&lt;br /&gt;11. What does the qualified reference mean? &lt;br /&gt;A qualified reference is a variable (or object) name made specific by prefixing a window or object name to the variable name. We qualify references to refer to a variable in a child within its parent. E.g., &lt;br /&gt;w_customers.sle_address &lt;br /&gt;Qualifying variables or column name in the SQL statement also eliminate ambiguity. &lt;br /&gt;&lt;br /&gt;12. What is a shared variable? An Instance variable? How do you use them? &lt;br /&gt;A shared variable is a variable that belongs to an object definition and exists across all instances of the object. Shares variables retain their value when an object is closed and opened again. Shared variables are always private. They are accessible only in scripts for the object and for controls associated with the object. Shared variables can belong to the application object, a window, a user object, or a menu. &lt;br /&gt;An instance variable is a variable that belongs to an object and is associated with an instance of that object (you can think of it as a property of the object). Instance variables have access keywords that determine whether scripts of other objects can access them. Instance variables can belong to the application object, a window, a user object, or a menu. (Difference: they have different scope. The value of the shared variable is the same in each instance of the object. Instance variables are associated with one instance of an object such as a window and each instance can have different values in the instance variable.) &lt;br /&gt;&lt;br /&gt;1. What is Check-in, Check-out options on a Library Painter? &lt;br /&gt;It is a Version control. &lt;br /&gt;Check- in, Check-out are options on a Library painter, which control an access to Library entries. For example, when more then one programmer are working on a project, we want to prevent them from modifying a library entry at the same time. To control the access to library entries we can use Check-in and Check-out. When you Check-out an entry, PB makes a copy of the entry, stores it in a specified library( a test or development library), and sets the status of the entry to check out. As long as the status of an entry is checked out, we can change only to the working copy. If we try to open the original copy, PB displays a warning message. When we finish working with an entry that you checked out , we can Check-in entries on to replace the entry in the original library with the working copy of the entry. Check-in clears the check-out status from the entry, and delete the working copy from the library in which it is saved. &lt;br /&gt;&lt;br /&gt;2. What is an access control system for developers? &lt;br /&gt;Check-in, Check-out. &lt;br /&gt;&lt;br /&gt;3. Did you use any Version Control systems such as PVCS? &lt;br /&gt;No, we have used PowerBuilder’s own Check-in/Check-out feature in the Library painter. &lt;br /&gt;&lt;br /&gt;WINDOW OBJECT &lt;br /&gt;&lt;br /&gt;1. For the following window types, describe typical uses or provide examples of how they are used in commercially available products: &lt;br /&gt;Main is initial window of an application. &lt;br /&gt;Characteristics: operates independently of all other windows. &lt;br /&gt;Child is subordinated to its parent window. &lt;br /&gt;Characteristics: can exist only within parent; thus, automatically closed when its parent window is closed; &lt;br /&gt;is never the active window; &lt;br /&gt;appears as an icon within the parent window when it is minimised. &lt;br /&gt;cropped when a user attempts to move it beyond its parent; &lt;br /&gt;moves with its parent, since its position is always relative to the parent; &lt;br /&gt;Uses: the main window for a customer displays information in textual form and a child window displays it graphically. &lt;br /&gt;Response is application modal &lt;br /&gt;Characteristics: cannot be minimized; &lt;br /&gt;the user cannot go to other windows in the same application; &lt;br /&gt;the user cannot go to other Windows applications; &lt;br /&gt;remains the active window until the user responds. &lt;br /&gt;Uses: displaying error or warning messages to the user; &lt;br /&gt;requesting a critical item of information from the user before work can begin &lt;br /&gt;(Select Window in the Window painter) &lt;br /&gt;Popup is &lt;br /&gt;Characteristics: has a parent window; &lt;br /&gt;is never hidden behind its parent; &lt;br /&gt;can display outside the parent window; &lt;br /&gt;appears as an icon outside the parent window, at the bottom of the screen, when minimized; &lt;br /&gt;minimizes within its parent, when its parent is minimized. &lt;br /&gt;Uses: online help. &lt;br /&gt;MDI is a style of application used to manage multiple documents of the same or different types within one. &lt;br /&gt;Characteristics: Each of the document types in its own window, but all of the windows appear framed within a foundation window for the application. &lt;br /&gt;MDI with Microhelp has the same behaviour as an MDI frame window without Microhelp, but it also permits the display of microhelp information in the status bar. &lt;br /&gt;Characteristics: provides the Microhelp facility to deal with the limited number of words allowed in a Menu. In the status bar at the bottom of the frame we can display additional information about a MenuItem to help the user to understand what the MenuItem does. &lt;br /&gt;&lt;br /&gt;2. What are the Types of Windows and how is each one used? &lt;br /&gt;Main is used as a top-level, foundation window( or as a sheet in an MDI application) &lt;br /&gt;Child is used as a subordinate window. &lt;br /&gt;Pop-up is used to provide subordinate information and it is never covered by the parent window. &lt;br /&gt;Response is used to obtain information from and provide information to the user. &lt;br /&gt;MDI and MDI with microhelp is a window frame in which users can open multiple document windows (sheets). &lt;br /&gt;&lt;br /&gt;3. What is a control? &lt;br /&gt;Controls are objects that we place in a Window to allow the user to interact with the Application. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4. What kind of windows should be closed using the function CloseWithReturn( )? &lt;br /&gt;Response Windows.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-4607643066900317504?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/4607643066900317504/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=4607643066900317504' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/4607643066900317504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/4607643066900317504'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2010/08/powerbuilder-interview-question-part-9.html' title='Powerbuilder Interview question _ part 9'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-5925790547560013853</id><published>2010-08-30T05:32:00.000-07:00</published><updated>2010-08-30T05:33:14.128-07:00</updated><title type='text'>STORED PROCEDURE  questions</title><content type='html'>1. What is the stored procedure (SP)? &lt;br /&gt;Stored procedures are blocks of SQL code which have been compiled and stored on the server. It may be called from client processes or within triggers. &lt;br /&gt;Or &lt;br /&gt;A Stored Procedure is a set of precompiled and preoptimized SQL statements that performs some database operation. Stored Procedures reside where the DataBase resides and you can access them as needed. &lt;br /&gt;&lt;br /&gt;2. Why do we need Stored Procedures? &lt;br /&gt;Stored Procedures make our process faster. One time we compile select and then just use it. They give us completely controls how information is stored and retrieved. Security reason. Defined business rule and Maintenance &lt;br /&gt;or &lt;br /&gt;the benefits of using stored Procedures : &lt;br /&gt;n executes much faster, because the path is not created each time of execution of Stored Procedure &lt;br /&gt;n can be shared between multiple users; &lt;br /&gt;n it is much easier to manage them when they stored in DB, then embedded SQL. &lt;br /&gt;or &lt;br /&gt;Use stored procedures to improve: &lt;br /&gt;security &lt;br /&gt;consistency &lt;br /&gt;data integrity &lt;br /&gt;response time &lt;br /&gt;&lt;br /&gt;2a. What benefits of Stored Procedures ? &lt;br /&gt;n run faster than the same commands executed interactively as a batch &lt;br /&gt;n reduce network traffic &lt;br /&gt;n enforce consistency throughout the database &lt;br /&gt;n help provide security &lt;br /&gt;n reduce operator error &lt;br /&gt;&lt;br /&gt;3. How do you declare a Cursor for the Stored Procedure? &lt;br /&gt;Use Declare cursor statement: &lt;br /&gt;DECLARE emp_pro procedure for GetName &lt;br /&gt;@emp_name = :EditEmpName,:@emp_salary = 5000; &lt;br /&gt;&lt;br /&gt;4. How to use Stored Procedure from another one? &lt;br /&gt;Execute by name. &lt;br /&gt;&lt;br /&gt;5. What is allowed in Stored Procedure: &lt;br /&gt;n create view &lt;br /&gt;n create default &lt;br /&gt;n create trigger &lt;br /&gt;n create procedure &lt;br /&gt;n create table ? Nothing &lt;br /&gt;&lt;br /&gt;6. What is a Remote Procedure? &lt;br /&gt;Remote Procedure is a stored procedure which exists on a different server than the one you are currently connected to. Remote Procedure is when you execute procedures on another SQL server from your local SQL server. Once both servers are properly configured by System Administrator, System administrator does: &lt;br /&gt;1.Both servers must be configured for remote Access &lt;br /&gt;2.Our server must have the remote server in its list of known servers (sp_addserver) &lt;br /&gt;3.The remote server name must be in the interfaces file &lt;br /&gt;4.We Must have added appropriate remote login on the system being accessed &lt;br /&gt;We can execute any procedure on the remote SQL Server using the server name as part of the identifier. &lt;br /&gt;Exec.servername.dbo.procedurename &lt;br /&gt;We can pass value as parameters to a remote procedure from the SQL batch or procedure that contains the EXECUTE statement for the remote procedure. The Result will appear on our local terminal. &lt;br /&gt;&lt;br /&gt;7. What are : @@rowcount, @@error? &lt;br /&gt;@@rowcount is a Global variable which stores the number of rows affected by the most recent data modification operation. It is used to check how many rows were affected by a previous @@error a section of code may be executed based on the value returned by error code. &lt;br /&gt;&lt;br /&gt;8. What happens if you rename the object referenced by a Stored Procedure? &lt;br /&gt;We must drop and recreate a procedure if we rename any of the objects it references. A stored procedure that references a table or view whose name has been changed may seem to work fine until SQLServer recompiles it. Recompilation takes place for many reasons and without notification to the user. &lt;br /&gt;&lt;br /&gt;9. What is sp_depends? &lt;br /&gt;sp_depends is system a procedure that allows us to get a report (list) of the objects referenced by a procedure. We usually use it before when we need to drop or rename object. &lt;br /&gt;&lt;br /&gt;10. How do we create a Stored Procedure? Delete it? &lt;br /&gt;Create procedure “name” &lt;br /&gt;@- specify parameters (variable)(if we need any) &lt;br /&gt;as &lt;br /&gt;select . . . . &lt;br /&gt;If we use more than one SQL statement we have to use begin and end keyword &lt;br /&gt;delete storedprocedure - Drop procedure_name &lt;br /&gt;&lt;br /&gt;11. Name some of the Sybase system Stored Procedures you made use of. What did you use them for? &lt;br /&gt;The master DB contains useful stored procedures called “system procedures” that access the system tables. System procedures begin with “sp_” and can be run from any DB. The master DB contains a library of useful stored procedures which access the system tables. &lt;br /&gt;Sp_help - prints all database objects and data types &lt;br /&gt;sp_rename renames an object &lt;br /&gt;sp_helpindex indexes information on the table &lt;br /&gt;sp_depends displays dependency information &lt;br /&gt;sp_who displays currently logged on users &lt;br /&gt;sp_helptext prints text of store procedure, trigger, view, default of rule &lt;br /&gt;sp_lock displays information about locks &lt;br /&gt;sp_adduser sp_dropgroup &lt;br /&gt;sp_addgroup sp_droplogin &lt;br /&gt;sp_addlogin sp_dropuser &lt;br /&gt;sp_changegroup sp_lockloginsp &lt;br /&gt;sp_help sp_password &lt;br /&gt;sp_helpdb sp_user_id &lt;br /&gt;sp_helpgroup sp_user_name &lt;br /&gt;sp_helpuser &lt;br /&gt;&lt;br /&gt;12. How can you find out who you are? &lt;br /&gt;sp_who &lt;br /&gt;sp_who_am_i &lt;br /&gt;&lt;br /&gt;13. Let’s say you have Stored Procedure B that is being called from Stored 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? &lt;br /&gt;Yes. In case of a nested Stored Procedure changes are committed only after successful commit in the outermost Stored Procedure. You will not be allowed to put commit statement in nested stored procedure on syntax level. &lt;br /&gt;&lt;br /&gt;14. How can you return user-defined error message from a Stored Procedure? &lt;br /&gt;By using SQL function RaiseError( ). The number of errors must be greater than 2000. You should not use transaction statements in triggers. A trigger is a special kind of stored procedure that takes effect when you issue a statement such as INSERT, DELETE, or UPDATE on a specified table or column. Triggers can be used to enforce referential integrity. For example, assume that a certain condition within a trigger is not met and you want to execute a ROLLBACK. Instead of coding the ROLLBACK directly in the trigger, you should use RaisError and test for that particular return code in the DBMS-specific return code (SQLDBCode) property within the referenced transaction object. &lt;br /&gt;&lt;br /&gt;15. What utility do you use to create and place Stored Procedure into Sybase DB? &lt;br /&gt;Usually, I use DBA painter. But sometimes I use LAN Workplace and ISQL utility. &lt;br /&gt;You can use ISQL (DOS), WISQL, SQL Object Manager, etc. &lt;br /&gt;&lt;br /&gt;16. How can you use a Stored Procedure in PowerBuilder? &lt;br /&gt;We can use them as a Data Source for the DataWindows or we just execute them using EXEC command in PowerBuilder. If we just execute it and the Stored Procedure returns result-set, we have to: &lt;br /&gt;1. Declare variable for a Stored Procedure,for example, &lt;br /&gt;Declare emp_pro Procedure for &lt;br /&gt;pr_GetName @emp_name = :EditEmpName, &lt;br /&gt;@emp_salary = 500 &lt;br /&gt;2. Execute (e.g. execute emp_pro) &lt;br /&gt;3. Fetch in a Loop &lt;br /&gt;4. Close Procedure.(close emp_pro) (optional) &lt;br /&gt;&lt;br /&gt;17. Why do you use a Stored procedure instead of interactive SQL? &lt;br /&gt;Stored procedures work faster than the same SQL commands executed interactively, because first time a SP is run it is optimized, compiled and stored in cache memory. &lt;br /&gt;&lt;br /&gt;18. How do you call stored procedures from the script? &lt;br /&gt;By name: execute sp_name; &lt;br /&gt;&lt;br /&gt;19. How do you pass an argument from your script into a stored procedure? &lt;br /&gt;Declare variable with @ sign. &lt;br /&gt;Example &lt;br /&gt;DECLARE Emp_proc procedure for GetName &lt;br /&gt;@emp_name = :Emp_name_var, &lt;br /&gt;@emp_salary = :Emp_sal_var ; &lt;br /&gt;execute Emp_proc; &lt;br /&gt;&lt;br /&gt;20. What system Stored procedures do you use working with SP? &lt;br /&gt;SP_helptext - to view the text of store procedure &lt;br /&gt;SP_rename - to rename a store procedure &lt;br /&gt;&lt;br /&gt;21. How can be specify parameters for SP? &lt;br /&gt;The parameters can be specified by position or by name. &lt;br /&gt;&lt;br /&gt;22. What is a reason to use the default values for parameters in SP? &lt;br /&gt;If we defined default value for parameters in SP we can check if user provided values for parameters when the executed SP. &lt;br /&gt;&lt;br /&gt;23. How can we use SP in PB &lt;br /&gt;We can execute SP from the script or use it as a source for DW object. &lt;br /&gt;&lt;br /&gt;24. How can we pass value from SP to the user? &lt;br /&gt;We have to define parameters in SP with keyword OUTPUT &lt;br /&gt;&lt;br /&gt;25. What statement do you use if you want to execute SP from the script? &lt;br /&gt;DECLARE - to declare SP &lt;br /&gt;EXECUTE - TO EXECUTE SP &lt;br /&gt;FETCH - TO FETCH the result set into the variable (usually in the LOOP) &lt;br /&gt;CLOSE - is necessary if SP returns the RESULT SET &lt;br /&gt;&lt;br /&gt;26. If SP is a source for DW object how do you retrieve data? &lt;br /&gt;With PowerScript RETRIEVE() and if SP has parameters we have to provide these parameters in RETRIEVE() &lt;br /&gt;&lt;br /&gt;27. How do you call stored procedures from the script? &lt;br /&gt;Declare the PROCEDURE variable. The EXECUTE statement calls the procedure. The FETCH statement returns the result row, copying its values into two variables. SP is an SQL code that resides in the DB rather than in a client application and is executed by the DB server rather than a client workstation. First, call the procedure to generate the result set. Then issue FETCH commands in a loop to retrieve the results one row at a time. The last thing you do—CLOSE the procedure.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-5925790547560013853?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/5925790547560013853/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=5925790547560013853' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/5925790547560013853'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/5925790547560013853'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2010/08/stored-procedure-questions.html' title='STORED PROCEDURE  questions'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-126100692896348257</id><published>2010-08-30T05:30:00.000-07:00</published><updated>2010-08-30T05:32:04.338-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL server'/><title type='text'>SQL Server Fundamentals.</title><content type='html'>1. What is SQLCA, SQLSA, SQLDA? &lt;br /&gt;They are built-in global objects that are predefined in all applications. &lt;br /&gt;SQLCA - default PB Transaction Object, SQL communication area. Used to communicate with our Database. &lt;br /&gt;SQLSA is Dynamic Staging Area. We use it when we need to use a Cursor dynamically. &lt;br /&gt;SQLDA is Dynamic Description Area, used in dynamic SQL. &lt;br /&gt;&lt;br /&gt;2. When and why do we need dynamic SQL? &lt;br /&gt;Dynamic SQL is a structure of SQL statements which can be changed dynamically in your &lt;br /&gt;program. Used when at design time it is undetermined what the user is going to input (ad hoc Query). &lt;br /&gt;&lt;br /&gt;3. How many formats of Dynamic SQL do you know and what are they? &lt;br /&gt;1. InPut, NoResultSet &lt;br /&gt;2. InPut + ResultSet (through a dynamic Cursor or a dynamic Stored Procedure) &lt;br /&gt;3. InPut and ResultSet unknown until runtime. &lt;br /&gt;&lt;br /&gt;Consider the following code (it is the basis for Questions 1 - 8 ) : &lt;br /&gt;CREATE table my_table( a int not NULL, b int default 10 NULL) &lt;br /&gt;GO &lt;br /&gt;CREATE rule b_rule as b_val between 0 and 100 &lt;br /&gt;GO &lt;br /&gt;sp_bindrule b_rule, “my_table.b” &lt;br /&gt;GO &lt;br /&gt;CREATE view sample_view as SELECT * from my_table &lt;br /&gt;GO &lt;br /&gt;alter table my_table ADD c varchar(20) NULL &lt;br /&gt;GO &lt;br /&gt;alter table my_table ADD constraint b_check &lt;br /&gt;check(b between -10 and 10) &lt;br /&gt;GO. &lt;br /&gt;&lt;br /&gt;4. What value will be inserted into the table for column b by the following insert statement : INSERT sample_tab(a, b) values (1, NULL) &lt;br /&gt;Explicitly providing NULL is essentially a value (no value) and the default will not be used. &lt;br /&gt;&lt;br /&gt;5. If there were 50 rows already in the table when the default was bound to column b and 20 of the rows had no values for column b, what value will those rows have for column b after the default is bound? &lt;br /&gt;Defaults, rules apply only to future rows added to the table. Existing rows are unaffected. &lt;br /&gt;&lt;br /&gt;6. If a file containing 20 rows is bulk copied into a table and 5 of the rows do not have values for column b, what value will those rows have for column b after the bcp is completed? &lt;br /&gt;10 Defaults are recognized during bcp. &lt;br /&gt;&lt;br /&gt;7. Will file containing rows that have negative values for column b be added during bulk copying? &lt;br /&gt;Yes. Rules, triggers and constrains are not recognized during bulk copy operations. &lt;br /&gt;&lt;br /&gt;8. What columns will the user see if he runs the following SELECT statement : &lt;br /&gt;SELECT * from sample_view. &lt;br /&gt;Columns a and b. Although the view executes a select *, * is expanded during view compilation. Column c does not exist at this point. &lt;br /&gt;&lt;br /&gt;9. What values are allowed in column b for inserts/updates? &lt;br /&gt;0 to 10. The rule is checked first (between 0 and 100), then the constraint will be checked (-10 to 10). The valid range is the intersection. &lt;br /&gt;&lt;br /&gt;10. What methods can be used to enforce a business rule requiring a value in column b to be greater than a value in column a for an insert/update? &lt;br /&gt;A table-level constraint or an insert/update trigger. &lt;br /&gt;&lt;br /&gt;11. What command would you use to change the default value in column b to 5? &lt;br /&gt;Alter my_table replace b default 5. &lt;br /&gt;&lt;br /&gt;12. What system table contains information about objects, such as tables, defaults, and triggers within a Database? &lt;br /&gt;Sysobjects. &lt;br /&gt;&lt;br /&gt;13. How many pages are allocated when a table is created? &lt;br /&gt;An extent of 8 pages. &lt;br /&gt;&lt;br /&gt;14. How is clustered index different from a non-clustered index? &lt;br /&gt;Clustered indexes dictate the physical order of data. The leaf level of the clustered index is the data. A non-clustered index has a row in the leaf level of the index for every row in the table. &lt;br /&gt;&lt;br /&gt;15. Can a clustered index be placed on a separate device from a table? &lt;br /&gt;No. &lt;br /&gt;&lt;br /&gt;16. Can a column be deleted from a table? &lt;br /&gt;No. (Not officially, although a student once asked me this question. I answered, with authority “Never”. “I just did it!” he said. There is an undocumented System 10 feature : alter table t1 drop c1 from table t1. The implementation is interesting : the column is undefined, but all the data remains untouched until the rows are modified. As each row is modified, the column is nullified. &lt;br /&gt;&lt;br /&gt;17. What command allows you to add columns to a table? &lt;br /&gt;Alter table &lt;br /&gt;&lt;br /&gt;18. How many columns with the identity property can be created in a table? &lt;br /&gt;One or Zero. &lt;br /&gt;&lt;br /&gt;19. What system datatype must be used for identity columns? &lt;br /&gt;Numeric, with a definition of (n, 0) where n is the number of digits. &lt;br /&gt;&lt;br /&gt;20. What global variable can you query to determine the last identity value inserted into a table? &lt;br /&gt;@@identity &lt;br /&gt;&lt;br /&gt;21. Explain the difference between char and varchar datatypes? &lt;br /&gt;Char is fixed-length datatype whose trailing spaces are stored. Varchar is a variable-length datatype. Nullable char is stored like varchar because it is variable length – either no length or the declared length. &lt;br /&gt;&lt;br /&gt;22. How is the string “Bob” in a char (10) not-null column stored differently than the same string in a varchar(10) not-null column? &lt;br /&gt;This string would store 10 bytes in the char field (the string is padded with spaces) and 3 bytes in the varchar field (plus 1 byte overhead). &lt;br /&gt;&lt;br /&gt;23. Define what is meant by NULL? &lt;br /&gt;The absence of a value. &lt;br /&gt;&lt;br /&gt;24. How are null values handled by aggregate functions? &lt;br /&gt;NULLs are not considered in aggregates. &lt;br /&gt;&lt;br /&gt;25. What Sybase function can substitute a value for NULL in a query? &lt;br /&gt;IsNull (expression, value) &lt;br /&gt;&lt;br /&gt;26. What is the restriction on updating base tables through a view, if the view is defined on multiple tables? &lt;br /&gt;The columns being updated must exist in only one of the tables. &lt;br /&gt;&lt;br /&gt;27. What is the restriction on inserting data into a base table through a view if the view contains only a subset of the columns in the base table? &lt;br /&gt;The columns that are not part of the view must be Nullable or have a default. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;28. What is the restriction on deleting rows through a multitable view? &lt;br /&gt;Deletes are not allowed in multitable views. &lt;br /&gt;&lt;br /&gt;29. What is the maximum triggers that can be created on a table? &lt;br /&gt;Three triggers : insert, update, and delete triggers. (Note that there is a column called seltrig in Sysobjects, but it is not currently used.) &lt;br /&gt;&lt;br /&gt;30. If update on table_A fires a trigger that updates table_B, and table_A has an update trigger defined on it, will the trigger on table_B be executed? &lt;br /&gt;Yes, in the default server configuration. If the nested triggers configuration value is set to 0, the trigger on table_B would not fire. &lt;br /&gt;&lt;br /&gt;31. If an update of a row in table_A fires a trigger that updates another row in table_A, will the trigger on table_A execute again? &lt;br /&gt;No, by default. If nesting is allowed and set self_recursion on has been executed, the trigger would fire. &lt;br /&gt;&lt;br /&gt;32. What are the names of the tables that are accessible only from within a trigger when a trigger is executed? &lt;br /&gt;Inserted and deleted. &lt;br /&gt;&lt;br /&gt;33. What is the structure of the tables referred to in the previous question? &lt;br /&gt;The exact structure of the table on which the trigger is created. &lt;br /&gt;&lt;br /&gt;34. Where are tables mentioned in the previous two questions located? &lt;br /&gt;In memory. (Alternative answer : They actually are special views of syslogs) &lt;br /&gt;&lt;br /&gt;35. When is the Update(column_name) function used, and when it is true? &lt;br /&gt;Update(column_name) is used in a trigger to determine whether the value of a column has been modified. In an insert trigger, the function is true if a non-null value was inserted; in an update trigger, the function is true if a column was named in the update statement set clause. &lt;br /&gt;&lt;br /&gt;36. An insert trigger is created on a table that validates whether one of its column values exists in another table before allowing the insert to succeed. A file that contains invalid values for that column is bulk copied into the table. Will the rows be inserted by the bulk copy? &lt;br /&gt;Yes, bcp bypasses triggers, rules and constraints (but not defaults) &lt;br /&gt;&lt;br /&gt;37. An update trigger exists on the titles table which contains 1,000,000 rows. &lt;br /&gt;If you issue the following statement, how often does the trigger fire? &lt;br /&gt;UPDATE titles &lt;br /&gt;set price = price + $2 &lt;br /&gt;where type = “mod_cook” &lt;br /&gt;One time. A trigger fires once per modification statement whether the statement modifies zero, one or many rows in a table. &lt;br /&gt;&lt;br /&gt;38. If a table is created with a unique constraint on a column, will that column &lt;br /&gt;allow NULL values? &lt;br /&gt;Yes, but only once. &lt;br /&gt;&lt;br /&gt;39. What if the column is created with a primary key constraint? &lt;br /&gt;No. The primary key constraint requires the column to be declared as not NULL. &lt;br /&gt;&lt;br /&gt;40. If a view is created on table “my_table” and that table is renamed to “new_table” will the view still work? &lt;br /&gt;Yes. During compilation, the server converts an object name to an object ID. The rename changes only the name. &lt;br /&gt;&lt;br /&gt;41. If a column is added to a table after a view has been defined on the table, what must be done to make the column accessible through the view? &lt;br /&gt;Drop and re-create the view. &lt;br /&gt;&lt;br /&gt;42. Under which of the following circumstances will a stored procedure be automatically recompiled: &lt;br /&gt;a. Creating an index on a table referenced in the stored procedure? &lt;br /&gt;b. Dropping an index on a table referenced in the stored procedure which is being used to satisfy the query? &lt;br /&gt;c. Renaming a table referenced in the stored procedure? &lt;br /&gt;d. Using the same table to drop and re-create a table referenced in a stored procedure? &lt;br /&gt;b and d. &lt;br /&gt;&lt;br /&gt;43. What three methods can be used to force a stored procedure to recompile a new query plan? &lt;br /&gt;The following three methods : &lt;br /&gt;sp_recompile table_referenced_in_proc &lt;br /&gt;CREATE procedure proc_name ……. with recompile &lt;br /&gt;EXEC proc_name with recompile &lt;br /&gt;&lt;br /&gt;44. What system table contains information on system and user-defined datatypes? &lt;br /&gt;Systypes &lt;br /&gt;&lt;br /&gt;45. What stored procedure lists database user-defined types? &lt;br /&gt;Sp_help &lt;br /&gt;&lt;br /&gt;46. Describe how the @@trancount global variable is incremented and decremented. &lt;br /&gt;Each begin tran(tran_name) increments by 1, commit tran decrements by one, and rollback tran rolls the transaction back and returns the value zero. &lt;br /&gt;&lt;br /&gt;47. What type of the lock is held on a page during a select? A shared lock. &lt;br /&gt;&lt;br /&gt;48. What type of the lock is held on a page during an insert? An exclusive lock. &lt;br /&gt;&lt;br /&gt;49. How many page locks must be accessed by a single data modification statement before upgraded to a table lock? 200. &lt;br /&gt;&lt;br /&gt;50. What global variable contains the number of rows affected by your last executed SQL statement? Which SQL statements affect that variable? &lt;br /&gt;@@rowcount; all SQL statements except declare change the value of @@rowcount (many change its value to zero). &lt;br /&gt;&lt;br /&gt;51. What is difference between server cursors and language cursors? &lt;br /&gt;A server cursor is declared and processed in a stored procedure. &lt;br /&gt;A language cursor is declared and executed using SQL, but not Open Client calls. &lt;br /&gt;&lt;br /&gt;52. What is the proper sequence of statements to use and process a cursor? &lt;br /&gt;The following sequence of statements : &lt;br /&gt;DECLARE cursor_name cursor &lt;br /&gt;OPEN cursor_name &lt;br /&gt;FETCH cursor_name …. &lt;br /&gt;CLOSE cursor_name &lt;br /&gt;DEALLOCATE cursor cursor_name &lt;br /&gt;&lt;br /&gt;53. What statement is used to delete the currently fetched row in an updatable cursor? &lt;br /&gt;DELETE table_name where current of cursor_name &lt;br /&gt;&lt;br /&gt;54. What type of lock does an updatable cursor obtain by default as it fetches rows? What type of lock does a read-only cursor obtain? &lt;br /&gt;An updatable cursor obtains update locks. A read-only cursor obtains shared locks. &lt;br /&gt;&lt;br /&gt;55. What is the difference between the following two select statements? &lt;br /&gt;SELECT title, type, price from titles &lt;br /&gt;ORDER BY type &lt;br /&gt;COMPUTE avg(price) by type; &lt;br /&gt;&lt;br /&gt;SELECT title, type, price from titles &lt;br /&gt;ORDER BY type &lt;br /&gt;COMPUTE avg(price); &lt;br /&gt;The first select statement will report the average price for a type after listing its detail rows. The second select statement returns all detail rows followed by the average price for all non-null prices. &lt;br /&gt;&lt;br /&gt;56. Assume the following five users have each executed the following set of statements in different Databases (assume all users are not running in chained mode) : &lt;br /&gt;User1: begin tran User2: begin tran &lt;br /&gt;delete my_tab delete my_tab &lt;br /&gt;commit tran checkpoint &lt;br /&gt;go go &lt;br /&gt;&lt;br /&gt;User3: begin tran User4: begin tran &lt;br /&gt;delete my_tab delete my_tab &lt;br /&gt;commit tran go &lt;br /&gt;go &lt;br /&gt;checkpoint &lt;br /&gt;go &lt;br /&gt;&lt;br /&gt;User5: delete my_tab &lt;br /&gt;go &lt;br /&gt;If the SQL Server were to crash at this point, which of these transactions would be rolled back during recovery? Which would be rolled forward? Which would require no recovery? &lt;br /&gt;Assuming an internal checkpoint was not activated by the server immediately prior to the crash, User1 and User5 are rolled forward; User2 is rolled back; User3 and User4 do not require recovery. &lt;br /&gt;&lt;br /&gt;57. If a user executes the following set of statements, what rows will be displayed by a SELECT * from sample_tab statement? &lt;br /&gt;CREATE table test_table (a int) &lt;br /&gt;go &lt;br /&gt;begin tran my_tran &lt;br /&gt;INSERT sample_tab (8) values (1) &lt;br /&gt;save tran my_savept &lt;br /&gt;INSERT sample_tab (a) values (2) &lt;br /&gt;rollback tran my_savept &lt;br /&gt;INSERT sample_tab(a) values (3) &lt;br /&gt;commit tran &lt;br /&gt;&lt;br /&gt;The following will be displayed : &lt;br /&gt;a &lt;br /&gt;.. &lt;br /&gt;1 &lt;br /&gt;3 &lt;br /&gt;58. What global variable can you check to determine the current status of a transaction? &lt;br /&gt;@@transtate &lt;br /&gt;&lt;br /&gt;59. Describe a deadlock scenario. &lt;br /&gt;User1 locks page A, User2 locks page B. User1 requests page B(process will be blocked waiting for the lock on page B to be released). If User2 requests page A, a deadlock has occurred. &lt;br /&gt;&lt;br /&gt;60. What SQL statement is notorious for causing deadlock situations? &lt;br /&gt;SELECT ….. holdlock &lt;br /&gt;&lt;br /&gt;61. What steps can you take to avoid deadlocks? &lt;br /&gt;You can access tables in the same order, decrease the length of transactions, avoid the use of holdlock, and spread data across data pages. &lt;br /&gt;&lt;br /&gt;62. What is the definition of a transaction? &lt;br /&gt;A transaction is a logical unit of work. &lt;br /&gt;&lt;br /&gt;63. Describe the differences between chained transaction mode and unchained &lt;br /&gt;transaction mode. When does a transaction begin and end in chained mode? &lt;br /&gt;In unchained mode? &lt;br /&gt;In chained mode, the server begins a transaction before the first SQL statement(insert, update, delete, or select) Only commit transaction must be specified. In unchained mode, begin and commit tran statements are required to define a logical unit of work; each SQL statement includes an implied begin tran and commit tran statement. &lt;br /&gt;&lt;br /&gt;64. What global variable can you query to determine whether you are running in chained or unchained transaction mode? &lt;br /&gt;@@tranchained &lt;br /&gt;&lt;br /&gt;65. Based on following SQL statements : begin tran my_tran &lt;br /&gt;print “Updating titles” &lt;br /&gt;UPDATE titles set price = price * $1.25 &lt;br /&gt;if (SELECT avg(price) from titles ) &gt; $50 &lt;br /&gt;print “Avg price exceeds $50” &lt;br /&gt;rollback tran my_tran &lt;br /&gt;Print “Update rolled back” &lt;br /&gt;return &lt;br /&gt;commit tran &lt;br /&gt;print “Update successful” &lt;br /&gt;go &lt;br /&gt;a) What will be displayed if the average price after update is greater than $50? &lt;br /&gt;“Updating titles”, “Avg price exceeds $50”, and “Update rolled back”. &lt;br /&gt;b)What will be displayed if the average price after update is less than $50? &lt;br /&gt;“Updating titles”, and “Update rolled back”. &lt;br /&gt;&lt;br /&gt;66. What changes would you recommend for the code in Question 63? &lt;br /&gt;Add begin after the if statement, and add end after the return statement. &lt;br /&gt;&lt;br /&gt;67. How are local variables defined in SQL? How are global variables defined? &lt;br /&gt;Local variables are defined by declare # @variable_name datatype. &lt;br /&gt;Global variables are defined by system. &lt;br /&gt;&lt;br /&gt;68. How are values assigned to local variables? &lt;br /&gt;The select statement (SELECT @var_name = value) &lt;br /&gt;&lt;br /&gt;69. How are values assigned to global variables? &lt;br /&gt;Values for global variable are read-only : only the server may update globals. &lt;br /&gt;&lt;br /&gt;70. What is the definition of local variables? &lt;br /&gt;Local variables exist for the duration of a stored procedure or for the duration of a batch. &lt;br /&gt;&lt;br /&gt;71. What are the two ways to change the displayed column heading for a select statement? &lt;br /&gt;The two ways are as follows : &lt;br /&gt;SELECT “Heading” = col_name …… &lt;br /&gt;SELECT col_name Heading ……. &lt;br /&gt;&lt;br /&gt;72. What statement (other than CREATE TABLE) can be used to create a table in SQL Server? &lt;br /&gt;SELECT into &lt;br /&gt;&lt;br /&gt;73. What will be the effect using the following statement : &lt;br /&gt;SELECT * into new_titles from titles where 1= 2 &lt;br /&gt;A new table will be created having the same structure with no rows &lt;br /&gt;&lt;br /&gt;74. What data values would the following WHERE clause match : &lt;br /&gt;WHERE name like “%[Cc]omputer” &lt;br /&gt;Any string that ends in the word Computer or computer. &lt;br /&gt;&lt;br /&gt;75. What function is used to display the value of a datetime column in the format dd/mm/yyyy? &lt;br /&gt;Convert. &lt;br /&gt;&lt;br /&gt;76. What security requirements must be met before a table can be referenced by a foreign key reference constraint? &lt;br /&gt;Either both tables must be owned by the same user or the references permission must be granted. &lt;br /&gt;&lt;br /&gt;77. Consider the following table definition : &lt;br /&gt;CREATE table titles (title_id char(8) not NULL, &lt;br /&gt;title varchar (68) not null, &lt;br /&gt;pub_id char (4) not null &lt;br /&gt;references publishers (pub_id) &lt;br /&gt;total_sales int null, &lt;br /&gt;pub_date datetime not null) &lt;br /&gt;What happens if you attempt to delete a row from publishers, where there is an existing title in the titles table for that pub_id? &lt;br /&gt;The delete fails, but processing continues. You must check @@error and rollback manually. &lt;br /&gt;&lt;br /&gt;78. Considering the code in Question 77, what if you attempt to update a pub_id for a publisher who has related rows in the titles table? &lt;br /&gt;The update fails. &lt;br /&gt;&lt;br /&gt;79. Considering the code in Question 77, what if you attempt to insert a new publisher table? The row is inserted. &lt;br /&gt;&lt;br /&gt;80. Considering the code in question 77, what happens if you attempt to insert a row into the titles table? It will check the pub_id value to see if it exists in the publishers table. If not, the insert fails. &lt;br /&gt;&lt;br /&gt;81. Considering the code in Question 77, what happens if you update a pub_id in the titles table? &lt;br /&gt;It checks to see if the new value is in the publisher table. If not, the update fails. &lt;br /&gt;&lt;br /&gt;82. Considering the code in Question 75, what if you delete a row the titles table? &lt;br /&gt;The row is deleted. &lt;br /&gt;&lt;br /&gt;83. Describe the difference between a table-level and a column-level constraint. &lt;br /&gt;A constraint is considered table level if it is defined after the column definitions in the CREATE table statement or is defined using alter table. &lt;br /&gt;&lt;br /&gt;84. When must you define a constraint as a table-level constraint? &lt;br /&gt;When the constraint references two different columns. &lt;br /&gt;&lt;br /&gt;85. What value will be displayed for @var when the following statements are executed: &lt;br /&gt;CREATE proc my_proc (@parm1 int output) &lt;br /&gt;as &lt;br /&gt;SELECT @parm1 = @parm1 + 50 &lt;br /&gt;go &lt;br /&gt;&lt;br /&gt;DECLARE @var int &lt;br /&gt;SELECT @var = 50 &lt;br /&gt;EXEC my_proc @var output &lt;br /&gt;SELECT @var &lt;br /&gt;go &lt;br /&gt;100. &lt;br /&gt;&lt;br /&gt;86. What data values can be returned by the return statement from within a stored procedure? Any integer value. &lt;br /&gt;&lt;br /&gt;87. What data values are reserved for use by Sybase? &lt;br /&gt;-1 through -99 &lt;br /&gt;&lt;br /&gt;88. What statement is used to generate system -like error messages? &lt;br /&gt;RaisError &lt;br /&gt;&lt;br /&gt;89. What is the minimum error number that can be used? &lt;br /&gt;20 001 &lt;br /&gt;&lt;br /&gt;90. If a rule is bound to a user-defined datatype, what happens to any existing columns that are defined with that user-defined datatype? &lt;br /&gt;The rule will also be bound to those columns. &lt;br /&gt;&lt;br /&gt;91. What if those columns in the previous question already had a rule that was bound explicitly to the column? &lt;br /&gt;An explicit bind to a column overrides a bind to a datatype. The bind to the datatype would have no effect. &lt;br /&gt;&lt;br /&gt;92. If a column has a rule bound to it and you attempt to bind another rule to that column, what happens? &lt;br /&gt;The new rule will replace the old one (the existing rule does not have to be unbound). &lt;br /&gt;&lt;br /&gt;93. How are database objects fully qualified? &lt;br /&gt;dbname.username.objectname &lt;br /&gt;&lt;br /&gt;94. What is the purpose of the syskeys table? &lt;br /&gt;The syskeys table contains a row for every primary, foreign or common key in a Database.(These rows are added through sp_primarykey, sp_foreignkey, or sp_coomonkey). Keys are stored for documentation and reference only; the server does not enforce keys as part of referential integrity. Use constraints instead. SQL Server Administration. &lt;br /&gt;&lt;br /&gt;95. What command do use to configure the SQL Server? &lt;br /&gt;sp_configure &lt;br /&gt;&lt;br /&gt;96. What command do you use to start SQL Server? &lt;br /&gt;StartServer &lt;br /&gt;&lt;br /&gt;97. How are remote procedures invoked? &lt;br /&gt;By fully qualifying the procedure name to include the server name .The format is &lt;br /&gt;servername.dbname.owner.procedure_name. &lt;br /&gt;&lt;br /&gt;98. What needs to be set up or configured on the local server to implement remote procedure calls? &lt;br /&gt;Remote access needs to be installed and the names of the local and remote servers needs to be added with sp_addserver &lt;br /&gt;&lt;br /&gt;99. What needs to be set up or configured on the remote server to implement remote procedure calls? &lt;br /&gt;Remote access needs to be installed; a remote login method needs to be selected and remote logins added; and the names of the local and remote servers need to be added with sp_addserver &lt;br /&gt;&lt;br /&gt;100. What is normalization? What do you mean by Under- and Overnormalization? &lt;br /&gt;Normalization means that you eliminated redundancy. Normalization is a theory of a logical Database design which refer to minimum data redundancy and maximum data integrity. &lt;br /&gt;1. Eliminate arrays. &lt;br /&gt;2. Eliminate repeating data across the rows. &lt;br /&gt;3. Make sure all columns within a row depend on the primary key column. &lt;br /&gt;4. Eliminate situation when two or more columns have mutual exclusive values. &lt;br /&gt;Undernormalization contains a lot of redundant data &lt;br /&gt;Overnormalization contains a lot of small tables which call a lot of joins. &lt;br /&gt;&lt;br /&gt;101. Why its not such a good idea to use joining more then certain number of tables? &lt;br /&gt;Because joining more then five tables in Sybase database will decrease performance. &lt;br /&gt;&lt;br /&gt;102. What does OPEN CURSOR mean? &lt;br /&gt;OPEN CURSOR causes the SELECT specified when the cursor was declared to be executed. The USING Transaction Object clause is not allowed with OPEN; the transaction object was specified in the statement that declared the cursor. &lt;br /&gt;&lt;br /&gt;103. What is the purpose of Fetch statement? &lt;br /&gt;We use Fetch to retrieve data from the buffer, line by line, and place it into a variable.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-126100692896348257?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/126100692896348257/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=126100692896348257' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/126100692896348257'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/126100692896348257'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2010/08/sql-server-fundamentals.html' title='SQL Server Fundamentals.'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-7758052069375921653</id><published>2010-08-30T05:29:00.000-07:00</published><updated>2010-08-30T05:30:19.235-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder'/><title type='text'>powerbuilder interview question _ part 8</title><content type='html'>POLYMORPHISM &lt;br /&gt;&lt;br /&gt;1. What is polymorphism ? &lt;br /&gt;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 &lt;br /&gt;“John” + “Smith” Concatenation plus &lt;br /&gt;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. &lt;br /&gt;&lt;br /&gt;2. How do you understand using Overloading functions in Polymorphism? &lt;br /&gt;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. &lt;br /&gt;&lt;br /&gt;3. What is overloading? &lt;br /&gt;When the function of the object has the same name but different arguments. &lt;br /&gt;&lt;br /&gt;4. What is polymorphism? &lt;br /&gt;Polymorphism is when functions have the same name but behavior varies with the type of the object to which it is applied. &lt;br /&gt;&lt;br /&gt;5. Give examples of polymorphic functions in PowerBuilder. &lt;br /&gt;For example, 1 +1 = 2 mathematics plus &lt;br /&gt;“John” + “Smith” Concatenation plus &lt;br /&gt;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. &lt;br /&gt;Uo_document doc &lt;br /&gt;… &lt;br /&gt;//NextDocument() may return a u_Invoice or u_Check document &lt;br /&gt;doc = NextDocument() &lt;br /&gt;doc.Print() &lt;br /&gt;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. &lt;br /&gt;&lt;br /&gt;6. What is polymorphism? &lt;br /&gt;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. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1. What is Regenerate option in the Library painter? When is it most useful? &lt;br /&gt;It compiles all codes of an object(s). Regeneration is important during the development of our PB application. Regeneration is useful: &lt;br /&gt;n when we have an error message with no reason for it; &lt;br /&gt;n When we upgrade to a new version of PB, the new version should regenerate all its source code to update it; &lt;br /&gt;n When we make a change to an ancestor window that has many descendants, the changes can be immediately rippled throughout all child window through regeneration. &lt;br /&gt;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. &lt;br /&gt;&lt;br /&gt;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 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;SCRIPT &lt;br /&gt;&lt;br /&gt;1. How is a script associated with an object ? &lt;br /&gt;When an event occurs, PowerBuilder executes the script for that event. &lt;br /&gt;&lt;br /&gt;2. With which objects can a script be associated ? Any. &lt;br /&gt;&lt;br /&gt;3. Code the broad outlines of the code necessary to check the value in the integer variable Count against the following ranges of values : &lt;br /&gt;n less than or equal to zero(0) &lt;br /&gt;n equal to 1, 2, or 3 &lt;br /&gt;n between 4 and 10 (including 4 and 10) &lt;br /&gt;n over 10. &lt;br /&gt;&lt;br /&gt;4. What is a script ? &lt;br /&gt;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 &lt;br /&gt;calls to function &lt;br /&gt;assignment statement &lt;br /&gt;flow of control statement (IF and CHOOSE statements) &lt;br /&gt;embedded SQL statement. &lt;br /&gt;&lt;br /&gt;5. Under what circumstances do you need to declare multiple instances of a window class? &lt;br /&gt;&lt;br /&gt;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. &lt;br /&gt;w_cust_maint w_cust_maint1 &lt;br /&gt;w_cust_maint1.Title = “Referenceable Customer” &lt;br /&gt;&lt;br /&gt;6. What is a focus ? &lt;br /&gt;A focus identifies where on the Window the next action will take place. &lt;br /&gt;&lt;br /&gt;7. How do you pass an array as an argument? &lt;br /&gt;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. &lt;br /&gt;&lt;br /&gt;8. What is an array? &lt;br /&gt;An array is an indexed massive of variables of the same Data Type. &lt;br /&gt;EX. Prise[ ] or Prise[50] &lt;br /&gt;9. Why are static arrays preferable over dynamic arrays? &lt;br /&gt;Static arrays tell us how many elements an array will have by specifying number in brackets. Static arrays are faster. &lt;br /&gt;Dynamic arrays grow dynamically what is more convenient . &lt;br /&gt;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. &lt;br /&gt;&lt;br /&gt;10. What is Array Data type? &lt;br /&gt;Array is a massive of variables of the same Data Type &lt;br /&gt;&lt;br /&gt;11. You need to process an array in a loop. Which function should you use if you don’t know array’s size (i.e., number of array elements)? &lt;br /&gt;UPPERBOUND(Array) &lt;br /&gt;int i &lt;br /&gt;FOR i =1 TO UPPERBOUND(Array) &lt;br /&gt;statementblock &lt;br /&gt;NEXT &lt;br /&gt;&lt;br /&gt;12. What is enumerated data type? How is it represented and what is its purpose ? &lt;br /&gt;Some functions which were written in some other languages and build into PowerBuilder and PowerBuilder recognises them by the exclamation point at the end. &lt;br /&gt;&lt;br /&gt;13. Can you always use CHOOSE…..CASE instead of IF-THEN-ELSE ? &lt;br /&gt;Yes. We can. CHOOSE…..CASE More readable &lt;br /&gt;&lt;br /&gt;14. What is the difference between DO… WHILE and DO… UNTIL clauses? &lt;br /&gt;DO… WHILE will perform an action only while the condition is TRUE: &lt;br /&gt;int A = 1, B = 1 &lt;br /&gt;DO WHILE condition DO WHILE A &lt;= 15 &lt;br /&gt;statementblock BEEP(A) &lt;br /&gt;LOOP A = (A + 1) * B &lt;br /&gt;LOOP &lt;br /&gt;DO… UNTIL will perform an action only until the condition is TRUE: &lt;br /&gt;DO UNTIL condition int A = 1, B = 1 &lt;br /&gt;statementblock DO UNTIL A &gt; 15 &lt;br /&gt;LOOP BEEP(A) &lt;br /&gt;A = (A + 1) * B &lt;br /&gt;LOOP &lt;br /&gt;&lt;br /&gt;15. What is the difference between DO WHILE ….LOOP and DO….LOOP WHILE ? &lt;br /&gt;DO WHILE ….LOOP performs an action only while the condition is TRUE: &lt;br /&gt;DO WHILE condition &lt;br /&gt;statementblock &lt;br /&gt;LOOP &lt;br /&gt;DO….LOOP WHILE performs an action at least once and repeat while the condition is TRUE &lt;br /&gt;DO &lt;br /&gt;statementblock &lt;br /&gt;LOOP WHILE condition &lt;br /&gt;&lt;br /&gt;16. What do you use to exit the loop before the condition in the loop is met? &lt;br /&gt;What are the 2 choices? &lt;br /&gt;We use EXIT inside the loop if we want to terminate the loop. EXIT jumps to the first &lt;br /&gt;statement after the loop. Continue skips the rest of the statement inside the loop and returns to the beginning of loop to start the next iteration. &lt;br /&gt;&lt;br /&gt;17. What is ANY Data Type ? How is it used? &lt;br /&gt;Any is a chameleon data type — it takes the data type of the value assigned to it. &lt;br /&gt;&lt;br /&gt;18. What is a BLOB data type? &lt;br /&gt;BLOB is Unbound data type that stands for binary large object. Usually used to hold pictures, window’s wave sound file or very large text files. &lt;br /&gt;19. How would you display a toolbar on a left side of screen, floating? &lt;br /&gt;Syntax: &lt;br /&gt;window_name .ToolbarAlignament = AlignLeft! (AlignAtTop!, &lt;br /&gt;.... AlignRight!, &lt;br /&gt;.... AlignAtBottom! &lt;br /&gt;.... Floating!) &lt;br /&gt;enumerated datatype &lt;br /&gt;&lt;br /&gt;20. How do you put the time in the status bar? &lt;br /&gt;On the open event of a window call Timer(1). On the timer event Time = Now( ) &lt;br /&gt;SetMicroHelp(Time) &lt;br /&gt;&lt;br /&gt;21. Can Script#1 share a local variable declared in Script#2? &lt;br /&gt;No, it cannot. Local variables are accessible only in the script in which they are declared. &lt;br /&gt;&lt;br /&gt;22. What data types do you know? &lt;br /&gt;There are following data types in PowerBuilder : &lt;br /&gt;1. Standard (string,…..) &lt;br /&gt;2. Enumerated data types its a some functions which were made in other languages and pb recognise it by exclamation point at the end &lt;br /&gt;3. Array is a massive of variables of the same Data Type &lt;br /&gt;4. Structure is a collection of one or more related variables of different or the same data types grouped under one name. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;23. Where would you put a code to make sure that everything has been saved on the window in case if a user is closing the window? &lt;br /&gt;I would write this code on CloseQuery event of the window. A CloseQuery event occurs every time when the window is to about to be closed. At this moment PowerBuilder checks the value of the attribute. If after performing some processing we don’t want to allow a user to close the window, set Return 1. When we close a window, PowerBuilder triggers the CloseQuery event and inspects the value of Message.ReturnValue. If the Message Return Value 1, the window cannot be closed. Note: Closing any window causes PowerBuilder to close all Child and Pop-up windows that is opened, and closing an MDI frame window causes PowerBuilder to close all sheet windows within it. Any window thus being closed can set Message.ReturnValue to cancel the close operation. &lt;br /&gt;&lt;br /&gt;24. Where can external functions be declared? &lt;br /&gt;External functions can be declared in the Application Object, User Object or Window Object. To declare an external functions, select External Functions on the Declare Menu of the current object painter or the PowerScript Painter. &lt;br /&gt;&lt;br /&gt;25. What is the maximum number of characters that you can enter into a control? &lt;br /&gt;The maximum size is a little bit more then 32KB &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;26. What can you do if you want to leave the PowerScript Painter but the script won’t compile? &lt;br /&gt;I’ll put comments(//) on my code. When we are leaving the PowerScript Painter, it automatically compiles our script. We can have a script containing the errors, To save the script without correcting the errors, comment out any lines in errors. &lt;br /&gt;&lt;br /&gt;27. What statement evaluates one variable? &lt;br /&gt;Statement Choose Case evaluates one variable. &lt;br /&gt;&lt;br /&gt;28. What should be done to make sure that several RadioButtons understand that they belong to the same group (the user can select only one button in the group)? &lt;br /&gt;By using GroupBox control. If the GroupBox contains RadioButtons, the user can select only one RadioButton in the GroupBox at a time. &lt;br /&gt;&lt;br /&gt;29. How to update a ListBox without using a DataWindows? &lt;br /&gt;AddItem( ) &lt;br /&gt;&lt;br /&gt;30. How to pass control as parameter(for ex. DataWindow)? &lt;br /&gt;Specify as an argument in a function a chosen type of this control &lt;br /&gt;&lt;br /&gt;31. How many Windows can be in the application?(maximum) &lt;br /&gt;No more then 60 but we have more then 100. &lt;br /&gt;&lt;br /&gt;32. Could you invoke DOS editor from PowerBuilder? &lt;br /&gt;Yes pressing Shift-F6 anywhere. &lt;br /&gt;33. How could you invoke help about specific function or reserved word from Power Script painter? &lt;br /&gt;To highlight this function or reserved word and press shift-F1 &lt;br /&gt;&lt;br /&gt;34. How do we specify processing that takes place in our application? &lt;br /&gt;By writing a script for different events that occurs. PB applications are event-driven. &lt;br /&gt;&lt;br /&gt;35. How do you refer to the attribute inside the scripts? &lt;br /&gt;Using syntax calling dot notation:. &lt;br /&gt;&lt;br /&gt;36. How can you use enumerated data types? &lt;br /&gt;As an arguments in functions or to specify the attributes of an object or control. &lt;br /&gt;&lt;br /&gt;37. What is the array? &lt;br /&gt;An array is an indexed collection of elements of a single data type. Could be fixed or variable size. Fixed-size arrays could be multidimentional. &lt;br /&gt;&lt;br /&gt;38. What kind s of iteration(repeated) statements do you know? &lt;br /&gt;For . . .NEXT uses to execute statementblock a specified number of times; &lt;br /&gt;4 formats of DO. . LOOP &lt;br /&gt;DO UNTIL . . . LOOP executes statementblock until condition is TRUE. If condition is TRUE in the first statement statementblock does not execute. &lt;br /&gt;DO WHILE . . . LOOP executes statementblock while condition is true. If condition is FALSE on the first evaluation statementblock does not execute. &lt;br /&gt;DO. . . LOOP UNTIL The same as DO. . . UNTIL LOOP, but statement always executes at least once. &lt;br /&gt;DO. . . LOOP WHILE the same as DO WHILE . . LOOP, but statementblock always executes at least once. &lt;br /&gt;&lt;br /&gt;39. What will be the outcome of the following code: &lt;br /&gt;int I = 5 &lt;br /&gt;string name = “fox” &lt;br /&gt;If int I = 5 then &lt;br /&gt;if name = “rabbit” then &lt;br /&gt;if I &lt; 10 then &lt;br /&gt;MessageBox(“Status”, “one”) &lt;br /&gt;else &lt;br /&gt;MessageBox(“Status”, “two”) &lt;br /&gt;end if &lt;br /&gt;else &lt;br /&gt;if I &lt;10 then &lt;br /&gt;MessageBox(“Status”, “three”) &lt;br /&gt;elseif I = 5 then &lt;br /&gt;MessageBox(“Status”, “four”) &lt;br /&gt;else &lt;br /&gt;MessageBox(“Status”, “five”) &lt;br /&gt;end if &lt;br /&gt;MessageBox(“Status”, “five”) &lt;br /&gt;end if &lt;br /&gt;elseif I &gt; = 5 then &lt;br /&gt;MessageBox(“Status”, “six”) &lt;br /&gt;end if &lt;br /&gt;MessageBox(“Status”, “three”) and MessageBox(“Status”, “five”) &lt;br /&gt;&lt;br /&gt;40. What’s wrong with the logic in the following code: &lt;br /&gt;if years_of_service &gt; 10 then &lt;br /&gt;vacation = 4 &lt;br /&gt;bonus_factor = 1.5 &lt;br /&gt;elseif years_of_service &gt; 6 and years_of_service &lt; 10 then &lt;br /&gt;vacation = 3 &lt;br /&gt;bonus_factor = 1.2 &lt;br /&gt;else &lt;br /&gt;vacation = 2 &lt;br /&gt;bonus_factor = 1.0 &lt;br /&gt;end if &lt;br /&gt;There is nothing said about years_of_service = 10 &lt;br /&gt;&lt;br /&gt;41. Can we prevent window from closing? &lt;br /&gt;On the close query event we have to write script: &lt;br /&gt;IF MessageBox("Closing window", "Are you sure?", Question!, YesNo!) = 2 THEN &lt;br /&gt;RETURN 1 &lt;br /&gt;ELSE &lt;br /&gt;RETURN 0 &lt;br /&gt;END IF &lt;br /&gt;0 - Allow the window to be closed &lt;br /&gt;1 - Prevent the window from closing&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-7758052069375921653?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/7758052069375921653/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=7758052069375921653' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/7758052069375921653'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/7758052069375921653'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2010/08/powerbuilder-interview-question-part-8.html' title='powerbuilder interview question _ part 8'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-4199085041053296937</id><published>2010-08-30T05:25:00.000-07:00</published><updated>2010-08-30T05:28:13.784-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder'/><title type='text'>Powerbuilder Interview question _part 7</title><content type='html'>NULL&lt;br /&gt;&lt;br /&gt;1. What is NULL? What happens when you use NULL in expressions?&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;2. How can a variable become NULL?&lt;br /&gt;Can be read from database or SetNull() function can be used&lt;br /&gt;&lt;br /&gt;3. How to test whether variable or expressions is NULL?&lt;br /&gt;Using ISNULL()&lt;br /&gt;&lt;br /&gt;4. How does NULL behave in boolean expressions?&lt;br /&gt;In AND logical operators that contain NULL result is always False In OR logical operators that contain NULL result is always True.&lt;br /&gt;&lt;br /&gt;21. What is NULL? What happens when you use NULL in expressions?&lt;br /&gt;What NULL means:&lt;br /&gt;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.&lt;br /&gt;Null is an unknown variable. When you use null in expressions they become null.&lt;br /&gt;When a NULL value is read into a variable, the variable remains NULL unless it is changed in a script.&lt;br /&gt;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.&lt;br /&gt;Any variable, regardless of its type, can be set to NULL using the PowerScript SetNull function. E.g.&lt;br /&gt;string i1&lt;br /&gt;SetNull (i1)&lt;br /&gt;If any part of the expression is NULL, the result of the entire expression is NULL.&lt;br /&gt;OBJECT BROWSER&lt;br /&gt;&lt;br /&gt;1. How do you look up functions for control (for example, ListBox) ?&lt;br /&gt;Using Object Browser. We have to select the control and click on object browser.&lt;br /&gt;&lt;br /&gt;2. What is the purpose of the Object Browser?&lt;br /&gt;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. &lt;br /&gt;&lt;br /&gt;3. Where can you see all system object data types?&lt;br /&gt;From library painter opening Select Browser class Hierarchy from the utilities menu.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;OLE&lt;br /&gt;&lt;br /&gt;OLE (object linking and embedding) is a standard that allows Windows programs to share both data and program functionality&lt;br /&gt;1. In OLE, what is a server application?&lt;br /&gt;A server application is the program that creates, displays, and edits embedded objects.&lt;br /&gt;&lt;br /&gt;2. What is the role of a container application?&lt;br /&gt;A container application is an application that contains references to an object embedded within.&lt;br /&gt;&lt;br /&gt;3. Explain in-place activation.&lt;br /&gt;The server application appears in the foreground and its menus replace those of the DataWindow painter or PowerBuilder application.&lt;br /&gt;&lt;br /&gt;4. Where can you find information on OLE server applications for your Windows&lt;br /&gt;environment?&lt;br /&gt;&lt;br /&gt;5. How do you know what data type to use to store blobs in your Database?&lt;br /&gt;Different DBMS have different data types that can be used to hold blobs.&lt;br /&gt;Sybase SQL Anywhere ---- long binary&lt;br /&gt;Oracle ---- long row&lt;br /&gt;Sybase SQL Server ---- image&lt;br /&gt;&lt;br /&gt;6. How should a blob column be defined in a data table?&lt;br /&gt;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).&lt;br /&gt;&lt;br /&gt;7. In what ways can you use OLE with a DataWindow?&lt;br /&gt;As a presentation style.&lt;br /&gt;&lt;br /&gt;8. How do you place a blob column in a DataWindow object?&lt;br /&gt;Include blobs in a DataWindows object and define the data source.&lt;br /&gt;1. What is the difference between an instance variable and a shared variable?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;They have different scope. The value of the shared variable is available &lt;br /&gt;from all instances of the same object. Instance variables are associated with one instance of &lt;br /&gt;an object such as a window and each instance can have different values in instance &lt;br /&gt;variable.&lt;br /&gt;&lt;br /&gt;2.Why should you optimize libraries?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The library entity can become fragmented over time, increasing seek times.&lt;br /&gt;&lt;br /&gt;3. What is the difference between reserved words Parent and ParentWindow when &lt;br /&gt;they are used in the scripts for the menu item ?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;When you use Parent in the script for a MenuItem, Parent refers to the &lt;br /&gt;MenuItem on the level above the MenuItem the script is for.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The reserved word ParentWindow refers to the window a menu is associated &lt;br /&gt;with.&lt;br /&gt;&lt;br /&gt;4. How can you override user object's function?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;To override an object's function , create a descendant object and declare&lt;br /&gt;in there a function with the same name and arguments as in its ansestor.&lt;br /&gt;&lt;br /&gt;5. What are object name pronouns and how do you use them?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;You use them to refer to objects or controls instead of using actual &lt;br /&gt;name. Pronouns are reserved words This,Super, Parent and ParentWindow.&lt;br /&gt;&lt;br /&gt;This is used to refer to an object or control from within any script coded &lt;br /&gt;for it.&lt;br /&gt;Super reffers to an immediate anscestor of the object.&lt;br /&gt;Parent is used to refer the window from any script for a control on the &lt;br /&gt;window.&lt;br /&gt;ParentWindow is used to refer to a window from a menu script.&lt;br /&gt;&lt;br /&gt;6. How many clustered and non-clustered indexes can you create for a table in &lt;br /&gt;Sybase?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;You can create 1 clustered and up to 249 non-clustered indexes in Sybase.&lt;br /&gt;&lt;br /&gt;7. What is the difference between Where and Having clauses?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Where clause eliminates unneeded rows before creating a result set as &lt;br /&gt;opposed&lt;br /&gt;to Having clause that gets rid of unwanted rows after the result set is &lt;br /&gt;built.&lt;br /&gt;&lt;br /&gt;8. How can you create multiple instances of the same window object? &lt;br /&gt;&lt;br /&gt;To create an instance of a window type w_name &lt;br /&gt;1.Declare a variable of type w_name : w_name w_mywindow&lt;br /&gt;2. To open a new instance (and display the window) use the function call&lt;br /&gt;like Open (w_mywindow)&lt;br /&gt;&lt;br /&gt;Another way of creating multiple instances is by declaring a global &lt;br /&gt;array having &lt;br /&gt;type of your window (w_name w_mywindow[]) and use this array to store &lt;br /&gt;references to &lt;br /&gt;multiple instances when you open the window (Open (w_mywindow[iCounter]).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;9. What's the usage of DECODE() function in Oracle?&lt;br /&gt;&lt;br /&gt;Remove the pseudocolumn reference or function call from the procedural statement. Or, replace the procedural statement with a SELECT INTO statement; for example, replace&lt;br /&gt;&lt;br /&gt;bonus := DECODE(rating, 1, 5000, 2, 2500, ...);&lt;br /&gt;&lt;br /&gt;with the following statement:&lt;br /&gt;&lt;br /&gt;SELECT DECODE(rating, 1, 5000, 2, 2500, ...) INTO bonus FROM dual;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;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 &lt;br /&gt;Select item_id, decode(Condition_Code,&lt;br /&gt;'DS', 'Dents',&lt;br /&gt;'ES', 'Electrical short','Unnown condition code')&lt;br /&gt;from repair_items. &lt;br /&gt;&lt;br /&gt;10. How can you dynamically place an User Object on the Window?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;You do this by using function OpenUserObject(). &lt;br /&gt;If you want to open the User Object with passing some parameters to it &lt;br /&gt;you use &lt;br /&gt;the function OpenUserObjectWithParm().&lt;br /&gt;If you don't need this object anymore you have to call the function &lt;br /&gt;CloseUserObject.&lt;br /&gt;&lt;br /&gt;11. If there are both - foreign key and triggers on a Sybase table which one &lt;br /&gt;will be fired (checked) first?&lt;br /&gt;&lt;br /&gt;Foreign keys.&lt;br /&gt;&lt;br /&gt;12. Let's say you've developed a window w_customers. After some time you &lt;br /&gt;developed a base ancestor window w_base_win and want to use all functionality that you put &lt;br /&gt;in this ancestor in your w_customer window. How can you do this?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;If you developed a window without using any ancestors, it will be &lt;br /&gt;inherited from PowerBuilders Window Object. To change the inheritance you should &lt;br /&gt;Export existing window in a text file (Library Painter), change manually all references to &lt;br /&gt;a standard Window object to w_base_win and Import the window back from this text file.&lt;br /&gt;&lt;br /&gt;13. What are automatic and manual drag modes?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In automatic drag mode, PowerBuilder automatically switches the &lt;br /&gt;application into drag mode when the control is clicked.&lt;br /&gt;With manual drag mode, PowerBuilder does not switch the application into &lt;br /&gt;drag mode when the control is clicked. You must control when the drag mode is &lt;br /&gt;initiated.&lt;br /&gt;&lt;br /&gt;14. What is ROWID in Oracle?&lt;br /&gt;&lt;br /&gt;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=..)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;15. What is an object? a class? an instance?&lt;br /&gt;&lt;br /&gt;Class - A definition of object &lt;br /&gt;Object- A manifestation of a class &lt;br /&gt;Instance - A copy of an object in the memory &lt;br /&gt;&lt;br /&gt;16. What are the benefits of using encapsulation? Give an example of &lt;br /&gt;encapsulation in PowerBuilder.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;For example, the code providing User Object functionality is written in the scripts and functions inside the User Object .&lt;br /&gt;&lt;br /&gt;17. Is PowerBuilder object-oriented language? Why?&lt;br /&gt;&lt;br /&gt;Yes it is. It has 3 main features of object-oriented languages - inheritance, encapsulation and polymorphism. &lt;br /&gt;&lt;br /&gt;18. What types of objects can be inherited?&lt;br /&gt;&lt;br /&gt;Windows, menus and user objects .&lt;br /&gt;&lt;br /&gt;19. What utility could be used to create stored procedure in a database?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;You can use PowerBuilder's Database Administrator painter,&lt;br /&gt;ISQL utility in Sybase , SQL*Plus utility in Oracle.&lt;br /&gt;&lt;br /&gt;20. How can you run another application from within PowerBuilder?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;You could do it using PowerBuilder's function Run(). For example:&lt;br /&gt;Run("C:\winword.exe Letter.doc", Maximized!)&lt;br /&gt;&lt;br /&gt;This statement runs the MS Word maximized and passes it the parameter &lt;br /&gt;letter.doc to open the file letter.doc.&lt;br /&gt;&lt;br /&gt;21. How can you create in PowerBuilder an executable that can receive &lt;br /&gt;parameters?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;PowerBuilder has a function CommandParm() that retrieves the parameter &lt;br /&gt;string, if any, when the application was executed. For example, you could put in an &lt;br /&gt;Open event of the application something like string ls_command_line&lt;br /&gt;ls_command_line = CommandParm( )&lt;br /&gt;If the command line holds several parameters, you can use string functions &lt;br /&gt;like Pos(),Left() ... to separate the parameters..&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;22. What is polymorphism? Give an example.&lt;br /&gt;&lt;br /&gt;With a polymorphism, the same functions calls give different result on &lt;br /&gt;different objects. &lt;br /&gt;For example, you can define an UpdateDatabase() function for different &lt;br /&gt;kinds of objects. Each has its own definition of what Update should do. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;23. If you have a column that gets updated frequently, what kind of index will &lt;br /&gt;you create on this column to improve the performance - clustered or non-cludtered ?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Non-clustered. If you create a clustered index on this column, the &lt;br /&gt;data will be physically re-arranged in the database after each update and this will slow down &lt;br /&gt;the performance.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;24. How can you instantiate non-visual object ( custom class) in memory?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;You need to declare a variable of your object's type and use CREATE &lt;br /&gt;command:&lt;br /&gt;uo_business_rules my_object&lt;br /&gt;my_object = CREATE uo_business &lt;br /&gt;Version 5.0 has the new syntax of this command - CREATE USING...&lt;br /&gt;&lt;br /&gt;After you are done with this object , you should destroy it to avoid &lt;br /&gt;memory leaking:&lt;br /&gt;DESTROY my_object&lt;br /&gt;&lt;br /&gt;In PB5 you can check the Autoinstantiate attribute of NVO and it'll create &lt;br /&gt;an instance of NVO automatically when you declare a variable of this object type, &lt;br /&gt;i.e. uo_business_rules my_object.&lt;br /&gt;&lt;br /&gt;An instance of this NVO will be destroyed automatically when object where &lt;br /&gt;it was declared is closed,destroyed or, in case of local variables when the script &lt;br /&gt;is finished.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;25. Let's say you have stored procedure B that is being called from procedure A; &lt;br /&gt;you performed commit in B and after that procedure A failed. Will changes that &lt;br /&gt;have been made in the procedure B be rolled back?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Yes. In case of nested stored procedures changes are commited &lt;br /&gt;only after successful commit in the outermost stored procedure.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;26. How can you convert data from one datatype to another using Transact-SQL &lt;br /&gt;in Sybase?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;There is a function Convert() in Transact SQL which is used for &lt;br /&gt;data conversion. For example, to convert DateTime column into a string you could write &lt;br /&gt;something like&lt;br /&gt;Select convert(char(8), birthdate,1)&lt;br /&gt;in this case third parameter specifies format of returned string ("mm/dd/yy")&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;27. How do you manage Database Transactions in PowerBuilder?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;You use AutoCommit attribute of the Transaction Object for that. &lt;br /&gt;If the value of AutoCommit is TRUE, PowerBuilder just passes your SQL &lt;br /&gt;statements directly to the Server without issuing a Begin Transaction command..&lt;br /&gt;&lt;br /&gt;If you set the value of AutoCommit to FALSE (default value), &lt;br /&gt;PowerBuilder requires that you use the COMMIT and ROLLBACK keywords to commit &lt;br /&gt;and rollback your transactions when you are finished with them. In this case &lt;br /&gt;PowerBuilder begins the new transaction automatically as soon as you CONNECT,COMMIT or &lt;br /&gt;ROLLBACK.&lt;br /&gt;&lt;br /&gt;When you work with stored procedures in Sybase, Autocommit must be&lt;br /&gt;set to true to be able to execute DDL statements and work with temporary tables &lt;br /&gt;from within stored procedures.&lt;br /&gt;&lt;br /&gt;Autocommit attribute of SQLCA is ignored when you work with Oracle.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;28. How could you change a DataWindow object, associated with the DataWindow &lt;br /&gt;control during the runtime?&lt;br /&gt;&lt;br /&gt;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:&lt;br /&gt;dw_cust.DataObject = "d_customer"&lt;br /&gt;&lt;br /&gt;30. How can you set DataWindow to a particular row?&lt;br /&gt;You can do it by using the function ScrollToRow().&lt;br /&gt;&lt;br /&gt;31. What should be done to make sure that several radiobuttons understand &lt;br /&gt;that they belong to the same group (the user can select only one button &lt;br /&gt;in the group)?&lt;br /&gt;You should place them in a Group box on your window.&lt;br /&gt;&lt;br /&gt;32. When is usage of indexes not effective?&lt;br /&gt;When the expected result set has more that 5-10% of all rows in the table.&lt;br /&gt;&lt;br /&gt;33. How many triggers can you specify for one database table?&lt;br /&gt;&lt;br /&gt;In Sybase any table can have up to three triggers: one update trigger, one &lt;br /&gt;insert &lt;br /&gt;trigger, and one delete trigger. However you can create a single trigger that &lt;br /&gt;will apply to &lt;br /&gt;all three user actions (Update, Delete and Insert).&lt;br /&gt;&lt;br /&gt;In Oracle a single table can have up to 12 types of triggers - &lt;br /&gt;6 row level triggers (BEFORE AFTER INSERT, UPDATE, DELETE) and&lt;br /&gt;6 statement level triggers.&lt;br /&gt;&lt;br /&gt;34.How can you check if there are any indexes on a table in Oracle?&lt;br /&gt;You can do a select from such views as ALL_INDEXES or USER_INDEXES where &lt;br /&gt;TABLE_NAME = your table name.&lt;br /&gt;&lt;br /&gt;35. What's the difference between Composite and Nested reports?&lt;br /&gt;Composite report does not have a data source - it's just a container for &lt;br /&gt;several datawindows (reports). &lt;br /&gt;Nested reports have datasource and main datawindow can pass data to the &lt;br /&gt;nested datawindow through retrieval arguments.&lt;br /&gt;&lt;br /&gt;36. How can you use stored procedures in PowerBuilder?&lt;br /&gt;You could use them either as a data source for the DataWindows (only in &lt;br /&gt;SQL Server)&lt;br /&gt;or you can execute them using EXECUTE command in PB script. &lt;br /&gt;If the stored procedure returns a result set you have to:&lt;br /&gt;1.DECLARE variable for stored procedure for example,&lt;br /&gt;DECLARE emp_pro PROCEDURE FOR&lt;br /&gt;pr_GetName @emp_name = :EditEmpName, @emp_salary = 5000 &lt;br /&gt;2. EXECUTE (e.g. execute emp_pro) &lt;br /&gt;3. FETCH in a loop &lt;br /&gt;4. CLOSE procedure (CLOSE emp_pro).&lt;br /&gt;&lt;br /&gt;If the stored procedure also has a return code and output parameters,&lt;br /&gt;you need to do one extra FETCH to get them.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;37. What are the four levels of validation ?&lt;br /&gt;&lt;br /&gt;1. Has anything changed?&lt;br /&gt;2. Is the data of the correct type?&lt;br /&gt;3. Does the data pass validation rules (which could be defined for some &lt;br /&gt;columns)?&lt;br /&gt;4. Does the data pass the ItemChanged event?&lt;br /&gt;&lt;br /&gt;38. How can you print multiple DataWindows?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;You should open the print job by calling the PrintOpen() function, after &lt;br /&gt;that you can print DataWindows by using PrintDataWindow () function and after that you &lt;br /&gt;close the print job by calling PrintClose().&lt;br /&gt;You can also create Nested Reports or use the Composite presentation style &lt;br /&gt;of DataWindows to print multiple datawindows as one Print Job.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;39. Did you use any Version Control systems such as PVCS? &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;No. We just used Check In/Check Out features of PowerBuilder. Version 5 of PB&lt;br /&gt;comes with a new version control software - Object Cycle but we did not use it yet.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;40. How can you call an ancestor script from a script from a descendant object?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;There is a CALL command that calls an ancestor script from a script for a &lt;br /&gt;descendant object. For example, CALL w_emp::Open&lt;br /&gt;&lt;br /&gt;Also you can use the pronoun Super to refer to the immediate ancestor.&lt;br /&gt;For example, CALL Super::Clicked&lt;br /&gt;&lt;br /&gt;To execute ancestor's function you just do Super::of_calc_fee()&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;41. How could you define additional Transaction object? When might you need it?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;To create an additional transaction object, you first declare a variable of &lt;br /&gt;type transaction, then you create the object and then define the attributes that will &lt;br /&gt;be used.&lt;br /&gt;&lt;br /&gt;Transaction TO_Sybase&lt;br /&gt;TO_Sybase=CREATE transaction&lt;br /&gt;&lt;br /&gt;TO_Sybase.DBMS = "Sybase"&lt;br /&gt;TO_Sybase.database = "Personnel"&lt;br /&gt;TO_Sybase.LogId = "DD25"&lt;br /&gt;...&lt;br /&gt;You need to create (an) additional transaction object(s) if you retrieve data &lt;br /&gt;in your application from more than 1 database.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;42. What is the usage of the DUAL table in Oracle?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;It's an Oracle worktable with only one row and column in it. It's used to &lt;br /&gt;make some calculations or get the values of some pseudo columns that are not &lt;br /&gt;dependent upon the columns in a table, i.e.&lt;br /&gt;Select SYSDATE from DUAL&lt;br /&gt;SELECT 2*35 from DUAL &lt;br /&gt;&lt;br /&gt;43. Where would you put the code to make sure that everything has been saved on &lt;br /&gt;the window when it's being closed?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I would write this code under CloseQuery event of the window. &lt;br /&gt;A CloseQuery event occurs every time when the window is about to be &lt;br /&gt;closed. At this moment PowerBuilder checks the value of the attribute ReturnValue of the &lt;br /&gt;Message Object. If after performing some processing you don't want to allow user to &lt;br /&gt;close the window, set the value of the Message.ReturnValue to 1.&lt;br /&gt;In version 5 you just need to do Return 1.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;44. What is the difference between SetItem and SetText functions?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;When you use SetText function, it places the value into the edit control on &lt;br /&gt;a DataWindow and it must pass through the validation process.&lt;br /&gt;SetItem function inserts the value of a specific cell directly into the &lt;br /&gt;DataWindow buffer and skips the validation.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;45. How can you get access to a Child DataWindow?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;To retrieve manually a child DataWindow, we use the GetChild() function to &lt;br /&gt;obtain reference to it, then we assign a transaction object to it, and then retrieve.&lt;br /&gt;For example:&lt;br /&gt;DataWindowChild dwc&lt;br /&gt;int rtncode&lt;br /&gt;rtncode = dw_emp.GetChild("emp_id",dwc)&lt;br /&gt;dwc.SetTransObject(SQLCA)&lt;br /&gt;dwc.Retrieve("argument")&lt;br /&gt;&lt;br /&gt;46. What is the usage of the Yield() function?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Yields control to other graphic objects, including objects that are not &lt;br /&gt;PowerBuilder objects. Yield () checks the message queue and if there are messages &lt;br /&gt;in the queue, it pulls them from the queue. &lt;br /&gt;You can use Yield() to allow users to interrupt a tight loop. When you use &lt;br /&gt;Yield() to interrupt a loop, you must call the Yield function and check for an interrupt &lt;br /&gt;each time you pass through the loop.&lt;br /&gt;&lt;br /&gt;47. How can you change select statement of the DataWindow at runtime?&lt;br /&gt;&lt;br /&gt;You can change Select statment using functions SetSqlSelect() or &lt;br /&gt;by changing the attribute DataWindow.Table.Select with the function&lt;br /&gt;Modify().For example, &lt;br /&gt;&lt;br /&gt;dw_1.Modify("datawindow.Table.Select='Select * from customers'")&lt;br /&gt;&lt;br /&gt;In version 5 you can change attributes of datawindow object directly &lt;br /&gt;by using a keyword Object like&lt;br /&gt;dw_1.Object.DataWindow.Table.Select='Select * from customers'&lt;br /&gt;&lt;br /&gt;SetSqlSelect works slower since it checks the syntax of SQL statement.&lt;br /&gt;&lt;br /&gt;48. What kinds of DataWindow buffers do you know?&lt;br /&gt;&lt;br /&gt;There are 4 buffers in Powerbuilder: Primary!, Filter!, Delete! and &lt;br /&gt;Original! buffer. &lt;br /&gt;Primary! buffer has the current data values;&lt;br /&gt;Filter! buffer stores the rows that where filtered out as a result of &lt;br /&gt;SetFilter() and Filter() functions;&lt;br /&gt;Delete! Buffer keeps the rows that have been deleted by DeleteRow() &lt;br /&gt;function;&lt;br /&gt;Original! buffer is used by PowerBuilder to store original data values &lt;br /&gt;retrieved into a datawindow. PowerBuilder uses this buffer to generate the Where clause &lt;br /&gt;for the Update() function. &lt;br /&gt;&lt;br /&gt;49. What is the recommended size of .pbl ?&lt;br /&gt;&lt;br /&gt;The recommended size used to be less than 800kb and not more than 50-60 entries,&lt;br /&gt;but from my experience even bigger pbl's work just fine.&lt;br /&gt;&lt;br /&gt;50. Can you inherit DataWindow?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;You cannot do it directly, but you can create a Standard User Object of &lt;br /&gt;type DataWindow (which can be inherited) and use it instead of DataWindow controls. &lt;br /&gt;You use the same method when you need to inherit any other control.&lt;br /&gt;&lt;br /&gt;51. Where can external functions be declared?&lt;br /&gt;&lt;br /&gt;External functions can be declared in User Objects or Windows.&lt;br /&gt;&lt;br /&gt;52. Give a definition of a Union.&lt;br /&gt;&lt;br /&gt;The Union operator is used to combine the result sets of two or more &lt;br /&gt;Select statements. The source of the data could be different, but each Select statement &lt;br /&gt;in the Union must return the same number of columns having the same data types. &lt;br /&gt;If you use Union All it will return all rows including duplicates.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;53. What functions can you use to pass parameters between windows in &lt;br /&gt;PowerBuilder?&lt;br /&gt;&lt;br /&gt;Open WithParm( ) , OpenSheetWithParm( ), and CloseWithReturn( ).&lt;br /&gt;&lt;br /&gt;54. How do OpenWithParm() and CloseWithReturn() functions pass parameters? &lt;br /&gt;&lt;br /&gt;They pass parameters using Message Object's attributes StringParm,&lt;br /&gt;DoubleParm or PowerObjectParm.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;55. Can you delete a menuitem in the descendant menu if it was created in the &lt;br /&gt;ancestor one?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;No you cannot. If you don't need an object that was defined in the &lt;br /&gt;ancestor menu just make it invisible by setting its Visible attribute to FALSE or using &lt;br /&gt;function Hide().&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;56. What are the 2 objects every application has?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Every PowerBuilder application has the MessageObject and the ErrorObject.&lt;br /&gt;&lt;br /&gt;57. Describe the sequence of events which are triggered when you call the &lt;br /&gt;Datawindow's function Update().&lt;br /&gt;UpdateStart! event,&lt;br /&gt;SQLPreview! event for every modified row,&lt;br /&gt;UpdateEnd! event.&lt;br /&gt;&lt;br /&gt;58. What's the difference between computed columns and computed fields in &lt;br /&gt;DataWindow object?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;You define a computed column in the Select painter and it's calculated by &lt;br /&gt;the DBMS when the data is retrieved.&lt;br /&gt;Computed field is defined in the datawindow painter and is calculated after the data&lt;br /&gt;has been retrieved. &lt;br /&gt;If you change values of some columns that are part of the computed field &lt;br /&gt;expression they will be recalculated immediately. Computed columns are not &lt;br /&gt;recalculated after the data is retrieved.&lt;br /&gt;&lt;br /&gt;59. What are the system databases in Sybase?&lt;br /&gt;&lt;br /&gt;Beside user's databases Sybase has databases: Master, Model,TempDB,&lt;br /&gt;Pubs2 and some others like SYBSYSTEMPROCS, PUBS2. &lt;br /&gt;Master is used internally by Sql Server to store information about users' &lt;br /&gt;databases;&lt;br /&gt;Model is used as a template to create a new user's database and TempDB is &lt;br /&gt;used to store temporary information like temporary tables if you use them in &lt;br /&gt;stored procedures.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;60. What is a class or non-visual user object?&lt;br /&gt;&lt;br /&gt;Non-visual user objects (or classes) are objects that encapsulate &lt;br /&gt;attributes and functions, but are not visible to the user. You can use them, for example, to &lt;br /&gt;code some business rules which are used in different windows.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;61. Hou can you return user-defined error message from a stored procedure?&lt;br /&gt;&lt;br /&gt;In SYBASE you use RAISERROR statement;&lt;br /&gt;&lt;br /&gt;In ORACLE you need to declare a User exception and raise it using RAISE &lt;br /&gt;statement or you can use special procedure RAISE_APPLICATION_ERROR (error_number, &lt;br /&gt;error_message)&lt;br /&gt;&lt;br /&gt;62. How can you share buffers between two DataWindows?&lt;br /&gt;&lt;br /&gt;To share buffers between 2 DataWindow controls, we use ShareData() &lt;br /&gt;function.&lt;br /&gt;The result set description for both DataWindow objects must be the same,&lt;br /&gt;but the presentation style could be different.&lt;br /&gt;To turn off the sharing of data buffers for a DataWindow control you use &lt;br /&gt;the function ShareDataOff().&lt;br /&gt;&lt;br /&gt;63.What is the difference between TriggerEvent() and PostEvent() functions?&lt;br /&gt;&lt;br /&gt;The TriggerEvent() function causes the event to occur immediately. This &lt;br /&gt;function does not return until the processing for the event is complete. &lt;br /&gt;PostEvent() function causes the event to occur when the current event is &lt;br /&gt;finished executing.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;66. Give an example of an outer join.&lt;br /&gt;&lt;br /&gt;An outer join forces a row from one of the participating tables to appear &lt;br /&gt;in the result set if there is no matching row. An asterisk is added to the equal &lt;br /&gt;sign to specify outer joins.&lt;br /&gt;For example, if some customers might not have orders yet, we could use:&lt;br /&gt;Select customer.id, name&lt;br /&gt;from customer, orders&lt;br /&gt;where customer.id *= orders.id&lt;br /&gt;&lt;br /&gt;(In Oracle you use (+) after the column name)&lt;br /&gt;&lt;br /&gt;67. Give an example of Cartesian Product.&lt;br /&gt;&lt;br /&gt;Cartesian product is the set of all possible rows resulting from a join of &lt;br /&gt;more than one table. For example, if you forget about a join condition:&lt;br /&gt;Select customer.name, orderno &lt;br /&gt;from customers, orders&lt;br /&gt;If customer had 100 rows and orders had 500 rows, the Cartesian product &lt;br /&gt;would be every possible combination - 50000 rows.&lt;br /&gt;&lt;br /&gt;68. What is the primary key?&lt;br /&gt;&lt;br /&gt;The primary key of a table is the column or set of columns that are used &lt;br /&gt;to uniquely identify each row. If you want to find a specific row in a table, you &lt;br /&gt;refer to it using the primary key. Usually, you specify the primary key when you create a &lt;br /&gt;table:&lt;br /&gt;Create table customers ( id char(3),&lt;br /&gt;lname char (20),&lt;br /&gt;fname char(20),&lt;br /&gt;primary key (id))&lt;br /&gt;69. What is a foreign key?&lt;br /&gt;&lt;br /&gt;A foreign key references a primary key in another table. When one table's &lt;br /&gt;column values are present in another table's column, the column from the first &lt;br /&gt;table refers to the second. &lt;br /&gt;&lt;br /&gt;70. What is the usage of indexes and how to create them?&lt;br /&gt;&lt;br /&gt;Indexes optimize data retrieval since the data can be found without scanning an entire table.&lt;br /&gt;Indexes can also force unique data values in a column.&lt;br /&gt;For example, to create an index named custind using the id column of the &lt;br /&gt;customers table, you have to issue the following command:&lt;br /&gt;create index custind on customers(id) &lt;br /&gt;To create unique index: &lt;br /&gt;create unique index custind on customers(id) &lt;br /&gt;There are clustered and nonclustered indexes in Sybase.&lt;br /&gt;Indexes are not effective if the result set has more that 10% of rows in a table.&lt;br /&gt;&lt;br /&gt;71. Do indexes in Sybase affect the physical order of data in the table ?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;If there is a clustered index on the table, the actual data is sorted &lt;br /&gt;in the index order. &lt;br /&gt;Nonclustered indexes do not reorder the actual data.&lt;br /&gt;&lt;br /&gt;72. Which system objects are useful when you write triggers?&lt;br /&gt;&lt;br /&gt;In SYBASE: The Inserted and Deleted table are used when writing triggers.&lt;br /&gt;Inserted table holds any rows added to a table when you execute Insert or &lt;br /&gt;Update Sql statements.&lt;br /&gt;Deleted table holds any rows removed from the table when you execute &lt;br /&gt;Delete or Update Sql statements.&lt;br /&gt;&lt;br /&gt;In Oracle: You use :old.columname to refer to original value of the column&lt;br /&gt;and :new.columname to get the new value for a column.&lt;br /&gt;&lt;br /&gt;73. What is the message object and how is it used when passing parameters &lt;br /&gt;between windows?&lt;br /&gt;&lt;br /&gt;A message object is a PowerBuilder-defined global object populated with &lt;br /&gt;information about an event. It has such attributes as WordParm and LongParm.&lt;br /&gt;It is used to pass data between windows or objects. Data will be passed through &lt;br /&gt;the Message.StringParm, Message.DoubleParm or Message.PowerObjectParm depending&lt;br /&gt;on the type of data which you want to pass.&lt;br /&gt;&lt;br /&gt;74. What is function overloading?&lt;br /&gt;&lt;br /&gt;A function is overloaded when there are multiple versions of &lt;br /&gt;this function with the same name but with different arguments. &lt;br /&gt;When the function is called, PowerBuilder finds the function&lt;br /&gt;whose argument list matches the function call from the script. &lt;br /&gt;In PowerBuilder 4 you had to create a descendant object for every &lt;br /&gt;overloaded function. &lt;br /&gt;In Version 5 you can declare all overloaded functions in the same object.&lt;br /&gt;&lt;br /&gt;75. What could you use the SQLPreview event for?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;You could use SqlPreview event if you want to use stored procedures to &lt;br /&gt;perform update in the database.&lt;br /&gt;You can also use the SQLPreview event to display the SQL statement right &lt;br /&gt;before its execution for the debugging purposes. To get the curent Sql Statement you use &lt;br /&gt;GetSqlPreview() function.&lt;br /&gt;In version 5 you don't even need to call this function since &lt;br /&gt;SQLPreview event has an argument with SQL Statement.&lt;br /&gt;&lt;br /&gt;76. What should be distributed to your user with your application?&lt;br /&gt;&lt;br /&gt;The .EXE, .PBDs (if any), and the Database Development and Deployment Kit DLLs. &lt;br /&gt;&lt;br /&gt;77. What is a .PBD and when do you use them?&lt;br /&gt;&lt;br /&gt;A .PBD file is PowerBuilder dynamic libraries. It contains all the &lt;br /&gt;compiled objects that the .PBL contains. &lt;br /&gt;You use them to make the size of your executable smaller, and objects that you &lt;br /&gt;put in PBD's will be loaded at runtime only when needed.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;81. If you have an MDI Window, sheet1 with menu and sheet2 without the menu. You &lt;br /&gt;open sheet2 after sheet1. Which menu will sheet2 have - MDI menu or Sheet1 &lt;br /&gt;menu?&lt;br /&gt;&lt;br /&gt;It will have the menu of Sheet1 as the last menu that was displayed on the &lt;br /&gt;MDI window.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;84. What kind of windows can be closed using the function CloseWithReturn()?&lt;br /&gt;Response Windows.&lt;br /&gt;&lt;br /&gt;85. What do you know about Views?&lt;br /&gt;A View is simply a select statement that has been STORED IN THE DATABASE. &lt;br /&gt;Usually, Views are used to limit the access of users to data. Views are database &lt;br /&gt;objects, so you can grant user permissions to them.&lt;br /&gt;&lt;br /&gt;86. What do you know about fill factor in Sybase?&lt;br /&gt;The fill factor is a percentage specifying how full you want your index &lt;br /&gt;and/or data pages when the index is created. &lt;br /&gt;A lower fill factor leaves more free space in the pages. It could improve&lt;br /&gt;performance in environments where there are a lot of inserts and updates to the &lt;br /&gt;data.&lt;br /&gt;A higher fill factor is useful with relatively static data.&lt;br /&gt;&lt;br /&gt;87. How can you change an object's ancestor without recoding it?&lt;br /&gt;Export the object using Library Painter, then&lt;br /&gt;change all references to the ancestor using any text editor and&lt;br /&gt;import the object back.&lt;br /&gt;&lt;br /&gt;88. How can you find out what's the object under mouse pointer in a datawindow?&lt;br /&gt;&lt;br /&gt;The function GetObjectAtPointer() will tell you what's under the mouse - &lt;br /&gt;column, header, etc.&lt;br /&gt;The function GetBandAtPointer() will tell you the band name such as &lt;br /&gt;detail, header, etc. &lt;br /&gt;&lt;br /&gt;89. How do you handle Null values in a database?&lt;br /&gt;In Sybase you use IsNull() function, in Oracle - NVL() function.&lt;br /&gt;&lt;br /&gt;90. How can you generate unique numbers in a database? &lt;br /&gt;In Sybase you can define an extra column of Identity type in a table.&lt;br /&gt;&lt;br /&gt;In Oracle you create a Sequence. For example, &lt;br /&gt;&lt;br /&gt;Create sequence Customer_id_seq;&lt;br /&gt;Select Customer_id_Seq.nextval from dual;&lt;br /&gt;&lt;br /&gt;91. What types of database constraints do you know?&lt;br /&gt;&lt;br /&gt;Primary key, NOT NULL, Unique, Check, Foreign Key&lt;br /&gt;&lt;br /&gt;92. What's a basic structure of PL/SQL block?&lt;br /&gt;DECLARE&lt;br /&gt;BEGIN&lt;br /&gt;EXEPTION&lt;br /&gt;END&lt;br /&gt;&lt;br /&gt;93. What's an exception in Oracle?&lt;br /&gt;In PL/SQL it's a warning or error condition.&lt;br /&gt;&lt;br /&gt;94. What composite data types do you know in PL/SQL?&lt;br /&gt;&lt;br /&gt;Record and Table. &lt;br /&gt;PL/SQL Record is similar to a structure in other languages.&lt;br /&gt;PL/SQL Table is similar to a one-dimensional array.&lt;br /&gt;&lt;br /&gt;95. If you use a cursor in Oracle PL/SQL block, how can you determine when &lt;br /&gt;fetching data when to enter &lt;br /&gt;and exit the loop?&lt;br /&gt;&lt;br /&gt;You use cursor attributes such as %ISOPEN, %NOTFOUND, %FOUND, %ROWCOUNT.&lt;br /&gt;&lt;br /&gt;96. What's the minimal data item that can be locked in a database?&lt;br /&gt;&lt;br /&gt;In Sybase System 10 it's a page (usually it's 2 kb);&lt;br /&gt;In ORACLE it's a row.&lt;br /&gt;&lt;br /&gt;97. What are the benefits of using stored procedures?&lt;br /&gt;&lt;br /&gt;SP are stored in compiled mode in a database, reduce network traffic, modularize&lt;br /&gt;application development, makes maintenance easier, provide additional security.&lt;br /&gt;&lt;br /&gt;98. How many types of Dynamic SQL do you know in PowerBuilder?&lt;br /&gt;&lt;br /&gt;There are 4 formats: 1. Non- result-set, no input parameters;&lt;br /&gt;2. Non-result-set with input parameters;&lt;br /&gt;3. Result-set, known input parameters and result-set &lt;br /&gt;columns;&lt;br /&gt;4. Result-set, unknown input parameters and/or result set &lt;br /&gt;columns.&lt;br /&gt;For format 1 you must use EXECUTE IMMEDIATE statement;&lt;br /&gt;For formats 2,3 and 4 you need to prepare a dynamic staging area (SQLSA);&lt;br /&gt;For format 4 you also need to use dynamic description area (SQLDA).&lt;br /&gt;&lt;br /&gt;99. How can you obtain the source code of a trigger in Oracle?&lt;br /&gt;You can get from Oracle's view USER_TRIGGERS from column TRIGGER_BODY.&lt;br /&gt;&lt;br /&gt;100. What pseudo columns do you know in Oracle?&lt;br /&gt;&lt;br /&gt;USER, SYSDATE, ROWID, ROWNUM, NULL...&lt;br /&gt;&lt;br /&gt;101. How can you disable or enable trigger in Oracle?&lt;br /&gt;You can do it using Alter trigger statement. For example:&lt;br /&gt;&lt;br /&gt;ALTER TRIGGER delete_cusomer DISABLE&lt;br /&gt;&lt;br /&gt;ALTER TRIGGER update_orders ENABLE&lt;br /&gt;&lt;br /&gt;102. How can you check the definition of a table in SQL*Plus?&lt;br /&gt;&lt;br /&gt;You can do it using command DESC. For example:&lt;br /&gt;&lt;br /&gt;SQL&gt;desc customers.&lt;br /&gt;&lt;br /&gt;103. What's the difference between Class Library and Application Framework?&lt;br /&gt;&lt;br /&gt;Class Library is usually a set of independent objects, while in an&lt;br /&gt;application framework objects depend on each other's variables, messaging&lt;br /&gt;and functions.&lt;br /&gt;&lt;br /&gt;104. What kind of problems might you have if you want to use existing&lt;br /&gt;application on laptop computers?&lt;br /&gt;&lt;br /&gt;You need to take care of resizing windows and controls. You can do it by &lt;br /&gt;placing code under resize event of the window (base window) or create a special NVO &lt;br /&gt;to do resizing.&lt;br /&gt;&lt;br /&gt;105. How can you lock a row in Oracle?&lt;br /&gt;&lt;br /&gt;You need to do select of this row using syntax SELECT ...FOR UPDATE.&lt;br /&gt;This way the row will be locked until the program issues commit or &lt;br /&gt;rollback.&lt;br /&gt;&lt;br /&gt;106. What are the new concepts of OOP that are implemented in PFC?&lt;br /&gt;&lt;br /&gt;It's been built using service-based architecture.&lt;br /&gt;&lt;br /&gt;The idea is to keep the ancestor object 'thin' and plug services into it when needed.&lt;br /&gt;The services are implemented as NVO's.&lt;br /&gt;&lt;br /&gt;107. How can you see execution plan of the SQL statement?&lt;br /&gt;&lt;br /&gt;In Oracle you can use command Explain Plan 'select ...' in SQL*Plus.&lt;br /&gt;&lt;br /&gt;In SYBASE you need to set an option SET SHOWPLAN ON in ISQL and then type &lt;br /&gt;your select statement.&lt;br /&gt;&lt;br /&gt;108. What are two methods of optimization in Oracle?&lt;br /&gt;&lt;br /&gt;It could be either Cost based or Rule based optimization.&lt;br /&gt;&lt;br /&gt;109. How can you avoid retrieving duplicate rows into a result set?&lt;br /&gt;&lt;br /&gt;You should use DISTINCT keyword in the Select clause.&lt;br /&gt;&lt;br /&gt;(In Oracle you can use the word UNIQUE instead of DISTINCT) &lt;br /&gt;&lt;br /&gt;110. How can you see the list of existing objects in Oracle database such as &lt;br /&gt;tables, views, synonyms?&lt;br /&gt;&lt;br /&gt;Oracle has special view USER_CATALOG and you can do a select form this &lt;br /&gt;view (or select * from CAT. CAT is a synonym of USER_CATALOG)&lt;br /&gt;&lt;br /&gt;111. What is a synonym in Oracle?&lt;br /&gt;&lt;br /&gt;It's an alias name assigned to a table or view. You can use it to simplify &lt;br /&gt;SQL statements, for example, you can use synonims to hide links to remote &lt;br /&gt;databases.&lt;br /&gt;&lt;br /&gt;112. What are the normalization rules in RDBMS?&lt;br /&gt;&lt;br /&gt;1st Normal form: There should be only one value for each row and column &lt;br /&gt;intersection.&lt;br /&gt;2nd Normal form: All non-primary columns must depend on the entire primary &lt;br /&gt;key.&lt;br /&gt;3rd Normal form: Non-primary columns should not depend on other non-primary &lt;br /&gt;columns.&lt;br /&gt;&lt;br /&gt;113. What is a Snapshot in Oracle? &lt;br /&gt;&lt;br /&gt;Snapshots are a local copies of a remote table. Usually they are crated &lt;br /&gt;automatically in specified time intervals.&lt;br /&gt;&lt;br /&gt;114. What is a cluster in Oralce?&lt;br /&gt;&lt;br /&gt;Cluster is a method to store related database tables in the same area on a &lt;br /&gt;disk.&lt;br /&gt;To use clusters you need to specify a cluster key column when you create &lt;br /&gt;tables.&lt;br /&gt;&lt;br /&gt;115. How are tables physically stored in Oracle database?&lt;br /&gt;&lt;br /&gt;Table are created in a special areas on the disk called tablespace. &lt;br /&gt;Each has segments and extents. Maximum number of extents is 121.&lt;br /&gt;&lt;br /&gt;116. How can you see complilation errors in SQL*Plus when you create &lt;br /&gt;stored procedure, function...?&lt;br /&gt;&lt;br /&gt;If stored procedure had errors SQL*Plus gives a message that object was&lt;br /&gt;created with compilation errors and you can see the errors by typing &lt;br /&gt;&lt;br /&gt;SHOW ERRORS&lt;br /&gt;or &lt;br /&gt;Select * from user_errors.&lt;br /&gt;&lt;br /&gt;117. How can you debug Powerbuilder's executable?&lt;br /&gt;&lt;br /&gt;You need to put a /pbdebug key in the run line of any powerbuilder exe.&lt;br /&gt;This will create a text file with extention .dbg where you can see &lt;br /&gt;which events and functions were executed by your application.&lt;br /&gt;&lt;br /&gt;118. How can you undelete a row in a datawindow?&lt;br /&gt;&lt;br /&gt;You need to move row using a function RowsMove() from the Delete! buffer &lt;br /&gt;into the Primary! buffer.&lt;br /&gt;&lt;br /&gt;119. Where is it not recommended to put a breakpoint in the debugger?&lt;br /&gt;&lt;br /&gt;It's not recommended under Activate and GetFocus Events.&lt;br /&gt;&lt;br /&gt;120. Can you post event to an application?&lt;br /&gt;&lt;br /&gt;No, you cannot.&lt;br /&gt;&lt;br /&gt;121. How can you find a number of rows returned by an embedded SQL statement?&lt;br /&gt;&lt;br /&gt;You can find it in the attribute SQLCA.SQLNRows.&lt;br /&gt;&lt;br /&gt;122. How can you stop the processing in the Other Event of the datawindow?&lt;br /&gt;&lt;br /&gt;You need to set Message.Processed to TRUE.&lt;br /&gt;&lt;br /&gt;123. How can you stop the retrieval process in a datawindow after some number of &lt;br /&gt;rows?&lt;br /&gt;&lt;br /&gt;You need to declare a variable, increment it by one in the script &lt;br /&gt;for the RetrieveRow event and check its value like &lt;br /&gt;&lt;br /&gt;il_count++ &lt;br /&gt;If il_count &gt; 10 then Return 1 // Stop the retrieval&lt;br /&gt;&lt;br /&gt;124. How do you process database errors in case of a Datawindow and Embedded &lt;br /&gt;SQL?&lt;br /&gt;&lt;br /&gt;In case of Embedded SQL you check the value of SQLCA.SQLCode and if it's &lt;br /&gt;less than 0,&lt;br /&gt;Get the error code and error message from SQLCA.SQLDBCode and SQLErrText.&lt;br /&gt;&lt;br /&gt;In a Datawindow you get the errors in a DBError event. In PB5 you get error &lt;br /&gt;code and text from the arguments of this event, in PB4 you use the functions&lt;br /&gt;DBErrorCode() and DBErrorMessage().&lt;br /&gt;&lt;br /&gt;125. How do you declare an external function if it does not return a value?&lt;br /&gt;&lt;br /&gt;You need to start a declaration with a keyword SUBROUTINE.&lt;br /&gt;&lt;br /&gt;126. What is a correlated subquery? &lt;br /&gt;&lt;br /&gt;A correlated subquery is a subquery that references columns in the tables&lt;br /&gt;of its containing query. For example:&lt;br /&gt;&lt;br /&gt;Select name from student s1&lt;br /&gt;where age &lt; (select max(age) from students s2&lt;br /&gt;where s1.grade = s2.grade)&lt;br /&gt;&lt;br /&gt;127. Can you update database using views?&lt;br /&gt;&lt;br /&gt;You can do this only if the view is based on a Select from a &lt;br /&gt;single table. If the view has been built based on a table join you &lt;br /&gt;cannot do an update.&lt;br /&gt;&lt;br /&gt;128. How can you retrieve, say, first 10 rows only from the result set &lt;br /&gt;using ISQL? &lt;br /&gt;&lt;br /&gt;In ISQL you should type SET ROWCOUNT 10 and after this line&lt;br /&gt;your select statement. &lt;br /&gt;&lt;br /&gt;To return back to full result set processing, type SET ROWCOUNT 0.&lt;br /&gt;&lt;br /&gt;129. How many pbl's do you need to add to your application if you want to use &lt;br /&gt;PFC in your app.?&lt;br /&gt;&lt;br /&gt;You need to add 8 pbls:&lt;br /&gt;4 pbls with names starting with PFC which are PFC objects&lt;br /&gt;and 4 with names starting with PFE which are Extension Layer objects. &lt;br /&gt;&lt;br /&gt;130. When do you use a Sybase command DUMP TRAN WITH NO_LOG&lt;br /&gt;&lt;br /&gt;We use it when transaction log is full to remove inactive transactions.&lt;br /&gt;&lt;br /&gt;131. Where are Sybase's system procedures stored?&lt;br /&gt;&lt;br /&gt;They are stored in the table SYSCOMMENTS in the database SYBSYSTEMPROCS.&lt;br /&gt;&lt;br /&gt;132. Name the two ways you can access values in a DataWindow?&lt;br /&gt;&lt;br /&gt;You can access data values in a Data Window by using SetItem() or &lt;br /&gt;GetItem() functions or using the new syntax in version 5.0:&lt;br /&gt;&lt;br /&gt;dw_1.Object.emp_lname[1] = 'Smith'&lt;br /&gt;&lt;br /&gt;133. How do windows and menus communicate in PFC?&lt;br /&gt;&lt;br /&gt;They communicate using special object Message Router.&lt;br /&gt;In the clicked event of the menu you call function of_SendMessage() &lt;br /&gt;and Message router will send this message to the window, active control &lt;br /&gt;and the last active Datawindow.&lt;br /&gt;&lt;br /&gt;134. What is the use of quick-start libraries in PFC? &lt;br /&gt;&lt;br /&gt;They contain pre-coded extention level objects so you can start a new &lt;br /&gt;application without typing scripts like declaration of gnv_app variable, &lt;br /&gt;etc. &lt;br /&gt;You just need to include a copy of these libraries in your application's &lt;br /&gt;library list instead of standard extension libraries. &lt;br /&gt;&lt;br /&gt;135. What application services do you know in PFC? &lt;br /&gt;&lt;br /&gt;There are DataWIndow Caching, Debugging, Error, Security and &lt;br /&gt;Transaction registration services. &lt;br /&gt;&lt;br /&gt;136. What DataWindow services do you know in PFC? &lt;br /&gt;&lt;br /&gt;I know such services as Linkage, Sort, Filter, SelectRow and others. &lt;br /&gt;&lt;br /&gt;137. What is the difference between functions and events in Powerbuilder? &lt;br /&gt;&lt;br /&gt;They are almost the same in version 5. The major difference is that object- &lt;br /&gt;level functions could be private and protected while events are always public. &lt;br /&gt;You can specify a function name in the script even if the specified object &lt;br /&gt;does not have such a function. You just need to add the keywords FUNCTION DYNAMIC. &lt;br /&gt;For example: &lt;br /&gt;&lt;br /&gt;invo_mine.FUNCTION DYNAMIC of_calc_salary(). &lt;br /&gt;&lt;br /&gt;138. How can you dynamically create a datawindow object at runtime if &lt;br /&gt;you have a Select statement? &lt;br /&gt;You can do it using the functions SyntaxFromSQL() and Create(). &lt;br /&gt;&lt;br /&gt;139. Can you use datawindows inside of a non-visual object? &lt;br /&gt;&lt;br /&gt;You cannot use datawindows but starting from version 5 you can use &lt;br /&gt;datastores inside NVO which has most of datawindow's functionality. &lt;br /&gt;&lt;br /&gt;140. How can you extend functionality of, say, Transaction Object in PowerBuilder? &lt;br /&gt;&lt;br /&gt;You need to create an object of type Standard Class inherited from &lt;br /&gt;Transaction objects and add some properties/methods to it. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;141. How can you get data from a database table based on data in another &lt;br /&gt;table? &lt;br /&gt;&lt;br /&gt;You can use correlated subquery for that. For example: &lt;br /&gt;&lt;br /&gt;Select last_name &lt;br /&gt;from customer where not exists &lt;br /&gt;(select * from cust_order &lt;br /&gt;where customer.id = cust_order.cust_id) &lt;br /&gt;&lt;br /&gt;142. What command do you use in Unix to change the permission on files? &lt;br /&gt;&lt;br /&gt;You do it using chmod command. For example, to revoke read, write and &lt;br /&gt;execute permissions on a file my_file from other users you do &lt;br /&gt;&lt;br /&gt;chmod g -rwx my_file &lt;br /&gt;&lt;br /&gt;143. Which functions should you not call in the ItemChanged event to avoid an &lt;br /&gt;endless loop? &lt;br /&gt;&lt;br /&gt;You should not call AcceptText(), SetColumn() and SetRow() &lt;br /&gt;in an ItemChanged event. &lt;br /&gt;&lt;br /&gt;144. How can you find out if a table has any indexes in Sybase? &lt;br /&gt;&lt;br /&gt;Call system stored procedure sp_helpindex, i.e. &lt;br /&gt;&lt;br /&gt;sp_helpindex customers &lt;br /&gt;&lt;br /&gt;145. How to ensure that SQL query is optimized in a Sybase stored procedure? &lt;br /&gt;&lt;br /&gt;Execute or create stored procedure with option RECOMPILE &lt;br /&gt;&lt;br /&gt;146. How to find out what columns a Sybase table has? &lt;br /&gt;&lt;br /&gt;Use system stored procedure sp_columns &lt;br /&gt;&lt;br /&gt;147. How to change your password in Sybase SQL Server? &lt;br /&gt;&lt;br /&gt;Use system stored procedure sp_password &lt;br /&gt;&lt;br /&gt;148. How to check if there are any currently locked tables in Sybase? &lt;br /&gt;&lt;br /&gt;Use system stored procedure sp_lock &lt;br /&gt;&lt;br /&gt;149. What's the name of the transaction object that comes with PFC? &lt;br /&gt;&lt;br /&gt;n_tr. &lt;br /&gt;&lt;br /&gt;150. If you can access object level public variables from the other object scripts - what's &lt;br /&gt;the difference between global variables and object level public variables? &lt;br /&gt;&lt;br /&gt;Global variables are always available when the application is running but &lt;br /&gt;object level variables are available only if the object is instantiated. &lt;br /&gt;&lt;br /&gt;151. Let's say you have local and instance variables with the same name X &lt;br /&gt;and you are assigning the value to the variable: X=25. Which variable will be &lt;br /&gt;equal to 25 - local or instance? &lt;br /&gt;&lt;br /&gt;Local. &lt;br /&gt;&lt;br /&gt;152. Write a code to update two datawindows in one transaction. &lt;br /&gt;&lt;br /&gt;SQLCA.AutoCommit = FALSE // This Begins the Transaction &lt;br /&gt;&lt;br /&gt;IF dw_1.Update( ) &gt; 0 THEN &lt;br /&gt;IF dw_2.Update( ) &gt; 0 THEN &lt;br /&gt;// Both updates succeeded, COMMIT the changes. &lt;br /&gt;COMMIT; &lt;br /&gt;ELSE &lt;br /&gt;// Update of dw_2 failed, ROLLBACK the changes; &lt;br /&gt;ROLLBACK; &lt;br /&gt;END IF &lt;br /&gt;ELSE &lt;br /&gt;// Update of dw_1 failed, ROLLBACK the changes; &lt;br /&gt;ROLLBACK; &lt;br /&gt;END IF &lt;br /&gt;&lt;br /&gt;// Clean up AutoCommit after COMMIT/ROLLBACK to prevent another transaction from beginning. &lt;br /&gt;SQLCA.AutoCommit = TRUE &lt;br /&gt;&lt;br /&gt;You might want to call the Update function with arguments (True, False) &lt;br /&gt;to prevent resetting of row statuses. In this case you need to call function ResetUpdate() &lt;br /&gt;after successful updates. &lt;br /&gt;&lt;br /&gt;153. What's the maximum size of data you can store in integer and string variables respectively? &lt;br /&gt;&lt;br /&gt;Integer can store values up to 32kb and string variables can hold up to 60000 bytes. &lt;br /&gt;&lt;br /&gt;154. What are the different ways to pass arguments to a function? &lt;br /&gt;&lt;br /&gt;You can pass arguments by value, by reference and read_only (in PB5). &lt;br /&gt;If you choose 'by value' - PowerBuilder passes the copy of an argument to a function and any &lt;br /&gt;changes to this value in a function will not affect the original. &lt;br /&gt;'By Reference' means that PowerBuilder passes a pointer to the passed variable and all changes &lt;br /&gt;to this value will be applied to the original. &lt;br /&gt;'Read Only' passes argument by value without creating a copy of the variable but you cannot &lt;br /&gt;change this argument within the function. &lt;br /&gt;&lt;br /&gt;155. What happens to a PowerBuilder object when you regenerate it? &lt;br /&gt;&lt;br /&gt;Powerbuilder recompiles all scripts of this object to make sure that all referred objects exist. &lt;br /&gt;&lt;br /&gt;156. Give an example of delegation in PFC. &lt;br /&gt;&lt;br /&gt;All application related services are implemented in n_cst_appmanager object. In the Open event &lt;br /&gt;of the application you instantiate this object and trigger pfc_open event to this object. &lt;br /&gt;In other words, you delegate the processing of the Open event to another object. &lt;br /&gt;&lt;br /&gt;157. Which of the following DataWindow object settings will give you the highest row locking &lt;br /&gt;protection, in a multiuser environment? &lt;br /&gt;- Key Columns &lt;br /&gt;- Key and Updatable Columns -- Correct answer &lt;br /&gt;- Key and Modified Columns &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;158. What types of joins do you know? &lt;br /&gt;&lt;br /&gt;Equijoin, Non-equijoin, Outer join, Self join &lt;br /&gt;&lt;br /&gt;159. If you are developing an NVO that has a private variable - what would you do &lt;br /&gt;to allow other objects to change the value of this variable? &lt;br /&gt;&lt;br /&gt;I would create a public function in this object, for example, of_set_value(). &lt;br /&gt;This function will set the value to the private variable. &lt;br /&gt;&lt;br /&gt;160. What do you know about MDI_1 control? &lt;br /&gt;&lt;br /&gt;Whenever you create a window of type MDI_frame or MDI_frame with MicroHelp, &lt;br /&gt;PowerBuilder automatically creates a control 'MDI_1'. This control represents the client &lt;br /&gt;area in the window. You can open sheets only in the client area, i.e., in the MDI_1 control &lt;br /&gt;only. MDI_1 is not a reserved word, so you can name another control with this name, but, &lt;br /&gt;it is not advisable. &lt;br /&gt;&lt;br /&gt;161. Let's say, SQL UPDATE statement modified 10 rows on a Sybase table that had a trigger &lt;br /&gt;for Update. How many times will the trigger be fired? &lt;br /&gt;&lt;br /&gt;It'll be fired once - Sybase has statement level triggers only. &lt;br /&gt;&lt;br /&gt;162. How do you usually test your application and move it into production? &lt;br /&gt;&lt;br /&gt;Initially each team member does unit test of his code. When it's done, &lt;br /&gt;we build the executable and pbd's and perform the system test. &lt;br /&gt;If we find some bugs, we perform the unit test again. If everything is OK, &lt;br /&gt;we optimize and regenerate libraries and copy executable and pbd's into &lt;br /&gt;a special directory on a file server and users can run the application &lt;br /&gt;from there to perform the user acceptance test. &lt;br /&gt;If they find a bug, we start from unit test again and re-build the pbd(s) &lt;br /&gt;with the problem fixed. If users like the application, our team leader copies &lt;br /&gt;files into production directories. &lt;br /&gt;&lt;br /&gt;163. Can you start SQL Server's transaction from PB script? &lt;br /&gt;&lt;br /&gt;You can write in PB script Execute Immediate "BEGIN TRAN". &lt;br /&gt;&lt;br /&gt;164. When do you need to use the AcceptText() function ? &lt;br /&gt;&lt;br /&gt;If the user changes data in the edit control of the datawindow &lt;br /&gt;and after that clicks on some other control on the Window, this &lt;br /&gt;changed value will stay in the edit control and will not go through the &lt;br /&gt;validation process. This means that the data will not be placed in the &lt;br /&gt;datawindow buffer. &lt;br /&gt;The AcceptText() function will enforce the validation process from the &lt;br /&gt;script. &lt;br /&gt;&lt;br /&gt;165. If you need to write a script that will sort the data in a datawindow &lt;br /&gt;when the user clicks on the column's header, how would you do this? &lt;br /&gt;&lt;br /&gt;I'd use the function GetObjectAtPointer() to find out what column the user &lt;br /&gt;clicked on and whether he clicked on the header or not. After that I'd use &lt;br /&gt;functions SetSort() and Sort(). &lt;br /&gt;&lt;br /&gt;166. What is the BCP utility in Sybase for? &lt;br /&gt;&lt;br /&gt;This is a Bulk Copy Program and it's used by Database Administrators &lt;br /&gt;to copy big amounts of data between tables or databases. &lt;br /&gt;&lt;br /&gt;167. What do you know about 3-tier architecture? &lt;br /&gt;&lt;br /&gt;It's when you place business logic in a separate application. In this &lt;br /&gt;Case your application consists of the front end, middle tier and back end parts. &lt;br /&gt;Sometimes multi-tier applications are called Distributed Systems. &lt;br /&gt;&lt;br /&gt;168. What are API calls and can you do API calls from PowerBuilder? &lt;br /&gt;&lt;br /&gt;API (Application Program Interface) is a library of useful functions. &lt;br /&gt;For example, you can use MS Windows API calls from PowerBuilder by declaring &lt;br /&gt;external functions from such DLL's as User32, Kernel32 or GDI32. &lt;br /&gt;&lt;br /&gt;169. Let's say you have two database tables Tab1 and Tab2. Tab1 has 3 rows and &lt;br /&gt;Tab2 has one row with the following values: &lt;br /&gt;Tab1: id Tab2: id &lt;br /&gt;a b &lt;br /&gt;b &lt;br /&gt;c &lt;br /&gt;&lt;br /&gt;Write an SQL statement to produce the result set which will exclude &lt;br /&gt;the row with the b value. Use both tables. &lt;br /&gt;&lt;br /&gt;Method 1. Select Tab1.id &lt;br /&gt;from Tab1 &lt;br /&gt;where not exists &lt;br /&gt;(select * &lt;br /&gt;from Tab2 &lt;br /&gt;where Tab2.id = Tab1.id) &lt;br /&gt;&lt;br /&gt;Method 2. Select id &lt;br /&gt;from tab1 &lt;br /&gt;where id not in (select id &lt;br /&gt;from tab2) &lt;br /&gt;&lt;br /&gt;170. What would you do to improve performance of a PB application? &lt;br /&gt;&lt;br /&gt;On the back end: 1. Create indexes where needed. &lt;br /&gt;2. Use stored procedures instead of embedded SQL. &lt;br /&gt;3. Try to minimize use of database cursors.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-4199085041053296937?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/4199085041053296937/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=4199085041053296937' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/4199085041053296937'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/4199085041053296937'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2010/08/powerbuilder-interview-question-part-6_30.html' title='Powerbuilder Interview question _part 7'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-673444736968655561</id><published>2010-08-30T05:21:00.000-07:00</published><updated>2010-08-30T05:28:30.899-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder'/><title type='text'>Powerbuilder interview question _part 6</title><content type='html'>INHERITANCE&lt;br /&gt;&lt;br /&gt;1. What is inheritance?&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;2. What is the benefit of inheritance?&lt;br /&gt;Inheritance ensures consistency in the code and look of objects and helps initial coding.&lt;br /&gt;&lt;br /&gt;3. What is SUPER keyword and how it is used?&lt;br /&gt;PB has 4 special keywords used to refer to an object without having to specify its name:&lt;br /&gt;This—used for a reflexive reference to the object itself (window, control or user object)&lt;br /&gt;Parent—refers to the window that owns or contain the object making the reference&lt;br /&gt;ParentWindow—reference from a menu item referring to the window to which is attach&lt;br /&gt;Super—refers to the ancestor script&lt;br /&gt;1. This is equivalent to the following more verbose (Syn. using more words) call (assuming the name of the ancestor is w_ancestor, &lt;br /&gt;Call w_ancestor cb_calculate::clicked&lt;br /&gt;This calls the script in the clicked event in the immediate ancestor of the cb_calculate&lt;br /&gt;Call super :: Clicked&lt;br /&gt;&lt;br /&gt;4. When we change an attribute in an inherited control, we break the connection to the parent for that attribute only. -- TRUE&lt;br /&gt;&lt;br /&gt;5. Which PowerBuilder objects can be inherited?&lt;br /&gt;MENUS; USER OBJECTS; WINDOWS&lt;br /&gt;&lt;br /&gt;6. Give an example of how you would use inheritance in your project?&lt;br /&gt;I used the base (class) library to inherit it for all my application objects in order to increase the development process.&lt;br /&gt;A standard company logon window that requires minimal changes.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;7. How can you customize a descendant?&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;8. Can you delete a MenuItem in the descendant menu if it was created in the ancestor one?&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;9. What happens when you change the ancestor?&lt;br /&gt;The changes apply to the all descendants.&lt;br /&gt;&lt;br /&gt;10. What can you do with ancestor scripts?&lt;br /&gt;We can Override or Extend the ancestor script at the descendant level. We can also call it from the descendant script.&lt;br /&gt;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?&lt;br /&gt;By exporting w_customers, editing the exported file and importing it back.&lt;br /&gt;&lt;br /&gt;12. How many levels of inheritance do you usually use?&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;13. How can you call an ancestor script from a descendant object? (see pronouns)&lt;br /&gt;There is CALL command that calls an ancestor script from a script for a descendant object. For example, CALL w_emp :: Open&lt;br /&gt;CALL w_emp.cb_close :: Clicked&lt;br /&gt;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&lt;br /&gt;You can name directly the ancestor in the call or use the reserved word SUPER&lt;br /&gt;Call Super :: Clicked&lt;br /&gt;&lt;br /&gt;14. How can you override ancestor script at descendent level with no script in descendant?&lt;br /&gt;Put comments //&lt;br /&gt;&lt;br /&gt;15. How can you customise a Descendant?&lt;br /&gt;Override or extend script, add controls, change value of attributes and variables.&lt;br /&gt;&lt;br /&gt;16. How can you change an object’s ancestor without recording it?&lt;br /&gt;Export the descendant, edit it (changing the name of the ancestor) and import it back.&lt;br /&gt;&lt;br /&gt;17. Can you inherit a DataWindow?&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;18. What is the difference between inheriting and copying an object?&lt;br /&gt;When you change the ancestor object the changes are reflected in all the descendants.&lt;br /&gt;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.&lt;br /&gt;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&lt;br /&gt;&lt;br /&gt;19. How can you execute ancestor script from the descendant?&lt;br /&gt;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.&lt;br /&gt;CALL w_emp::Open&lt;br /&gt;The following statement calls a script for an event in a control in an ancestor window.&lt;br /&gt;CALL w_emp`cb_close::Clicked&lt;br /&gt;In some circumstances, you can use the Super reserved word when ancestor object is the descendant object's immediate ancestor.&lt;br /&gt;&lt;br /&gt;20. How you can call function in ancestor from descendant?&lt;br /&gt;w_parent::functionname(arg)&lt;br /&gt;If the descendant has a function with the same name&lt;br /&gt;Supper:: wf_functionname( )&lt;br /&gt;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:&lt;br /&gt;w_parent::functionname(arg)&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;22. Which of the following can be inherited? (pick all)&lt;br /&gt;-window -Y&lt;br /&gt;-data window - Y&lt;br /&gt;-application&lt;br /&gt;-function&lt;br /&gt;-query&lt;br /&gt;-script&lt;br /&gt;-user object -Y&lt;br /&gt;&lt;br /&gt;23. You can create, delete and change controls in a descendent? False&lt;br /&gt;&lt;br /&gt;24. A descendant can only have one ancestor? False&lt;br /&gt;&lt;br /&gt;25. What is SUPER keyword and how it is used?&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;INSTANTIATION&lt;br /&gt;&lt;br /&gt;1. How do you instantiate one window from another?&lt;br /&gt;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.&lt;br /&gt;We have to declare a window object as a datatype and open it.&lt;br /&gt;w_main w_main1, w_main2&lt;br /&gt;OPEN(w_main1)&lt;br /&gt;OPEN(w_main2)&lt;br /&gt;&lt;br /&gt;2. What do you need Instantiation in your application for?&lt;br /&gt;When we want to display several windows that are identical in structure but have different data values.&lt;br /&gt;&lt;br /&gt;3. Give a definition of an instance of a window?&lt;br /&gt;Instance is a copy of a window in memory. More than one instance of the same window object can be created in memory.&lt;br /&gt;&lt;br /&gt;4. How can you create instances of the same window object?&lt;br /&gt;1. Declare a variable of type w_name :&lt;br /&gt;w_name w_my_window&lt;br /&gt;2. To create an instance we use function open( )&lt;br /&gt;open(w_my_window)&lt;br /&gt;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:&lt;br /&gt;w_employee_address w_ea_inst[5]&lt;br /&gt;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.&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;5. What the difference between Class and Instance?&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;Libraries&lt;br /&gt;&lt;br /&gt;1. What is Regenerate option in the Library painter? When is it most useful?&lt;br /&gt;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.&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;2. The Library List shows the DOS path to PowerBuilder…?&lt;br /&gt;&lt;br /&gt;3. Why should you optimize libraries?&lt;br /&gt;The library entity can become fragmented over time, increasing seek time.&lt;br /&gt;&lt;br /&gt;4. What is Check-in, Check-out options on a Library Painter?&lt;br /&gt;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.&lt;br /&gt;(What is the usage of the check in/check out feature in PB?)&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;MDI&lt;br /&gt;1. What is an MDI application ?&lt;br /&gt;MDI application is a frame used to manage multiple documents of the same or different types within one.&lt;br /&gt;&lt;br /&gt;2. What is Microhelp? Where do you define it?&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;3. Where do all Menus in an MDI application display?&lt;br /&gt;All Menus, display in the menu bar of the frame window.&lt;br /&gt;&lt;br /&gt;4. Which menu applies to an open sheet of a document type that has been&lt;br /&gt;defined without its own Menu?&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;5. What are the parts of MDI frame?&lt;br /&gt;TitleBar&lt;br /&gt;MenuBar&lt;br /&gt;ToolBar&lt;br /&gt;Client Area&lt;br /&gt;Status Area&lt;br /&gt;Frame Window&lt;br /&gt;&lt;br /&gt;5. What is an MDI frame?&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;6. What types of an MDI frame do you know?&lt;br /&gt;There are 2 types of an MDI frame windows: MDI frame and MDI frame with micro help.&lt;br /&gt;&lt;br /&gt;7. What is the difference between SDI and MDI frame?&lt;br /&gt;MDI allows the user to work with more than one document at a time.&lt;br /&gt;SDI allows to work with only one document.&lt;br /&gt;&lt;br /&gt;8.What is the difference between MDI frame and MDI frame with micro help?&lt;br /&gt;MDI frame doesn’t have microhelp utility.&lt;br /&gt;MDI frame with micro help has the microhelp on the bottom of the window.&lt;br /&gt;&lt;br /&gt;9. What is a MDI_1 object? Can we place any controls on MDI_1?&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;10. Does MDI_1 have events? What are they?&lt;br /&gt;NO. It does not have any events.&lt;br /&gt;&lt;br /&gt;11. Is it a good idea to use CloseQuery Event in MDI window?&lt;br /&gt;Yes. It is a good idea to send a message to the user about to exit from the application.&lt;br /&gt;For example:&lt;br /&gt;MessageBox(“Question?”, ”Are you sure you want to exit from the application?”)&lt;br /&gt;&lt;br /&gt;12. How do you check if there are any MDI Sheets currently existing?&lt;br /&gt;IsValid (w_name) determines whether the window is open&lt;br /&gt;&lt;br /&gt;13. You have an MDI Window, Sheet 1 with Menu and Sheet 2 without the Menu.&lt;br /&gt;You open Sheet 2 after Sheet 1. Which Menu will have Sheet 2 MDI Menu or Sheet 1 Menu?&lt;br /&gt;It will have the Menu of Sheet1 as the last Menu that was displayed on the MDI window.&lt;br /&gt;A sheet can have its own menu, but its not required to.&lt;br /&gt;&lt;br /&gt;14. How do the Application components communicate with one another?&lt;br /&gt;Direct access or manipulation by calling a function, trigger or posting an event using global variables, passing parameters.&lt;br /&gt;&lt;br /&gt;15. How do we send parameters between two already opened windows?&lt;br /&gt;n global variables;&lt;br /&gt;n shared variables;&lt;br /&gt;n send parameters by MessageObject using function Send( )&lt;br /&gt;&lt;br /&gt;16. How can two sheets within MDI frame communicate with one another?&lt;br /&gt;Global variable&lt;br /&gt;Shared variable&lt;br /&gt;Message object&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;MDI Applications&lt;br /&gt;&lt;br /&gt;17. What is MDI? &lt;br /&gt;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)&lt;br /&gt;&lt;br /&gt;18. What functions do we usually use working with MDI?&lt;br /&gt;OpenSheet() - to open sheets inside the MDI frame GetActiveSheet() to keep track which sheet is active now, ArrangeSheet() to arrange sheet’s layout.&lt;br /&gt;&lt;br /&gt;19. How can we display information to the users in the status area?&lt;br /&gt;We can associate microhelp with the control defining its Tag attribute and then we will use SetMicroHelp() function to display this tag attribute.&lt;br /&gt;&lt;br /&gt;20. How can we display toolbar picture under the MenuItem?&lt;br /&gt;We have to associate a toolbar picture with MenuItem in the Menu Painter.&lt;br /&gt;&lt;br /&gt;21. What is the function to open an MDI frame window?&lt;br /&gt;&lt;br /&gt;22. What is the function to open a response window from an MDI sheet?&lt;br /&gt;&lt;br /&gt;23. How do you use OpenSheetWithParm?&lt;br /&gt;(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.)&lt;br /&gt;Applies to Window objects. Syntax:&lt;br /&gt;OpenSheetWithParm ( sheetrefvar, parameter {, windowtype }, mdiframe {, position {, arrangeopen } } )&lt;br /&gt;Example:&lt;br /&gt;OpenSheetWithParm(w_child_1, "MA", MDI_User, 2, Original!)&lt;br /&gt;&lt;br /&gt;MENU&lt;br /&gt;&lt;br /&gt;1. What is purpose of a Menu object?&lt;br /&gt;A Menu object is a visual object that provides the user with lists of commands, options, or alternate ways of performing a task.&lt;br /&gt;&lt;br /&gt;2. What types of Menus do you know ?&lt;br /&gt;DropDown&lt;br /&gt;Cascading&lt;br /&gt;Pop-up&lt;br /&gt;&lt;br /&gt;3. What is the difference between the Clicked and Selected event of a MenuItem?&lt;br /&gt;The Clicked event occurs when the user clicks the mouse on the MenuItem or selects the MenuItem with a keystroke and presses Enter.&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;6. What is the difference between an accelerator key and a shortcut key in the&lt;br /&gt;way a user uses them to initiate a command or select an option on a Menu ?&lt;br /&gt;Accelerator keys and shortcut keys provide alternative means of invoking commands or selecting options represented by the MenuItems to which they are assigned.&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;7. What kind of menus do you use? &lt;br /&gt;A DropDown menu is a menu under an item in the menu bar&lt;br /&gt;Cascading menu is a menu to the side of an item in a DropDown menu.&lt;br /&gt;Pop-up menu is not connected with a menu bar.&lt;br /&gt;&lt;br /&gt;8. What attribute of the MenuItem do you know?&lt;br /&gt;Checked. Whether the MenuItem displays with a check mark next to it. &lt;br /&gt;Enabled. Whether the MenuItem can be selected.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;14. How do you use menus in the window?&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;MESSAGE OBJECT&lt;br /&gt;&lt;br /&gt;1. What is the Message object. How do you use it? Why do you use it?&lt;br /&gt;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.&lt;br /&gt;Object.Method (parameters)&lt;br /&gt;In PB, there are three types of messages:&lt;br /&gt;1, 2. Functions &amp; events which are collectively called “methods”;&lt;br /&gt;3. Properties.&lt;br /&gt;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.&lt;br /&gt;MessageBox(“Hello”, “How are you?”)&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;2. How do you use OpenSheetWithParm( )?&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;n OpenWithParm( )&lt;br /&gt;n OpenSheetWithParm( )&lt;br /&gt;&lt;br /&gt;4. (true or false) The Open() and OpenWithParm() are only used in (SDI) applications.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;6. Can a Message object Pass Parameters?&lt;br /&gt;Yes, using Send () command&lt;br /&gt;&lt;br /&gt;7. What functions can you use to pass parameters between the Windows in PB?&lt;br /&gt;1. OpenWithParm( )&lt;br /&gt;2. OpenSheetWithParm( )&lt;br /&gt;3. CloseWithReturn( )&lt;br /&gt;&lt;br /&gt;8. How do OpenWithParm() and CloseWithReturn() functions pass parameters?&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;9. What is the usage for StringParm, DoubleParm and PowerObjectParm attributes of Message Object?&lt;br /&gt;&lt;br /&gt;10. What attribute in the Message Object do we have to use if we want to store a Structure in it?&lt;br /&gt;We have to use the PowerObjectParm attribute.&lt;br /&gt;&lt;br /&gt;11. What is the Message Object?&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;12. What attributes of System Object do you use to pass parameters windows?&lt;br /&gt;DoubleParm for numeric parameters, StringParm for strings and PowerObjectParm for any PB objects including structure.&lt;br /&gt;&lt;br /&gt;013. What function do you use to communicate parameters between windows?&lt;br /&gt;OpenWithParm and CloseWithReturn power script function.&lt;br /&gt;&lt;br /&gt;14. How can you handle Error Messages (examples)?&lt;br /&gt;Put some code into DB Error event (using SetActionCode)&lt;br /&gt;int err_code&lt;br /&gt;If SQLDB.Code &lt;&gt; 0 Then&lt;br /&gt;MessageBox (“DB Error:”, “Number” + string (sqldbcode) + “” + &amp;&lt;br /&gt;sqlerrtext, StopSign!)&lt;br /&gt;return 1&lt;br /&gt;End if&lt;br /&gt;&lt;br /&gt;33. What is the Message object? How do you use it? Why do you use it?&lt;br /&gt;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.&lt;br /&gt;Object.Method(parameters)&lt;br /&gt;In PB, there are three types of messages:&lt;br /&gt;1, 2. Functions &amp; events which are collectively called “methods”;&lt;br /&gt;3. Properties.&lt;br /&gt;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.&lt;br /&gt;MessageBox(“Hello”, “How are you?”)&lt;br /&gt;For the transaction object, you do not use the object.function syntax. Instead, you use standard SQL syntax. &lt;br /&gt;Name Pronouns&lt;br /&gt;1. Describe the circumstances under which you would use the pronoun This instead of the name of the object it represents.&lt;br /&gt;The pronoun This refers to the MenuItem, object, or control for which the script is written.&lt;br /&gt;&lt;br /&gt;2. What is SUPER keyword and how it is used?&lt;br /&gt;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&lt;br /&gt;Call SUPPER :: Clicked&lt;br /&gt;This example calls the Clicked Event in the ancestor object. If you are calling an ancestor function, then you only need to use SUPER ::&lt;br /&gt;SUPER :: wf_name( arguments )&lt;br /&gt;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&lt;br /&gt;&lt;br /&gt;3. What if you need to call a function from not an immediate ancestor?&lt;br /&gt;We have to specify the full path to that function. For example:&lt;br /&gt;w_name :: function_name( ) to call an event from not an immediate ancestor&lt;br /&gt;Call ancestor window :: event.&lt;br /&gt;&lt;br /&gt;4. What are :THIS, PARENT, PARENTWINDOW clauses?&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;5. What is the difference between reserved word Parent an ParentWindow, When are they used in the script for the MenuItem?&lt;br /&gt;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 :&lt;br /&gt;1. A script for a control in a window.&lt;br /&gt;2. A script for a custom UserObject.&lt;br /&gt;3. A script for a MenuItem.&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;6. What are Object Name pronouns and how do use them?&lt;br /&gt;Name Pronouns are reserved words that are used to refer to objects or controls instead of using actual name. They are:&lt;br /&gt;This is used to refer to an object or control from within any script coded for it.&lt;br /&gt;Parent is used to refer to the window from any script for a control on the window.&lt;br /&gt;ParentWindow can be used only in scripts for MenuItems.&lt;br /&gt;Super is a reference used in a script of an inherited object to refer to the script in its immediate ancestor (parent).&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;7. What reserve word for window do you know?&lt;br /&gt;ParentWindow type refer to the window that the menu is associated with at runtime.&lt;br /&gt;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.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-673444736968655561?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/673444736968655561/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=673444736968655561' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/673444736968655561'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/673444736968655561'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2010/08/powerbuilder-interview-question-part-6.html' title='Powerbuilder interview question _part 6'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-2570751307462414463</id><published>2010-08-30T05:20:00.001-07:00</published><updated>2010-08-30T05:20:23.745-07:00</updated><title type='text'>Powerbuilder interview question _ part 5</title><content type='html'>1. What is PowerBuilder?&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;2. What are PowerBuilder features?&lt;br /&gt;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.&lt;br /&gt;• A powerful scripting language, PowerScript, for building event-driven applications.&lt;br /&gt;• Support for all Microsoft Windows objects and Visual Basic custom controls.&lt;br /&gt;• A custom Windows object, the DataWindow object, for database manipulation and reporting.&lt;br /&gt;• Open integration with configuration control tools, such as PVCS.&lt;br /&gt;• Support for Dynamic Data Exchange(DDE), Dynamic Link Libraries(DLL),&lt;br /&gt;and Object Linking and Embedding(OLE).&lt;br /&gt;• Support for importing and exporting popular file formats.&lt;br /&gt;• Extensive on-line help.&lt;br /&gt;3. What are PowerBuilder benefits?&lt;br /&gt;PowerBuilder allows an application developer to:&lt;br /&gt;- Quickly develop object-based windows database applications without coding in C or C++.&lt;br /&gt;- Take advantage of client/server architecture.&lt;br /&gt;- Create attractive, easy-to-use applications taking full advantage of Graphic User Interface (GUI) (GUI) design principles.&lt;br /&gt;- Create applications that can be independent of the database management system being used.&lt;br /&gt;&lt;br /&gt;4. What is the strongest and weakest points of PowerBuilder?&lt;br /&gt;Strongest :&lt;br /&gt;1. DataWindow.&lt;br /&gt;2. Inheritance&lt;br /&gt;3. Encapsulation&lt;br /&gt;4. Polymorphism&lt;br /&gt;Weakest :&lt;br /&gt;1. Bad performance&lt;br /&gt;2. Not fully Object-Oriented.&lt;br /&gt;5. What are PowerBuilder applications?&lt;br /&gt;PowerBuilder applications are object-oriented, event-driven applications that execute within Windows, typically within a client/server architecture.&lt;br /&gt;&lt;br /&gt;6. What are Windows?&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;7. What is a menu bar?&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;8. What is Event-driven processing?&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;9. What is Object-oriented development?&lt;br /&gt;Object-oriented development views the analysis, design, and implementation of systems from the perspective of objects, which have specific collections of attributes and events.&lt;br /&gt;&lt;br /&gt;10. What is object?&lt;br /&gt;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.&lt;br /&gt;PB applications are developed by combining objects of the following types:&lt;br /&gt;• Application&lt;br /&gt;• Window&lt;br /&gt;• DataWindow&lt;br /&gt;• Function&lt;br /&gt;• Menu&lt;br /&gt;• Query&lt;br /&gt;• Structure&lt;br /&gt;• User Object&lt;br /&gt;&lt;br /&gt;11. What are attributes?&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;12. What is an event?&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;13. What is an application object?&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;14. What are window objects?&lt;br /&gt;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.&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;15. What is a menu?&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;16. What is a DataWindow object?&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;17. What is a query?&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;18. What are user objects?&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;19. What is a function?&lt;br /&gt;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:&lt;br /&gt;• Object-level functions&lt;br /&gt;• Global functions, that is, function objects&lt;br /&gt;Object-level functions, such as a window function, are encapsulated within the object for which they are defined.&lt;br /&gt;Global functions are independent objects, they are not encapsulated within some other object.&lt;br /&gt;Both types of functions may be called from scripts for any other object in an application, however, they are called in different ways.&lt;br /&gt;&lt;br /&gt;20. What is a structure?&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;21. What is a painter?&lt;br /&gt;A painter is a graphical tool within PB that you use to create a PB objects.&lt;br /&gt;&lt;br /&gt;22. How can you configure your toolbar?&lt;br /&gt;You may configure your PainterBar and the PowerBar in several ways:&lt;br /&gt;• Choose Toolbars... from the Window menu; the Toolbars response window appears.&lt;br /&gt;• Click the right mouse button on the toolbar to display the popup menu of options.&lt;br /&gt;Both methods provide the same options.&lt;br /&gt;&lt;br /&gt;23. Where are PB objects stored?&lt;br /&gt;PB objects are stored in PB library files (.PBL).&lt;br /&gt;&lt;br /&gt;24. Which of the following can be PUBLIC?&lt;br /&gt;-function -Yes&lt;br /&gt;-script&lt;br /&gt;-instance variable&lt;br /&gt;-window&lt;br /&gt;-application&lt;br /&gt;&lt;br /&gt;PowerBuilder&lt;br /&gt;&lt;br /&gt;25. Why is PowerBuilder a client/server application development tool ?&lt;br /&gt;Because PowerBuilder Applications request services from a server Database through SQL statements.&lt;br /&gt;&lt;br /&gt;26. What is event-driven processing ?&lt;br /&gt;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”)&lt;br /&gt;&lt;br /&gt;27. What is Object-Oriented?&lt;br /&gt;You can say that the programming language is object-oriented if it has 3 main features:&lt;br /&gt;1. Inheritance.&lt;br /&gt;2. Encapsulation.&lt;br /&gt;3. Polymorphism.&lt;br /&gt;PowerBuilder has all of these features.&lt;br /&gt;It speeds up the development process and improves code quality and efficiency.&lt;br /&gt;&lt;br /&gt;3.What two qualities do all objects have?&lt;br /&gt;Attributes are the characteristics of objects, which collectively define an object’s appearance.&lt;br /&gt;Events are the components of an object that permit it to recognize and respond to a Windows message.&lt;br /&gt;&lt;br /&gt;4.List at least four of the eight PowerBuilder objects.&lt;br /&gt;Application object &lt;br /&gt;Queries &lt;br /&gt;Windows&lt;br /&gt;User objects&lt;br /&gt;Menus&lt;br /&gt;Functions&lt;br /&gt;DataWindow objects &lt;br /&gt;Structures&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;What is a painter ?&lt;br /&gt;A painter is a graphical tool within PB that we use to create a PB object.&lt;br /&gt;&lt;br /&gt;6. What is the Power Panel? What is Power Bar?&lt;br /&gt;They are a collection of icons through which we have an access to a painter.&lt;br /&gt;&lt;br /&gt;7. Where are all PowerBuilder objects stored?&lt;br /&gt;PowerBuilder objects are stored in PowerBuilder library files. Many different objects may be stored in the same library.&lt;br /&gt;&lt;br /&gt;8. What is Client/Server architecture? &lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;9. Where in PowerBuilder can you do interactive SQL?&lt;br /&gt;-database painter in data manipulation&lt;br /&gt;-DataWindow painter&lt;br /&gt;-query painter&lt;br /&gt;-script&lt;br /&gt;PART 1&lt;br /&gt;&lt;br /&gt;9. What is new in PowerBuilder 5.0? &lt;br /&gt;Windows 95 controls&lt;br /&gt;compiled code&lt;br /&gt;new DataWindows&lt;br /&gt;event can have value and return value using return keyword&lt;br /&gt;Function can be overloaded.&lt;br /&gt;may not use SetActionCode( ) function – became RETURN&lt;br /&gt;new syntax for Modify( )&lt;br /&gt;Class Library (pfc)—PowerBuilder Foundation Class Library&lt;br /&gt;Functions that became obsolete:&lt;br /&gt;&lt;br /&gt;Instead of New in PB5 Event &lt;br /&gt;SetActionCode return n Clicked &lt;br /&gt;DB Error&lt;br /&gt;ItemChanged&lt;br /&gt;ItemError&lt;br /&gt;Print Page&lt;br /&gt;RetrieveRow&lt;br /&gt;Retrieve Start&lt;br /&gt;Update Start&lt;br /&gt;Get SQL Preview() SQL Syntax &lt;br /&gt;DB Error&lt;br /&gt;SQL Preview&lt;br /&gt;&lt;br /&gt;GetUpdateStatus(r, buff) r = row DB Error &lt;br /&gt;ec=DBErrorCode() SQLDBCode DB Error (it also became an Object&lt;br /&gt;argument in Transaction)&lt;br /&gt;DBErrorMessage() SQLErrorText DB Error&lt;br /&gt;GetClickedColumn() IF dwo.type="column"&lt;br /&gt;THEN c = integer(dwo.ID)&lt;br /&gt;ELSE c=0&lt;br /&gt;END IF Clicked&lt;br /&gt;Double Clicked&lt;br /&gt;GetMessageText s = text Custom Event for&lt;br /&gt;pbm_dwnmessagetext&lt;br /&gt;GetClickedRow() r = row Clicked&lt;br /&gt;Double Clicked&lt;br /&gt;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).&lt;br /&gt;Is PowerBuilder an object-oriented language? Why?&lt;br /&gt;&lt;br /&gt;Yes. You can say that a programming language is object-oriented if it has 3 main features:&lt;br /&gt;Inheritance.&lt;br /&gt;1. Encapsulation.&lt;br /&gt;2. Polymorphism.&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;5. What is an object? (Encapsulation)&lt;br /&gt;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.&lt;br /&gt;EMBEDDED SQL&lt;br /&gt;&lt;br /&gt;1. How do we refer to the PB variables inside SQL statements?&lt;br /&gt;We have to precede them by colon, for example: Insert into Employee (salary)&lt;br /&gt;Values (:sal_var) &lt;br /&gt;&lt;br /&gt;2. How do we use SELECT statement in PB?&lt;br /&gt;If we expect only one row to in our Result Set, we use single SELECT, for example:&lt;br /&gt;Select employee Emp_lName, employee EMP_FNAME&lt;br /&gt;into :sle_LNAME.text, sle_FNAME.text&lt;br /&gt;from Employee&lt;br /&gt;where Employee EMP _nbp=:Emp_num&lt;br /&gt;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&lt;br /&gt;in the LOOP while SGLCA.SQLCODE=0&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-2570751307462414463?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/2570751307462414463/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=2570751307462414463' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/2570751307462414463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/2570751307462414463'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2010/08/powerbuilder-interview-question-part-5.html' title='Powerbuilder interview question _ part 5'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-8322638290543271288</id><published>2010-08-30T05:17:00.000-07:00</published><updated>2010-08-30T05:19:58.091-07:00</updated><title type='text'>powerbuilder interview question _ part 4</title><content type='html'>&lt;strong&gt;ENCAPSULATION&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;What is encapsulation?&lt;br /&gt;Encapsulation means that the functionality of one object does not effect the functionality of another one.&lt;br /&gt;&lt;br /&gt;1. What are benefits of using encapsulation? Give examples of encapsulation in PB.&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;EVENTS&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;1. Explain ItemChanged and ItemError events?&lt;br /&gt;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:&lt;br /&gt;n Is anything changed?&lt;br /&gt;n Is the data of correct data type?&lt;br /&gt;n Does data pass validation rules?&lt;br /&gt;ItemError event occurs when the item does not pass validation test for its column.&lt;br /&gt;&lt;br /&gt;2. What is the OTHER event?&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;3. If there is a problem with the DB during data retrieval :&lt;br /&gt;n Which DW event will be triggered?&lt;br /&gt;n Where will the error code be stored?&lt;br /&gt;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.&lt;br /&gt;1 - Do not display the error message.&lt;br /&gt;The Error code will be stored in DBErrorCode, which PB 5 provides to us as an argument in the DBError Event.&lt;br /&gt;&lt;br /&gt;4. What is the difference between an Open and Activate events?&lt;br /&gt;The Open Event occurs after the window has been opened but before it is displayed.&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;4a. What problem could be with Activate event?&lt;br /&gt;Problem with Activate event is we cannot put FocusChanged commands such as MessageBox( ) in this event, because we will be in a loop.&lt;br /&gt;&lt;br /&gt;5. What is CloseQuery event? When do you use it?&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;6. Which events do not “like” the MessageBox( ) function to be in their scripts?&lt;br /&gt;All FOCUS events such as Vertical Scroll, Horizontal Scroll, Activate, LoseFocus event.&lt;br /&gt;&lt;br /&gt;7. What functions cannot be used in the ItemChanged Event?&lt;br /&gt;AcceptText( )&lt;br /&gt;SetRow( )&lt;br /&gt;&lt;br /&gt;8. What are Constructor and Destructor events?&lt;br /&gt;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. &lt;br /&gt;9. What is Timer event ?&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;10. What do you use the SQL Preview event for?&lt;br /&gt;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)&lt;br /&gt;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:&lt;br /&gt;string s_temp&lt;br /&gt;s_temp = dw_1.Describe(“DataWindow.Table.Select”)&lt;br /&gt;MessageBox(“My SQL”, “s_temp”)&lt;br /&gt;Also, we could use SQL Preview event if we want to use Stored Procedures to perform Update in the Database.&lt;br /&gt;&lt;br /&gt;11. When does SQL Preview event occur and what action codes does this event have?&lt;br /&gt;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. &lt;br /&gt;The action codes are :&lt;br /&gt;0 - (default) Continue;&lt;br /&gt;1 - Stop processing;&lt;br /&gt;2 - Skip this request and execute the next request.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;12. What is the usage of the DBError Event?&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;13. When does PB trigger the DBError event?&lt;br /&gt;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.&lt;br /&gt;14. What events are triggered by Update( )?&lt;br /&gt;SQL Preview&lt;br /&gt;Update Start&lt;br /&gt;Update End&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;15. How do you create your own custom event?&lt;br /&gt;Why would you consider doing it altogether?&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;.EXE FILE&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;1. What is .EXE file?&lt;br /&gt;.EXE file is a form of an application that can be executed outside of PB.&lt;br /&gt;&lt;br /&gt;2. (true or false) You must have either .PBR or .PBD for every application. False&lt;br /&gt;&lt;br /&gt;3. (true or false) You must have both .PBR and .PBD for every application. False&lt;br /&gt;&lt;br /&gt;4.When do you need to use .PBD ? We use .PBD when:&lt;br /&gt;n the number and size of the objects in our application would otherwise make a very large .EXE (1.2 to 1.5 megabytes).&lt;br /&gt;n we need to share components among several applications.&lt;br /&gt;n distribute application components selectively, for example, to upgrade an application or fix a bug.&lt;br /&gt;&lt;br /&gt;5. When do you need to use a .PBR ?&lt;br /&gt;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. &lt;br /&gt;&lt;br /&gt;6. Why do we create PBR, PBD files?&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;7. How many .PBDs can you have for one application ?&lt;br /&gt;As many as we need and depending on available memory.&lt;br /&gt;&lt;br /&gt;8. How many .PBRs can you have for one application ?&lt;br /&gt;One&lt;br /&gt;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.&lt;br /&gt;True&lt;br /&gt;10. What do you need to do before creating an .EXE file?&lt;br /&gt;Before we create the .EXE for an application, we need to make sure that:&lt;br /&gt;n the application is the current application;&lt;br /&gt;n we have listed all of the necessary .PBLs in the library search path for the application;&lt;br /&gt;n if we are using a .PBR, we have created it.&lt;br /&gt;&lt;br /&gt;11. What do you have to distribute with your application to the end-user?&lt;br /&gt;1 The .EXE File&lt;br /&gt;2 The .DDL Files&lt;br /&gt;3 Deployment kit ß .DLLs&lt;br /&gt;&lt;br /&gt;12. What is .PBR file?&lt;br /&gt;PBR file is an ASCII File in which we list resource names or DW object names that were referenced dynamically in the script.&lt;br /&gt;&lt;br /&gt;12a. What are PBR, PBD files? How do you generate them?&lt;br /&gt;.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.&lt;br /&gt;&lt;br /&gt;13. What are advantages of using .PBD s ?&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;14. What is the difference between DLL and PBD?&lt;br /&gt;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). &lt;br /&gt;&lt;br /&gt;15. How do you create a .PBR file?&lt;br /&gt;Through any file editor or Shift F6.&lt;br /&gt;&lt;br /&gt;16. How do you include a DataWindow in a .PBR file?&lt;br /&gt;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) &lt;br /&gt;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)&lt;br /&gt;&lt;br /&gt;17. What is the recommended size of .PBL?&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;18. How can you create in PB an executable that can receive parameters?&lt;br /&gt;PowerBuilder has a function CommandParm( ) that retrieves the parameter string, if any, when the application is executed. For example:&lt;br /&gt;Open Event string ls_command_line&lt;br /&gt;ls_command_line = CommandParm( )&lt;br /&gt;If the command line holds several parameters, you can use string functions Pos(), Left(), Right(), Mid(), etc., to separate the parameters.&lt;br /&gt;&lt;br /&gt;19. What are DLL files and how can we access DLL functions from PB?&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;20. What is the difference between P-Code and Machine code?&lt;br /&gt;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&lt;br /&gt;PB uses P-code.&lt;br /&gt;&lt;br /&gt;21. What type of resources can we list in .PBR file?&lt;br /&gt;Bitmaps, icons, cursors, sound wave files, etc.—all files that are not PB files.&lt;br /&gt;&lt;br /&gt;22. What does the .EXE file contain?&lt;br /&gt;The executable file contains code that application need to run a Windows application, compiled versions of application’s objects and resources that application uses.&lt;br /&gt;&lt;br /&gt;23. Is it always necessary to create the PBR File to include resources in your EXE?&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;24. Where can we create .EXE? We can create .EXE in the Project Painter.&lt;br /&gt;&lt;br /&gt;25. What is the minimum that you must deliver for a PB application? (pick all)&lt;br /&gt;- .EXE&lt;br /&gt;- PBD&lt;br /&gt;- .PBR&lt;br /&gt;- .DLL&lt;br /&gt;- resource file&lt;br /&gt;- PB.INI&lt;br /&gt;The PB.EXE must be on the client machine - true&lt;br /&gt;If you have bitmaps or icons in your app., you must have a resource file - false&lt;br /&gt;&lt;br /&gt;26. What do you need to do to distribute your application to the end-user?&lt;br /&gt;The .EXE, any .PBDs, and the DB Development and Deployment Kit DLLs. &lt;br /&gt;(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:&lt;br /&gt;• 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).)&lt;br /&gt;EXTERNAL FUNCTIONS&lt;br /&gt;&lt;br /&gt;External functions are functions that are written in languages other than PowerScript and are stored in Dynamic Link Libraries (DLL’s).&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;FUNCTION&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;1. What is a function?&lt;br /&gt;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 :&lt;br /&gt;n all functions return a value&lt;br /&gt;n all functions have a return type, i.e., the data type of the value that the function returns.&lt;br /&gt;&lt;br /&gt;2. What is the difference between a function and a subroutine?&lt;br /&gt;Subroutines do not return a values, and thus, they do not have a return type.&lt;br /&gt;Subroutine is a set of some type PowerScript statements that performs some type of processing.&lt;br /&gt;&lt;br /&gt;3. What can you do with the return value from a function?&lt;br /&gt;&lt;br /&gt;4. Describe how object-level and global functions are stored.&lt;br /&gt;Global functions are stored in .PBL as independent objects, not encapsulated within some other object.&lt;br /&gt;Object-level functions are encapsulated within the object for which they are defined.&lt;br /&gt;&lt;br /&gt;5. Which does PowerScript statement appear at least once in every function? Why ?&lt;br /&gt;Return statement. Because every function returns a value, our code must include the Return statement.&lt;br /&gt;&lt;br /&gt;6. If the statement “return ‘Complete’” appears in the code for a function, what conclusion can you draw about the function declaration?&lt;br /&gt;The data type of the value that the function returns is String.&lt;br /&gt;&lt;br /&gt;7. What is the difference between call by reference and call by value?&lt;br /&gt;By reference means that the function has access to the value of original variable and can change it directly.&lt;br /&gt;By value means that no matter what happens to variable in the function the value will be the same.&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;8. Explain Function access types.&lt;br /&gt;There are three function access types:&lt;br /&gt;Public - lets the function be referenced externally using dot (.) notation&lt;br /&gt;Private - restricts access to scripts within the object.&lt;br /&gt;Protected - restricts access to scripts within the object or within objects inherited from this object.&lt;br /&gt;&lt;br /&gt;11. What is the difference between private, protected &amp; public functions?&lt;br /&gt;• Private function you can only call in scripts for events in the object, in which the function was defined.&lt;br /&gt;• Protected function you can call in scripts for events in the object in which the function was defined and its descendant.&lt;br /&gt;• Public functions you can call in any place in the object&lt;br /&gt;&lt;br /&gt;12. What is a user-defined function?&lt;br /&gt;User-defined function is the collection of Pscript statements that perform some processing.&lt;br /&gt;&lt;br /&gt;13. What kind of user-defined function do you know?&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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?&lt;br /&gt;It has to be defined as Public&lt;br /&gt;&lt;br /&gt;15. What is the difference between Private and Protected Object level functions?&lt;br /&gt;• Private function you can only call in scripts for events in the object, in which the function was defined.&lt;br /&gt;• Protected function you can call in scripts for events in the object in which the function was defined and its descendant.&lt;br /&gt;&lt;br /&gt;16. If function return the value what statement inside function do you have to use to assign value?&lt;br /&gt;We have to use Return Statement and when we define a function we have to define the data type of returned value.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;17. How could you pass argument to the function?&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;18. How do you look up functions for controls (for example, Listbox)&lt;br /&gt;In the Help topic.&lt;br /&gt;&lt;br /&gt;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)?&lt;br /&gt;UpperBound()&lt;br /&gt;&lt;br /&gt;20. What is the purpose of Yield function?&lt;br /&gt;&lt;br /&gt;21. A function must be defined in the Function painter in order to be public? False&lt;br /&gt;&lt;br /&gt;22. What is the difference between TriggerEvent and PostEvent? &lt;br /&gt;TriggerEvent() stops the program and lets the program continue after it finishes.&lt;br /&gt;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!)&lt;br /&gt;&lt;br /&gt;23. What is the difference between call by reference and call by value?&lt;br /&gt;Calling by reference is a two-way argument passing: changes that the function makes to the argument value are passed back to the caller.&lt;br /&gt;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.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-8322638290543271288?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/8322638290543271288/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=8322638290543271288' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/8322638290543271288'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/8322638290543271288'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2010/08/powerbuilder-interview-question-part-4.html' title='powerbuilder interview question _ part 4'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-428746689434769925</id><published>2010-08-30T05:15:00.000-07:00</published><updated>2010-08-30T05:16:04.071-07:00</updated><title type='text'>powerbuilder interview question _ part 3</title><content type='html'>1. Explain the difference between SetTrans() and SetTransObject()?&lt;br /&gt;SetTransObject( ) works faster because it doesn’t perform Connect and Disconnect each&lt;br /&gt;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( ).&lt;br /&gt;&lt;br /&gt;2. When would you use SetTrans( )?&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;3. Explain SetActionCode(). Do DW events support this function?&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;4. How do you use ShareData() between two different DataWindows?&lt;br /&gt;If we want to share the data between 2 DW controls we use dw_1.ShareData(dw_2). &lt;br /&gt;Two DataWindows must have the same select but may have a different display.&lt;br /&gt;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.&lt;br /&gt;To turn off the sharing of data buffers for DataWindow controls we use the function dw_1.ShareDataOff(dw_2) .&lt;br /&gt;&lt;br /&gt;5. What is the difference between TriggerEvent( ) and PostEvent( )? &lt;br /&gt;TriggerEvent ( ) function makes the event occur immediately. This function does not return until the processing for the event is complete.&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;6. What is the purpose of Yield( ) function?&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;7. What is the purpose of AcceptText( ) function?&lt;br /&gt;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( )&lt;br /&gt;When a user moves from item to item in a DW control, the control validates and accepts&lt;br /&gt;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.&lt;br /&gt;(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.&lt;br /&gt;Applies to DataWindow controls, DataStore objects, and child DataWindows&lt;br /&gt;Syntax dwcontrol.AcceptText ( )&lt;br /&gt;Argument Description&lt;br /&gt;dwcontrol The name of the DataWindow control, DataStore, or child DataWindow in which you want to accept data entered in the edit control&lt;br /&gt;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.&lt;br /&gt;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.&lt;br /&gt;AcceptText in the ItemChanged event&lt;br /&gt;Calling AcceptText in the ItemChanged event has no effect.&lt;br /&gt;Events: AcceptText may trigger an ItemChanged or an ItemError event.)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;8. When do you use AcceptText()?&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;9. You want to know how fast your code is being executed.&lt;br /&gt;How do you time execution of your code?&lt;br /&gt;use CPU( ) function&lt;br /&gt;Long. Returns the number of milliseconds of CPU time elapsed since the start of your PowerBuilder application.&lt;br /&gt;These statements determine the amount of CPU time that elapsed while a group of statements executed:&lt;br /&gt;Long ll_start, ll_used // Declare start and used as long integers.&lt;br /&gt;ll_start = CPU( ) // Set the start equal to the current CPU usage.&lt;br /&gt;... // Executable statements being timed&lt;br /&gt;// Set used to the number of CPU seconds&lt;br /&gt;// that were used (current CPU time - start).&lt;br /&gt;ll_used = CPU( ) - ll_start&lt;br /&gt;&lt;br /&gt;10. What is the purpose of Describe( ), Modify( )?&lt;br /&gt;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.&lt;br /&gt;Typical uses for Modify () are:&lt;br /&gt;• Changing colors, text settings, and other appearance settings of objects&lt;br /&gt;• Changing the update status of different tables in the DW so that you can update more than one table&lt;br /&gt;• Modifying the WHERE clause of the DataWindow object's SQL SELECT statement&lt;br /&gt;• Turning on Query mode or Prompt For Criteria so users can specify the data they want&lt;br /&gt;• Changing the status of Retrieve Only As Needed&lt;br /&gt;• Changing the data source of the DataWindow object&lt;br /&gt;• Controlling the Print Preview display&lt;br /&gt;• Deleting and adding objects, for example, lines or bitmaps, in the DataWindow object&lt;br /&gt;dw_customer.Modify("DataWindow.Color = 255")&lt;br /&gt;where "DataWindow.Color = 255" is modstring.&lt;br /&gt;Use Describe( ) to understand the structure of a DataWindow.&lt;br /&gt;Typical uses for Describe () are:&lt;br /&gt;• bands the DataWindow uses&lt;br /&gt;• data types of the columns.&lt;br /&gt;• to find out the current value of a property and use that value to make further modifications.&lt;br /&gt;• to obtain the DataWindow's SELECT statement in order to modify it (for example, by adding a WHERE clause).&lt;br /&gt;dw_1.Describe("salary.ColType")&lt;br /&gt;where "salary.ColType" is attribute list&lt;br /&gt;&lt;br /&gt;11. How can you find out what object is under the mouse pointer in a DataWindow?&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;14. How can you copy data from one DW to another if they have the same structure?&lt;br /&gt;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:&lt;br /&gt;n Making copies of 1 or more rows so that users can create new rows based on existing data.&lt;br /&gt;n Printing a range of rows by copying selected rows to another DW and printing the second DW.&lt;br /&gt;dw_1.RowsCopy(dw_1.GetRow(), dw_1.RowCount(), Primary!, dw_2, 1, Primary!)&lt;br /&gt;&lt;br /&gt;15. What is the function of Find( ) ?&lt;br /&gt;Finds the next row in a DW in which data meets a specified condition.&lt;br /&gt;Find (expression, start, end). The search is case-sensitive. When you compare the text to the value in a column, the case must match.&lt;br /&gt;&lt;br /&gt;16. What is the function of SetTabOrder( )?&lt;br /&gt;Changes the tab sequence number of a column in a DW control to the specified value. E.g., dwcontrol.SetTabOrder (column, TabNumber)&lt;br /&gt;Use SetTabOrder( ) to change a column in a DW object to read-only by changing the tab sequence number of the column to 0.&lt;br /&gt;&lt;br /&gt;17. What is the function of DeleteRow( )?&lt;br /&gt;Deletes a current row from a DW control or Child DataWindow.&lt;br /&gt;dwcontrol.DeleteRow (row)&lt;br /&gt;DeleteRow( ) deletes the row from the DataWindow's primary buffer.&lt;br /&gt;&lt;br /&gt;18. How can you override a PB function, e.g., DeleteRow( ), for a DW control?&lt;br /&gt;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( )&lt;br /&gt;&lt;br /&gt;19. What is the function of DBErrorCode( )?&lt;br /&gt;Reports the database-specific error code that triggered the DB Error event.&lt;br /&gt;DBErrorCode() is obsolete. The DB error code is available as an argument SQLDBCode in the DB Error event: dwcontrol.DBErrorCode ( )&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;20. What is the function of DBErrorMessage( )?&lt;br /&gt;Reports the database-specific error message that triggered the DB Error event.&lt;br /&gt;DBErrorMessage( ) is obsolete. The DB error message is available as an argument SQLErrText in the DB Error event. dwcontrol.DBErrorMessage( )&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;21. What is the function of ScrollToRow( )?&lt;br /&gt;Scrolls a DW control to the specified row. ScrollToRow( ) changes the current row. dwcontrol. ScrollToRow( row )&lt;br /&gt;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:&lt;br /&gt;• ItemChanged&lt;br /&gt;• ItemError&lt;br /&gt;• ItemFocusChanged&lt;br /&gt;• RowFocusChanged&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;23. What is the function of SetFilter( )?&lt;br /&gt;Specifies filter criteria for a DW control.&lt;br /&gt;&lt;br /&gt;24. What does the function ModifiedCount( ) do?&lt;br /&gt;Reports the number of the rows that have been modified but not updated in a DW. dwcontrol.ModifiedCount ( )&lt;br /&gt;&lt;br /&gt;25. What is the function of ShareData( )?&lt;br /&gt;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.&lt;br /&gt;dw_primary.ShareData ( dw_secondary )&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;26.What is the function of Create( ) ?&lt;br /&gt;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.&lt;br /&gt;dwcontrol.Create ( syntax {, errorbuffer } )&lt;br /&gt;The Create( ) function is used to associate the DW object syntax with an existing DW control. dw_1.Create( ls_syntax_str, ls_errmsg)&lt;br /&gt;&lt;br /&gt;27. What does function SelectRow( ) do?&lt;br /&gt;Highlights or dehighlights rows in a DW control. SelectRow( ) does not affect which row is current. dwcontrol.SelectRow(0, FALSE)&lt;br /&gt;dwcontrol.SelectRow(row, TRUE)&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;28. When do RetrieveAsNeeded( ) stop working?&lt;br /&gt;If we use Filter( ) and Sort( ).&lt;br /&gt;&lt;br /&gt;29. Give an example of a case sensitive functions?&lt;br /&gt;Find( )&lt;br /&gt;&lt;br /&gt;30. What will happened if we place AcceptText() in ItemChangeevent?&lt;br /&gt;We get an error message&lt;br /&gt;&lt;br /&gt;31. What functions used for creating DW dynamically?&lt;br /&gt;Modify(),Describe()&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-428746689434769925?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/428746689434769925/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=428746689434769925' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/428746689434769925'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/428746689434769925'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2010/08/powerbuilder-interview-question-part-3.html' title='powerbuilder interview question _ part 3'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-6326627055661105875</id><published>2010-08-30T05:09:00.000-07:00</published><updated>2010-08-30T05:10:45.841-07:00</updated><title type='text'>Powerbuilder interview question _part2</title><content type='html'>How PowerBuilder looks for variables&lt;br /&gt;&lt;br /&gt;When PowerBuilder executes a script and finds an unqualified reference to a variable, it searches for the variable in the following order:&lt;br /&gt;&lt;br /&gt;1 A local variable&lt;br /&gt;2 A shared variable&lt;br /&gt;3 A global variable&lt;br /&gt;4 An instance variable&lt;br /&gt;&lt;br /&gt;As soon as PowerBuilder finds a variable with the specified name, it uses the variable's value.&lt;br /&gt;&lt;br /&gt;1. What events do you know for the application object?&lt;br /&gt;OPEN - the user starts application.&lt;br /&gt;IDLE - no mouse or keyboard activity happens in a specified number of seconds&lt;br /&gt;SystemError - A serious error occurred during execution&lt;br /&gt;CLOSE - the user closes the application&lt;br /&gt;ConnectionBegin --in a distributed computing environment, occurs on the server when a client establishes a connection to the server by calling the ConnectToServer function.&lt;br /&gt;CONNECTIONEND -- In a distributed computing environment, occurs on the server when a client disconnects from the server by calling the DisconnectServer function.&lt;br /&gt;&lt;br /&gt;2. How can you run another application from within PowerBuilder?&lt;br /&gt;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!)&lt;br /&gt;&lt;br /&gt;3. How do you know that the application is already running?&lt;br /&gt;(How do you avoid MessageBox “Application is already running”?)&lt;br /&gt;Use Handle( ) function. Handle( ) returns the object’s name if the object exists.&lt;br /&gt;&lt;br /&gt;4. What are the two structures every application has?&lt;br /&gt;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.&lt;br /&gt;5. What are the ways to close your application?&lt;br /&gt;HALT(), HALT CLOSE(), CLOSE()&lt;br /&gt;6.What is HALT? HALT CLOSE? What is the difference between them?&lt;br /&gt;The HALT statement forces the application to terminate immediately. This is most often used to shut down the application after a serious error occurred.&lt;br /&gt;HALT CLOSE Halt Close does the same thing but triggers the application object’s Close event before terminating.&lt;br /&gt;&lt;br /&gt;7. What do you do to find out how fast your select is being executed on a client site? &lt;br /&gt;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: &lt;br /&gt;SQL_OPT_TRACE_OFF (Default) - Turns off the ODBC Driver Manager Trace. SQL_OPT_TRACE_ON - Turns on the ODBC Driver Manager Trace.&lt;br /&gt;&lt;br /&gt;8. What are the ways to test correctness of your SQL? SQL Time?&lt;br /&gt;Put TRACE option in the .INI file.&lt;br /&gt;&lt;br /&gt;9. What is the purpose of the PB.INI files?&lt;br /&gt;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&lt;br /&gt;.INIs are always in the same format:&lt;br /&gt;[Database]&lt;br /&gt;DBMS = Sybase&lt;br /&gt;Database = Video Store DB&lt;br /&gt;User Id =&lt;br /&gt;DB Password =&lt;br /&gt;Log Password =&lt;br /&gt;Server Name =&lt;br /&gt;Log Id=&lt;br /&gt;Lock =&lt;br /&gt;DBParm=ConnectString=’DSN=VideoStore DB;UID=dba’&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;10. How do you manipulate .INI file through PowerBuilder functions?&lt;br /&gt;n Set Profile String( )&lt;br /&gt;n ProfileString( )&lt;br /&gt;n Profile Int( )&lt;br /&gt;&lt;br /&gt;11. How do you set calculator in PB application?&lt;br /&gt;Run (“c:\ calculator” )&lt;br /&gt;SQL&lt;br /&gt;What is SQL?&lt;br /&gt;SQL is A Structure Query Language.&lt;br /&gt;1. Is a standard way of specifying data sets.&lt;br /&gt;2. Is a way to retrieve and manipulate data in DataBase.&lt;br /&gt;3. Is used for all DataBase functions.&lt;br /&gt;4. Can be used in the form of “embedded SQL” from an application program.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-6326627055661105875?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/6326627055661105875/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=6326627055661105875' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/6326627055661105875'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/6326627055661105875'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2010/08/powerbuilder-interview-question-part2.html' title='Powerbuilder interview question _part2'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-8116861914260244373</id><published>2009-04-01T22:02:00.000-07:00</published><updated>2009-04-01T22:28:45.881-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder Tips'/><title type='text'>DataWindow Tooltips in PB 11.5</title><content type='html'>&lt;div&gt;&lt;div&gt;Today's sneak preview is on the DataWindow Tooltip enhancement in 11.5. This screenshot shows a tooltip on the first_name column:&lt;img id="BLOGGER_PHOTO_ID_5319961224139310034" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 320px; CURSOR: hand; HEIGHT: 179px; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_49wEoqENSuk/SdRMjAetA9I/AAAAAAAAAWI/Tvp0t5JDyRg/s320/untitled.bmp" border="0" /&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;This shows a tooltip with the title property populated as well as an icon property selected. It also shows the bubble format. Below you can see the list of properties that will be available for tooltips:&lt;/p&gt;&lt;img id="BLOGGER_PHOTO_ID_5319961610843855186" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 130px; CURSOR: hand; HEIGHT: 320px; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_49wEoqENSuk/SdRM5hEQGVI/AAAAAAAAAWQ/6Zx3wSZW3BE/s320/untitled2.bmp" border="0" /&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;It is important to point out that you can place a tooltip on any control on the DataWindow. Drawing objects, buttons, nested reports, computed fields, labels, they all support the tooltip property! &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-8116861914260244373?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/8116861914260244373/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=8116861914260244373' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/8116861914260244373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/8116861914260244373'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2009/04/datawindow-tooltips-in-pb-115.html' title='DataWindow Tooltips in PB 11.5'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_49wEoqENSuk/SdRMjAetA9I/AAAAAAAAAWI/Tvp0t5JDyRg/s72-c/untitled.bmp' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-9168372894466448500</id><published>2009-04-01T21:39:00.000-07:00</published><updated>2009-04-01T22:00:36.074-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder Tips'/><title type='text'>Dynamically Creating DataWindow Objects</title><content type='html'>Objects can be added to your DataWindow programmatically via a Modify statement. In my opinion, the dynamic creation of objects within a DataWindow has been a highly underused feature.&lt;br /&gt;Dynamically creating (or destroying) objects within a DataWindow has many advantages such as:&lt;br /&gt;- Dynamically changing the content&lt;br /&gt;- If a printed DataWindow varies in appearance from its visual presentation&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The syntax for creating objects within DataWindows can be daunting; no wonder it's not used that often. Before I go into more detail, it's important to know how objects are contained in a DataWindow in the first place. Once you understand this, you will find that dynamically creating objects is easy.&lt;br /&gt;&lt;strong&gt;The Naked DataWindow :&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;It should come as no surprise that a DataWindow is really just a collection of objects, each with its own properties. When a programmer is creating a DataWindow via the DataWindow painter, he or she is actually just using a graphical IDE to create and set the properties of the objects that make up the DataWindow. Actually, the naked DataWindow is not graphical at all but exists in text format. It's just that most programmers tend to create and edit DataWindows via the DataWindow Painter.&lt;br /&gt;Prior to PowerBuilder 8, if you wanted to take a peek at what a DataWindow looked like in its text format, it would have to be exported via the library painter, then opened up within a text editor. At that point, changes could be made and the text file could be imported back into PowerBuilder. As the file was being imported, PowerBuilder would regenerate it, making sure your hack was syntactically correct.&lt;br /&gt;Since PowerBuilder 8, Sybase has allowed programmers to directly modify objects via a Source Editor, effectively putting an end to the enjoyable, unsupported DataWindow source hacking days. By viewing the source code of an existing DataWindow, you'll appreciate the syntax of creating objects dynamically. A basic understanding of the DataWindow syntax can help a lot. Let's start with the DataWindow illustrated in Figure 1.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;img id="BLOGGER_PHOTO_ID_5319950081795672258" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 320px; CURSOR: hand; HEIGHT: 306px; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_49wEoqENSuk/SdRCacA9yMI/AAAAAAAAAWA/ZJBxLBOeSUs/s320/fig1.gif" border="0" /&gt;&lt;strong&gt;Understanding the Syntax&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;If this simple DataWindow is opened up in the Source Editor, you'll see all the objects that it's comprised of. The complete syntax is extremely lengthy and cannot be listed in its entirety here. At first glance, the syntax looks foreboding, but after further inspection, it becomes more familiar. If you think about it, it looks almost identical to the syntax for the Describe and Modify function. That's because it is the syntax for Describe and Modify.&lt;br /&gt;The source code can be broken down into six categories:&lt;br /&gt;1. Version information&lt;br /&gt;2. DataWindow properties&lt;br /&gt;3. Band properties&lt;br /&gt;4. Source definition&lt;br /&gt;5. Object definitions&lt;br /&gt;6. DataWindow HTML/XML properties &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Version Information&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Let's take a closer look at our Naked DataWindow:&lt;br /&gt;release 9;&lt;br /&gt;The first line of the syntax comprises only one statement indicating the PowerBuilder release with which this DataWindow object was constructed. This line will contain only major release numbers (you won't see 9.01). The release number is important as it tells the DataWindow Engine how to handle the rest of the syntax. Obviously, more recent DataWindow versions contain added features. If you're in PowerBuilder 8 and try to open a DataWindow that was built in PowerBuilder 9, PowerBuilder gives the error message "DataWindow Syntax has incorrect release number." On the other hand, a more recent version of PowerBuilder will happily import a DataWindow created in an earlier release. When an earlier version of a DataWindow is saved or regenerated, it's migrated to the current version.&lt;br /&gt;If you're resourceful, the DataWindow may be migrated backward by changing its release number. It may take a bit of trial and error to remove any of the source code that may not be understood by previous DataWindow Engines.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;DataWindow Properties&lt;br /&gt;&lt;/strong&gt;&lt;span style="color:#660000;"&gt;datawindow(units=0 timer_interval=0color=12632256 processing=0 HTMLDW=no print.printername=""print.documentname="" print.orientation = 0 print.margin.left =110 print.margin.right = 110 print.margin.top = 96 print.margin.bottom = 96print.paper.source = 0 print.paper.size = 0 print.canusedefaultprinter=yesprint.prompt=no print.buttons=no print.preview.buttons=no print.cliptext=noprint.overrideprintjob=no print.collate=yes hidegrayline=no ) &lt;/span&gt;&lt;/p&gt;&lt;p&gt;After the PowerBuilder release number comes the DataWindow properties, such as the color and print information. Note the new DataWindow features for 9.0, such as hidegrayline, in the above source code. Another DataWindow property that's worth pointing out is the processing property. This specifies the DataWindow's Presentation Style:&lt;br /&gt;0 - (Default) Form, Group, Query, Tabular, N-UP, Label&lt;br /&gt;1 - Grid&lt;br /&gt;2 - Label&lt;br /&gt;3 - Graph&lt;br /&gt;4 - Crosstab&lt;br /&gt;5 - Composite&lt;br /&gt;7 - RichText &lt;/p&gt;&lt;p&gt;The next time you want to change the style of a DataWindow, there's no need to re-create the entire DataWindow. Just change the processing property in the source code. Also at runtime, using dot notation or Describe, the "processing" attribute can be used to determine the DataWindow style. You're not allowed to change the DataWindow Presentation Style at runtime.&lt;br /&gt;&lt;strong&gt;Band Properties&lt;br /&gt;&lt;/strong&gt;&lt;span style="color:#660000;"&gt;header(height=256 color="536870912" )summary(height=92 color="536870912" )footer(height=0 color="536870912" )detail(height=68 color="536870912"height.autosize=yes) &lt;/span&gt;&lt;/p&gt;&lt;p&gt;The Band Properties section consists of one statement for each band in the DataWindow. It describes the properties of each band; for example, its height, color, and any expressions it may have. Actually this section is not mandatory, as PowerBuilder will create these four bands even if you don't specify that it do so. If the band properties are not supplied, they'll be created with a height of zero. If your DataWindow contains groups, they won't be specified here. Group "bands" in PowerBuilder are specified elsewhere in the source code.&lt;br /&gt;&lt;strong&gt;Source Definition:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Listing 1&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#660000;"&gt;table(column=(type=char(20) updatewhereclause=yes name=emp_lname dbname="employee.emp_lname" )column=(type=char(20) updatewhereclause=yes name=emp_fname dbname="employee.emp_fname")column=(type=decimal(3) updatewhereclause=yes name=salary dbname="employee.salary")retrieve="PBSELECT( VERSION(400) TABLE(NAME=~"employee~" )COLUMN(NAME=~"employee.emp_lname~") COLUMN(NAME=~"employee.emp_fname~") COLUMN(NAME=~"employee.salary~")WHERE( EXP1 =~"~~~"employee~~~".~~~"state~~~"~" OP =~"=~" EXP2 =~"'TX'~" ) )ORDER(NAME=~"employee.emp_lname~" ASC=yes ) ")&lt;/span&gt;&lt;/p&gt;&lt;p&gt;The source code in Listing 1 has been cosmetically aligned for readability purposes. It's divided into two sections. The first section describes the result set, specifically:&lt;/p&gt;&lt;p&gt;- Data types&lt;br /&gt;- Update characteristics&lt;br /&gt;- Database column names&lt;br /&gt;- Default values &lt;/p&gt;&lt;p&gt;The type property defines the PowerBuilder data type for the column. This property can be changed whenever PowerBuilder fails to correctly determine the data type of a database column. This often happens when PowerBuilder is working with less common data types and time stamps.&lt;br /&gt;The second portion of Listing 1 specifies the SQL source, including any PowerBuilder-defined retrieval argument. This section also describes the SQL that will generate the result set.&lt;br /&gt;The SQL source is actually stored internally in a generic PowerBuilder dialect called PBSELECT. This is how the SQL gets generated when the SQL statement is "Painted". If you choose the "Convert to Syntax" option and type in the SQL statement, PowerBuilder stores the statement and standard SQL:&lt;/p&gt;&lt;p&gt;&lt;span style="color:#660000;"&gt;retrieve=" SELECT ~"employee~".~"emp_lname~",~"employee~".~"emp_fname~",~"employee~".~"salary~"FROM ~"employee~"WHERE ~"employee~".~"state~" = 'TX'ORDER BY ~"employee~".~"emp_lname~" ASC" )&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Object Definitions&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;This section contains all the other objects in the DataWindow. It contains important information as to which band each object belongs to. Objects such as columns, text objects, computed fields, and drawing objects are found here. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Listing 2&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#660000;"&gt;text(band=header alignment="0" text="Emp Fname" border="0" color="33554432"x="654" y="172" height="56" width="576" html.valueishtml="0"name=emp_fname_t visible="1" font.face="Arial" font.height="-8" font.weight="700"font.family="2" font.pitch="2" font.charset="0" background.mode="1" background.color="536870912" )column(band=detail id=1 alignment="0" tabsequence=32766 border="0" color="33554432"x="73" y="4" height="60" width="576" format="[general]" html.valueishtml="0"name=emp_lname visible="1" edit.limit=20 edit.case=any edit.autoselect=yesedit.autohscroll=yes edit.imemode=0 font.face="Arial" font.height="-8" font.weight="400"font.family="2" font.pitch="2" font.charset="0" background.mode="1" background.color="536870912" )line(band=header x1="73" y1="248" x2="1559" y2="248" name=l_1 visible="1" pen.style="0"pen.width="5" pen.color="33554432" background.mode="2" background.color="1073741824" )&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Listing 2 provides the object definitions for a column, text, and line object.&lt;br /&gt;Notice that the code in the listing is literally a help file to see which properties belong to which objects.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;DataWindow HTML/XML Properties&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;This final section contains all the HTML/XML properties that are associated with the DataWindow. Many of these are new to PowerBuilder 9.0.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;span style="color:#660000;"&gt;htmltable(border="1" )htmlgen(clientevents="1" clientvalidation="1" clientcomputedfields="1"clientformatting="0" clientscriptable="0"generatejavascript="1" encodeselflinkargs="1" netscapelayers="0" )export.xml(headgroups="1" includewhitespace="0"metadatatype=0 savemetadata=0 )import.xml()export.pdf(method=0 distill.custompostscript="0" xslfop.print="0" ) &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Creating Dynamic Objects&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Getting the Syntax&lt;/strong&gt; : Now that you've seen a naked DataWindow, it should be easy to create and destroy DataWindow objects. Why? Because you've already seen the syntax. For example, let's say that when you print a DataWindow, you want to add a computed field containing the page number. To do this, create the computed file on the DataWindow, then open it up in the source editor. The source code for our new computed field looks like &lt;/p&gt;&lt;p&gt;&lt;span style="color:#660000;"&gt;compute(band=header alignment="1" expression="'Page ' + page() + ' of ' + pageCount()"border="0"color="33554432" x="1157" y="24" height="88" width="466" format="[general]"html.valueishtml="0" name=page_1 visible="1" font.face="Arial" font.height="-10"font.weight="400" font.family="2" font.pitch="2" font.charset="0" background.mode="2" background.color="1073741824" )&lt;/span&gt;&lt;/p&gt;&lt;p&gt;The DataWindow did us a favor and built the syntax that we're now going to use to build this object dynamically. At this point, copy and paste the source code to a safe place, then delete the object in the DataWindow painter.&lt;br /&gt;Adding the CodeA logical place to put the code is the DataWindow PrintStart Event. In PrintStart we can place the code to create our computed column. When the DataWindow is finished printing, we can destroy the object in PrintEnd.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Listing 4:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#660000;"&gt;dw_1.Modify("create compute(band=header alignment=~"1~" expression=~"'Page ' + page() + ' of '+ pageCount()~"border=~"0~" color=~"33554432~" x=~"1157~" y=~"24~" height=~"88~"width=~"466~" format=~"[general]~" html.valueishtml=~"0~" name=page_1 visible=~"1~"font.face=~"Arial~" font.height=~"-10~" font.weight=~"400~" font.family=~"2~" font.pitch=~"2~"font.charset=~"0~" background.mode=~"2~" background.color=~"1073741824~" )")&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Listing 5:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#660000;"&gt;dw_1.Modify("destroy compute(band=header alignment=~"1~" expression=~"'Page ' + page() + ' of' + pageCount()~"border=~"0~" color=~"33554432~" x=~"1157~" y=~"24~" height=~"88~"width=~"466~" format=~"[general]~" html.valueishtml=~"0~" name=page_1 visible=~"1~"font.face=~"Arial~" font.height=~"-10~" font.weight=~"400~" font.family=~"2~" font.pitch=~"2~"font.charset=~"0~" background.mode=~"2~" background.color=~"1073741824~" )")&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Listing 4 provides code for the PrintStart Event, and Listing 5 provides code for the PrintEnd Event.&lt;br /&gt;By using the create function within Modify, when printed the DataWindow will contain a computed column containing the page number. The destroy function cleans it up. As you can see, what looked like a very cumbersome create syntax basically becomes a copy-and-paste job. The secret is to create the object in the DataWindow painter, copy the source code it generated, delete the object on the DataWindow, and paste the code into a Modify statement in the event of your choice.&lt;br /&gt;&lt;strong&gt;Summary :&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Creating a dynamic DataWindow looks like a daunting task. But as you can see, if you know what a naked DataWindow looks like, the job becomes much easier.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-9168372894466448500?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/9168372894466448500/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=9168372894466448500' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/9168372894466448500'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/9168372894466448500'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2009/04/dynamically-creating-datawindow-objects.html' title='Dynamically Creating DataWindow Objects'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_49wEoqENSuk/SdRCacA9yMI/AAAAAAAAAWA/ZJBxLBOeSUs/s72-c/fig1.gif' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-6913089242802933430</id><published>2009-04-01T20:59:00.001-07:00</published><updated>2009-04-01T21:20:35.436-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder'/><title type='text'>PBBrowse 2.14 for PowerBuilder Developer</title><content type='html'>PowerBuilder provides an object browser - the utility accessed via the "Cubes with a pair of eyeglasses" icon on the PowerBar menu. If you haven't tried the PB browser, you should. Among other things, it eliminates the problem of identifying which PBL contains the object of interest. Click a tab to select an object type and you're immediately presented with a list of the current application's objects of that type. Right-click an object, select Edit from the popup menu and PB opens the object in the relevant painter. It's a fast way to navigate your PB application. The PB browser has other essential functionalities: for example, the OLE tab presents the list of OLE objects known to your Windows OS. Check it out.&lt;br /&gt;PBBrowse 2.14 is the latest version of Ken Howe's alternative to the native PB browser. Ken is the proprietor of PBDR.COM, the PowerBuilder Developer's Resource. I've long been a fan of Ken's PBDelta differencing tool, so I came to PBBrowse optimistically. It took a little while for me to understand the value of PBBrowse, since it seemed redundant with the native browser that works so well. With time, however, I've come to appreciate that PBBrowse is a superb way to do what its name implies - browse a PB application. It's not really redundant - it's in addition to.&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5319938798279399906" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 320px; CURSOR: hand; HEIGHT: 17px; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_49wEoqENSuk/SdQ4JppDGeI/AAAAAAAAAVg/m24H3cw4SA0/s320/fig1.gif" border="0" /&gt;&lt;strong&gt;Features&lt;/strong&gt; :&lt;br /&gt;&lt;p&gt;Figure 1 shows the main PBBrowse toolbar. Taking the icons from left to right provides a good overview of the utility's main features &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Browse List of Applications&lt;/strong&gt; :&lt;/p&gt;&lt;p&gt;The principle PBBrowse idiom is, "Present the user with a list of objects in the application, then let the user easily explore the code therein." After a little setup in which you tell the utility where your PB.INI file lives, you get the list of applications in your PB.INI file by clicking this icon. Double-click an application, PBBrowse processes for 5-10 seconds, then presents you with all the objects in the application. That is, it (apparently) uses the information in the PB.INI file to identify the PBLs associated with the application you selected, and generates the list of objects that appears in those PBLs. The objects are sorted by name within the object type: for example the applications are first, followed by DataWindow objects, then global functions. The object order and the icons used are just like the PB Library Painter, so you're immediately oriented.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;img id="BLOGGER_PHOTO_ID_5319939025088456946" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 300px; CURSOR: hand; HEIGHT: 211px; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_49wEoqENSuk/SdQ4W2kiqPI/AAAAAAAAAVo/pW3vJSkv8Z8/s320/fig2.gif" border="0" /&gt; Double-click any object and the browser window opens (see Figure 2). A nicety: PBBrowse doesn't present a tab if there are no corresponding items. For example, the Local External tab appears only if the object contains external function declarations. Each of the tabs with the split window works as you'd guess: click the item on the top and it's displayed below. This is a significant win in my opinion - it's much easier to navigate among the various scripts of a window (for example) than to manipulate PB's "Declare --&gt;&gt; Window functions" dialog or open the Script Painter for a given control and navigate the dropdown of events. Since I've gotten this far I was thinking, "This is clearly the easiest way to browse an object when looking at it for the first time, trying to understand the lay of the land." The PB browser offers nothing similar: it dumps you into the relevant Painter and you have to navigate the object the (relatively difficult) PB way. That's the primary function of PBBrowse: to get to an object quickly and browse its scripts and attributes. Return to the main toolbar to understand its other features. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Browse Current Application:&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;This is an alternative to selecting an application from the entire set of applications in the PB.INI file. PBBrowse will use the PB.INI file to identify the current application and immediately load the objects in the corresponding PBLs into the application list. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Browse a Single Library:&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;This is yet another alternative: instead of populating the application list with all the PBLs in an application, you can just look at a single PBL object. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Find Objects :&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;This opens a versatile search-for-strings utility, a much more powerful alternative to the Library Painter's search facility. &lt;/p&gt;&lt;p&gt;Among other things, you can: &lt;/p&gt;&lt;p&gt;- Search all or just one of the PB.INI's applications &lt;/p&gt;&lt;p&gt;- Search all or just one of an application's PBLs &lt;/p&gt;&lt;p&gt;- Search all or one specific object type (e.g., global functions) &lt;/p&gt;&lt;p&gt;- Search for one or multiple strings doing an AND or OR search as desired &lt;/p&gt;&lt;p&gt;- Specify case sensitivity &lt;/p&gt;&lt;p&gt;- Specify the string-to-search-for using regular expressions (metacharacters, match()) &lt;/p&gt;&lt;p&gt;- Specify date ranges&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;img id="BLOGGER_PHOTO_ID_5319939223674409650" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 320px; CURSOR: hand; HEIGHT: 103px; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_49wEoqENSuk/SdQ4iaXH0rI/AAAAAAAAAVw/FNS81KNAXDs/s320/fig3.gif" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;The output of the find operation is a list of objects where the strings were found with each "hit" line displayed with the object (see Figure 3). You can print it. As with the Library Painter search, you can double-click a "hit" to open the corresponding object. I don't know of any other way to accomplish this advanced search functionality. Imagine trying to do it with the Library Painter: you'd typically have to do one PBL at a time, you could search only for a single string, and you'd have none of the other options of the PBBrowse find. I've put this to work to identify the changes I've made since the last time I consolidated my work into the team's shared PBLs. I searched for "Hoyt 3/10/2000" and "Hoyt 3/11/2000" (with an OR) and it identified each of the objects so marked. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Browse Enumerated Types:&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;This is redundant with the PB browser. It lists all of the enumerated types and when you click one, it lists the corresponding values. You can select a value (e.g., cascaded) and enter control-c (or click an icon) to copy it into the clipboard, in order to paste it into your application. The exclamation point isn't copied into the clipboard so you'll have to add that yourself. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Preferences:&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;PBBrowse has a really nice preferences dialog. It lets you tell (once) where your PB.INI file resides. There's control over what maximizes when. You get to pick between a faster straight text presentation of scripts or a nicely color-coded RTF version that's only slightly slower. There's even a checkbox that turns on a prompt to warn you, when you start a find operation on "All applications," that it's going to take a long time. The preferences dialog reflects the fact that Ken actually uses this tool and has built in options to make it friendly. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Produce Statistics for Highlighted Application:&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;This icon appears only when you're looking at the application list. Select an application, click this icon, go to lunch (it takes only about five minutes, actually) and you'll get something similar to Figure 4.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;img id="BLOGGER_PHOTO_ID_5319939428047605506" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 300px; CURSOR: hand; HEIGHT: 75px; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_49wEoqENSuk/SdQ4uTtfTwI/AAAAAAAAAV4/xiOBOuH56iI/s320/fig4.gif" border="0" /&gt;&lt;br /&gt;These statistics are also displayed as bar charts. Run this when your boss asks you how long it will take to familiarize yourself with the code. "Hmmm, at five lines per minute..." The other main toolbar items are mostly variants on what you've seen already. A couple object-browser-specific items bear mentioning, however. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;PowerScript in PB Dev Env:&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;This is very slick. Select some text in an object browser script, click this icon and PBBrowse will paste the text into whichever PB window is uppermost, at that window's current insertion point. If you're the kind of developer who cuts and pastes a lot, this is a big win. Use the find function to find the right script, double-click the find result to open the object, select the text and then click the icon. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Paste Function/Event Call in PB Dev Env:&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;This is similar. If you're in a function or event script, clicking this icon will paste the prototype into the topmost PB window.&lt;br /&gt;&lt;br /&gt;The result looks like:&lt;br /&gt;boolean = f_dw_scroll_to_row_column(datawindow the_dw, long the_row, string the_column)&lt;br /&gt;&lt;br /&gt;You know what the arguments are and what the function returns. Can it get any easier? &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Help for Highlighted Command:&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;If you double-click a PB function name in the object browser and then click this icon, PBBrowse will look up the highlighted function in PB help. For those of us who haven't yet memorized every PB factoid, this is another assist to quickly understanding extant code. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Browse for Highlighted Object Name:&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;This is kindred except it works on objects and functions created by the user.&lt;br /&gt;If I highlight f_dw_scroll_to_row_column() in a script and click this icon, PBBrowse will work for a few seconds and then open that function in a new object browser. Wonder what a function does? Double-click it and click the icon. PBBrowse searches based on the object name, so it's not going to succeed with object functions (it apparently scans the object list for the name; searching each object for its functions would take until next Tuesday).&lt;br /&gt;If you instantiate "g_powersmith" as "g", it's not going to find "g" either. Fortunately, I use tons of global functions so this is great for my code. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Browse Ancestor Object :&lt;/strong&gt; If you're in something that has an ancestor, clicking this icon will open that ancestor in another object browser window. If w_whatever inherits from w_base, for example, then you can open w_base from w_whatever by clicking the icon. That's a good roundup of the main features of PBBrowse. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;More Features&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;The Hierarchical Object&lt;/strong&gt; &lt;strong&gt;View&lt;/strong&gt; :&lt;/p&gt;&lt;p&gt;The object list can be presented, as shown above, in a DataWindow with one line per object. That's the listview, and it's the faster route. The slower but more interesting alternative is the hierarchical view. As you'd guess, clicking the plus sign expands the treeview to show you all of the function objects. This view lets you ask questions such as, "What windows descend from w_base?" You can do the same thing with the PB browser, by right-clicking the object and selecting "Show Hierarchy" from the popup menu. The PBBrowse presentation is very nice, nonetheless. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;PBBrTray System Tray Utility:&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;We've seen that PBBrowse integrates with PowerBuilder through its ability to paste code and function/event prototypes into the topmost PB window. The PBBrTray.exe utility integrates in the other direction. When running PBBrTray appears as the PBBrowse icon in the system tray, in the lower right-hand corner of your Windows desktop. If you right-click the icon, then a menu appears showing the objects currently open in PB. Selecting one of the objects from the list at the top of the menu will open that object in PBBrowse. How nice, I'm confused by this thing I'm looking at in PB so I'll right-click this icon and be able to view it in PBBrowse a few moments later. Interestingly, global functions aren't added to the menu, presumably because if you're looking at a global function, PBBrowse doesn't have anything else to tell you about it. Clever. &lt;strong&gt;Object History :&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;As you open objects to browse them, PBBrowse adds them to an Object History window that's always on top. Double-clicking on any object will reopen that object in a browser window. Again, Ken uses this utility and he's made it friendly. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt; :&lt;/p&gt;&lt;p&gt;Naturally there are some cons. I found PBBrowse's Help less than illuminating. It has no images or browse sequence. I finally resorted to getting all the Help text by sequentially selecting each topic from the Help dialog's index tab. (This article will get you most of the way.)&lt;br /&gt;The product isn't entirely robust: I can crash it with certain objects, and the object parser had trouble finding certain function scripts in my NVO where the bad() function is overloaded more than twenty times. Ninety-nine percent of the time, however, it works as advertised. To my mind, a major drawback to PBBrowse is the inability to modify code. There you are: you've fired up PBBrowse and found what you're looking for, and now you want to fix it. PBBrowse is read-only, however, so you have to renavigate to the same place in PowerBuilder and do the fix the usual way. That makes sense, of course: it's a browser, not an IDE. Still, I wish Ken could surmount the storied hassle of ORCA and make PBBrowse a read-write tool. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt; :&lt;/p&gt;&lt;p&gt;I like PBBrowse. It has typical PBDR.COM polish, niceties like draggable separator bars, that great preferences window and features that are genuinely useful for the typical developer. The two-way integration is terrific. As a peripatetic contract programmer, routinely arriving at a new client site and being presented with a pile of unfamiliar code, PBBrowse is a no-brainer for me. I'll use it whenever I make yet another foray into unfamiliar territory. It'll also be key when I'm trying to do a search more sophisticated than, "Is this string in this PBL?" I think it'll take a while before I fully appreciate the power of the regular expressions offered by PBBrowse's find facility. It's great to simply have another way to look at the application. I'm in a window function (in one-function-at-a-time PB6) and can't remember the name of another window function. I right-click the icon in the tray, select the window from the popup menu, and I'm looking at the window in the object browser, able to find the function in question with only a few clicks.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-6913089242802933430?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/6913089242802933430/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=6913089242802933430' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/6913089242802933430'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/6913089242802933430'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2009/04/pbbrowse-214-for-powerbuilder-developer.html' title='PBBrowse 2.14 for PowerBuilder Developer'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_49wEoqENSuk/SdQ4JppDGeI/AAAAAAAAAVg/m24H3cw4SA0/s72-c/fig1.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-1640986818041885258</id><published>2009-03-31T23:21:00.000-07:00</published><updated>2009-04-01T00:49:39.354-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder'/><title type='text'>Powerbuilder interview questions_part1</title><content type='html'>&lt;strong&gt;1. How do you pass parameters when opening a window?&lt;/strong&gt;&lt;br /&gt;Use OpenWithParm method () and accessing the three system message object properties:&lt;br /&gt;Message.DoubleParm&lt;br /&gt;Message.PowerObjectParm&lt;br /&gt;Message.StringParm&lt;br /&gt;The parameters are stored in the Message object.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;2. What are the different status’s a row can have in a DW and what function do you call to find the status?&lt;br /&gt;&lt;/strong&gt;The 4 DW Statuses:&lt;br /&gt;1. Not Modified – the information in the row/column is unchanged from what was retrieved.&lt;br /&gt;2. Data Modified – the information in a column or one of the columns in the row has changed since it was retrieved&lt;br /&gt;3. New Modified – the row is new and values have been assigned to columns. (Changes are primarily due to user entry or by using the setitem () method)&lt;br /&gt;4. New – the row is new and values have not been specified to columns.&lt;br /&gt;&lt;br /&gt;a) All are applicable to rows but only 1 &amp;amp; 2 are applicable to columns.&lt;br /&gt;b) Getitemstatus () can be used to find the data window status&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;3. What is the purpose of using the SUPER keyword?&lt;/strong&gt;&lt;br /&gt;It is used to refer to an object’s immediate ancestor. Take for example Super: wf_myfunc (myarg1, myarg2). This example calls the ancestor function wf_myfunc (presumably the descendant also has a function called wf_myfunc). This example must be part of a script or function in the descendent window, not one of the window's controls&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;4. What is a dynamic data window? Give an example of why you’d need to use a dynamic data window.&lt;br /&gt;&lt;/strong&gt;It is a data window that is modified or created during runtime. CREATE method can be used to create or replace the current DW object in the DW control with the newly created DW. Settransobject () needs to be reset with the new DW in the control since the earlier association would have been destroyed.&lt;br /&gt;5. If you were experiencing a GPF in your application, how would you go about tracking it down?&lt;br /&gt;a) Check library search path in development, required DLL’s, PBL’s in runtime etc&lt;br /&gt;b) If PFC is used, check that the PB version is exactly the same as PFC version, i.e. 5.0.04 etc&lt;br /&gt;c) Use DLL tracking utility to check executables DLL list&lt;br /&gt;d) Enabling the PB Debug Tracing information and find the last line of code that executed prior to the GPF.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;6. Name some of the PFC services.&lt;/strong&gt;&lt;br /&gt;a) Application (debugging, error message, security)&lt;br /&gt;b) Data window (filter, linkage, print preview, resize, sorting)&lt;br /&gt;c) Window (menu, resize, file, metaclass)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;7. What is the difference between ItemError () and DBError ()?&lt;/strong&gt;&lt;br /&gt;ItemError () occurs when the data supplied to a particular column in a table fails some validation rules. For example a DW column designed to accept only integer values throws this error if a string value is passed. DBError () occurs when INSERT/UPDATE/DELETE/RETRIEVE fails. When it occurs, the DW Control throws up a message box describing the error to the DBMS. The user can also get the appropriate error code and throw up message boxes.&lt;br /&gt;&lt;strong&gt;&lt;br /&gt;8. What is a data store? What type of events does it support/not support?&lt;/strong&gt;&lt;br /&gt;It is a non-visual data window. For example if you want to retrieve data from a table without showing it, then you can go for data store. It does not support clicked events but supports deleterow (), insertrow (), retrieve () and update (). It also supports ItemError () event.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;9. As an extension of (8) above, mention two differences with data windows&lt;br /&gt;&lt;/strong&gt;a) A DW can be designed such that the user is prompted to enter the parameters for data retrieval while this not possible with data store. If the user calls the RETRIEVE method for a DW control, the DW object expecting an argument, if the user leaves it blank, it prompts the user to enter an appropriate value, this behaviour is not supported in data stores&lt;br /&gt;b) The PRINT Set-up dialog box for setting print specifications is not possible in data stores&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;10. Explain the following terms: Regeneration, Optimisation &amp;amp; PBD&lt;/strong&gt;&lt;br /&gt;a) Regeneration – when you modify an ancestor object, you can regenerate descendants so they pick up the code changes to the ancestor.&lt;br /&gt;b) Optimisation – it is the process of compressing library objects; it removes gaps in libraries and defragments the storage of objects, thus improving performance. Optimising only affects the layout on disk and not the contents of the objects. Objects are not recompiled. For best performance libraries should be optimised once a week.&lt;br /&gt;c) PBD – DW objects are stored in PBLs that are converted to PBDs thereby providing runtime versions of DW objects.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;11. When do you use a data pipeline?&lt;/strong&gt;&lt;br /&gt;If the user wants to copy DB objects from one database to other or copy from one DBMS to another, the data pipeline can be used. The file can be exported from one database and imported to the target database. In the Data Pipeline painter you define a data source, source database, target database, retrieval arguments, unions, sorting, selection, and grouping criteria.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;12. Explain and differentiate between settrans () and settransobject ()?&lt;/strong&gt;&lt;br /&gt;While using settrans () the user need not specify an explicit CONNECT or DISCONNECT statement in the script since PB internally calls them whenever required. As part of internal transaction management of DW controls, when the DW needs to access the DB, the DW control issues an internal CONNECT, performs data access and then issues an internal DISCONNECT.&lt;br /&gt;Settransobject () is used when the user goes for a separate transaction object (example SQLCA) or creates a separate one in the script. The sequences of statements are as follows:&lt;br /&gt;Transaction tra_1&lt;br /&gt;tra_1 = CREATE transaction&lt;br /&gt;tra_1.DBMS = “ODBC”&lt;br /&gt;tra_1.database = “myDB”&lt;br /&gt;CONNECT using tra_1&lt;br /&gt;Dw_1. Settransobject (tra_1)&lt;br /&gt;Dw_1. Retrieve ()&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;13. Explain the components of ODBC architecture&lt;/strong&gt;&lt;br /&gt;a) Application – any front end/GUI from where ODBC calls are made&lt;br /&gt;b) Driver Manager – it is a DLL that controls loading of appropriate drivers to connect to DBMS. When an ODBC call is made, it scans the *.ini files to determine which driver to use&lt;br /&gt;c) Driver – it is the heart of ODBC that takes care of N/W protocols to connect to the data source; it also submits SQL statements to the data source&lt;br /&gt;d) RDBMS – an ASCII file containing information such as DBMS name, login/password etc&lt;br /&gt;&lt;br /&gt;ODBC takes care of locating the Sybase/SQL server address on the network by reading the win.ini/sql.ini files&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;14. Explain the “Connect String DBParm” parameter in PowerBuilder.&lt;/strong&gt;&lt;br /&gt;It specifies the parameters required to connect to an ODBC data source. PowerBuilder uses these parameters to connect to the database. The syntax is&lt;br /&gt;Connect String = 'DSN = data_source_name; {UID = user_Id; PWD = password; driver_specific_parameters}'&lt;br /&gt;PowerBuilder generates the Connect String automatically when you define an ODBC data source and copies it to the DBParm box in the Database Profile Set-up dialog box. This happens before you connect to the data source in PowerBuilder.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;15. Which are the PFC class libraries in PowerBuilder?&lt;/strong&gt;&lt;br /&gt;PFC is a combination of reusable and extendible classes and framework. The 8 libraries are:&lt;br /&gt;a) pfcmain.pbl – basic services&lt;br /&gt;b) pfcapsrv.pbl – application&lt;br /&gt;c) pfcdwsrv.pbl – data window&lt;br /&gt;d) pfcwnsrv.pbl – window&lt;br /&gt;The 4 extension layer class libraries are pfemain.pbl, pfeapsrv.pbl, pfedwsrv.pbl &amp;amp; pfewnsrv.pbl. 2 more security related libraries (with no extension layers) are pfcsecad.pbl &amp;amp; pfcsecsc.pbl&lt;br /&gt;&lt;strong&gt;&lt;br /&gt;16. When should internal transaction management be used?&lt;/strong&gt;&lt;br /&gt;It can be used if the number of connections to theDB are limited and also for pure retrieval when COMMIT &amp;amp; ROLLBACK are not application priorities.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;17. Explain the different types of data sources that can be linked to data window controls&lt;/strong&gt;&lt;br /&gt;a) Quick Select – Used when data comes from one or more tables linked by a foreign key.&lt;br /&gt;b) SQL Select – In addition to above grouping &amp;amp; computed columns can be specified&lt;br /&gt;c) External – the data can be imported from a flat file or populated from the code. ( for example using setitem() methods)&lt;br /&gt;d) Query – used when the data source (SQL statement) is saved in a query object defined in the query painter.&lt;br /&gt;e) Stored Procedure&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;18. Explain how the Auto Commit property works in PB&lt;/strong&gt;&lt;br /&gt;When the Auto Commit property is set to FALSE (default) or 0, PB issues SQL statements inside the scope of a transaction. 1(TRUE) implies statements outside the scope of a transaction (for example when your application requires creating temporary tables).&lt;br /&gt;a) If you want to execute stored procedures containing DDL (CREATE, ALTER, DROP etc) statements, then Auto Commit = TRUE.&lt;br /&gt;b) If Auto Commit = TRUE, then rollback cannot be issued, it should be set to FALSE after completing the DDL operation.&lt;br /&gt;When Auto Commit is set from FALSE to TRUE, then PB issues a COMMIT statement by default.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;19. Explain the steps to update a multi-table DW in PB&lt;/strong&gt;&lt;br /&gt;The following steps are involved in the process:&lt;br /&gt;a) Use. modify/.object notation to make ONE table updateable&lt;br /&gt;b) SET the primary keys for the table&lt;br /&gt;c) Perform DW_1 update with FALSE argument for the reset option in the Update() function&lt;br /&gt;d) After © is successful, make 2nd table updateable and 1st table not updateable&lt;br /&gt;e) Next call update() with TRUE argument for the the reset option in the Update() function&lt;br /&gt;f) COMMIT/ROLLBACK depending on success or failure&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;20. What is a DWChild object? Name two events associated with it&lt;/strong&gt;&lt;br /&gt;A dropdown DW is aDWChild. For example a DW object that populates a column having the dropdown DW edit style is aDWChild object. It does not have any events associated with it.&lt;br /&gt;&lt;strong&gt;&lt;br /&gt;21. Explain multi-byte support for PB&lt;/strong&gt;&lt;br /&gt;PB 8 supports both ANSI and double-byte character sets (DBCS); any PB8 application runs in a DBCS environment. In a DBCS environment 1 character = 2 bytes as opposed to 1 byte in an ANSI environment. For example we may need to change the width of a column of type char (40) to char (80).&lt;br /&gt;The wide version of the Len () function (called Lenw ()) should be used since the former returns the number of bytes while the latter returns the number of characters.&lt;br /&gt;&lt;br /&gt;PowerBuilder can access Unicode data in an ASE 12.5 Unicode database or in Unicode columns in ASE 12.5. PowerBuilder converts between double-byte character set (DBCS) data and Unicode automatically, provided that the Locale parameter is set with DBCS values. For example, the Locale DBParm should be set to chs or cht.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;22. Explain the three methods of passing arguments to functions/events in PB&lt;/strong&gt;&lt;br /&gt;a) By Value – a copy of the variable is passed. Any changes to the value of the variable will affect the copy only, the original variable in the calling script is not affected&lt;br /&gt;b) By Reference – a pointer to the variable is passed to the function/event. Any changes affect the original variable in the calling script&lt;br /&gt;c) READ-ONLY – a copy of the variable treated as a CONSTANT is available to the function/event&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;23. Differentiate between instance and shared variables in PB&lt;/strong&gt;&lt;br /&gt;a) Instance variables are created when the object is created and destroyed when the object is destroyed while a shared variable is created when the FIRST instance of the object is created and is destroyed when the application is closed&lt;br /&gt;b) The value of an instance variable in each instance is independent of its value in other instances while changing the value of a shared variable in one instance will affect other instances&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;24. Mention some features of N-Up, Composite &amp;amp; CrossTab DW presentation styles&lt;/strong&gt;&lt;br /&gt;a) N-Up: two or more rows of data displayed next to each other across the page. It is useful for periodic data such as data for each day/week or each month in the quarter&lt;br /&gt;b) CrossTab: - provides a data summary in a row and column format. Data to be selected from one or more tables, DW cannot be external. Crosstab functions can be used for filters, validation rules or computed fields&lt;br /&gt;c) Composite: - it consists of one or more nested reports. It also serves as a container for other reports and has no data source of its own. The user can specify one DW object to be shown on screen, as many reports as the number of DW objects can be viewed on screen based on the retrieval arguments specified by the user&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;25. Explain some performance considerations that you as a developer would like to review while designing client/server (PB/Sybase) applications&lt;/strong&gt;&lt;br /&gt;An important consideration is the usage of COMMIT/CONNECT statements to maximize performance and limit locking and resource use. Two design considerations that should be taken care are:&lt;br /&gt;a) Long running connections – if these are NOT acceptable then the application should connect to the database only when necessary. If acceptable then COMMITs should be issued as often as possible so that the changes do in fact occur. More importantly COMMITs should be issued to release any locks placed on DB entities as a result of statements executed during the transaction&lt;br /&gt;b) Settrans/Settransobject function – if the application functionality requires connections to be kept open and issue periodic COMMITs then Settransobject () should be used or use Settrans () for many short-lived transactions&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;26. Explain the usage of Settransobject function with composite DWs&lt;br /&gt;&lt;/strong&gt;Only this function should be used for composite presentation styles acting as containers for other DW objects. If settrans () is used with each DW in a composite DW then disconnect does not occur until PB session ends. It should be used only for pure retrieval when DB locks need not be held on tables in other words update () functions are not used.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;27. Explain function overloading with an example&lt;br /&gt;&lt;/strong&gt;It is a feature in PB where a function is defined with the same name as another. The two functions may differ in the number of arguments and also the type of arguments. An example is the Messagebox () function.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;28. Explain the two classes of PB user objects and their sub types&lt;/strong&gt;&lt;br /&gt;Uos are custom visual objects that you can build to supplement standard PB objects. UOs can request/display information and respond to mouse or keyboard actions and create a tab page UO.&lt;br /&gt;a)       Visual UO – a reusable control/set of controls. For example a set of buttons to function as a unit having scripts associated with them for standard processing. Three types are:&lt;br /&gt;1.       Standard – inherited from a specific visual control. For example command button/checkbox etc&lt;br /&gt;2.       Custom - inherited from the userobject system class. You can include many controls in the UO and write scripts for these events.&lt;br /&gt;3.       External - it is a UO that displays a visual control defined in a DLL.&lt;br /&gt;b)       Class UO – they consist of properties, functions, and events with no visual components.&lt;br /&gt;1.       Standard – inherited from a NV PB object such as a transaction/error object, which can have instance variables and functions.&lt;br /&gt;2.       Custom – an object of your own design for which you define variables, events and functions in order to encapsulate application-specific programming in an object&lt;br /&gt;&lt;strong&gt;&lt;br /&gt;29. How do you change the SQL statement of a DW at run-time?&lt;/strong&gt;&lt;br /&gt;It can be done by linking the DW control to modify () function or using “. Object” notation&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;30.  Can you use an array as an argument to the DW’s Retrieve () function?&lt;br /&gt;&lt;/strong&gt;Yes, it can be used when your DWs data source contains a Select statement with an IN clause.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;31.  Application functionality would like to allow the user to print selected rows. How is this done?&lt;/strong&gt;&lt;br /&gt;You can copy the selected rows to a data store or a hidden DW control using rowscopy () and print the data store or hidden DW control&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;32. Explain the DW validation rule&lt;/strong&gt;&lt;br /&gt;If the data in a column has changed, it checks for the correctness of the value (both data type and data value) in the primary buffer. Wrong data type or data value will trigger the itemerror () event. If the data is correct it triggers itemchanged () event, which if it returns ZERO, triggers itemfocuschanged () event.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;33. Explain the following error: “Rows changed between retrieve and update”&lt;/strong&gt;&lt;br /&gt; It occurs when a user updates the data before you update it. PB detects it when you include the timestamp column in the DW or use “key and updateable columns” in the WHERE clause. The solution to the problem would be to use the reselectrow () function to reselect the row that caused the error and get the latest values for the error row and update the DB again.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;34.  What is the difference between a computed column and a computed field?&lt;br /&gt;&lt;/strong&gt;The former is defined as part of the SELECT statement, (for example sum, avg etc) whose values are calculated by the database, while in the latter the PB client calculates the values. If it is a fat client then computed fields are recommended, else for thin clients it is computed column.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;35. If the application needs to display rows as soon as they are retrieved, what should be done?&lt;br /&gt;&lt;/strong&gt;Write code in the retrievrow () event and also set the asynch attibute in the DBParm property in the transaction object&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;36. How would you retrieve multiple result sets in a single DW?&lt;/strong&gt;&lt;br /&gt;A DW can retrieve only one result set at a time. To retrieve other result sets, you can change the result set number either by modify () or using object notation making sure the number of columns and data types match the existing DW definition.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;37. What is the event from which I can see the exact SQL statement sent to the DB by PowerBuilder?&lt;/strong&gt;&lt;br /&gt;SQLPreview ()&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;38. How can you update a DW that has a stored procedure as a data source?&lt;/strong&gt;&lt;br /&gt;It can be done by going to the update properties in the DW by selecting Rows/Update properties from the menu in the design mode in the DW painter. The tables to be updated can be selected.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;39. What are the different types of windows in PB?&lt;/strong&gt;&lt;br /&gt;They are main, popup; child, response, MDI frame, and MDI frame with microhelp.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;40. If you create a response window and open that window in an MDI frame using opensheet (), what would happen?&lt;br /&gt;&lt;/strong&gt;When you open a window in a MDI frame using opensheet () or opensheetwithparm () the window gets the sheet properties irrespective of the window type. If a response window is opened using the above functions the window will behave like any other sheet having maximise, minimize, close controls etc&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;41. What is the difference between triggerevent () and postevent ()?&lt;/strong&gt;&lt;br /&gt;The former executes the specified event’s script right away while the latter posts the request in the operating system’s message queue&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;42. How can I find out if the PB application is connected to the DB or not?&lt;/strong&gt;&lt;br /&gt;Use the Dbhandle () function&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;43. Name three PB pronouns used to reduce hard coding&lt;br /&gt;&lt;/strong&gt;This, parent, parentwindow &amp;amp; super&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;44. Differentiate between parent &amp;amp; parentwindow&lt;/strong&gt;&lt;br /&gt;Parent refers to the PB object where the current object is placed. For example parent in a command button’s script will refer to the window in which the command button is placed. Parentwindow is used to refer to the window for which the current menu is attached&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;45. I have a window, which has a menu, associated with it. For some reason I have deleted the menu and I am getting any error while trying to open the window. What needs to be done?&lt;/strong&gt;&lt;br /&gt;Export the window as a SRW and look for the menu name in the file. Once found the menu can be created again and linked to the source window.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;46. Explain the different types of embedded SQL that can be used in PB scripting&lt;br /&gt;&lt;/strong&gt;Given below are the SQL statements in scripts that are possible with Sybase ASE:&lt;br /&gt;a)       Transaction Management statements – CONNECT, COMMIT, ROLLBACK and DISCONNECT are used to manage transactions in ASE. If a trigger fails, then a RAISEERROR should be issued in the trigger and not ROLLBACK. PB has got a DBMS specific return code (SQLDBCode = -1) within the transaction object which can be used to throw messages to the user.&lt;br /&gt;b)       Non-cursor statements – INSERT/UPDATE/DELETE/SELECT&lt;br /&gt;c)       Cursor statements – the user can retrieve ( declare, open, fetch &amp;amp; close cursors) and issue update( update &amp;amp; delete cursors)&lt;br /&gt;d)      DB Stored Procedures – they can be used for retrieve, update or both. To execute DDL statements the AutoCommit must be set to TRUE (1), but if it is TRUE, ROLLBACK cannot be issued, hence after completion of the DDL operation it must be set back to FALSE.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;47. What is DDE? Which PB object has DDE related events associated with it?&lt;/strong&gt;&lt;br /&gt;DDE stands for dynamic data exchange by means of which two applications can talk to each other and exchange data between them. Examples are RemoteExec &amp;amp; RemoteSend. A PB window has DDE events associated with it&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;48. Explain the concepts of embedding and linking&lt;/strong&gt;&lt;br /&gt;When you embed an object it is saved as part of the OLE container object i.e. any changes to the actual object will not reflect in the embedded object. In case of Linking the original object resides where it was and link information is stored in the OLE container object i.e. any changes to the actual object will reflect in the OLE container object. OCX is an OLE control that implements the component-based architecture.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;49. Explain enumerated data types in PB&lt;/strong&gt;&lt;br /&gt;Enumerated data types are specific to PowerScript. They are used as arguments in functions and also to specify the properties of an object or control. A variable of one of the enumerated data types can be assigned a fixed set of values. For example, the enumerated data type Alignment, which specifies the alignment of text, can be assigned one of the following three values: Center! Left!, and Right!:&lt;br /&gt;For example mle_edit.Alignment=Right!&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;50. Explain the concept of inheritance in PB&lt;br /&gt;&lt;/strong&gt;It is a feature that enables you to build windows, user objects, and menus that are derived from existing objects. When you change an ancestor object, the changes are reflected in all the descendants and the descendant inherits the ancestor's scripts. Two main features to be noted here are:&lt;br /&gt;a)       Descendant objects - In PB, an object class can be inherited from another class. The inherited or descendent object has all the instance variables, events, and functions of the ancestor. You can augment the descendant by adding more variables, events, and functions. If you change the ancestor, even after editing the descendant, the descendant incorporates the changes.&lt;br /&gt;b)       Instantiating - When you instantiate a descendent object, PowerBuilder also instantiates all its ancestor classes. You do not have programmatic access to these ancestor instances, except in a few limited ways, such as when you use the scope operator to access an ancestor version of a function or event script.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-1640986818041885258?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/1640986818041885258/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=1640986818041885258' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/1640986818041885258'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/1640986818041885258'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2009/03/powerbuilder-interview-questionspart1.html' title='Powerbuilder interview questions_part1'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-6005112682749626386</id><published>2009-02-27T01:39:00.000-08:00</published><updated>2009-02-27T01:48:21.566-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Windows Washing: Microsoft Talks Up Tweaks Following Public Beta</title><content type='html'>&lt;a href="http://4.bp.blogspot.com/_49wEoqENSuk/Sae2x3CDIRI/AAAAAAAAAUY/E0EqbcFoAkw/s1600-h/windows-7.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5307411653581807890" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 200px; CURSOR: hand; HEIGHT: 150px" alt="" src="http://4.bp.blogspot.com/_49wEoqENSuk/Sae2x3CDIRI/AAAAAAAAAUY/E0EqbcFoAkw/s320/windows-7.jpg" border="0" /&gt;&lt;/a&gt;Microsoft has detailed some of the changes it plans to make following its public beta of the Windows 7 OS. Meanwhile, remarks made by the president of a Taiwan laptop manufacturer suggested the final version of Windows 7 may arrive as soon as this fall. Vista, however, remains the company's flagship product, and as such it needs regular service. An SP2 release candidate has been made available to select parties.&lt;br /&gt;&lt;br /&gt;With its big round of public beta testing out of the way, &lt;a class="story-keyword-offsite" onclick="window.open('http://www.microsoft.com'); return false;" href="http://www.microsoft.com/"&gt;Microsoft&lt;/a&gt; (Nasdaq: MSFT) &lt;a class="story-keyword-search" href="http://www.technewsworld.com/perl/search.pl?query=Microsoft&amp;amp;scope=network"&gt;&lt;/a&gt;is apparently moving quickly to the next milestone on the Windows 7 upgrade path. On Thursday, the company revealed some of the changes users can expect to see in the upcoming Windows 7 Release Candidate (RC) -- possibly the penultimate stage prior to the release of a final product -- in its &lt;a href="http://blogs.msdn.com/e7/archive/2009/02/26/some-changes-since-beta.aspx" target="_blank"&gt;Engineering Windows 7 blog&lt;/a&gt;.&lt;br /&gt;Looking at feedback garnered during the first round of public beta testing, Microsoft has been working on incorporating some needed changes.&lt;br /&gt;"It should be no surprise, but the Release Candidate for Windows 7 will have quite a few changes, many under the hood, so to speak, but also many visible. The goal of having a fully functional Beta was to make sure we received reliable feedback and not a lot of 'hey this doesn't work at all' sorts of reports. This has allowed us to really focus on delivering a refined RC where the changes we made are all the reflection of feedback we have received," wrote Chaitanya Sareen, senior program manager at Microsoft.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-6005112682749626386?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/6005112682749626386/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=6005112682749626386' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/6005112682749626386'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/6005112682749626386'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2009/02/windows-washing-microsoft-talks-up.html' title='Windows Washing: Microsoft Talks Up Tweaks Following Public Beta'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_49wEoqENSuk/Sae2x3CDIRI/AAAAAAAAAUY/E0EqbcFoAkw/s72-c/windows-7.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-4212780502307374119</id><published>2008-12-22T22:19:00.000-08:00</published><updated>2008-12-22T22:22:01.125-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='News'/><title type='text'>Microsoft warns of SQL Server vulnerability</title><content type='html'>&lt;span&gt;Microsoft issued an advisory late Monday confirming a remote code execution vulnerability affecting its SQL Server line.&lt;br /&gt;The vulnerability affects Microsoft SQL Server 2000, Microsoft SQL Server 2005, Microsoft SQL Server 2005 Express Edition, Microsoft SQL Server 2000 Desktop Engine (MSDE 2000), Microsoft SQL Server 2000 Desktop Engine (WMSDE), and Windows Internal Database (WYukon). Microsoft said systems with Microsoft SQL Server 7.0 Service Pack 4, Microsoft SQL Server 2005 Service Pack 3, and Microsoft SQL Server 2008 are not affected by this issue.&lt;br /&gt;From Microsoft's &lt;a href="http://www.microsoft.com/technet/security/advisory/961040.mspx"&gt;advisory&lt;/a&gt;:&lt;br /&gt;Microsoft is aware that exploit code has been published on the Internet for the vulnerability addressed by this advisory. Our investigation of this exploit code has verified that it does not affect systems that have had the workarounds listed below applied. Currently, Microsoft is not aware of active attacks that use this exploit code or of customer impact at this time.&lt;br /&gt;In addition, due to the mitigating factors for default installations of MSDE 2000 and SQL Server 2005 Express, Microsoft is not currently aware of any third-party applications that use MSDE 2000 or SQL Server 2005 Express which would be vulnerable to remote attack. However, Microsoft is actively monitoring this situation to provide customer guidance as necessary.&lt;br /&gt;Microsoft said it was unaware of any active attacks utilizing the exploit code.&lt;br /&gt;The advisory comes less than a week after Microsoft &lt;a title="Microsoft releases patch for critical IE security flaw -- Wednesday, Dec 17, 2008" href="http://news.cnet.com/8301-1009_3-10125593-83.html"&gt;released a critical security patch to plug vulnerabilities&lt;/a&gt; in Internet Explorer amid malicious attackers taking advantage of the security flaws. &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-4212780502307374119?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/4212780502307374119/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=4212780502307374119' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/4212780502307374119'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/4212780502307374119'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2008/12/microsoft-warns-of-sql-server.html' title='Microsoft warns of SQL Server vulnerability'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-2690471439080736940</id><published>2008-12-04T02:08:00.000-08:00</published><updated>2008-12-04T02:11:47.727-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder Tips'/><title type='text'>Use a Java object from PB (using the Microsoft JVM)</title><content type='html'>Use the Microsoft&lt;strong&gt; javareg&lt;/strong&gt; utility to register a java class as a COM server. Once registered, the Java class will be visible from all languages that can deal with COM objects. I am giving here some examples in VbScript, JScript, ASP and Powerbuilder.&lt;br /&gt;NOTE: The class can compiled with any JDK but the actual execution will use the Microsoft JVM installed on the system.&lt;br /&gt;The javareg utility is part of the Microsoft Java SDK which can be freely downloaded from the &lt;a href="http://www.microsoft.com/java"&gt;Microsoft Web site&lt;/a&gt;.&lt;br /&gt;First a simple Java class.&lt;br /&gt;[JavaSays.java]&lt;br /&gt;package JavaCom;&lt;br /&gt;public class JavaSays {&lt;br /&gt;public String Hello() {&lt;br /&gt;return "Hello world" ;&lt;br /&gt;}&lt;br /&gt;public String Say(String what) {&lt;br /&gt;return what ;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;strong&gt;Then this BAT file is executed to register our class.&lt;/strong&gt;&lt;br /&gt;&lt;em&gt;javareg /register /class:JavaCom.JavaSays /progid:JavaCom.JavaSays&lt;br /&gt;md c:\Windows\Java\TrustLib\JavaCom&lt;br /&gt;copy JavaSays.class c:\windows\java\trustlib\javacom&lt;br /&gt;&lt;/em&gt;That's it. The system now has a COM object called JavaCom.JavaSays installed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-2690471439080736940?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/2690471439080736940/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=2690471439080736940' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/2690471439080736940'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/2690471439080736940'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2008/12/use-java-object-from-pb-using-microsoft.html' title='Use a Java object from PB (using the Microsoft JVM)'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-1373720489481417849</id><published>2008-12-04T02:03:00.000-08:00</published><updated>2008-12-04T02:04:15.927-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VB script Tips'/><title type='text'>Create an XML file</title><content type='html'>set xdoc = CreateObject("MSXML2.DOMDocument")&lt;br /&gt;set html = xdoc.appendChild(xdoc.CreateElement("HOWTOS"))&lt;br /&gt;set list = html.appendChild(xdoc.createElement("TOPIC"))&lt;br /&gt;set item = list.appendChild(xdoc.createElement("TITLE"))&lt;br /&gt;set text = xdoc.createTextNode("Java")&lt;br /&gt;item.appendChild text&lt;br /&gt;set item = list.appendChild(xdoc.createElement("URL"))&lt;br /&gt;set text = _&lt;br /&gt;xdoc.createTextNode("http://www.rgagnon/javahowto.htm")&lt;br /&gt;item.appendChild text&lt;br /&gt;set list = html.appendChild(xdoc.createElement("TOPIC"))&lt;br /&gt;set item = list.appendChild(xdoc.createElement("TITLE"))&lt;br /&gt;set text = xdoc.createTextNode("Javascript")&lt;br /&gt;item.appendChild text&lt;br /&gt;set item = list.appendChild(xdoc.createElement("URL"))&lt;br /&gt;set text = _&lt;br /&gt;xdoc.createTextNode("http://www.rgagnon/javascripthowto.htm")&lt;br /&gt;item.appendChild text&lt;br /&gt;xdoc.save "test.xml"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-1373720489481417849?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/1373720489481417849/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=1373720489481417849' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/1373720489481417849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/1373720489481417849'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2008/12/create-xml-file.html' title='Create an XML file'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-245454739256476876</id><published>2008-12-04T02:00:00.000-08:00</published><updated>2008-12-04T02:02:40.041-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VB script Tips'/><title type='text'>Connect to a database</title><content type='html'>Dim OdbcDSN&lt;br /&gt;Dim connect, sql, resultSet&lt;br /&gt;OdbcDSN = "DSN=Sybase Demo DB V6 DWB;UID=dba;PWD=sql"&lt;br /&gt;Set connect = CreateObject("ADODB.Connection")&lt;br /&gt;connect.Open OdbcDSN&lt;br /&gt;sql="SELECT emp_fname, emp_lname FROM employee"&lt;br /&gt;Set resultSet = connect.Execute(sql)&lt;br /&gt;On Error Resume Next&lt;br /&gt;resultSet.MoveFirst&lt;br /&gt;Do While Not resultSet.eof&lt;br /&gt;WScript.Echo resultSet("emp_lname") &amp;amp; " , " &amp;amp; _&lt;br /&gt;resultSet("emp_fname")&lt;br /&gt;resultSet.MoveNext&lt;br /&gt;Loop&lt;br /&gt;resultSet.Close&lt;br /&gt;connect.Close&lt;br /&gt;Set connect = Nothing&lt;br /&gt;WScript.Quit(0)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-245454739256476876?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/245454739256476876/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=245454739256476876' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/245454739256476876'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/245454739256476876'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2008/12/connect-to-database.html' title='Connect to a database'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-2730856182284173321</id><published>2008-12-04T01:58:00.000-08:00</published><updated>2008-12-04T01:59:54.164-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VB script Tips'/><title type='text'>Extract data from HTML page</title><content type='html'>theURL = "www.rgagnon.com/masters/wsh-vbs.html"&lt;br /&gt;with CreateObject("InternetExplorer.Application")&lt;br /&gt;.Navigate("http://" &amp;amp; theURL)&lt;br /&gt;Do until .ReadyState = 4&lt;br /&gt;WScript.Sleep 50&lt;br /&gt;Loop&lt;br /&gt;With .document&lt;br /&gt;set theTables = .all.tags("table")&lt;br /&gt;nTables = theTables.length&lt;br /&gt;for each table in theTables&lt;br /&gt;s = s &amp;amp; table.rows(0).cells(0).innerText _&lt;br /&gt;&amp;amp; vbNewLine &amp;amp; vbNewLine&lt;br /&gt;next&lt;br /&gt;wsh.echo "Number of tables:", nTables, vbNewline&lt;br /&gt;wsh.echo "First table first cell:", s&lt;br /&gt;' get the data with an ID&lt;br /&gt;' msgbox ie.document.getelementbyid("d1").innerHtml&lt;br /&gt;End With&lt;br /&gt;End With&lt;br /&gt;&lt;strong&gt;Output is :&lt;br /&gt;&lt;/strong&gt;&gt;cscript ieextract.vbs&lt;br /&gt;Microsoft (R) Windows Script Host Version 5.6&lt;br /&gt;Copyright (C) Microsoft Corporation 1996-2001. Tous droits réservés.&lt;br /&gt;Number of tables: 1&lt;br /&gt;First table first cell: VBScript&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-2730856182284173321?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/2730856182284173321/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=2730856182284173321' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/2730856182284173321'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/2730856182284173321'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2008/12/extract-data-from-html-page.html' title='Extract data from HTML page'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-6350709926763669670</id><published>2008-12-04T01:56:00.000-08:00</published><updated>2008-12-04T01:57:12.537-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder Tips'/><title type='text'>Detect Caps Lock state</title><content type='html'>&lt;strong&gt;[local function declaration]&lt;/strong&gt;&lt;br /&gt;FUNCTION int GetKeyState(int keystatus) LIBRARY "user32.dll"&lt;br /&gt;&lt;strong&gt;[powerscript]&lt;/strong&gt;&lt;br /&gt;int li_keystate&lt;br /&gt;li_keystate = GetKeyState(20)&lt;br /&gt;IF li_keystate = 1 THEN&lt;br /&gt;MessageBox("", "CAPS on")&lt;br /&gt;ELSEIF li_keystate = 0 THEN&lt;br /&gt;MessageBox("", "CAPS off")&lt;br /&gt;END IF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-6350709926763669670?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/6350709926763669670/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=6350709926763669670' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/6350709926763669670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/6350709926763669670'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2008/12/detect-caps-lock-state.html' title='Detect Caps Lock state'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-4567432002068281648</id><published>2008-12-04T01:54:00.000-08:00</published><updated>2008-12-04T01:55:52.581-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder Tips'/><title type='text'>Convert Win API calls to PB10</title><content type='html'>Function declaration needs to be modifed to specify ANSI:&lt;br /&gt;&lt;em&gt;FUNCTION long ShellExecuteA (ulong hWnd, &amp;amp;&lt;br /&gt;string Operation, string lpFile, string lpParameters, &amp;amp;&lt;br /&gt;string lpDirectory, long nShowCmd) LIBRARY "shell32.dll" &amp;amp;&lt;br /&gt;ALIAS FOR "ShellExecuteA;Ansi"&lt;br /&gt;&lt;/em&gt;From the PowerBuilder 10 Help:If your application makes calls to external functions, and there is a Unicode version of the external function, convert the calls to the Unicode versions of the functions. For example, a call to SQLGetInfo should be changed to SQLGetInfoW.&lt;br /&gt;If the function passes a string, char, or structure as an argument or returns a string, char, or structure, you can use the same syntax in PowerBuilder 10 as in previous releases if the string uses Unicode encoding. For example:&lt;br /&gt;&lt;em&gt;FUNCTION int MyMessageBoxW(int handle, string content, string title, int&lt;br /&gt;showtype) LIBRARY "user32.dll" ALIAS FOR "MessageBoxW"&lt;br /&gt;&lt;/em&gt;&lt;strong&gt;As for structure with PB10, char is now 16 bit :&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;// before PB10&lt;/strong&gt;&lt;br /&gt;global type mystruct from structure&lt;br /&gt;long l1&lt;br /&gt;char pad1&lt;br /&gt;char pad2&lt;br /&gt;long l2&lt;br /&gt;char pad3&lt;br /&gt;char pad4&lt;br /&gt;end type&lt;br /&gt;&lt;strong&gt;// PB10&lt;/strong&gt;&lt;br /&gt;global type mystruct from structure&lt;br /&gt;long l1&lt;br /&gt;char pad1&lt;br /&gt;long l2&lt;br /&gt;char pad2&lt;br /&gt;end type&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-4567432002068281648?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/4567432002068281648/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=4567432002068281648' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/4567432002068281648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/4567432002068281648'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2008/12/convert-win-api-calls-to-pb10.html' title='Convert Win API calls to PB10'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-1240536212108910297</id><published>2008-12-04T01:47:00.000-08:00</published><updated>2008-12-04T01:48:45.038-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder Tips'/><title type='text'>Make a window popup "on top"</title><content type='html'>Declare the following fonction :&lt;br /&gt;&lt;em&gt;FUNCTION BOOLEAN SetForegroundWindow( LONG HWND ) LIBRARY "USER32"&lt;/em&gt;&lt;br /&gt;and&lt;br /&gt;&lt;em&gt;long hWnd&lt;/em&gt;&lt;br /&gt;&lt;em&gt;hWnd = Handle(w_my_popup)&lt;/em&gt;&lt;br /&gt;&lt;em&gt;SetForegroundWindow( HWND )&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-1240536212108910297?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/1240536212108910297/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=1240536212108910297' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/1240536212108910297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/1240536212108910297'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2008/12/make-window-popup-on-top.html' title='Make a window popup &quot;on top&quot;'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-4071637982557319623</id><published>2008-12-04T01:44:00.000-08:00</published><updated>2008-12-04T01:47:02.763-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder Tips'/><title type='text'>Call HtmlHelp</title><content type='html'>&lt;strong&gt;Declare the following external function&lt;/strong&gt;&lt;br /&gt;&lt;em&gt;FUNCTION long HtmlHelp(long hwnd, string pszFile, &amp;amp;&lt;br /&gt;long uCommand, long dwData) LIBRARY "hhctrl.ocx" &amp;amp;&lt;br /&gt;ALIAS FOR "HtmlHelpA"&lt;/em&gt;&lt;br /&gt;hwnd is the handle of calling window (you may set it using handle(this)function)pszFile is the name of help file eg. myApp.chmuCommand usually is 0 or 1dwData is the "numeric" topic (for example, 1005).&lt;br /&gt;NOTE: the hhctrl.ocx must be registered in your system. If you have IE4 installed, it's done already.&lt;br /&gt;&lt;strong&gt;To display the HTMLHelp with left panel showing the Table of Content Tab and the right panel the first Help page&lt;/strong&gt;&lt;br /&gt;&lt;em&gt;HtmlHelp( ll_handlewindow, ls_helpfile + ' &gt; main', 0, 0)&lt;/em&gt;&lt;br /&gt;&lt;strong&gt;To display the HTMLHelp with left panel showing the Search Tab and the right panel the first Help page&lt;/strong&gt;&lt;br /&gt;&lt;em&gt;string nullstring&lt;br /&gt;SetNull(nullstring)&lt;br /&gt;HtmlHelp( ll_handlewindow, ls_helpfile + ' &gt; main', 1, nullstring)&lt;br /&gt;&lt;/em&gt;&lt;strong&gt;To display the HTMLHelp for a specific topic (no left panel).&lt;/strong&gt;&lt;br /&gt;&lt;em&gt;CONSTANT long HH_HELP_CONTEXT = 15&lt;br /&gt;HtmlHelp( ll_handlewindow, ls_helpfile , HH_HELP_CONTEXT, 1005)&lt;br /&gt;&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-4071637982557319623?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/4071637982557319623/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=4071637982557319623' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/4071637982557319623'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/4071637982557319623'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2008/12/call-htmlhelp.html' title='Call HtmlHelp'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-3320840955323875834</id><published>2008-12-04T01:39:00.000-08:00</published><updated>2008-12-04T01:42:19.670-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder Tips'/><title type='text'>Get the CDROM drive letter</title><content type='html'>[Function declarations]&lt;br /&gt;&lt;em&gt;FUNCTION ulong GetLogicalDrives() LIBRARY "Kernel32.dll"&lt;br /&gt;FUNCTION uint GetDriveType( Ref String as_root_path ) &lt;/em&gt;LIBRARY "kernel32.dll" ALIAS FOR "GetDriveTypeA"&lt;br /&gt;[PB function String of_GetCDRootPath()]&lt;br /&gt;integer li_ctr&lt;br /&gt;string ls_root&lt;br /&gt;ulong lul_drives, lul_rem&lt;br /&gt;lul_drives = GetLogicalDrives()&lt;br /&gt;DO&lt;br /&gt;lul_rem = MOD(lul_drives, 2)&lt;br /&gt;IF lul_rem = 1 THEN&lt;br /&gt;ls_root = Char(li_ctr + 64) + ":\"&lt;br /&gt;IF GetDriveType(ls_root_path) = 5 THEN&lt;br /&gt;Return ls_root_path&lt;br /&gt;END IF&lt;br /&gt;li_ctr ++&lt;br /&gt;END IF&lt;br /&gt;lul_drives /= 2&lt;br /&gt;LOOP UNTIL lul_drives = 0&lt;br /&gt;RETURN ""&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-3320840955323875834?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/3320840955323875834/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=3320840955323875834' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/3320840955323875834'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/3320840955323875834'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2008/12/get-cdrom-drive-letter.html' title='Get the CDROM drive letter'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-5872628755051641130</id><published>2008-12-04T01:34:00.000-08:00</published><updated>2008-12-04T01:37:08.166-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder Tips'/><title type='text'>Start the screen saver</title><content type='html'>&lt;em&gt;/*&lt;br /&gt;** WM_SYSCOMMAND 0x0112 274&lt;br /&gt;** SC_SCREENSAVE 0xF140 61760&lt;br /&gt;*/&lt;br /&gt;send(handle(This),274,61760,0)&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-5872628755051641130?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/5872628755051641130/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=5872628755051641130' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/5872628755051641130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/5872628755051641130'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2008/12/start-screen-saver.html' title='Start the screen saver'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-7867908024618704627</id><published>2008-12-04T01:32:00.000-08:00</published><updated>2008-12-04T01:34:54.379-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder Tips'/><title type='text'>Autoselect an Editmask</title><content type='html'>[ItemFocusChanged event]&lt;br /&gt;&lt;em&gt;CHOOSE CASE this.Describe(dwo.name + '.editmask.mask')  &lt;/em&gt;&lt;br /&gt;&lt;em&gt;      CASE '?' , '!'    &lt;/em&gt;&lt;br /&gt;&lt;em&gt;      CASE ELSE      &lt;/em&gt;&lt;br /&gt;&lt;em&gt;             this.SelectText(1,999)&lt;/em&gt;&lt;br /&gt;&lt;em&gt; END CHOOSE&lt;/em&gt;&lt;br /&gt;&lt;em&gt; END IF&lt;/em&gt;&lt;br /&gt;&lt;em&gt;RETURN 0&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-7867908024618704627?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/7867908024618704627/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=7867908024618704627' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/7867908024618704627'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/7867908024618704627'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2008/12/autoselect-editmask.html' title='Autoselect an Editmask'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-8064794443273219036</id><published>2008-12-04T01:31:00.001-08:00</published><updated>2008-12-04T01:38:06.517-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder Tips'/><title type='text'>Print to a file</title><content type='html'>&lt;em&gt;dw_1.Object.DataWindow.Print.Filename = 'report.prn'&lt;/em&gt;&lt;br /&gt;&lt;em&gt;dw_1.Print()&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-8064794443273219036?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/8064794443273219036/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=8064794443273219036' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/8064794443273219036'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/8064794443273219036'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2008/12/print-to-file.html' title='Print to a file'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-6900337282479887482</id><published>2008-12-04T01:28:00.000-08:00</published><updated>2008-12-04T01:38:40.713-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder Tips'/><title type='text'>Alternate row color</title><content type='html'>Place a rectangle with a transparent background color. Place fields on the rectangle. In the expression tab for the rectangle, in the backgound color field :&lt;br /&gt;&lt;em&gt;if ( mod(getrow(),2) = 0, oneColor, anotherColor )&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-6900337282479887482?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/6900337282479887482/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=6900337282479887482' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/6900337282479887482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/6900337282479887482'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2008/12/alternate-row-color.html' title='Alternate row color'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-253363569975438271</id><published>2008-12-04T01:27:00.000-08:00</published><updated>2008-12-04T01:28:49.097-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder Tips'/><title type='text'>Have a different color for newly inserted row</title><content type='html'>In the expression painter, code the following for the Background expression :&lt;br /&gt;&lt;em&gt;IF ( IsRowNew(), 1090519039, Long(Describe("datawindow.color")))&lt;/em&gt;&lt;br /&gt;where &lt;strong&gt;1090519039&lt;/strong&gt; is the regular window color.&lt;br /&gt;Using the same idea, to make existing data read-only and newly inserted editable, code the following in the Protect expression :&lt;br /&gt;&lt;em&gt;IF ( IsRowNew() , 0 , 1 )&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-253363569975438271?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/253363569975438271/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=253363569975438271' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/253363569975438271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/253363569975438271'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2008/12/have-different-color-for-newly-inserted.html' title='Have a different color for newly inserted row'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-9114648398316270361</id><published>2008-12-04T01:26:00.000-08:00</published><updated>2008-12-04T01:27:29.040-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder Tips'/><title type='text'>Create dynamically a DataWindow</title><content type='html'>&lt;em&gt;string ls_select&lt;br /&gt;string ls_where&lt;br /&gt;string ls_dwsyntax&lt;br /&gt;string ls_err&lt;br /&gt;ls_select = &amp;amp;&lt;br /&gt;"Select id, fname, lname, address, city, state, zip from customer"&lt;br /&gt;ls_where = " where customer.fname like '" + is_cust + "%'"&lt;br /&gt;ls_dwsyntax = SQLCA.SyntaxFromSQL ( ls_select, "Style(Type=grid)", ls_err )&lt;br /&gt;dw_1.Create ( ls_dwsyntax, ls_err )&lt;br /&gt;IF ls_err &lt;&gt; '' THEN&lt;br /&gt;MessageBox ( "error - Syntax", ls_err )&lt;br /&gt;ELSE&lt;br /&gt;dw_1.SetTransObject ( SQLCA )&lt;br /&gt;dw_1.Retrieve()&lt;br /&gt;END IF&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-9114648398316270361?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/9114648398316270361/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=9114648398316270361' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/9114648398316270361'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/9114648398316270361'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2008/12/create-dynamically-datawindow.html' title='Create dynamically a DataWindow'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-836427362954428393</id><published>2008-12-04T01:24:00.000-08:00</published><updated>2008-12-04T01:25:50.058-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder Tips'/><title type='text'>Create a table from PowerScript</title><content type='html'>Use EXECUTE IMMEDIATE. Set Autocommit to true because DDL SQL has to be executed outside of transaction.&lt;br /&gt;&lt;em&gt;SQLCA.AutoCommit = True&lt;br /&gt;ls_sql = "create table #tmp (abc varchar(255))"&lt;br /&gt;EXECUTE IMMEDIATE :LS_SQL USING SQLCA;&lt;/em&gt;&lt;br /&gt;&lt;strong&gt;To alter a table, use the same idea:&lt;/strong&gt;&lt;br /&gt;&lt;em&gt;ls_sql = 'ALTER TABLE dba.tbl_name ADD col_name'&lt;br /&gt;EXECUTE IMMEDIATE :LS_SQL USING SQLCA;&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-836427362954428393?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/836427362954428393/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=836427362954428393' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/836427362954428393'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/836427362954428393'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2008/12/create-table-from-powerscript.html' title='Create a table from PowerScript'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-8179015168298623695</id><published>2008-12-01T22:29:00.000-08:00</published><updated>2008-12-01T22:34:50.238-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder'/><title type='text'>Novalys PowerBuilder Worldwide Survey 2008</title><content type='html'>&lt;a href="http://4.bp.blogspot.com/_49wEoqENSuk/STTW96TiK5I/AAAAAAAAAJ0/O6h1qeCawfo/s1600-h/survey_pb_us_2006.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5275077422669245330" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 142px; CURSOR: hand; HEIGHT: 162px" alt="" src="http://4.bp.blogspot.com/_49wEoqENSuk/STTW96TiK5I/AAAAAAAAAJ0/O6h1qeCawfo/s320/survey_pb_us_2006.gif" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;Please participate in this survey :&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://www.visual-expert.com/EN/survey-pb-stored-procedure-sybase-mssql/survey-pb-2008-us.html"&gt;http://www.visual-expert.com/EN/survey-pb-stored-procedure-sybase-mssql/survey-pb-2008-us.html&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-8179015168298623695?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/8179015168298623695/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=8179015168298623695' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/8179015168298623695'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/8179015168298623695'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2008/12/novalys-powerbuilder-worldwide-survey.html' title='Novalys PowerBuilder Worldwide Survey 2008'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_49wEoqENSuk/STTW96TiK5I/AAAAAAAAAJ0/O6h1qeCawfo/s72-c/survey_pb_us_2006.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-4846340650125495358</id><published>2008-12-01T22:27:00.000-08:00</published><updated>2008-12-01T22:29:51.512-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder'/><title type='text'>Fast Track to PowerBuilder Part II</title><content type='html'>&lt;a href="http://3.bp.blogspot.com/_49wEoqENSuk/STTVz84Zh0I/AAAAAAAAAJs/m1WqxO4OLyo/s1600-h/pb_tw.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5275076152050419522" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 320px; CURSOR: hand; HEIGHT: 78px; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_49wEoqENSuk/STTVz84Zh0I/AAAAAAAAAJs/m1WqxO4OLyo/s320/pb_tw.jpg" border="0" /&gt;&lt;/a&gt; "Fast Track to PowerBuilder Part II"Now includes new features in PowerBuilder 11.5 !&lt;br /&gt;Dear PowerBuilder Developer:&lt;br /&gt;&lt;a href="http://www.sybase.com/detail?id=1056380"&gt;DEV633: Fast Track to PowerBuilder Part II&lt;/a&gt; is perhaps the most important step you take in your training towards a level of expertise that will allow you to learn how to use PowerBuilder to build and deploy fully functional applications using its more advanced features. The course will be taught on PowerBuilder 11.5. However, most of the features you will learn will be available to you in earlier releases of PowerBuilder (for instance, PowerBuilder 9, 10 and 11) - so regardless of the release on which you are working, you will be able to continue to improve your skills by learning PowerBuilder development best practices for advanced client/server application development.&lt;br /&gt;This intensive hands-on, instructor-led training class will give you access to a certified instructor, along with other near-expert level PowerBuilder client/server developers like yourself - whose goal is to learn PowerBuilder’s more advanced and powerful features. &lt;a href="http://sed.sybase.com/Osiris/osiris_course_NAA1.htm#DEV633"&gt;Register Now!&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;a href="http://sed.sybase.com/Osiris/osiris_course_NAA1.htm#DEV633"&gt;Schedule&lt;/a&gt;:&lt;br /&gt;December 8, 2008 (Albany, NY)&lt;/div&gt;&lt;br /&gt;&lt;div&gt;December 8, 2008 (Bethesda, MD)&lt;/div&gt;&lt;br /&gt;&lt;div&gt;December 8, 2008 (SyberLearning LIVE)&lt;/div&gt;&lt;br /&gt;&lt;div&gt;December 15, 2008 (Dublin, CA)&lt;/div&gt;&lt;br /&gt;&lt;div&gt;December 15, 2008 (Boulder, CO)&lt;/div&gt;&lt;br /&gt;&lt;div&gt;February 2, 2009 (SyberLearning LIVE) &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-4846340650125495358?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/4846340650125495358/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=4846340650125495358' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/4846340650125495358'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/4846340650125495358'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2008/12/fast-track-to-powerbuilder-part-ii.html' title='Fast Track to PowerBuilder Part II'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_49wEoqENSuk/STTVz84Zh0I/AAAAAAAAAJs/m1WqxO4OLyo/s72-c/pb_tw.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-953880433436392184</id><published>2008-12-01T21:40:00.000-08:00</published><updated>2008-12-01T21:45:30.865-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Antivirus'/><title type='text'>Free : Norton AntiVirus 2009 Definitions Update (Windows XP 64-bit/Vista 64-bit)</title><content type='html'>&lt;strong&gt;Publisher's description of Norton AntiVirus 2009 Definitions Update (Windows XP 64-bit/Vista 64-bit)&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;From Symantec:&lt;br /&gt;Download this file for the latest in virus detection and repair. This definitions update is a complete replacement for any previous virus definitions set and will work with the following Symantec products:&lt;br /&gt;Norton AntiVirus 2008 for Windows XP/Vista for 64-bit OS only&lt;br /&gt;Norton Internet Security 2008 for Windows XP/Vista for 64-bit OS only&lt;br /&gt;Symantec Endpoint Protection 11.0 for 64-bit OS only&lt;br /&gt;&lt;strong&gt;Download :&lt;/strong&gt;&lt;br /&gt;&lt;a href="http://www.zdnetasia.com/downloads/pc/swinfo/0,39043052,39386086s,00.htm"&gt;http://www.zdnetasia.com/downloads/pc/swinfo/0,39043052,39386086s,00.htm&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-953880433436392184?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/953880433436392184/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=953880433436392184' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/953880433436392184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/953880433436392184'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2008/12/free-norton-antivirus-2009-definitions.html' title='Free : Norton AntiVirus 2009 Definitions Update (Windows XP 64-bit/Vista 64-bit)'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-4993629830914550362</id><published>2008-12-01T21:35:00.000-08:00</published><updated>2008-12-01T21:36:51.088-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Database Management'/><title type='text'>Amazon opens up SimpleDB to the public</title><content type='html'>Amazon on Monday opened up its SimpleDB cloud-based database service to an unlimited beta audience, after a year's private testing.&lt;br /&gt;&lt;br /&gt;SimpleDB is just one of many components that make up the Amazon Web Services (AWS) cloud-computing initiative--the others being the Simple Storage Service (S3) hosted storage facility, the CloudFront content-delivery service and the Elastic Compute Cloud (EC2) cloud-computing service. The opening up of SimpleDB to the public means anybody can use the service for real-time querying of the structured data hosted in AWS.&lt;br /&gt;&lt;br /&gt;On the AWS blog on Monday, Amazon wrote that it had "learned a lot during the beta and [has] fine-tuned the feature set in order to make sure that we are meeting the needs of current and future users".&lt;br /&gt;&lt;br /&gt;As Amazon writes on the SimpleDB web page, the service "provides a simple web-services interface to create and store multiple data sets, query your data easily and return the results". The company said that SimpleDB has similar properties to a spreadsheet, except for the ability to associate multiple values with each attribute of an item. Another feature that Amazon is touting is the ability to add new attributes to a SimpleDB set when this is necessary, rather than having to predefine every attribute.&lt;br /&gt;&lt;br /&gt;SimpleDB is being presented as an alternative to complex databases. "Amazon SimpleDB removes the need to maintain a schema, while your attributes are automatically indexed to provide fast, real-time look-up and querying capabilities", the web page states. "This flexibility minimizes the performance tuning required as the demands for your data increase". However, complex databases can be hosted in EC2 if they are needed.&lt;br /&gt;&lt;br /&gt;A "simple set" of application programming interfaces (APIs) is provided for the purposes of storing, processing and querying data.&lt;br /&gt;&lt;br /&gt;As with other AWS services, the pricing of SimpleDB corresponds with usage, with no up-front costs being involved. Data transfer costs from US$0.10 (7 pence) per gigabyte in and out, although that only refers to data coming into and leaving SimpleDB from outside other AWS services--data transferred between SimpleDB and other AWS services is free.&lt;br /&gt;&lt;br /&gt;Amazon recommends that large files and objects be stored in S3, with pointers and metadata associated with those files being stores in SimpleDB--the charge for this is US$1.50 per gigabyte per month.&lt;br /&gt;&lt;br /&gt;As an extra incentive, those wishing to try out SimpleDB will be able to use it on a limited basis for free over the next six months at least. This will include the consumption of up to 500MB of storage and up to 25 machine hours of usage each month, plus 1GB of data in and 1GB out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-4993629830914550362?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/4993629830914550362/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=4993629830914550362' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/4993629830914550362'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/4993629830914550362'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2008/12/amazon-opens-up-simpledb-to-public.html' title='Amazon opens up SimpleDB to the public'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-269386315466019822</id><published>2008-12-01T21:18:00.001-08:00</published><updated>2008-12-01T21:18:59.092-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='News'/><category scheme='http://www.blogger.com/atom/ns#' term='Sun'/><title type='text'>Sun warns of 'fatal' bugs in MySQL 5.1</title><content type='html'>&lt;strong&gt;Sun has released version 5.1 of the open-source MySQL database software, but the software's founder simultaneously warned of a number of "fatal" bugs present in the new features that are still to be fixed.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Michael "Monty" Widenius, the founder of MySQL, stated&lt;br /&gt;&lt;br /&gt;The new features introduced have been ranked as "beta" quality.&lt;br /&gt;&lt;br /&gt;There are a number of issues associated with the partitioning feature, such as the difficulty to restore a partitioned table if it crashes, and the chance of losing all data in the event of a server crashing during the rename table feature of a partitioned table. Widenius highlighted that the feature was inefficient, particularly if there were many partitions in a database.&lt;br /&gt;&lt;br /&gt;Row-based replication has not been enabled by default, because of a number of problems. Users are advised to test the latest MySQL version before deploying it to production systems.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-269386315466019822?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/269386315466019822/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=269386315466019822' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/269386315466019822'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/269386315466019822'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2008/12/sun-warns-of-fatal-bugs-in-mysql-51.html' title='Sun warns of &apos;fatal&apos; bugs in MySQL 5.1'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-4371275319951719049</id><published>2008-11-25T00:37:00.000-08:00</published><updated>2008-11-25T00:38:36.272-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder Tips'/><title type='text'>Get data from Excel via the clipboard</title><content type='html'>&lt;strong&gt;&lt;em&gt;OLEObject  excel&lt;br /&gt;&lt;br /&gt;Integer    li_RetValue, li_rtn&lt;br /&gt;Boolean    lb_sheet_rtn&lt;br /&gt;Long       ll_cnt&lt;br /&gt;&lt;br /&gt;excel = create OLEObject&lt;br /&gt;li_rtn = excel.ConnectToNewObject("excel.application")&lt;br /&gt;IF li_rtn &lt;&gt; 0 THEN&lt;br /&gt;    MessageBox('Excel erro','can not run Excel Program')&lt;br /&gt;    DESTROY excel&lt;br /&gt;    RETURN 0&lt;br /&gt;END IF&lt;br /&gt;excel.WorkBooks.Open( "c:\mysheet.xls" )&lt;br /&gt;excel.Application.Visible = false&lt;br /&gt;excel.windowstate = 2 // 1 : Normal, 2 : Minimize, 3 : Maximize&lt;br /&gt;lb_sheet_rtn = excel.worksheets(1).Activate&lt;br /&gt;excel.Worksheets(1).Range("A1:E5000").Copy  //  copy to clipboard&lt;br /&gt;ll_cnt = dw_1.importclipboard()&lt;br /&gt;IF ll_cnt &lt;&lt;= 1 THEN&lt;br /&gt;    Messagebox("Inf", "Could not find .")&lt;br /&gt;END IF&lt;br /&gt;excel.Worksheets(1).Range("A10000:A10000").Copy  //reset clipboard&lt;br /&gt;excel.Application.Quit&lt;br /&gt;excel.DisConnectObject()&lt;br /&gt;DESTROY excel&lt;/em&gt;&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-4371275319951719049?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/4371275319951719049/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=4371275319951719049' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/4371275319951719049'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/4371275319951719049'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2008/11/get-data-from-excel-via-clipboard.html' title='Get data from Excel via the clipboard'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-1668920018769542442</id><published>2008-11-24T22:55:00.000-08:00</published><updated>2008-11-25T00:27:45.214-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder Tips'/><title type='text'>Scroll 2 datawindows in sync</title><content type='html'>[ScrollVertical event of dw_1]&lt;br /&gt;dw_2.Object.datawindow.verticalscrollposition = scrollpos&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-1668920018769542442?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/1668920018769542442/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=1668920018769542442' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/1668920018769542442'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/1668920018769542442'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2008/11/scroll-2-datawindows-in-sync.html' title='Scroll 2 datawindows in sync'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-7757117654019011073</id><published>2008-11-24T22:51:00.000-08:00</published><updated>2008-11-24T22:54:58.067-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder Tips'/><title type='text'>Detect if a row is new</title><content type='html'>&lt;em&gt;&lt;strong&gt;dwitemstatus rowstatus&lt;br /&gt;IF dw.GetRow() &gt; 0 THEN&lt;br /&gt;rowstatus = dw.GetItemStatus( dw.GetRow(), 0, Primary! )&lt;br /&gt;IF rowstatus = New! OR rowstatus = NewModified! THEN&lt;br /&gt;// new row&lt;br /&gt;ELSE&lt;br /&gt;// not new&lt;br /&gt;END IF&lt;br /&gt;END IF&lt;/strong&gt;&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-7757117654019011073?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/7757117654019011073/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=7757117654019011073' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/7757117654019011073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/7757117654019011073'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2008/11/detect-if-row-is-new.html' title='Detect if a row is new'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-6284606339280419321</id><published>2008-11-24T22:49:00.000-08:00</published><updated>2008-11-24T22:51:12.817-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder Tips'/><title type='text'>Display only distinct rows</title><content type='html'>First you need to Sort() the datawindow based on the columns that need to be distinct. After you apply a Filter(), to filter out the non-distinct rows.&lt;br /&gt;&lt;strong&gt;For example, we have a datawindow with a column named &lt;em&gt;prod_id&lt;/em&gt; and we want to display only one row for each &lt;em&gt;prod_id&lt;/em&gt;.&lt;br /&gt;First we turn off the datawindow redraw function to speed up the operation&lt;/strong&gt;&lt;br /&gt;dw_1.setredraw(false)&lt;br /&gt;&lt;strong&gt;Sort the rows based on the prod_id column&lt;/strong&gt;&lt;br /&gt;dw_1.setsort("prod_id a")&lt;br /&gt;dw_1.sort()&lt;br /&gt;&lt;strong&gt;Define the appropriate Filter&lt;br /&gt;&lt;/strong&gt;dw_1.SetFilter("IsNull(prod_id[-1]) OR prod_id[-1] &lt;&gt; prod_id")&lt;br /&gt;dw_1.filter()&lt;br /&gt;&lt;strong&gt;Finally turn back on the datawindow redraw&lt;/strong&gt;&lt;br /&gt;dw_1.setredraw(true)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-6284606339280419321?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/6284606339280419321/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=6284606339280419321' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/6284606339280419321'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/6284606339280419321'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2008/11/display-only-distinct-rows.html' title='Display only distinct rows'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-8016247706311709449</id><published>2008-11-24T22:32:00.000-08:00</published><updated>2008-11-24T22:47:48.321-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder Tips'/><title type='text'>Make the ENTER key act as TAB key</title><content type='html'>First, define a user event to correspond with the pbm_dwnprocessenter event on a datawindow. Then in that event :&lt;br /&gt;&lt;em&gt;&lt;strong&gt;&lt;span style="color:#3333ff;"&gt;Send(Handle(this),256,9,Long(0,0))&lt;br /&gt;RETURN 1&lt;/span&gt;&lt;/strong&gt;&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-8016247706311709449?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/8016247706311709449/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=8016247706311709449' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/8016247706311709449'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/8016247706311709449'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2008/11/make-enter-key-act-as-tab-key.html' title='Make the ENTER key act as TAB key'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-1268800846727266584</id><published>2008-11-24T22:29:00.001-08:00</published><updated>2008-11-24T22:29:50.805-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder Tips'/><title type='text'>Memory usage with PB7 and MS SQL direct driver</title><content type='html'>The memory used on the client is very large during a connection and on disconnect it comes back down again.&lt;br /&gt;The fix is to put something in the DBParm property of the SQLCA object. Something like "Application='MyApp'" or whatever. In the development environment, edit the connection properties and make sure something is in the Application Name or Workstation Name on the Network tab.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-1268800846727266584?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/1268800846727266584/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=1268800846727266584' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/1268800846727266584'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/1268800846727266584'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2008/11/memory-usage-with-pb7-and-ms-sql-direct.html' title='Memory usage with PB7 and MS SQL direct driver'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-9134475821598004333</id><published>2008-11-24T22:25:00.000-08:00</published><updated>2008-11-24T22:27:42.775-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder Tips'/><title type='text'>Display PDF into a Window</title><content type='html'>&lt;strong&gt;Insert the "Adobe Acrobat ActiveX control" OLE control on the window.&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;Then to load a document from Powerscript&lt;br /&gt;&lt;/strong&gt;&lt;em&gt;ole_1.object.LoadFile("C:\realhowto-pdf")&lt;br /&gt;&lt;/em&gt;&lt;strong&gt;With a tool to explore the pdf.ocx, there are more functions :&lt;/strong&gt;&lt;br /&gt;&lt;em&gt;function LoadFile(none fileName: WideString): WordBool [dispid $00000002]; stdcall;&lt;br /&gt;procedure setShowToolbar(none On: WordBool) [dispid $00000003]; stdcall;&lt;br /&gt;procedure gotoFirstPage [dispid $00000004]; stdcall;&lt;br /&gt;procedure gotoLastPage [dispid $00000005]; stdcall;&lt;br /&gt;procedure gotoNextPage [dispid $00000006]; stdcall;&lt;br /&gt;procedure gotoPreviousPage [dispid $00000007]; stdcall;&lt;br /&gt;procedure setCurrentPage(none n: Integer) [dispid $00000008]; stdcall;&lt;br /&gt;procedure goForwardStack [dispid $00000009]; stdcall;&lt;br /&gt;procedure goBackwardStack [dispid $0000000A]; stdcall;&lt;br /&gt;procedure setPageMode(none pageMode: WideString) [dispid $0000000B]; stdcall;&lt;br /&gt;procedure setLayoutMode(none layoutMode: WideString) [dispid $0000000C]; stdcall;&lt;br /&gt;procedure setNamedDest(none namedDest: WideString) [dispid $0000000D]; stdcall;&lt;br /&gt;procedure Print [dispid $0000000E]; stdcall;&lt;br /&gt;procedure printWithDialog [dispid $0000000F]; stdcall;&lt;br /&gt;procedure setZoom(none percent: Single) [dispid $00000010]; stdcall;&lt;br /&gt;procedure setZoomScroll(none percent, left, top: Single) [dispid $00000011]; stdcall;&lt;br /&gt;procedure setView(none viewMode: WideString) [dispid $00000012]; stdcall;&lt;br /&gt;procedure setViewScroll(none viewMode: WideString; none offset: Single) [dispid $00000013]; stdcall;&lt;br /&gt;procedure setViewRect(none left, top, width, height: Single) [dispid $00000014]; stdcall;&lt;br /&gt;procedure printPages(none from, to: Integer) [dispid $00000015]; stdcall;&lt;br /&gt;procedure printPagesFit(none from, to: Integer; none shrinkToFit: WordBool) [dispid $00000016]; stdcall;&lt;br /&gt;procedure printAll [dispid $00000017]; stdcall;&lt;br /&gt;procedure printAllFit(none shrinkToFit: WordBool) [dispid $00000018]; stdcall;&lt;br /&gt;procedure setShowScrollbars(none On: WordBool) [dispid $00000019]; stdcall;&lt;br /&gt;procedure AboutBox [dispid $FFFFFDD8]; stdcall;&lt;br /&gt;&lt;/em&gt;&lt;strong&gt;But there is no documentation about them. You can download a free SDK (you need to register) but I believe that you need the Acrobat package to fully use it.&lt;/strong&gt;&lt;br /&gt;&lt;a href="http://partners.adobe.com/asn/acrobat/download.jsp#fullinstall"&gt;http://partners.adobe.com/asn/acrobat/download.jsp#fullinstall&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-9134475821598004333?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/9134475821598004333/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=9134475821598004333' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/9134475821598004333'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/9134475821598004333'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2008/11/display-pdf-into-window.html' title='Display PDF into a Window'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-893930192926776983</id><published>2008-11-24T22:10:00.000-08:00</published><updated>2008-11-24T22:14:31.722-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder'/><title type='text'>POWERMIGRATOR</title><content type='html'>&lt;a href="http://4.bp.blogspot.com/_49wEoqENSuk/SSuXkuScWkI/AAAAAAAAAJE/-7YqMjE3DN8/s1600-h/sample.bmp"&gt;&lt;img id="BLOGGER_PHOTO_ID_5272474445923768898" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 320px; CURSOR: hand; HEIGHT: 144px; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_49wEoqENSuk/SSuXkuScWkI/AAAAAAAAAJE/-7YqMjE3DN8/s320/sample.bmp" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;PowerMigrator™ as a service is basically a combination of tool, process &amp;amp; methodology to migrate PowerBuilder application to J2EE or .Net platform based on the requirement.&lt;br /&gt;&lt;strong&gt;PowerMigrator™ Components &lt;/strong&gt;&lt;br /&gt;PowerMigrator™ comprises of a tool (front-end GUI generator) and a Framework (Server side components and environment), which will work in conjunction or insync with each other.&lt;br /&gt;&lt;strong&gt;PowerMigrator™ - The Tool &lt;/strong&gt;&lt;br /&gt;The PowerMigrator™ is a tool, which migrates the Power Builder client/Server application to the web with a minimal of effort. This tool automatically generates GUI components with the same look and feel of the Rich client depending on the required target platform, J2EE or .Net&lt;br /&gt;The PowerMigrator™ tool environment also assists in segregating the business logic and data access logic which in turn will be deployed in the application server.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;PowerMigrator™ - The Framework &lt;/strong&gt;&lt;br /&gt;PowerMigrator™ is a framework, which is deployed in the application server and the web server respectively. This framework will work as a core technology. The migrated business logic and data access logic component will reside on top of this core and work seamlessly to coordinate between web server, application server and database server.&lt;br /&gt;The PowerMigrator™ framework also contains many pre-developed components such as report management, query generation, lookup generation, error handling, dropdown data population etc to name a few, which can be reused and customized according to the user requirement. The benefits are that it reduces the development and testing time.&lt;br /&gt;&lt;strong&gt;PowerBuilder to Web &lt;/strong&gt;&lt;br /&gt;Migrate your PowerBuilder client/ server application to the J2EE based application retaining the look and feel, and functionality of your original application. Our automated process is inexpensive with a faster time to market.&lt;br /&gt;&lt;strong&gt;PowerBuilder to .Net &lt;/strong&gt;&lt;br /&gt;If your organization's direction is in moving to the .Net Platform, we will help you, recover the investments made on PowerBuilder, by migrating your PowerBuilder application to the .Net platform.&lt;br /&gt;&lt;strong&gt;PowerBuilder to VB.Net&lt;/strong&gt;&lt;br /&gt;PowerMigrator™ for VB.Net: - The tool, migrates the Power Builder client/Server application to VB.Net application. This tool automatically generates the WinForm for GUI from PowerBuilder window and Datawindow objects with the same look and feel of the existing PowerBuilder application, offering user friendliness. The GUI code generation will drastically reduce the development time while migrating to .Net platform.&lt;br /&gt;The PM.Net (Framework), deployed in .Net server will take work in synchronization with the business components migrated from the original application.&lt;br /&gt;&lt;strong&gt;PowerBuilder to ASP.Net &lt;/strong&gt;&lt;br /&gt;PowerMigrator™ for ASP.Net: - The tool, migrates the Power Builder client/Server application to .Net application. This tool automatically generates the WebForm for GUI from PowerBuilder window and Datawindow objects with the same look and feel of the existing PowerBuilder application, offering user friendliness. The GUI code generation will drastically reduce the development time while migrating to .Net platform.&lt;br /&gt;&lt;br /&gt;The PM.Net (Framework), deployed in .Net server will take work in synchronization with the business components migrated from the original application.&lt;br /&gt;Reference : &lt;a href="http://www.ewaksoft.com/html/overview.html"&gt;http://www.ewaksoft.com/html/overview.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-893930192926776983?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/893930192926776983/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=893930192926776983' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/893930192926776983'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/893930192926776983'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2008/11/powermigrator.html' title='POWERMIGRATOR'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_49wEoqENSuk/SSuXkuScWkI/AAAAAAAAAJE/-7YqMjE3DN8/s72-c/sample.bmp' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-8214266188662098974</id><published>2008-11-24T03:39:00.000-08:00</published><updated>2008-11-24T03:44:45.083-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder'/><title type='text'>PowerBuilder Maintenance , Performance and Tuning</title><content type='html'>Today's dynamic business environment requires that businesses update their applications continuously, thereby smoothly reflecting changing business processes. Taking into account that the PowerBuilder applications in most of the organizations are still legacy applications it is all the more necessary to maintain them. Ewak’s Application Maintenance services provide the legacy system maintenance and enhancement services to relieve your programmers to stay focused on enhancing your business requirements that are more crucial to your business. Statistics have proved that the application Maintenance, takes up a lot of time and your in-house resources, leaving them with little time to focus on developing and directing new strategies for your immediate business needs.&lt;br /&gt;Outsourcing your Power Builder Application to Ewak:Ewak is a software company with core competencies in PowerBuilder over the last few years. The benefits of outsourcing your &lt;strong&gt;PowerBuilder application are&lt;/strong&gt;&lt;br /&gt;- Reduction in maintenance, support and enhancement costs&lt;br /&gt;- Faster time to market for new initiatives&lt;br /&gt;- Redeployment of your staff to other projects.&lt;br /&gt;&lt;strong&gt;Some of our maintenance offerings:&lt;/strong&gt;   &lt;br /&gt;- Maintenance      &lt;br /&gt;- Preventive and Corrective Maintenance      &lt;br /&gt;- Bug Fixing (Root Cause Analysis)      &lt;br /&gt;- Analysis and Problem Resolution      &lt;br /&gt;- 24 X 7 support     &lt;br /&gt;- Technical help desk support     &lt;br /&gt;- Code review      &lt;br /&gt; &lt;strong&gt;Production Support&lt;/strong&gt;     &lt;br /&gt;- Monitoring of Environment.     &lt;br /&gt;- Database Backups.     &lt;br /&gt;- Remove Redundant tables.     &lt;br /&gt;- Account Maintenance.&lt;br /&gt; &lt;strong&gt;Additional Services&lt;/strong&gt;     &lt;br /&gt;- Upgrade the application from lower version of PowerBuilder to Latest          Versions of PowerBuilder.     &lt;br /&gt;- We upgrade PowerBuilder version PB3.0, PB4.0, PB5.0, PB6.0, PB6.5,          PB7.0,PB8.0, PB9.0 to the latest version PB11.0&lt;br /&gt;Source : &lt;a href="http://www.ewaksoft.com/html/pbmaintenance.html"&gt;http://www.ewaksoft.com/html/pbmaintenance.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-8214266188662098974?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/8214266188662098974/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=8214266188662098974' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/8214266188662098974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/8214266188662098974'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2008/11/powerbuilder-maintenance-performance.html' title='PowerBuilder Maintenance , Performance and Tuning'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-4812378877654583409</id><published>2008-11-24T03:36:00.000-08:00</published><updated>2008-11-24T03:37:57.917-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder'/><title type='text'>Migrate your PowerBuilder Applications to WEB</title><content type='html'>Legacy applications are frequently large, monolithic and difficult to modify, and scrapping or replacing them often means reengineering an organization’s business processes (workflow) as well. Legacy migration is about retaining and extending the value of the legacy investment through migration to new platforms. Re-implementing applications on new platforms in this way can reduce operational costs, and the additional capabilities of new technologies can provide access to valuable functions such as Web Access to the client. Once migration is complete the applications can be aligned more closely to current and future business needs through the addition of new functionality to the migrated application. The goal of Ewak’s Power Migrator™ , migrating PowerBuilder™ to J2EE addresses the above business need. J2EE defines the standard for developing multi-tier enterprise applications. The J2EE platform simplifies enterprise applications by basing them on standardized, modular components, by providing a complete set of services to those components, and by handling many details of application behavior automatically. Portability and scalability are also important for long-term viability. Enterprise applications must scale from small working prototypes and test cases to complete 24 x 7, enterprise-wide services, accessible by tens, hundreds, or even thousands of clients simultaneously Ewak’s Power Migrator™ enables the legacy PowerBuilder client Server application’s business code to be ported to the middle tier as components for portability and scalability&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-4812378877654583409?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/4812378877654583409/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=4812378877654583409' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/4812378877654583409'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/4812378877654583409'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2008/11/migrate-your-powerbuilder-applications.html' title='Migrate your PowerBuilder Applications to WEB'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-2053107437320000934</id><published>2008-11-24T01:37:00.000-08:00</published><updated>2008-11-24T01:38:21.088-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder Tips'/><title type='text'>PFC Security Q and A</title><content type='html'>&lt;a name="_Toc198005479"&gt;&lt;/a&gt;&lt;strong&gt;-&lt;/strong&gt; &lt;a name="_Toc198005480"&gt;&lt;strong&gt;How do I enable the PFC security service?&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;A common place to do this the pfc_postopen event of w_frame&lt;br /&gt;gnv_app.of_SetSecurity(True) //Enable security service&lt;br /&gt;&lt;strong&gt;-&lt;/strong&gt; &lt;a name="_Toc198005482"&gt;&lt;strong&gt;How do I force security to run on a particular object&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;Argument can be Window, GraphicObject, or DataWindow variable containing the window, DataWindow, or window control for which security is applied.&lt;br /&gt;lb_rc = gnv_app.inv_security.of_SetSecurity(lw_frame)&lt;br /&gt;&lt;strong&gt;- &lt;/strong&gt;&lt;a name="_Toc198005483"&gt;&lt;strong&gt;How do I initialize the security service?&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;When initializing the security service, the last argument is used if the user was not assigned to any other group.&lt;br /&gt;inv_security.of_InitSecurity(SQLCA, ClassName(iapp_object), of_GetUserID(), “Default”) //Initialize the security service&lt;br /&gt;&lt;strong&gt;- &lt;/strong&gt;&lt;a name="_Toc198005484"&gt;&lt;strong&gt;How do I enable security on each applicable window?&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;In the window open or pfc_preopen event&lt;br /&gt;gnv_app.inv_security.of_SetSecurity(This)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-2053107437320000934?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/2053107437320000934/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=2053107437320000934' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/2053107437320000934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/2053107437320000934'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2008/11/pfc-security-q-and.html' title='PFC Security Q and A'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-266126481842796183</id><published>2008-11-24T01:35:00.000-08:00</published><updated>2008-11-24T01:36:11.222-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder Tips'/><title type='text'>Adding PFC Help to the PowerBuilder Menu</title><content type='html'>- In the development environment, right click on the menu and select “Customize”&lt;br /&gt;- Click on the Custom radio button&lt;br /&gt;- Drag a new icon to the spot on the menu&lt;br /&gt;- A modal window pops up:&lt;br /&gt;            - Command line should have the following text: (note the location of the PFC help file on your PC may be different)&lt;br /&gt;           winhlp32.exe C:\Program Files\Sybase\PB6\pbpfc60.hlp&lt;br /&gt;           - Add Item Text&lt;br /&gt;           - Add Item Microhelp&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-266126481842796183?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/266126481842796183/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=266126481842796183' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/266126481842796183'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/266126481842796183'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2008/11/adding-pfc-help-to-powerbuilder-menu.html' title='Adding PFC Help to the PowerBuilder Menu'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-84005734758319951</id><published>2008-11-24T01:25:00.001-08:00</published><updated>2008-11-24T01:25:56.229-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder Tips'/><title type='text'>Remove extra padding blanks in char column</title><content type='html'>If a char(5) column contains only "a", some drivers are returning "a     " and some "a" with the extra spaces removed.&lt;br /&gt;For example, the trimming is done with SQLServer or Access but not for DB/2 or Ingres DBMS. Padding blanks in Char column are Ok according to the ANSI SQL standard it may be easier to assume that extra right spaces are trimmed.&lt;br /&gt;You can let PB do the job for you by adding this parameter in the PBODB60.INI file (in the Sybase Shared folders) :&lt;br /&gt;PBTRIMCHARCOLUMNS='YES' in the section for your DBMS. With that setting, Pb will trim blanks in datawindows only.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-84005734758319951?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/84005734758319951/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=84005734758319951' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/84005734758319951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/84005734758319951'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2008/11/remove-extra-padding-blanks-in-char.html' title='Remove extra padding blanks in char column'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-5330905372064511421</id><published>2008-11-24T01:22:00.001-08:00</published><updated>2008-11-24T01:22:56.385-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder Tips'/><title type='text'>Allow user:password in URL</title><content type='html'>The following URL syntax is no longer supported in Internet Explorer or in Windows Explorer after you install the MS04-004 Cumulative Security Update for Internet Explorer (832894):&lt;br /&gt;http(s)://username:password@server/resource.ext&lt;br /&gt;This change in the default behavior is also implemented by security updates and service packs that were released after the 832894 security update.&lt;br /&gt;By default, this new default behavior for handling user information in HTTP or HTTPS URLs applies only to Windows Explorer and Internet Explorer. To use this new behavior in other programs that host the Web browser control, create a DWORD value named SampleApp.exe, where SampleApp.exe is the name of the executable file that runs the program. Set the DWORD value's value data to 1 in one of the following registry keys.&lt;br /&gt;For all users of the program, set the value in the following registry key:&lt;br /&gt;HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\&lt;br /&gt;Main\FeatureControl\FEATURE_HTTP_USERNAME_PASSWORD_DISABLE&lt;br /&gt;For the current user of the program only, set the value in the following registry key:&lt;br /&gt;HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\&lt;br /&gt;Main\FeatureControl\FEATURE_HTTP_USERNAME_PASSWORD_DISABLE&lt;br /&gt;To disable the new default behavior in Windows Explorer and Internet Explorer, create iexplore.exe and explorer.exe DWORD values in one of the following registry keys and set their value data to 0.&lt;br /&gt;For all users of the program, set the value in the following registry key:&lt;br /&gt;HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\&lt;br /&gt;Main\FeatureControl\FEATURE_HTTP_USERNAME_PASSWORD_DISABLE&lt;br /&gt;For the current user of the program only, set the value in the following registry key:&lt;br /&gt;HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\&lt;br /&gt;Main\FeatureControl\FEATURE_HTTP_USERNAME_PASSWORD_DISABLE&lt;br /&gt;ref &lt;a href="http://support.microsoft.com/default.aspx?scid=kb;[LN];834489"&gt;Microsoft Article ID : 834489&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-5330905372064511421?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/5330905372064511421/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=5330905372064511421' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/5330905372064511421'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/5330905372064511421'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2008/11/allow-userpassword-in-url.html' title='Allow user:password in URL'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-2031246575385172931</id><published>2008-11-24T01:11:00.000-08:00</published><updated>2008-11-24T01:20:44.299-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder Tips'/><title type='text'>Disconnect an inactive application</title><content type='html'>[application idle event]&lt;br /&gt;gnv_app.event pfc_idle()&lt;br /&gt;&lt;br /&gt;[appmanager contructor event]&lt;br /&gt;Idle(3600)  // that's 3600 seconds&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[appmanager pfc_idle event]&lt;br /&gt;IF SQLCA.of_IsConnected() THEN&lt;br /&gt;   SQLCA.of_Disconnect()&lt;br /&gt;   // HALT CLOSE the application&lt;br /&gt;   // or call the pfc_logon event&lt;br /&gt;END IF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-2031246575385172931?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/2031246575385172931/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=2031246575385172931' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/2031246575385172931'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/2031246575385172931'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2008/11/disconnect-inactive-application.html' title='Disconnect an inactive application'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-7571673881559794413</id><published>2008-11-24T01:10:00.000-08:00</published><updated>2008-11-24T01:11:10.216-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder'/><title type='text'>PowerBuilder wins Visual Studio Magazine Award Readers Choice Merit Award</title><content type='html'>Sybase announced that it has been recognized by Visual Studio Magazine with a Readers Choice Merit Award in the category of Software Design, Frameworks and Modeling Tools. The annual awards honor the best Visual Studio-focused tools in 22 categories, and the winners are selected by readers of Visual Studio Magazine. Winners are recognized in three overarching categories, including Readers Choice, Readers Choice Merit and Editors Choice. The Readers Choice Merit category, in which PowerBuilder was recognized, is reserved for products that received a high number of votes, and also demonstrated clear value to Visual Studio Magazine readers. The editors of the magazine note that the Readers Choice awards are particularly significant because they reflect the preferences of the actual users who have daily experience with a broad range of Visual Studio developer tools. The winning products were chosen because they help professional developers do their jobs more efficiently and cost-effectively.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-7571673881559794413?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/7571673881559794413/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=7571673881559794413' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/7571673881559794413'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/7571673881559794413'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2008/11/powerbuilder-wins-visual-studio.html' title='PowerBuilder wins Visual Studio Magazine Award Readers Choice Merit Award'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-3579566343759011525</id><published>2008-11-24T01:06:00.001-08:00</published><updated>2008-11-24T01:06:27.936-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Anywhere'/><title type='text'>SQL Anywhere for the BlackBerry</title><content type='html'>Sybase iAnywhere announced it will preview SQL Anywhere for the BlackBerry platform from Research In Motion at the Wireless Enterprise Symposium 2008, and deliver the product as part of the upcoming SQL Anywhere 11 release. With the release, SQL Anywhere’s proven mobile database and synchronization platform is extended to the BlackBerry platform, providing application developers the ability to develop data rich applications for the frontlines of their business.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;SQL Anywhere, with over 10 million deployed licenses and powering thousands of embedded and mobile database applications, now offers the increasing number of BlackBerry developers a full SQL relational database and data synchronization client. Developers now will be able to build powerful mobile-centric line-of-business applications such as field service, CRM, asset management, and survey applications on the BlackBerry platform, and integrate them with enterprise systems. Highly mobile industries — from healthcare to transportation/logistics — will benefit from the ability to approve work orders, check inventory and manage customer data in the field and on the go.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-3579566343759011525?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/3579566343759011525/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=3579566343759011525' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/3579566343759011525'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/3579566343759011525'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2008/11/sql-anywhere-for-blackberry.html' title='SQL Anywhere for the BlackBerry'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-802973167395574533</id><published>2008-11-24T01:03:00.000-08:00</published><updated>2008-11-24T01:05:44.836-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Anywhere'/><title type='text'>SQL Anywhere ADO.Net 3.5 provider</title><content type='html'>Sybase iAnywhere continues its long-standing commitment and early release of .NET enhancements, announcing delivery on its promise to support ADO.NET Entity Framework and LINQ to Entities. .NET developers can download the SQL Anywhere(R) Entity Framework and ADO.NET 3.5 provider by registering for the SQL Anywhere 11 beta.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;SQL Anywhere, with over 10 million deployed licenses and powering thousands of embedded and mobile database applications, is enabling .NET application developers to remove complexity and increase productivity by using .NET objects and IntelliSense. Developers can use the Entity Data Model Designer to define a stable, secure object database layer for their Windows and ASP.NET applications, avoiding SQL statements, complex joins, and parameter binding.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-802973167395574533?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/802973167395574533/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=802973167395574533' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/802973167395574533'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/802973167395574533'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2008/11/sql-anywhere-adonet-35-provider.html' title='SQL Anywhere ADO.Net 3.5 provider'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-60522161649208215</id><published>2008-11-24T00:54:00.000-08:00</published><updated>2008-11-24T01:02:10.249-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='News'/><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder'/><title type='text'>Speed in Development. Speed in Deployment. Speed in Performance.</title><content type='html'>&lt;a href="http://4.bp.blogspot.com/_49wEoqENSuk/SSpthqD9FnI/AAAAAAAAAH0/Nv9F9MTGU3Y/s1600-h/%257b9cdd546a-6304-474e-8b16-e203434c8999%257d_pb11_header_770x160.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 66px;" src="http://4.bp.blogspot.com/_49wEoqENSuk/SSpthqD9FnI/AAAAAAAAAH0/Nv9F9MTGU3Y/s320/%257b9cdd546a-6304-474e-8b16-e203434c8999%257d_pb11_header_770x160.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5272146738784573042" /&gt;&lt;/a&gt;&lt;br /&gt;PowerBuilder 11.2 will be available shortly and we are holding a Web seminar with John Strano to highlight the key features of this release. During this Web seminar, John will show you the new capabilities found in PowerBuilder 11.2 that bring increased performance to your mission-critical applications, including using AJAX and .NET development to EAServer. In addition, John will show you a range of as well as database, UI, and usability enhancements.&lt;br /&gt;&lt;strong&gt;&lt;br /&gt;The PowerBuilder 11.2 webcast will cover:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Certificate Store Support for Smart Client-published Applications &lt;br /&gt;Usability and UI Enhancements &lt;br /&gt;Database Connectivity Enhancements &lt;br /&gt;Enabling the DEBUG Condition for ORCA and OrcaScript &lt;br /&gt;Application Pools for Web Forms in IIS7 &lt;br /&gt;EAServer Support for .NET-deployed PowerBuilder Clients &lt;br /&gt;AJAX Functionality for WebForm-Deployed Applications&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-60522161649208215?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/60522161649208215/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=60522161649208215' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/60522161649208215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/60522161649208215'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2008/11/speed-in-development-speed-in.html' title='Speed in Development. Speed in Deployment. Speed in Performance.'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_49wEoqENSuk/SSpthqD9FnI/AAAAAAAAAH0/Nv9F9MTGU3Y/s72-c/%257b9cdd546a-6304-474e-8b16-e203434c8999%257d_pb11_header_770x160.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-9093138895425449845</id><published>2008-11-17T01:33:00.000-08:00</published><updated>2008-11-17T01:38:57.529-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder'/><title type='text'>Sybase PowerBuilder Takes Honors in Mobile Star Awards</title><content type='html'>Sybase took honors in several categories of the Mobile Star Awards, including a Gold in the Application Development category for PowerBuilder.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Application Development&lt;/strong&gt;&lt;br /&gt;Gold Star - Sybase PowerBuilder&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Database&lt;/strong&gt;&lt;br /&gt;Gold Star - Sybase SQL Anywhere&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Email&lt;/strong&gt;&lt;br /&gt;Silver Star - Sybase iAnywhere - Mobile Office&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Middleware&lt;/strong&gt;&lt;br /&gt;Gold Star - Sybase iAnywhere Suite&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-9093138895425449845?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/9093138895425449845/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=9093138895425449845' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/9093138895425449845'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/9093138895425449845'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2008/11/sybase-powerbuilder-takes-honors-in.html' title='Sybase PowerBuilder Takes Honors in Mobile Star Awards'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-5411653729076905700</id><published>2008-11-17T01:30:00.000-08:00</published><updated>2008-11-17T01:32:11.341-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder'/><title type='text'>PowerBuilder in a .NET World seminars in Australia</title><content type='html'>PowerBuilder in a .NEW World seminars will be held Friday November 14th in Sydney and Thursday November 20th in Melbourne. &lt;br /&gt;&lt;br /&gt;Also, special Moving to PowerBuilder 11.5 Masterclasses will be held in Sydney and Melbourne. &lt;br /&gt;&lt;strong&gt;PowerBuilder Advanced Development Tour :&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;PowerBuilder 11.5 just came out and Sybase will share how the new features and capabilities will help accelerate your development, bring aesthetic enhancements to your PowerBuilder applications, and simplify .NET development at the PowerBuilder Advanced Development Tour. So far the dates include:&lt;br /&gt;&lt;br /&gt;Washington DC: November 13th 2008 at the Hyatt Regency&lt;br /&gt;Boston: November 19th at the Burlington Marriott&lt;br /&gt;New York City: November 17th 2008 at the Grand Hyatt&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-5411653729076905700?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/5411653729076905700/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=5411653729076905700' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/5411653729076905700'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/5411653729076905700'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2008/11/powerbuilder-in-net-world-seminars-in.html' title='PowerBuilder in a .NET World seminars in Australia'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-8209479354795009217</id><published>2008-11-17T01:28:00.000-08:00</published><updated>2008-11-17T01:29:36.016-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder'/><title type='text'>PowerBuilder Accelerated Development Tour</title><content type='html'>Sybase hitting the road to bring the latest in PowerBuilder news, code, and goodies to you. &lt;br /&gt;&lt;br /&gt;PowerBuilder 11.5 just came out and we want to share how the new features and capabilities will help accelerate your development, bring aesthetic enhancements to your PowerBuilder applications, and simplify .NET development. We are also working fast and furiously on delivering PowerBuilder 12, which blend the Visual Studio Isolated Shell with the prowess of DataWindow and PowerBuilder technology. Fresh from the labs, we will give you a sneak peek of arguably the biggest news for PowerBuilder since its inception: PowerBuilder 12. &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;Detailed Overview of Topics &lt;br /&gt;&lt;br /&gt;PowerBuilder 11.5 &lt;br /&gt;The release of PowerBuilder 11.5 brings a multitude of new capabilities and features that will help accelerate your development, bring aesthetic enhancements to your PowerBuilder applications, and simplify .NET development. Topics covered will include DataWindow® innovations, Native ASE 15, SQL Server® 2008, and Oracle 11g drivers, .NET enhancements: Strong Named Assemblies and IIS7 Support, Security features such as.NET CAS and FDCC, and new premiums included with PB Enterprise: PocketBuilder™ and PowerBuilder Application Server Plug-in. &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;Sneak Peek at PowerBuilder 12&lt;br /&gt;We're going to cover the new exciting and revolutionary features being built into PowerBuilder 12 including: &lt;br /&gt;&lt;br /&gt;Visual Studio Isolated Shell &lt;br /&gt;Front to back WPF &lt;br /&gt;Fully Managed Code @ Runtime &lt;br /&gt;WPF DataWindow &lt;br /&gt;WCF Support &lt;br /&gt;Latest in Web Services technologies &lt;br /&gt;Oracle, Sybase, Informix, and SQL Server Support&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-8209479354795009217?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/8209479354795009217/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=8209479354795009217' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/8209479354795009217'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/8209479354795009217'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2008/11/powerbuilder-accelerated-development.html' title='PowerBuilder Accelerated Development Tour'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-6483200843478780578</id><published>2008-10-22T23:23:00.000-07:00</published><updated>2008-10-22T23:27:40.881-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='News'/><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder'/><title type='text'>Novalys PowerBuilder Survey 2008: First results available!</title><content type='html'>&lt;strong&gt;Dear PowerBuilder users,&lt;/strong&gt;&lt;br /&gt;As every year we hold a worldwide survey about PowerBuilder.&lt;br /&gt;&lt;a title="http://tracking.nesox.com/tracking/?u=" href="http://tracking.nesox.com/tracking/?u=murali_rks@mindtree.com&amp;amp;msg=8DAD4B39.90F3.409B.A478.C395749B53E7.0007.20081022.DMLROJNDHAYHWIPC@novalys.org&amp;amp;url=http://www.visual%2Dexpert.com/EN/survey%2Dpb%2Dstored%2Dprocedure%2Dsybase%2Dmssql/survey%2Dpb%2D2008%2Dus%2Dsource%5Fnov162surv1.html" target="_blank" msg="8DAD4B39.90F3.409B.A478.C395749B53E7.0007.20081022.DMLROJNDHAYHWIPC@novalys.org&amp;amp;url="&gt;Take the survey now&lt;/a&gt; and see the 2007 results and a preview of 2008 answers!Last year's results show:- How PowerBuilder projects have evolved between 2001 and 2007- How large projects differ from small ones in terms of architecture- How .NET is now beatting with Java on the field of New technolgies- How many PB projects are also developing .NET applications&lt;br /&gt;Let's keep up with the evolution of PowerBuilder!&lt;br /&gt;Do not hesitate to forward this email to your colleagues concerned with PB.No doubt they will be interested!&lt;br /&gt;Sandra LEVYNovalys - SYBASE Partner since 1995&lt;a title="http://tracking.nesox.com/tracking/?u=" msg="8DAD4B39.90F3.409B.A478.C395749B53E7.0007.20081022.DMLROJNDHAYHWIPC@novalys.org&amp;amp;url=" style="COLOR: #333333" href="http://tracking.nesox.com/tracking/?u=murali_rks@mindtree.com&amp;amp;msg=8DAD4B39.90F3.409B.A478.C395749B53E7.0007.20081022.DMLROJNDHAYHWIPC@novalys.org&amp;amp;url=http://www.visual%2Dexpert.com/EN%2Dsource%5Fnov162surv2.html" target="_blank"&gt;http://www.visual-expert.com&lt;/a&gt;&lt;br /&gt;&lt;a title="http://tracking.nesox.com/tracking/?u=" style="COLOR: #333333" href="http://tracking.nesox.com/tracking/?u=murali_rks@mindtree.com&amp;amp;msg=8DAD4B39.90F3.409B.A478.C395749B53E7.0007.20081022.DMLROJNDHAYHWIPC@novalys.org&amp;amp;url=http://www.visual%2Dexpert.com/EN%2Dsource%5Fnov162surv2.html" target="_blank" msg="8DAD4B39.90F3.409B.A478.C395749B53E7.0007.20081022.DMLROJNDHAYHWIPC@novalys.org&amp;amp;url="&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-6483200843478780578?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/6483200843478780578/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=6483200843478780578' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/6483200843478780578'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/6483200843478780578'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2008/10/novalys-powerbuilder-survey-2008-first.html' title='Novalys PowerBuilder Survey 2008: First results available!'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-3663471258323055550</id><published>2008-10-22T01:27:00.000-07:00</published><updated>2008-10-22T01:37:41.584-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder'/><title type='text'>Appeon 6.0 for Powerbuilder</title><content type='html'>&lt;a href="http://4.bp.blogspot.com/_49wEoqENSuk/SP7mS4KYz4I/AAAAAAAAAEU/7ueggGzcxTk/s1600-h/ap.bmp"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_49wEoqENSuk/SP7mS4KYz4I/AAAAAAAAAEU/7ueggGzcxTk/s320/ap.bmp" border="0" alt=""id="BLOGGER_PHOTO_ID_5259894626803306370" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;strong&gt;Appeon 6.0 for PowerBuilder is the most powerful and flexible version to date. &lt;/strong&gt;&lt;br /&gt;Appeon 6.0 for PowerBuilder is the most powerful and flexible version to date. Now it enables you to develop and deploy extremely complicated PowerBuilder applications to both Java and .NET platforms. There is no easier or faster approach to develop robust user-friendly business applications.&lt;br /&gt;&lt;br /&gt;New features in Appeon 6.0 include:&lt;br /&gt;&lt;br /&gt;- Build .NET-based Web Applications&lt;br /&gt;- Deploy Java-based Web Applications to Linux&lt;br /&gt;- Deploy to Java &amp;amp; .NET With a Single Application Profile&lt;br /&gt;- Support Web-enabling All DataWindow Presentation Styles (except OLE)&lt;br /&gt;- Support Web-enabling All UI Controls&lt;br /&gt;- And many other enhancements on functionality and performance&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;This new release is compatible with:&lt;/strong&gt;&lt;br /&gt;- PowerBuilder 11.1 or previous versions&lt;br /&gt;- All Popular Operating Systems, Application Servers, and Databases&lt;br /&gt;&lt;br /&gt;Visit Appeon Website (&lt;a href="http://www.appeon.com/"&gt;http://www.appeon.com/&lt;/a&gt;) or contact local Appeon resellers to get a free trial today!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-3663471258323055550?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/3663471258323055550/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=3663471258323055550' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/3663471258323055550'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/3663471258323055550'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2008/10/appeon-60-for-powerbuilder.html' title='Appeon 6.0 for Powerbuilder'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_49wEoqENSuk/SP7mS4KYz4I/AAAAAAAAAEU/7ueggGzcxTk/s72-c/ap.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-284289070312599600</id><published>2008-10-22T01:16:00.000-07:00</published><updated>2008-10-22T01:23:30.277-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder'/><title type='text'>Appeon 5.1 for PowerBuilder</title><content type='html'>&lt;a href="http://1.bp.blogspot.com/_49wEoqENSuk/SP7i9RuD2JI/AAAAAAAAAD8/BFfM8jocqXA/s1600-h/logo_Appeon.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_49wEoqENSuk/SP7i9RuD2JI/AAAAAAAAAD8/BFfM8jocqXA/s320/logo_Appeon.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5259890957171808402" /&gt;&lt;/a&gt;&lt;br /&gt;Appeon transforms PowerBuilder enterprises to the Java or .NET Web platform. No need to retool your PowerBuilder development team and force them to work with less productive tools. No need to throw away man-years of investments in your existing PowerBuilder applications. No need to retrain your end-users to work with a foreign and inferior user interface. From the enterprise developer to end-users, everyone pumps out the superior 4GL productivity that is hallmark of PowerBuilder. &lt;br /&gt; &lt;br /&gt;  The Appeon Approach  &lt;br /&gt; Appeon for PowerBuilder enables developers to rapidly transform PowerBuilder Client/Server applications into Web applications that deployment to the Java platform. A complete set of PowerBuilder-equivalent visual objects and controls are available for replicating the rich Client/Server-style UI on the Web.&lt;br /&gt;&lt;br /&gt;Thousands of PowerBuilder properties, functions, and events can be used to make the application come alive. Support for event-driven and object-oriented programming models, including support for inheritance, encapsulation and polymorphism, further boosts Web development productivity. Using Appeon for PowerBuilder, enterprises can maximize the potential of their PowerBuilder source code and greatly decrease the development cycle and resources needed to build and maintain the enterprises' Web applications. &lt;br /&gt;&lt;br /&gt; &lt;strong&gt;For Independent Software Vendors (ISVs) &lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;- Transform your existing Client/Server product portfolio into true n-tier Web applications in just a few months &lt;br /&gt;- Enhance your existing product portfolio with new Web products in just weeks or months &lt;br /&gt;- Differentiate your offering by offering the richest and most productive Web application UI &lt;br /&gt;- Standardize on one code base for both Client/Server and Web &lt;br /&gt;- Integrate your Web products with other desktop and Client/Server applications seamlessly &lt;br /&gt;- Communicate with desktop hardware and peripherals unlike typical Web applications &lt;br /&gt;- Reduce your customers' application deployment/maintenance costs and headaches&lt;br /&gt; &lt;br /&gt;&lt;strong&gt; For PowerBuilder Enterprises &lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;- Embrace the .NET and Java faster than any other option &lt;br /&gt;- Extend the life of your mission critical applications for years to come &lt;br /&gt;- Eliminate developer retooling costs, downtime, and the on-going productivity loss of using less productive development tools &lt;br /&gt;- Eliminate user retraining costs, downtime, and the on-going productivity loss of moving to inferior page-based Web application interfaces &lt;br /&gt;- Simplify IT complexity and reduce deployment costs &lt;br /&gt;- Minimize the risk of project delay, budget overruns, or worse &lt;br /&gt;&lt;br /&gt;&lt;strong&gt; For Software Developers &lt;/strong&gt;&lt;br /&gt;- Instantly begin embracing the .NET and Java without any learning curve &lt;br /&gt;- Enjoy the unbeatable productivity of PowerBuilder and rich Client/Server UI in building Web applications &lt;br /&gt;- Do the work of at least 4 typical Web developers or just work 2 hours a day and still look like a star &lt;br /&gt;- Focus on building application business logic rather than wasting time on mundane and technical details &lt;br /&gt;- Deploy your existing PowerBuilder projects to the .NET and Java platform &lt;br /&gt;- Take advantage of powerful Web technologies including Web Services, XML and JMS&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-284289070312599600?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/284289070312599600/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=284289070312599600' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/284289070312599600'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/284289070312599600'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2008/10/appeon-51-for-powerbuilder.html' title='Appeon 5.1 for PowerBuilder'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_49wEoqENSuk/SP7i9RuD2JI/AAAAAAAAAD8/BFfM8jocqXA/s72-c/logo_Appeon.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-1805479028551934037</id><published>2008-10-22T00:00:00.000-07:00</published><updated>2008-10-22T00:11:43.167-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder'/><title type='text'>REX (Runtime Explorer ) for Powerbuilder</title><content type='html'>Automatic Source Change from Runtime!&lt;br /&gt;&lt;br /&gt;Your applications evolve continuously. Now you can explore and change them at runtime, leaving it to Rex to update your source code... safely and automatically!&lt;br /&gt;&lt;br /&gt;Move/resize controls, change properties/object scripts/DW SQL state-ments... and see the effects immediately at runtime. After appropriate review, just confirm and, like magic, the relevant source code will be changed for you. You can even add new code in the same way. No more frustrating iterations between designtime and runtime. Get it right first time!&lt;br /&gt;&lt;br /&gt;Standard plug-ins to explore and fix problems in the development cycle: activate ObjectX, PropertyX, Layout.&lt;br /&gt;Other plug-ins to trace bugs, even without access to the source code, by analyzing the content of DataWindows and DataStores: use BufferX, DWExport, DWSnapShot.&lt;br /&gt;Reporting plug-ins (Put a Note, Img Capture) to identify the exact library, control/ DWO, for precisely commenting on specific PB objects.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Need more?&lt;/strong&gt; New Rex plug-ins are being released all the time, but you can also write your own and benefit directly from Enable's new automatic source change technology.&lt;br /&gt;&lt;br /&gt;Looking beyond development work, Runtime Explorer can be licensed for distribution royalty-free together with your live applications (subject to access controls), in order to expedite technical support activities.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;More about Rex&lt;/strong&gt;&lt;br /&gt;Enable Runtime Explorer (or simply Rex) is a runtime component that helps developers with their development, debugging and technical support work. The introduction of our new Automatic Source Change technology means that those frustrating iterations between runtime and designtime are now ancient history! Read the article in PBDJ!&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Enable Source Change&lt;/strong&gt;&lt;br /&gt;Security and accuracy are a priority for automatic source changes. Each code change is a documented ESC transaction, so it can be undone and repeated. Before each modification, the relevant libraries are automatically backed up by ESC. SCC systems are also supported, with automatic check-out if desired.&lt;br /&gt;&lt;br /&gt;ESC’s sophisticated parser easily identifies the code to be changed, checking the consistency of old values to avoid possible conflicts with concurrent developers. In addition, ESC overcomes tolerance issues to ensure the accuracy of move/resize coordinate changes.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;New Development Cycle&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Working in runtime, you often find problems with the business logic, properties, SQL statements, the user interface etc. Before now, this marked the start of the trial-and-error cycle:&lt;br /&gt;&lt;br /&gt;- observe the unsatisfactory result&lt;br /&gt;- exit, abandoning the current state&lt;br /&gt;- make best-effort code changes&lt;br /&gt;- run the application, log in and re-open the necessary windows (thus restoring the state of the application)&lt;br /&gt;- repeat until happy (…or exhausted!)&lt;br /&gt;&lt;br /&gt;Rex eliminates this trial-and-error effort, improving productivity and accuracy. Now you see the problem, fix it with Rex, review your changes and then let ESC apply them automatically to your source code. It really is that simple! Click here to see the rolling demo.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;An example using BufferX&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;You’re working on your application and, inevitably, you find something that doesn’t ring true. Is it a bug? Maybe the data? Wouldn’t it be good to find out what is going on immediately, without having to exit and return to design mode? Now you can!&lt;br /&gt;&lt;br /&gt;Take this example: your graph looks odd and you want to understand the data behind it. You need BufferX…&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_49wEoqENSuk/SP7QT0Wc11I/AAAAAAAAADc/ME9UHfZ7Ec8/s1600-h/rex_sch1.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5259870453704218450" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_49wEoqENSuk/SP7QT0Wc11I/AAAAAAAAADc/ME9UHfZ7Ec8/s320/rex_sch1.gif" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Graph with Rex already activated&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Here is the data held in the primary buffer:&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_49wEoqENSuk/SP7QiNExgzI/AAAAAAAAADk/waW2erABg_E/s1600-h/rex_sch2.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5259870700859130674" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_49wEoqENSuk/SP7QiNExgzI/AAAAAAAAADk/waW2erABg_E/s320/rex_sch2.gif" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;BufferX takes a look inside the primary buffer&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Now it’s clear! Philip Chin has transferred from Sales to Marketing (with a raise), but the database hasn’t been updated. We can fix this easily… by updating the primary buffer in runtime!&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_49wEoqENSuk/SP7QzgJNhzI/AAAAAAAAADs/YLm4o-3cD64/s1600-h/rex_sch3.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5259870998035793714" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_49wEoqENSuk/SP7QzgJNhzI/AAAAAAAAADs/YLm4o-3cD64/s320/rex_sch3.gif" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The changes made to the primary buffer are highlighted&lt;/strong&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_49wEoqENSuk/SP7RGW8fJuI/AAAAAAAAAD0/lMiVCcS1Uis/s1600-h/rex_sch4.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5259871321984018146" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_49wEoqENSuk/SP7RGW8fJuI/AAAAAAAAAD0/lMiVCcS1Uis/s320/rex_sch4.gif" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Updated graph and summary of BufferX activity&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;That’s better! But just imagine the process you would have gone through to make and check this simple change without using BufferX… Rex offers many opportunities of this kind to save you time and effort.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Users&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Who uses Enable Runtime Explorer?&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Developers:&lt;/strong&gt; understand the nature and structure of windows; eliminate the trial-and-error cycle, simulating the effects before automatically changing the source code; find and deal with bugs faster&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Trainers:&lt;/strong&gt; demonstrate the behavior of properties; show how status/buffers work; show the architecture of windows and methods, before going into detail&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Test Engineers:&lt;/strong&gt; understand the nature of problems; document issues more effectively and precisely&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Technical Support:&lt;/strong&gt; gather information about issues directly when they arise; deal with critical situations and accurately document them for further analysis by the development team.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-1805479028551934037?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/1805479028551934037/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=1805479028551934037' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/1805479028551934037'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/1805479028551934037'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2008/10/rex-runtime-explorer-for-powerbuilder.html' title='REX (Runtime Explorer ) for Powerbuilder'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_49wEoqENSuk/SP7QT0Wc11I/AAAAAAAAADc/ME9UHfZ7Ec8/s72-c/rex_sch1.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-4464880315710835481</id><published>2008-10-21T23:55:00.000-07:00</published><updated>2008-10-21T23:58:47.515-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder'/><title type='text'>Enable for PB</title><content type='html'>&lt;a href="http://1.bp.blogspot.com/_49wEoqENSuk/SP7OypXKtXI/AAAAAAAAADU/ZoVw0IuqUmM/s1600-h/logo_enable.gif"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_49wEoqENSuk/SP7OypXKtXI/AAAAAAAAADU/ZoVw0IuqUmM/s320/logo_enable.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5259868784307123570" /&gt;&lt;/a&gt;&lt;br /&gt;Enable is a tool used by PowerBuilder developers to make their applications multilingual.&lt;br /&gt;&lt;br /&gt;Using Enable, developers can usually upgrade a simple, monolingual PowerBuilder program with just a few changes to the original code. Excluding translation time, your software can become ready for distribution, with its own multilingual database (.ena) and the royalty-free Enable engine (various .dll and .pbd files), in a matter of hours!&lt;br /&gt;&lt;br /&gt;Adding new languages or altering translated text is easy. Just update the multilingual database: no further changes are needed to the source or executable codes.&lt;br /&gt;&lt;br /&gt;Enable provides a comprehensive solution for the localization of PowerBuilder applications, covering all properties of all controls, as well as every type and style of DataWindow and MessageBox. This means that even the most complex software can be localised: nested tabfolders, parametric messages and calculated fields? No problem!&lt;br /&gt;&lt;br /&gt;Reports can be translated and printed in several languages simultaneously, even without changing the user interface.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Benefits :&lt;/strong&gt;&lt;br /&gt; Allow end-users to work in their preferred language (multilingual interface) &lt;br /&gt; Reduce development time to market and cost of localising applications (no multiple builds,&lt;br /&gt; elimination of functional quality assurance), managing the whole process directly &lt;br /&gt; Deploy in several languages simultaneously, add languages at any time &lt;br /&gt; Streamline maintenance (single source code) and distribution (single executable code) &lt;br /&gt; Expand commercial markets for existing applications quickly and easily &lt;br /&gt; Extend life-cycle of existing applications &lt;br /&gt; Support national ethnic groups / regional language differences &lt;br /&gt; Enter exotic / niche markets with minimum investment &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Features :&lt;/strong&gt;&lt;br /&gt; Dynamic change of displayed language: high-performance engine, full developer control &lt;br /&gt; Simple, fully-integrated enabling of source code (once only, low profile) &lt;br /&gt; Change of language even after window is opened (both displayed and non-displayed elements,&lt;br /&gt; e.g. text files) &lt;br /&gt; Developer can decide which parts / controls should be translated &lt;br /&gt; Supports all versions of PowerBuilder &lt;br /&gt; Prints in desired language, without resetting current language &lt;br /&gt; Supports all character sets &lt;br /&gt; Stand-alone tools for assisted translations (merges work of multiple translators) &lt;br /&gt; Modifies translations / adds languages without rebuilding enabled applications &lt;br /&gt; Optimised language database protected from unauthorised changes &lt;br /&gt; Simple distribution: just install libraries and language database (no DBMS necessary) &lt;br /&gt; Developer license: multi-project, no runtime royalties &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Use Cases :&lt;/strong&gt;&lt;br /&gt; Work in preferred language: multilingual employees, international branches, personnel visiting &lt;br /&gt; from abroad &lt;br /&gt; Print invoices (as well as fiscal and other documentation) in the language of the client / supplier &lt;br /&gt; Change the current language instantly and temporarily to demonstrate the application and its &lt;br /&gt; results without interrupting the user session: inspections (audit, quality), external consultants,&lt;br /&gt; visits from suppliers/clients, technical / user support &lt;br /&gt; Generate technical logs in the language of support personnel &lt;br /&gt; Send translated messages to mobile devices (mobile phones, portable terminals)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-4464880315710835481?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/4464880315710835481/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=4464880315710835481' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/4464880315710835481'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/4464880315710835481'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2008/10/enable-for-pb.html' title='Enable for PB'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_49wEoqENSuk/SP7OypXKtXI/AAAAAAAAADU/ZoVw0IuqUmM/s72-c/logo_enable.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-8016927841981648902</id><published>2008-10-21T23:30:00.000-07:00</published><updated>2008-10-21T23:51:47.582-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder'/><title type='text'>Visual Guard for PowerBuilder</title><content type='html'>&lt;div&gt;&lt;strong&gt;What is Visual Guard?&lt;/strong&gt;&lt;br /&gt;Visual Guard is a tool designed for managing user profiles and permissions in PowerBuilder applications. With Visual Guard, you determine what each user can do, see and modify.Administrative tools simplify the daily management of users and their permissions.No need to change the application code: Visual guard dynamically changes the application’s behavior according to the user profile.Visual Guard supports PowerBuilder up to version 11, as well as PowerBuilder code migrated to .NET applications (Winforms and ASP.NET Webforms).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_49wEoqENSuk/SP7MwlFL6hI/AAAAAAAAADE/AKPlBPnBDMU/s1600-h/dotnet-authentication.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_49wEoqENSuk/SP7MwlFL6hI/AAAAAAAAADE/AKPlBPnBDMU/s320/dotnet-authentication.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5259866549774969362" /&gt;&lt;/a&gt;&lt;br /&gt;Authentication in RBAC consists of verifying the identity of the user through a two step process:&lt;br /&gt;• Identification: Stating who you are;&lt;br /&gt;• Authentication: Proving who you are.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Two types of needs:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;• You may need to create a list of user accounts/passwords from scratch.&lt;br /&gt;• You may already have Windows accounts stored in Active Directory and need to re-use it at application level.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The solution:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Visual Guard PowerBuilder supports login/passwords authentication.&lt;br /&gt;A user account declared in Visual Guard is available for all your PowerBuilder applications.&lt;br /&gt;&lt;br /&gt;It supports the following authentication modes:&lt;br /&gt;• Visual Guard Accounts (created and managed by Visual Guard)&lt;br /&gt;• Windows Accounts (local account or Active Directory account) (coming soon)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;- Windows accounts/Active Directory&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;If you use the Windows authentication mechanism, passwords are created, stored and administered in Active Directory. You will be able to re use Windows authentication mechanism to identify users of your applications, and then assign Visual Guard profiles and permissions to this user.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;- Single sign-on&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;If you use Active Directory to manage user accounts you may want to implement a single sign-on process: once a user is logged on in a Windows session, any application opens without asking for further credentials.&lt;br /&gt;Visual Guard supports Single Sign-On configurations for Windows accounts.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;- Visual Guard PowerBuilder Accounts&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Visual Guard PowerBuilder has its own membership provider to manage user accounts and passwords.&lt;br /&gt;Credentials are stored in the Visual Guard repository.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_49wEoqENSuk/SP7M5MwFR-I/AAAAAAAAADM/Mgzt1hoAU9s/s1600-h/dotnet-authorization.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_49wEoqENSuk/SP7M5MwFR-I/AAAAAAAAADM/Mgzt1hoAU9s/s320/dotnet-authorization.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5259866697862825954" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;What type of permission can Visual Guard manage?&lt;br /&gt;How Visual Guard PowerBuilder does defines permissions? &lt;br /&gt;&lt;br /&gt;Permissions define what a user can do in an application: &lt;br /&gt;Basically, you define what the user is allowed to see, do and modify in your applications based on his profile. &lt;br /&gt;Specific words are used to define permissions: authorization, Rights, Restrictions, Privileges…&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;There are two ways of defining permissions: &lt;/strong&gt;&lt;br /&gt;&lt;br /&gt; The most secure way is to forbid everything by default, and then grant permissions to allow possibilities. &lt;br /&gt;This way, if you forget to define a permission, the user won’t be able to do something he should, rather than accidentally do something he shouldn’t.&lt;br /&gt;&lt;br /&gt; The faster way is to allow everything by default, and then you assign restrictions to forbid some actions. &lt;br /&gt;This way is faster because typically there are fewer restrictions than permissions.&lt;br /&gt;But as a result you usually end up with a role based access solution that is complex, costly to maintain and difficult to update.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt; The need:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;By default, an application includes code that defines the permissions to run it. But this means that each time you define a permission, you need to go through the entire development process again (specification, coding, testing, deployment, etc).&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;This is a sharp issue because: &lt;/strong&gt;&lt;br /&gt; Applications typically are updated only every 2 or 3 months, whereas permissions can require much more frequent updates.&lt;br /&gt; Bridging the gap between the functional requirements and permission’s technical implications can be very time consuming.&lt;br /&gt; Complex permissions are often identified only when the application is in production, requiring an immediate fix.&lt;br /&gt;&lt;br /&gt; &lt;strong&gt;The solution: Modify dynamically your applications&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;With Visual Guard PowerBuilder, you do not write code in the application to define permissions. Your code is dynamically modified in runtime.&lt;br /&gt; You can create or modify permissions without going through the entire development cycle of coding, testing, deploying, waiting for feedback…&lt;br /&gt; You can define permissions any time, even when the application is in production. They are effective immediately.&lt;br /&gt;&lt;br /&gt; &lt;strong&gt;What types of permission can Visual Guard manage?&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;There is no limitation on what permission you can implement with Visual Guard. Any change you want to make in your PowerBuilder application and any restriction are possible. &lt;br /&gt;F&lt;strong&gt;or instance, you can: &lt;/strong&gt;&lt;br /&gt; Hide or disable fields, menu options, tabs, controls…&lt;br /&gt; Switch a Window into “read only”&lt;br /&gt; Filter data in a list &lt;br /&gt; Modify business rules…&lt;br /&gt;&lt;br /&gt;&lt;strong&gt; How Visual Guard PowerBuilder does defines permissions&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Visual Guard can list all the objects and their properties. The developer uses the Developer Workshop to identify the object related to the permission and assign a new value to one of its properties (like “visible” = “false” if you want to hide a control). This permission definition is then stored in the Visual Guard repository. The application code remains unchanged. Visual Guard modifies the application at runtime according to this permission. &lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-8016927841981648902?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/8016927841981648902/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=8016927841981648902' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/8016927841981648902'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/8016927841981648902'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2008/10/visual-guard-for-powerbuilder.html' title='Visual Guard for PowerBuilder'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_49wEoqENSuk/SP7MwlFL6hI/AAAAAAAAADE/AKPlBPnBDMU/s72-c/dotnet-authentication.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-8749016843267980608</id><published>2008-10-21T23:26:00.000-07:00</published><updated>2008-10-21T23:29:26.638-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder'/><title type='text'>How to Combine Authentication and Permissions?</title><content type='html'>• Do you need to verify the identity of end users and control their access to your applications?• Do you need to Manage Authentication and Permissions in a single solution?• Are you looking for a ready-to-use solution to manage the security of your applications?&lt;br /&gt;If so, discover Visual Guard and &lt;a title="http://tracking.nesox.com/tracking/?u=" href="http://tracking.nesox.com/tracking/?u=dhiman_kumar@mindtree.com&amp;amp;msg=249BE56E.9F92.4838.BF36.20ADC70332AE.0006.20081020.FKLDDUIVYNCUWCQH@novalys.org&amp;amp;url=http://www.visual%2Dguard.com/EN/powerbuilder%2Dprofile%2Dsecurity/PB%2Dsource%5Fnov158vg1.html" target="_blank" msg="249BE56E.9F92.4838.BF36.20ADC70332AE.0006.20081020.FKLDDUIVYNCUWCQH@novalys.org&amp;amp;url="&gt;save months of complex developments!&lt;/a&gt;Visual Guard is an all-in-one solution to combine end-users authentication and permissions. Authentication: you can verify user's Identify with &lt;a title="http://tracking.nesox.com/tracking/?u=" href="http://tracking.nesox.com/tracking/?u=dhiman_kumar@mindtree.com&amp;amp;msg=249BE56E.9F92.4838.BF36.20ADC70332AE.0006.20081020.FKLDDUIVYNCUWCQH@novalys.org&amp;amp;url=http://www.visual%2Dguard.com/EN/powerbuilder%2Dprofile%2Dsecurity/identity%2Dmanagement%2Daccess%2Dcontrol%2Dauthentication%2Dtool/active%2Ddirectory%2Dsingle%2Dsign%2Don%2Dauthentication%2Dsource%5Fnov158vg2.html" target="_blank" msg="249BE56E.9F92.4838.BF36.20ADC70332AE.0006.20081020.FKLDDUIVYNCUWCQH@novalys.org&amp;amp;url="&gt;Active Directory accounts&lt;/a&gt; (Single Sign-On available) or manage username &amp;amp; password accounts.Permissions: Define roles and permissions without coding.Audit: Generate automated reports about the security of the application.&lt;br /&gt;Integration is fast and easy: it only takes a few lines of code.Administration tools let you delegate Users accounts Management to non technical staff.All PowerBuilder and .Net applications are supported (Winform, Webform, Webservices, WCF, WPF…).&lt;a title="http://tracking.nesox.com/tracking/?u=" href="http://tracking.nesox.com/tracking/?u=dhiman_kumar@mindtree.com&amp;amp;msg=249BE56E.9F92.4838.BF36.20ADC70332AE.0006.20081020.FKLDDUIVYNCUWCQH@novalys.org&amp;amp;url=http://www.visual%2Dguard.com/EN/powerbuilder%2Dprofile%2Dsecurity/Eval%2DPowerBuilder%2Dsource%5Fnov158vg3.html" target="_blank" msg="249BE56E.9F92.4838.BF36.20ADC70332AE.0006.20081020.FKLDDUIVYNCUWCQH@novalys.org&amp;amp;url="&gt;Try Visual Guard now!&lt;/a&gt; &lt;a title="http://tracking.nesox.com/tracking/?u=" href="http://tracking.nesox.com/tracking/?u=dhiman_kumar@mindtree.com&amp;amp;msg=249BE56E.9F92.4838.BF36.20ADC70332AE.0006.20081020.FKLDDUIVYNCUWCQH@novalys.org&amp;amp;url=http://www.visual%2Dguard.com/EN/powerbuilder%2Dprofile%2Dsecurity/identity%2Dmanagement%2Daccess%2Dcontrol%2Dauthentication%2Dtool/features%2Dsource%5Fnov158vg4.html" target="_blank" msg="249BE56E.9F92.4838.BF36.20ADC70332AE.0006.20081020.FKLDDUIVYNCUWCQH@novalys.org&amp;amp;url="&gt;• Read more about Visual Guard for PowerBuilder... &lt;/a&gt;&lt;a title="http://tracking.nesox.com/tracking/?u=" href="http://tracking.nesox.com/tracking/?u=dhiman_kumar@mindtree.com&amp;amp;msg=249BE56E.9F92.4838.BF36.20ADC70332AE.0006.20081020.FKLDDUIVYNCUWCQH@novalys.org&amp;amp;url=http://www.visual%2Dguard.com/EN/dotnet%2Dsecurity%2Duser%2Drole%2Dpermission/identity%2Dmanagement%2Daccess%2Dcontrol%2Dauthentication%2Dtool/features%2Dsource%5Fnov158vg5.html" target="_blank" msg="249BE56E.9F92.4838.BF36.20ADC70332AE.0006.20081020.FKLDDUIVYNCUWCQH@novalys.org&amp;amp;url="&gt;• Read more about Visual Guard for .NET... &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Do not hesitate to contact us should you have any questions.Sandra LEVYNovalys - Sybase and Microsoft Partner&lt;a title="http://tracking.nesox.com/tracking/?u=" msg="249BE56E.9F92.4838.BF36.20ADC70332AE.0006.20081020.FKLDDUIVYNCUWCQH@novalys.org&amp;amp;url=" href="http://tracking.nesox.com/tracking/?u=dhiman_kumar@mindtree.com&amp;amp;msg=249BE56E.9F92.4838.BF36.20ADC70332AE.0006.20081020.FKLDDUIVYNCUWCQH@novalys.org&amp;amp;url=http://www.visual%2Dguard.com/EN/powerbuilder%2Dprofile%2Dsecurity/PB%2Dsource%5Fnov158vg1.html" target="_blank"&gt;http://www.visual-guard.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-8749016843267980608?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/8749016843267980608/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=8749016843267980608' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/8749016843267980608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/8749016843267980608'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2008/10/how-to-combine-authentication-and.html' title='How to Combine Authentication and Permissions?'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-443770168175164311</id><published>2008-10-16T23:03:00.001-07:00</published><updated>2008-10-16T23:09:05.803-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder'/><title type='text'></title><content type='html'>&lt;a href="http://www.sybase.com/detail?id=1057829"&gt;&lt;img id="BLOGGER_PHOTO_ID_5257999707253178338" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 354px; CURSOR: hand; HEIGHT: 110px; TEXT-ALIGN: center" height="126" alt="" src="http://1.bp.blogspot.com/_49wEoqENSuk/SPgq4Cvu_-I/AAAAAAAAACc/FRvgZCJeCzM/s320/pb_tw.jpg" width="327" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Dear PowerBuilder Developer:&lt;br /&gt;&lt;br /&gt;DEV633: Fast Track to PowerBuilder Part II is perhaps the most important step you take in your training towards a level of expertise that will allow you to learn how to use PowerBuilder to build and deploy fully functional applications using its more advanced features. The course will be taught on PowerBuilder 11.5. However, most of the features you will learn will be available to you in earlier releases of PowerBuilder (for instance, PowerBuilder 9, 10 and 11) - so regardless of the release on which you are working, you will be able to continue to improve your skills by learning PowerBuilder development best practices for advanced client/server application development.&lt;br /&gt;&lt;br /&gt;This intensive hands-on, instructor-led training class will give you access to a certified instructor, along with other near-expert level PowerBuilder client/server developers like yourself - whose goal is to learn PowerBuilder’s more advanced and powerful features. Register Now!&lt;br /&gt;&lt;br /&gt;Schedule:&lt;br /&gt;&lt;br /&gt;October 6, 2008 (Dallas, TX)&lt;br /&gt;October 13, 2008 (Bethesda, MD)&lt;br /&gt;October 20, 2008 (Albany, NY)&lt;br /&gt;October 20, 2008 (SyberLearning LIVE)&lt;br /&gt;November 3, 2008 (Atlanta, GA)&lt;br /&gt;November 10, 2008 (Ottawa, CAN)&lt;br /&gt;November 17, 2008 (Chicago, IL)&lt;br /&gt;December 1, 2008 (Irvine, CA)&lt;br /&gt;December 1, 2008 (Manhattan, NY)&lt;br /&gt;December 8, 2008 (Albany, NY)&lt;br /&gt;December 8, 2008 (Bethesda, MD)&lt;br /&gt;December 8, 2008 (SyberLearning LIVE)&lt;br /&gt;December 15, 2008 (Dublin, CA)&lt;br /&gt;December 15, 2008 (Boulder, CO)&lt;br /&gt;February 2, 2009 (SyberLearning LIVE)&lt;br /&gt;&lt;br /&gt;TechWave 2008 response to PowerBuilder 11.5 training was the best ever!&lt;br /&gt;&lt;br /&gt;PowerBuilder 11.5 training at TechWave Pre-Conference left developers excited and wanting to know more about PowerBuilder 11.5. If you have already attended any previous release of the "Fast Track to PowerBuilder Part II" class, you can still get the new PowerBuilder 11.5 training you need by attending our new "DEV545: Moving to PowerBuilder 11.5" class.&lt;br /&gt;&lt;br /&gt;Moving to PowerBuilder 11.5 Course Description:&lt;br /&gt;&lt;br /&gt;Gain hands-on experience with all the new features in PowerBuilder 11.1, 11.2 and 11.5. Learn about the .NET enhancements such as the AJAX functionality that was added to WebForms, .NET target integration with EAServer 6.1 and the ability to perform incremental or full builds of .NET targets. You can also interact with Web Services in WinForm and WebForm applications now. PowerBuilder 11.5 will allow you to create Strong-named assemblies that are digitally signed as well as build applications that can be run in partial trust environments. PowerBuilder 11.5 will also allow you to configure CAS (Code Access Security) security zones for .NET targets, minimizing the amount of trust needed before an application or component is run by an end user. View full Course Description for all topics. Register Now&lt;br /&gt;&lt;a href="http://www.sybase.com/detail?id=1057829"&gt;http://www.sybase.com/detail?id=1057829&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-443770168175164311?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/443770168175164311/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=443770168175164311' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/443770168175164311'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/443770168175164311'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2008/10/dear-powerbuilder-developer-dev633-fast.html' title=''/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_49wEoqENSuk/SPgq4Cvu_-I/AAAAAAAAACc/FRvgZCJeCzM/s72-c/pb_tw.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-7488727145166784554</id><published>2008-10-15T02:39:00.000-07:00</published><updated>2008-10-15T02:53:06.268-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder'/><title type='text'>Visual Expert for PowerBuilder</title><content type='html'>&lt;strong&gt;Visual Expert for PowerBuilder detailed features :&lt;/strong&gt;&lt;br /&gt;CODE EXPLORATION PowerBuilder Components After analysing your project, Visual Expert can list in a treeview:&lt;br /&gt;* The PBL included in the application and the components of each PBL&lt;br /&gt;* The PowerBuilder object - by type - included in the application (all the DW of the project for instance).&lt;br /&gt;* The controls, functions, events, attributes, variables, parameters defined in a PowerBuilder object.&lt;br /&gt;&lt;br /&gt;While exploring the code in the treeview, you can also display:&lt;br /&gt;* The container of the selected item (for example, the PBL containing an object, the object containing a control, the control containing an event or the event containing a local variable,...)&lt;br /&gt;* The containier hierarchy (the list of all successive containers of an item). For instance, the container hierarchy of an event may display the Control/Objet/PBL/Projet where this event was defined.&lt;br /&gt;&lt;br /&gt;You may display in the treeview some information about menu objects:&lt;br /&gt;* The complete hierarchy of the menu options defined in a menu object.&lt;br /&gt;* Same hierarchy, plus all events defined for each menu item.&lt;br /&gt; &lt;br /&gt;Database &lt;br /&gt;Components While analyzing your code, Visual Expert will find all references to database items. &lt;br /&gt;Therefore, you can list in the treeview:&lt;br /&gt;* The database tables referenced by the PowerBuilder code (both from Datawindows and embedded SQL)&lt;br /&gt;* For each table found, you may list the columns referenced by the PowerBuilder code.&lt;br /&gt;* The stored procedures called by the PowerBuilder code (both from Datawindows and PB scripts)&lt;br /&gt;&lt;br /&gt;If your application is also composed of DB code (PL/SQL or Transact-SQL), Visual Expert finds all references to tables, columns and stored procedures from this DB code. &lt;br /&gt;See Visual Expert for Oracle, Visual Expert for Sybase ASE or Visual Expert for SQL Server pages for more details.&lt;br /&gt;&lt;br /&gt;You can have a global overview of your project (PowerBuilder + DB code) by installing the appropriate versions of Visual expert on the same machine. For instance, if your application is composed of PB code and sybase stored procedures, you may combine Visual Expert for PowerBuilder and Visual Expert for Sybase ASE or Visual Expert for SQL Server on the same PC. &lt;br /&gt;SQL Queries After analysing your project, Visual expert may display several lists of Procedure:&lt;br /&gt;* SQL statements defined in the application&lt;br /&gt;* SQL statements containing a given string (text search focused on the SQL statements of the project).&lt;br /&gt;* SQL statements by access type (select, insert, update or delete Statements)&lt;br /&gt;* SQL statements by definition type (defined in PowerBuilder Script, Datawindow, Transact-SQL code(1) or PL/SQL code(2) ).&lt;br /&gt;(1) requires Visual Expert for Sybase ASE or Visual Expert for SQL Server&lt;br /&gt;(2) requires Visual Expert for Oracle &lt;br /&gt; &lt;br /&gt;Inheritance&lt;br /&gt;dépendencies  Visual Expert analyses all inheritance dependencies. As a result, you can display:&lt;br /&gt;* The direct descendants (childs) of a PowerBuilder object&lt;br /&gt;* The descendant hierarchy (multi-level treeview of all successive descendants objects). For instance, you can get the complete inheritance hierarchy of your application, including Framework and business objects.&lt;br /&gt;* The direct ancestor of a PowerBuilder object&lt;br /&gt;* The complete ancestor list of an object (all successive ancestors of a given object).&lt;br /&gt;&lt;br /&gt;When an object is inherited, the scripts defined in this objects may be modified in the descendant Object.&lt;br /&gt;In such a situation, Visual Expert keeps track of the "inheritance" relationship between the "ancestor" and the "descendant" script. &lt;br /&gt;String search You may search for a string in your project. Several options are available:&lt;br /&gt;* Global Search in the whole project (including PowerBuilder Code, PL/SQL, Transact SQL, SQL files, ...)&lt;br /&gt;* Search restricted to a given type of component (For instance, you may search in Windows only).&lt;br /&gt;* You may search in the name and/or the source code of components.&lt;br /&gt;* You use regular expressions in a search (click here to read about regular expressions)&lt;br /&gt;* You may search into a selection of components (for instance after selecting some procedures in the treeview).  &lt;br /&gt;Dll Calls While analyzing your PowerBuilder code, Visual Expert will find all referencies to dll functions.&lt;br /&gt;&lt;br /&gt;As a result, you can list in the treeview:&lt;br /&gt;* The dll used by the application&lt;br /&gt;* For a given dll, which dll functions are declared in the PowerBuilder code&lt;br /&gt;* For a given dll, which PowerBuilder objects are declaring the dll functions&lt;br /&gt;* For each dll function declared in PowerBuilder, all PowerBuilder references to this dll function &lt;br /&gt;(Impact analysis in the PowerBuilder application on a dll function). &lt;br /&gt;System and &lt;br /&gt;Application&lt;br /&gt;Globals&lt;br /&gt; * List of the Global variables declared in the PowerBuilder application (name+number of calls to each variable)&lt;br /&gt;* List of the Global functions defined in the PowerBuilder application (name+number of calls to each function)&lt;br /&gt;* List of the system properties referenced in the PowerBuilder code (e.g. visible, title, with...)&lt;br /&gt;* List of the system functions referenced in the PowerBuilder code (e.g. close, opensheet, setpointer...) &lt;br /&gt;&lt;br /&gt;Reference : http://www.visual-expert.com&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2222398033946644887-7488727145166784554?l=guru-powerbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guru-powerbuilder.blogspot.com/feeds/7488727145166784554/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2222398033946644887&amp;postID=7488727145166784554' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/7488727145166784554'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2222398033946644887/posts/default/7488727145166784554'/><link rel='alternate' type='text/html' href='http://guru-powerbuilder.blogspot.com/2008/10/visual-expert-for-powerbuilder.html' title='Visual Expert for PowerBuilder'/><author><name>Guru</name><uri>http://www.blogger.com/profile/17664820544726650763</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp0.blogger.com/_49wEoqENSuk/SIm6wrMb4VI/AAAAAAAAAAg/LzlanUSKIcc/S220/guru.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2222398033946644887.post-6918541195423629737</id><published>2008-10-15T02:18:00.000-07:00</published><updated>2008-10-15T02:35:12.293-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PowerBuilder'/><title type='text'>Team Foundation Server Version Control for Powerbuilder</title><content type='html'>The Visual Studio Team Foundation Server MSSCCI Provider enables integrated use of Team Foundation Version Control with products that do not support Team Explorer integration.&lt;br /&gt;&lt;br /&gt;This version (1.2) includes: &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;- Enab
