Home  

This page reviews some of the demo applications we include with dbOvernet.

You can also access our Live Site Web Page and download some precompiled client applications and run them against our 24x7 in-office servers.

And have a look at how simple it is to design applications: click here.

Check.gif (924 bytes) Some of our example applications

  • We provide a wide variety of applications, designed to simplify not only your introduction to dbOvernet, but your development tasks, as they arise.
  • We provide an extensive range of sample and example applications for developers.
  • These applications are models that can serve as effective templates
 
Authentication: User ID
This project demonstrates the use of the HostServerClient.UserParams a property of the TdbOAppServerClient sub-property of the TdbOClientDataset to pass a unique UserID to the server-side application for validation.
Authentication: User Validation
In over-the-internet environments, anyone can get a copy of your software, particularly since you are probably producing ultra-thin client executables. That means anyone can run those executables and attempt to gain access to your server databases.
 
The n-tier structure lets you protect against unauthorized access by intercepting logon attempts where user information (username, password and so on) doesn't match secure information. This example demonstrates how to get information from the user (including accessing the Registry for the user's name and company) and pass it to the object server: ServerObjectUsers.pas for validation.
 
There is a great deal of flexibility available in setting registry values, retrieving same, passing values to the server and retrieving information back, all demonstrated here.
Basic retrieval
A quick demonstration using Delphi's standard DBDEMOS database, accessing Paradox tables. Paradox tables have unique requirements to be used with normal SQL expressions.
Basic updating - dbOvernet style
A simple demonstration of basic updating. No coding required. You can use either the non-threaded or threaded server object functionality to retrieve data.
Basic updating - InfoPower controls
A simple demonstration of basic updating using InfoPower controls.
BiTier demo
This sample demonstrates the ability of an application to switch tier technologies instantly.
 
Selecting n-tier uses TCP/IP protocol to connect through dbOvernet components to a database residing who knows where, either over the Internet or through LocalHost on your own machine or LAN.
 
Selecting 2-tier switches to traditional client/server technology using standard Delphi data controls: TDatabase and TQuery.
 
Why is this important? Simply because n-tier technology is not always the answer to optimum performance. As you work with different applications, you may find a need for both capabilities. For instance, a LAN-based workgroup may be doing outbound telemarketing using a pre-designed questionnaire that is also offered on your web site or intra/extranet to inbound Web-based visitors. You would use 2-tier for the workgroup and n-tier for the visitors.
 
With the dual functionality capabilities of dbOvernet, you can design one very thin application incorporating both technologies, and assign the tier type that is appropriate to the requirement.
DBBlob demos
In this demo, we start by retrieving the traditional fish images from Delphi's BioLife. If you deselect the Retrieve blobs with data checkbox, the images will no longer be retrieved with the data. This is important in network environments where line speed is an issue (like WANs and the Internet).
 
When the Retrieve blobs with data checkbox is unselected, you can select any record in the grid, then click [Fetchimage] to retrieve it. Using the techniques in this demo, you can decide when it's appropriate to retrieve the blob images with the data retrieval and when it's not.
Blob Images/Files
This very powerful app demonstrates retrieving and sending files (including images) to and from the server.
 
The code shows how easy it is to do with dbOvernet's FunctionParams commands used send special functions to the server:
 
FunctionParamsClear - clear the special function parameters
FunctionParamsSetCode('GetFile') - specify the function to be executed in a ServerObject in the server-side application.
FunctionParamsAdd([Param Value]) - add a parameter
FunctionParamsSendAndWait - send the function and parameters to the server-side application and wait for a response
Blob fields
This application perfectly mimics Delphi's standard FishFacts app, and demonstrates retrieving blobs as images and memo fields.
Briefcase
This demo introduces briefcasing. A more extensive treatment of the briefcase mode and offline processing is included in the CachedUpdates demo.
 
This app demonstrates alternative approaches to working in Briefcase mode. One approach actually uses a client-side table that is used to hold the current records. This method provides a table that can then be accessed by other applications in the usual manner.
 
The alternative uses a high-speed buffer dump, to stream the current data to a local file. This enables full briefcasing, since you can quickly stream the file's data back into the buffer at any time. However, this does not necessarily allow other applications to access that local file.
 
You can click back and forth between the alternatives, rapidly storing and retrieving data offline.
Cached Updates
This application demonstrates Cached Updating, briefcasing, high-speed local storage, offline/online updating and error handling.

All changes, additions and deletions are stored in a pending cache (shown as the list under the Transactions tab), rather than being posted to the server database as each record is completed.

