A graphical user interface development tool from Powersoft (now owned by Sybase) for developing client-server database applications. It runs under Microsoft Windows 16-bit and 32-bit. There are also versions for Macintosh and Unix. Note: Sybase has put out an EndOfLife notice for the Macintosh version of PowerBuilder.
Applications can be built by creating windows, controls (such as listboxes and buttons), and menus within the PowerBuilder development environment. The language used to program PowerBuilder, PowerScript?, is loosely based on C and BASIC. Its greatest strength and weakness is the DataWindow? control, which lures developers into too-tightly coupling the view, model, and controller, and to not even consider using the UI only as a proxy for (rather than the heart of) the business logic. The language does not support static methods or variables, or parameterized constructors. It does support overloading, inheritance, encapsulation, polymorphism.
PowerBuilder does support static variables. They are called shared variables. -- JohnUrberg
You're right - I meant it doesn't support class variables, like Java does. You must have an instance of a class before you can reference a static attribute. -- DangGriffith''
PowerBuilder supports programming on many database backends including Sybase and Oracle. It also has added support for ODBC database drivers. PowerBuilder also comes with a built-in database backend (WATCOM SQL 32-bit relational database).
PowerBuilder now has a version of the xUnit testing framework called PowerBuilderUnit (PBUnit).
Sorry to go OffTopic, but I'd love a summary of PowerBuilderSeven?, particularly how it has evolved since PB 4. See improvements? Thanks for the summary below!
I'll give it a shot, 'though it'll be mostly from memory. So take this with a few grains of salt.
When I started working here, they had just upgraded from PB 4.x to 5.0, which we stayed with until 5.0.04. This version introduced the PowerBuilderFoundationClasses? (PFC's), which are object libraries, similar to Microsoft's MFC's, but geared towards inventory tracking & general ledger applications, IMntbHO.
Next came version 6.0 - which we skipped. Its biggest changes were an enhanced multi-pane debugger, syntax highlighting, and a whole host of bugs (especially in the enhanced 6.0 PFC).
Version 6.5 was a complete rebuild, which boasted "a thousand bugfixes" and seemed to have provided an unquantifiable measure of stability.
Then finally(!), in version 7.0, they added multi-panes to the PB painters, which more than anything else, have made XP possible. All versions prior to 7.0 prohibited users from opening more than a single script per object. So until now, it hasn't been possible to simultaneously view (not to mention edit) say, two events within the same object; or a function and an event from a single object; etc. Apparently, it never occurred to them that this might be desirable. ;-)
7.0's development environment still has a lot of stability issues, especially when mucking about with the object hierarchy. In other words, it crashes out from under us frequently, when attempting such heinous operations as: inserting a new object into the middle of an existing class or even, adding & removing "ancestral" functions.
-- LoganGraves?
We tried version 7.0 and it was so unstable we had to go back to 6.5. What really did it for me was when PB 7.0 would not allow me to change SQL in an existing datawindow. It would GPF whenever I tried to exit the SQL painter. -- JohnUrberg
As for stability in PB7.x (esp. when designing), there are some things one can keep in mind.
I have come up with a way to create class functions in Powerbuilder. For each object you create, create an associated class object that is autoinstantiate. Create a common ancestor that has a create function. For example:
BaseClass: event constructor: is_className = mid(className(), 1, len(className()) - 5) end event public function PowerObject create(): PowerObject lnv lnv = create using is_className return lnv end function MyObjectClass? from BaseClass: public function PowerObject create(String as_parameter): MyObject? lnv lnv = super::create() lnv.initialize(as_parameter) return lnv end functionThen you can do this in your code:
MyObjectClass? MyObjectClass? MyObject?lnv_myObject lnv_myObject = MyObjectClass?.create("Hi There")-- JohnUrberg
Took another shot at 7.0 C3. Built a small prototype using the PFC. It crashed constantly. When I tried to regen, it corrupted a number of PFC objects. I was unable to do a build of the application, it would GPF in the middle. It's not looking good for PB. -- JohnUrberg
We've recently converted to PB 7.0.3. We found that a number of different problems were caused by duplicate copies of DLL files lurking in the path. If you are having the kinds of problems described above, you might want to try determining whether or not you have an extra copy of, say, PBUDO70.DLL on your computer, and deleting the older version(s). This has successfully cured a number of problems for us.
-- Dave Axelson
I have been working with PB 8.0 recently, and it seems to be quite (gasp!) stable! I migrated one app from 6.5 with nary a compiler warning. Having been through the 5.0 to 7.0 nightmare, this has been quite a relief. Maybe 7.0 was made deliberately buggy so that 8.0 would seem much better! :)
Dave Rooney
Erik Langhout
We are not happy with PowerBuilder 8.0.3 (build 9704). It's much slower and not less buggy than the PB651 we used before. We use PB for a large ERP application (> 5000 objects) and database (> 2500 objects). Weak points of PB803 are: