Icon View Thread

The following is the text of the current message along with any replies.
Messages 1 to 4 of 4 total
Thread Guidelines for Developing W32 Smart Clients
Sun, Jan 29 2006 6:31 AMPermanent Link

"Johnnie Norsworthy"
I need to allow my customers to access their LAN-based data from remote
locations, such as employees accessing from home. To do this, I wanted to
modify my current program to client-server for local access and, using a
smart-client application, have the same data available remotely.

Has anyone done the same with DBISAM 4 and could you share any general
guidelines? Since I will be going from LAN based file sharing to
client-server at the same time, I am sure that there are some things I have
not considered.

Here are some of my thoughts: (sorry so long)

I would need a way to update my company's hosted DBISAM database to keep a
client site's IP address and port used for the DBISAM server. Then the smart
client would query that to determine where to look for *their* data. I would
also use this IP address for when I need to perform remote database
maintenance. How do I determine a site's real IP address? I know how to do
this using web services, but I am trying to get away from those and use my
DBISAM remote database more directly.

I need to change my Win32 program to be more disconnected, like ADO.NET. So
I would convert all my DevExpress grids to populate from a single query
instead of staying connected to the table as I do now.

When navigating using my grids, I need to display detail table information.
I do not know if I should maintain a connection to the server for this using
a remote table or if I should create and execute a new query each time the
grid row changes. Since all of the detail tables would never be visible at
the same time, I do not want to get information not currently visible on the
screen.

When editing individual rows, I use a lot of DB-aware controls; how can I
handle these edit forms with my smart client?

Since I sell licenses for my software on a per station basis, I would like a
way to monitor the number of local plus remote stations and restrict access
based on a user count determined at run-time.

Progress would have to be shown when retrieving large datasets and the
ability to cancel lengthy processes provided.

A web-based software install and updating system would need to be
implemented for the remote clients. I current have this type of system only
for the client office as a whole.

All of my current installations would need to be converted to server-based
access. This would mean moving files and installing and configuring the
DBISAM server by remote access.

Can any port number can be used for the LAN client-server? For offices that
wish to use remote access, I could stipulate they have a network technician
unblock any ports needed by DBISAM on whatever firewall they use.

------------------------------------------------------------------
This is all I can think about without actually starting on the development.
Any insight would be appreciated. (and it might help me sleep too SmileyIt's
3:30 in the morning right now)

Thanks,
Johnnie

Mon, Jan 30 2006 7:52 AMPermanent Link

Tim Young [Elevate Software]

Elevate Software, Inc.

Avatar

Email timyoung@elevatesoft.com

Johnnie,

<< I would need a way to update my company's hosted DBISAM database to keep
a client site's IP address and port used for the DBISAM server. Then the
smart client would query that to determine where to look for *their* data. I
would also use this IP address for when I need to perform remote database
maintenance. How do I determine a site's real IP address? I know how to do
this using web services, but I am trying to get away from those and use my
DBISAM remote database more directly. >>

So, you want to have one main IP address that has a listening DBISAM
database server that can be used to lookup the other office's IP addresses ?

<< I need to change my Win32 program to be more disconnected, like ADO.NET.
So I would convert all my DevExpress grids to populate from a single query
instead of staying connected to the table as I do now.

When navigating using my grids, I need to display detail table information.
I do not know if I should maintain a connection to the server for this using
a remote table or if I should create and execute a new query each time the
grid row changes. Since all of the detail tables would never be visible at
the same time, I do not want to get information not currently visible on the
screen.

When editing individual rows, I use a lot of DB-aware controls; how can I
handle these edit forms with my smart client? >>

How much of the application do you want to be "disconnected" ?  Having an
application only "partially disconnected" kind of defeats the purpose of
having the application disconnected at all, except in the case of lookup
tables.  ElevateDB will be quite a bit better for this sort of thing since
it will be able to replicate and synchronize natively, however you can also
do the same with version 4, but with a little more manual work.

<< Since I sell licenses for my software on a per station basis, I would
like a way to monitor the number of local plus remote stations and restrict
access based on a user count determined at run-time. >>

Check out this property:

http://www.elevatesoft.com/dbisam4d5_tdbisamengine_serverlicensedconnections.htm

Unfortunately, it only works for C/S access.  However, version 5 allows for
licensing restrictions against both C/S and local sessions as a combined
total.

<< Progress would have to be shown when retrieving large datasets and the
ability to cancel lengthy processes provided. >>

Are you talking about when a user is pulling down disconnected data, or
simply when the user is querying data while online ?

<< Can any port number can be used for the LAN client-server? >>

Sure, no problem.

<< For offices that wish to use remote access, I could stipulate they have a
network technician unblock any ports needed by DBISAM on whatever firewall
they use. >>

Yes, that will be necessary.

--
Tim Young
Elevate Software
www.elevatesoft.com

Mon, Jan 30 2006 2:48 PMPermanent Link

"Johnnie Norsworthy"
"Tim Young [Elevate Software]" <timyoung@elevatesoft.com> wrote in message
news:95477025-EEB1-4CD2-B273-23261FB587B2@news.elevatesoft.com...
> Johnnie,
>
> << I would need a way to update my company's hosted DBISAM database to
> keep a client site's IP address and port used for the DBISAM server. Then
> the smart client would query that to determine where to look for *their*
> data. I would also use this IP address for when I need to perform remote
> database maintenance. How do I determine a site's real IP address? I know
> how to do this using web services, but I am trying to get away from those
> and use my DBISAM remote database more directly. >>
>
> So, you want to have one main IP address that has a listening DBISAM
> database server that can be used to lookup the other office's IP addresses
> ?