When you are ready to apply the updates, click the [Post the Transactions] button. All the changes will be sent as a single packet to the server. The server will initiate a transaction and attempt to apply the changes, one by one. If there is a failure at any point, none of the changes at the server will be applied - the transaction will be rolled back and an error message will be issued.
Alternatively, you can group records so that only individual groups are rejected on update failure, enabling other groups to proceed normally.

Why are cached updates important?

This application can be used as the basis for offline data manipulation. All the changes could be stored locally in a pending log. When you next connect to the server, you could post the log as a cached update.

Cached updates can play a role in one to many applications, where you want to ensure that, before posting any data, the user has a chance to review all the data.

For instance, in an invoice application, you might want to let the user complete the entire invoice, including all the detail lines, before posting any part of the invoice.
Cached Updates - fail demo (CachedErrorsProject) This application demonstrates deliberate failure of cached updates.
Cached Updates - grouped transactions, one to many (OneToMCacheProject) This app demonstrates cached updates in a linked, multi-table environment similar to Delphi's Database.ApplyUpdates(table1,table2) technique but also enables grouped updates, permitting one-to-many groups to be treated as individual transactions.
Chat
A complete implementation of a high-speed, multi-user chat system, including client and server functions, demonstrating push techniques, broadcasting and selective user identification.
Customer maintenance
A practical implementation of a customer maintenance application, demonstrating:

1. Selecting records based on a simple filter
2. Displaying records in a defined sequence
3. Scrolling through records using a grid and navigator bar
4. Adding, deleting and editing records using the customary edit box approach
5. Adding, deleting and editing records using the grid
6. Obtaining field structure (metadata) information
The entire project is developed as an n-tier application and is also demonstrated on this web page as an ActiveX project. You can be running it over the Internet, where everything you do is communicated to our database servers somewhere in North America.

A project like this could be far more difficult to develop than a standard Visual Basic or Delphi project that uses the traditional 2 tier client/server method, were it not for the tools and methods dbOvernet provides to simplify handling metadata retrieval, local caching, data synchronicity, data type conversion and other aspects unique to multi-tier applications.
Customer as ActiveX
The above customer project as an ActiveX control (see also our ActiveX implementation on this web site).
dbOVisual Query Builder
A complete visual query builder with links to end-user report designers.
IBObjects demo
Client and server-side applications demonstrating the use of this popular Interbase BDE alternative.
InMemory
This demo illustrates the speed of accessing data from in-memory tables, where you need to use lookup tables for quick information retrieval. The demo gives you an idea of when you could be using in-memory tables for lookups as opposed to going back out to the server.
 
Table information retrieved from remote sources is stored in-memory with dbOvernet, unless you want to briefcase it (see our Briefcase demo for more information on that). dbOvernet uses in-memory BOF to EOF search mechanisms to lookup data. For instance, in our One to Many to Many demonstration, the Employees and Products tables are stored in-memory and accessed every time a record is retrieved. There is no delay, since it's all done in-memory.
 
We also provide a record count and a modified TQueryInMemorySearch that performs a btree-type search, if you want to speed up searches.
LocalSearch project
If you need to load large datasets into the client, you may also need some mechanism to filters those datasets without re-retrieving the data from the server.
 
This demonstrates a large dataset with a quick search and select mechanism. You:
 
1. Select a field to filter on and select whether or not you wish to filter within a range.
2. Set the start value for the filter.
3. If you wish to get all values "like" a certain value, then click the Like checkbox
4. If applicable, enter an end value for your range.
5. Click Apply to run the filter.
6. Click on any row in the small display grid to display the record in the edit area and larger grid.
 
For example, you could filter on CustomerID for the customers data, enter W as a value and click the Like box, then click Apply.
 
The filtered group will display in the filter list. You can then click on any row to automatically select that row for editing.
Interbase demo
Client and server-side applications demonstrating the use of Interbase tables.
Metadata project
This app demonstrates using the TdbOClientDataSet to provide ad-hoc query results, retrieve database information, metadata, table lists and field names. It can be used for multi-table UpdateSQL functions as well as to search various Ports at the connected server.
Multi-table updating (UpdateSQL)
This app demonstrates the acquisition of data from multiple tables into a single dataset result and enables editing and updating of any of the fields of the prime table (in this example, the customer table is prime, linked to the orders table on customer ID).
 
The SQL expression is shown in a read-only memo, and accesses a param named "customernum". You can change that param and re-retrieve datasets.
Overnet messaging
The framework for a corporate-wide messaging system enabling message dispatching, external (Internet) connectivity, "While you were out" storage, and more.
One to Many to Many - exposed
A completely-exposed rendition of a complex one-to-many-to many (Customer > Order > Order Details) application, with these features:

1. You can decide how many customers to bring across using the filter.
2. You can decide whether to view only the customer records, or link in all orders and details as well.
3. You can set the display order of the selected customers.
4. Each customer record automatically links in all the order records for the customer. Every time you move to a new customer, the application goes out over the Internet and retrieves all the orders for that customer.
5. Each order record automatically links in all the order lines for the order. Every time you move to a different order, the application goes out over the Internet and retrieves all the details for that order.
6. Although you see an Employee name in the order line, the display is really a virtual field, calculated on-the-fly based on an employee number. Every time an order line is displayed, the employee number on that order is looked up into an in-memory table containing all the employees, and the employee's last name and first name are obtained from that in-memory table, concatenated and displayed as the Employee name.
7. Detail lines contain product names which are virtual names, taken from another in-memory table - Products - by referencing a product number from the detail record to the in-memory table.
8. Extended value is calculated on-the-fly as the detail record is retrieved and displayed.

A point about the in-memory tables. The two tables, Employees and Products, were automatically brought across the Internet and loaded into memory the first time the application retrieves some customer records. That slight delay pays off handsomely by making virtual field retrieval and display instantaneous.
 
FYI - there are 9 employee records and 77 product records in this sample.

This is a fairly sophisticated application, delving into much more than just one to many to many retrieval. Several options are available to control what and how information is retrieved and displayed. There are instances of calculated fields from in-memory table lookups as well as numeric calculations.

Of interest is the methodology to control blocking or synchronous mode of data retrieval. Since we could be operating over the Internet, delays can occur in delivery of linked record sets. By setting the Asynchronous mode option to synchronous, you can ensure retrieval of only the pertinent record sets, thus preventing a backlog of requests at the server.

We also demonstrate turning on and off the retrieval of linked sets, making it easier for the user to scroll through the customer records and retrieve the relational datasets as needed.
One to Many to Many - No code required
This app demonstates codeless one to many to many, including calculated fields (employee name and product name). It is functionally equivalent to the above  OneToMToMProject.DPR, but requires virtually no code.
 
Various visual properties are provided to set and link tables together. A ClientConnection component is used to coordinate data retrieval in the correct hierarchial order, and to ensure that the user cannot move off a record while child records are still being retrieved.
 
The algorithms used to structure the 1>M>M are efficient. The entire group for any level is first retrieved, then the first record of that group is selected and used as the control record for the next lower level. This means that you are not cascading through dozens of record retrievals every time you retrieve a new higher-level record.
 
Displays pop up immediately - there is no blinking or enforced refreshing.
 
(Note: Calculated field lookups require LookupCache to be set true, since lookup data comes from the in-memory lookup tables, Employees and Products.)
Many to Many - no code
Using a database containing the tables: Names, CrossLinks and Addresses tables, this app demonstrates dbOvernet's 1>M>M functionality to produce a many to many app using a central, cross link table.
Internet Order Entry
The framework for an Internet ordering system including customer validation, passwords, wizard pages and order summaries.
Remote Data project
This application uses a dbOvernet remote procedure call from a client application into ServerObjectRPC, an object providing server functions, to retrieve a dataset, including its meta data, instead of using the built-in SQL SELECT functionality. The dataset can then be handled live in the normal manner, permitting INSERT, UPDATE, APPEND and so on.
 
The techniques shown here can be used to provide special access to various databases and/or flat files that may be scattered around various computers and/or folders.
Remote Procedures project
Remote procedures are something like Stored Procedures, except they are executed in the middleware, instead of in the database.
 
This application demonstrates the remote procedures, to execute procedures and functions in the middleware. The app demonstrates use of math, table record count and CustomerID validation methods placed in the middleware and called by the client.
 
The techniques shown in this app can be applied to provide business rules, return results, or just execute special procedures before connecting to the actual data source.
 
All procedures are located in a server-side Server Object named ServerObjectRPC and included in both the BDEServerProject and the SimpleServerProject. There is no obligation to use this particular Server Object, since you can easily create any number of ServerObjects to serve any purposes.
Servers
dbOvernet provides several server applications, designed to demonstrate simple to advanced functionality using both traditional database engines like the BDE as well as other engines, like ODBCExpress and IBObjects.

dbOvernet enables connectivity to virtually any datasource, including data warehouses, document centers and similar storage mechanisms, as well as to all the different types of databases.

Stored Proc demo
This application demonstrates the use of stored procedures. The Interbase demo, IBLOCAL, is used for this demo, but any suitable database can be used.
 
The application lets you obtain a list of all stored procedures from the applicable database. You can then select and execute any one of them.
 
It displays the parameters in a Parameters window and you can click on any procedure, then click [Execute procedure] to run that stored procedure. A pop-up asks for any input parameters, and output params from the server will be returned to the client displayed in the output grid.
Stored Proc datasets demo
This app executes stored procs that return multiple rows in a dataset.

Top