Yes, I need a way to update a database that I host with all of my customers'
current IP addresses so there is an easy way to determine their surrent IP
address, since it might change at some offices. I currently have a DBISAM
server hosted that I use to validate my customers to make sure they are
licensed users. I'll just add to this functionality. I don't want all my
customers to have to run a dynamic DNS system as this would add to
installation complexity.

> << I need to change my Win32 program to be more disconnected, like
> ADO.NET. So I would convert all my DevExpress grids to populate from a
> single query instead of staying connected to the table as I do now.
>
> When navigating using my grids, I need to display detail table
> information. I do not know if I should maintain a connection to the server
> for this using a remote table or if I should create and execute a new
> query each time the grid row changes. Since all of the detail tables would
> never be visible at the same time, I do not want to get information not
> currently visible on the screen.
>
> When editing individual rows, I use a lot of DB-aware controls; how can I
> handle these edit forms with my smart client? >>
>
> How much of the application do you want to be "disconnected" ?  Having an
> application only "partially disconnected" kind of defeats the purpose of
> having the application disconnected at all, except in the case of lookup
> tables.  ElevateDB will be quite a bit better for this sort of thing since
> it will be able to replicate and synchronize natively, however you can
> also do the same with version 4, but with a little more manual work.

I guess maintaining a connection is not a problem as long as I reduce the
amount of traffic. It is my understanding that when using C/S the data
transferred is both compressed and encrypted, which should help quite a bit.
I guess I need to experiment to see where the bottlenecks are going to be.

> << Since I sell licenses for my software on a per station basis, I would
> like a way to monitor the number of local plus remote stations and
> restrict access based on a user count determined at run-time. >>
>
> Check out this property:
>
> http://www.elevatesoft.com/dbisam4d5_tdbisamengine_serverlicensedconnections.htm
>
> Unfortunately, it only works for C/S access.  However, version 5 allows
> for licensing restrictions against both C/S and local sessions as a
> combined total.

Where in code would this property be set? I would be reading this option
from a local table or from my web hosted DBISAM database at runtime. So
either way, I would need to use DBISAM before I could have the licensed user
count.

> << Progress would have to be shown when retrieving large datasets and the
> ability to cancel lengthy processes provided. >>
>
> Are you talking about when a user is pulling down disconnected data, or
> simply when the user is querying data while online ?

For example, as user creates a query that selects a few thousand rows. While
this is being retrieved from the server they impatient and want to cancel
the process and search more restrictivly. If there is an indication how long
the retrieval will take and the ability to cancel, I don't think the users
would mind some lengthy operations. But if they have no clue how long it is
going to take, they will undoubtedly have issues.

Thanks for your responses. I hope to be doing some tests this week to see if
I can make this work. I am sure the main issues will be logistics of
configuring and retrieving IP addresses and such. The rest can be tweaked as
I update the software.

-Johnnie

Tue, Jan 31 2006 7:26 AMPermanent Link

Tim Young [Elevate Software]

Elevate Software, Inc.

Avatar

Email timyoung@elevatesoft.com

Johnnie,

<< Yes, I need a way to update a database that I host with all of my
customers' current IP addresses so there is an easy way to determine their
surrent IP address, since it might change at some offices. I currently have
a DBISAM server hosted that I use to validate my customers to make sure they
are licensed users. I'll just add to this functionality. I don't want all my
customers to have to run a dynamic DNS system as this would add to
installation complexity. >>

Sounds fine to me.

<< I guess maintaining a connection is not a problem as long as I reduce the
amount of traffic. It is my understanding that when using C/S the data
transferred is both compressed and encrypted, which should help quite a bit.
I guess I need to experiment to see where the bottlenecks are going to be.
>>

It isn't transferred as compressed or encrypted by default.  You have to
enable compression using the TDBISAMSession.RemoteCompression property in
the remote session, and the encryption using the
TDBISAMSession.RemoteEncrypted property.

<< Where in code would this property be set? I would be reading this option
from a local table or from my web hosted DBISAM database at runtime. So
either way, I would need to use DBISAM before I could have the licensed user
count. >>

This property has to be set in the database server (dbsrvr.dpr source code
needs to be modified) before the engine is activate (Engine.Active=True), so
you'll have to make the necessary adjustments to accomodate that fact.


<< For example, as user creates a query that selects a few thousand rows.
While this is being retrieved from the server they impatient and want to
cancel the process and search more restrictivly. If there is an indication
how long the retrieval will take and the ability to cancel, I don't think
the users would mind some lengthy operations. But if they have no clue how
long it is going to take, they will undoubtedly have issues. >>

Query result sets are not pulled down to the client in their entirety.  They
are executed and stored on the database server, and only the records
required for the current data-aware controls (or 1 record if no data-aware
controls) are pulled down dynamically as needed.  Also, the RemoteReadSize
property controls how many records are pulled down at one time:

http://www.elevatesoft.com/dbisam4d5_tdbisamdataset_remotereadsize.htm

The number of records pulled down in one shot is basically
Max(RemoteReadSize, Data-Aware Controls Needs).  If a grid needs 20 records,
then it will pull down 20 rows at a time, even if the RemoteReadSize is set
to 10 records.

<< Thanks for your responses. I hope to be doing some tests this week to see
if I can make this work. I am sure the main issues will be logistics of
configuring and retrieving IP addresses and such. The rest can be tweaked as
I update the software. >>

I agree.  There are always ways to work around performance bottlenecks.

--
Tim Young
Elevate Software
www.elevatesoft.com

Image