Icon View Thread

The following is the text of the current message along with any replies.
Messages 1 to 10 of 10 total
Thread Moving to C/S
Thu, Feb 15 2007 6:33 PMPermanent Link

Gordon Turner
I'm experimenting with moving my shared file app to the C/S version and
having a problem figuring out the C/S way of doing things I do in shared
file mode (DBISAM 3.24, Delphi 7).

Currently, when the app starts, I check the data folder for the
existence of the data files, and if a file is missing, I re-create the
file.  (The data files get created the same way when the app first
starts up.)  How do I test whether or not a table exists in the Server?

Also, I perform backup and restore functions by zipping/unzipping all
the files in the data folder.  Is there any way to do this from a client
application in C/S?  Is there any way to manage/limit C/S users from
within the app and from the server Admin tool?

Lastly, I control licensing with an app user table.  I check to see if
the network ID exists in the table, but I also use semaphores to make
sure the same UserID is not being used multiple times.  Does this work
the same way in C/S?

--
Gordon Turner
Mycroft Computing
http://www.mycroftcomputing.com
Fri, Feb 16 2007 12:13 PMPermanent Link

"Robert"

"Gordon Turner" <gordon@mycroftcomputing.com> wrote in message
news:86F5C4C8-5CDF-4FCD-90BB-B7D6779751E9@news.elevatesoft.com...
> I'm experimenting with moving my shared file app to the C/S version and
> having a problem figuring out the C/S way of doing things I do in shared
> file mode (DBISAM 3.24, Delphi 7).
>

Hmmm, not a good idea. If you are going to do any reworking of your app, go
to DBISAM 4. There are a few things to change in SQL, and some (very few,
and in general rather obscure) things that work different than V3, but you
can probably get a fairly good size V3 application up and running in V4 in
an afternoon (up and running, not thoroughly tested).

But going to C/S you will have to retest just about everything anyway, and
V4 C/S is much better than V3, so might as well do everything - upgrade to
V4 and test C/S - at the same time. You'll end up with a better product.

> Currently, when the app starts, I check the data folder for the existence
> of the data files, and if a file is missing, I re-create the file.  (The
> data files get created the same way when the app first starts up.)  How do
> I test whether or not a table exists in the Server?
>

Use a ttable, and check for exists.

> Also, I perform backup and restore functions by zipping/unzipping all the
> files in the data folder.  Is there any way to do this from a client
> application in C/S?  Is there any way to manage/limit C/S users from
> within the app and from the server Admin tool?
>
> Lastly, I control licensing with an app user table.  I check to see if the
> network ID exists in the table, but I also use semaphores to make sure the
> same UserID is not being used multiple times.  Does this work the same way
> in C/S?
>

By and large C/S in V4 will handle all these things with no pain. Backup and
restore is pretty fast, and built into the engine. I use sempahores, etc,
and switch my app from file sharing to C/S with just a few instructions
before I activate the session. Same code throughout runs C/S of file
sharing. Tim's new contraption, ElevateDB, that's a different story. Does
not handle semaphores, for one.  I suspect is will be a tougher nut to
crack, for folks wanting to upgrade.

Robert

Fri, Feb 16 2007 3:12 PMPermanent Link

Tim Young [Elevate Software]

Elevate Software, Inc.

Avatar

Email timyoung@elevatesoft.com

Gordon,

I would also suggest moving to version 4 during the conversion to C/S
process.

<< Currently, when the app starts, I check the data folder for the existence
of the data files, and if a file is missing, I re-create the file.  (The
data files get created the same way when the app first starts up.)  How do I
test whether or not a table exists in the Server? >>

As Robert indicated, use the TDBISAMTable.Exists property.

<< Also, I perform backup and restore functions by zipping/unzipping all the
files in the data folder.  Is there any way to do this from a client
application in C/S? >>

In version 4, yes, via server-side procedures.  In version 3, no.

<< Is there any way to manage/limit C/S users from within the app and from
the server Admin tool? >>

Yes.

<< Lastly, I control licensing with an app user table.  I check to see if
the network ID exists in the table, but I also use semaphores to make
sure the same UserID is not being used multiple times.  Does this work the
same way in C/S? >>

Yes.

--
Tim Young
Elevate Software
www.elevatesoft.com

Fri, Feb 16 2007 4:03 PMPermanent Link

Gordon Turner
Robert wrote:
>
> Hmmm, not a good idea. If you are going to do any reworking of your app, go
> to DBISAM 4. There are a few things to change in SQL, and some (very few,
> and in general rather obscure) things that work different than V3, but you
> can probably get a fairly good size V3 application up and running in V4 in
> an afternoon (up and running, not thoroughly tested).
>
> But going to C/S you will have to retest just about everything anyway, and
> V4 C/S is much better than V3, so might as well do everything - upgrade to
> V4 and test C/S - at the same time. You'll end up with a better product.

I'm hoping to do this with a minimum of fuss.  The program is a
commercial app and I've been putting off dealing with database
conversion for existing customers until I create the next major version.
 Until then, I need to support my existing customer base, so I don't
want to have to maintain two sets of code.

> Use a ttable, and check for exists.
>
I create a TDBISAMTable component, set the TableName property to
"BenefitDetail", the Database property to "\\Remote\TimeOff2CS\" and
assign the FieldDefs and IndexDefs.  When I execute the CreateTable
procedure (since the Exists property is False) I get the following error:

"DBISAM Engine Error # 11047 An unknown operating system error 53
occurred with the table '\\Remote\TimeOff2CS\BenefitDetail.DAT'."

I've already created the database on the server, so I'm not sure why I'm
getting this error.  And when I've created the table manually thru
DBSys, the Exists property is still False.

So where am I going wrong?

 > By and large C/S in V4 will handle all these things with no pain.
Backup and
> restore is pretty fast, and built into the engine.

Can this be done from the client, so that they can control where the
backup file is saved?  If so, how?

> Tim's new contraption, ElevateDB, that's a different story. Does
> not handle semaphores, for one.  I suspect is will be a tougher nut to
> crack, for folks wanting to upgrade.

I'm starting to explore that for the next major release of all of my
products.  Since I'll be rewriting from the ground up, it's an ideal
opportunity to convert the app.  Of course, that also means handling
data conversion for 1000+ customers, some of whom are not very computer
savvy.

--
Gordon Turner
Mycroft Computing
http://www.mycroftcomputing.com
Fri, Feb 16 2007 5:05 PMPermanent Link

"Robert"

"Gordon Turner" <gordon@mycroftcomputing.com> wrote in message
news:72D05EEA-06BC-469B-9A98-9851E1F96500@news.elevatesoft.com...
> Robert wrote:
>>
>> Hmmm, not a good idea. If you are going to do any reworking of your app,
>> go to DBISAM 4. There are a few things to change in SQL, and some (very
>> few, and in general rather obscure) things that work different than V3,
>> but you can probably get a fairly good size V3 application up and running
>> in V4 in an afternoon (up and running, not thoroughly tested).
>>
>> But going to C/S you will have to retest just about everything anyway,
>> and V4 C/S is much better than V3, so might as well do everything -
>> upgrade to V4 and test C/S - at the same time. You'll end up with a
>> better product.
>
> I'm hoping to do this with a minimum of fuss.  The program is a commercial
> app and I've been putting off dealing with database conversion for
> existing customers until I create the next major version. Until then, I
> need to support my existing customer base, so I don't want to have to
> maintain two sets of code.
>

I hear you, but you might end up with more problems staying with V3, which
is now unsupported. I don't remember the details now, but I know that I
looked at V3 C/S and decided against it. V4 OTOH works beautifully. If you
control your urges to change other aspects of the application, the
conversion from V3 to V4 is really pretty simple stuff.

>> Use a ttable, and check for exists.
>>
> I create a TDBISAMTable component, set the TableName property to
> "BenefitDetail", the Database property to "\\Remote\TimeOff2CS\" and

DatabaseNAME to your database component.

>
> I've already created the database on the server, so I'm not sure why I'm
> getting this error.  And when I've created the table manually thru DBSys,
> the Exists property is still False.
>
> So where am I going wrong?
>

No idea, but it should work. But really, you should create tables with SQL.

>  > By and large C/S in V4 will handle all these things with no pain.
> Backup and
>> restore is pretty fast, and built into the engine.
>
> Can this be done from the client, so that they can control where the
> backup file is saved?  If so, how?
>

Unfortunately, I got a pretty nasty message from Tim when I tried to deal
with this issue, so maybe I should not touch it again. Right now, my
solution is to create another database and store the backup there, but of
course you could store the backup inthe same folder where you have the
table. You can query the database for the folder name and path. It has to be
a path relative to the server, not to the client and that is a problem. By
creating anaother database (basically an alias) I can get the path relative
to the server, which is what backup and restore need. It's a bit cubersome,
but it works.

If you decide to go with V4, ask the question again, I'll post some code.

>> Tim's new contraption, ElevateDB, that's a different story. Does not
>> handle semaphores, for one.  I suspect is will be a tougher nut to crack,
>> for folks wanting to upgrade.
>
> I'm starting to explore that for the next major release of all of my
> products.  Since I'll be rewriting from the ground up, it's an ideal
> opportunity to convert the app.  Of course, that also means handling data
> conversion for 1000+ customers, some of whom are not very computer savvy.
>

I have not even looked seriously at ElevateDB yet, but the conversion V3 to
V4 was really pretty simple, since the basic architecture is the same as V3.
In fact, I have a few small systems where all that I do is test one of the
tables and if it is still V3 we upgrade them and keep going. The user gets a
small notification, and then notices that the program is faster now Wink

Robert


Sun, Feb 18 2007 6:08 PMPermanent Link

Gordon Turner
Tim Young [Elevate Software] wrote:
>
> I would also suggest moving to version 4 during the conversion to C/S
> process.

OK.  I don't want to appear too dense, but I'm a little confused about
how to work with In-Memory tables in the context of a Remote database.
Previously (in DBISAM shared file version 3) I created the table (let's
call it MemTimeOff) in Memory by setting the DatabaseName to 'Memory'
and issued the CreateTable command.  Then to insert data into the
MemTest table from physical tables, I added a TDBISAMQuery to the data
module, set the SessionName to the application session (TestSession) and
the DatabaseName to the application DatabaseName (TestDatabase) and set
the SQL to:

  insert into Memory MemTimeOff
  select ReasonID, WeekDate, EmpID, Hours
  from TimeOff
  where EmpID = 0 or EmpID = :EmpID

In creating the datamodule, I Prepared the query and then when it came
time to insert data into the MemTimeOff table, I set the parameter and
ran the query.

In DBISAM version 4 remote this process no longer works.  I get a "11010
table or backup file 'TimeOff' does not exist" error.  I've set the
SessionName when creating the memory table.  Is there something else I
need to do in Version 4 to create and populate Memory tables when
working with a remote database?
--
Gordon Turner
Mycroft Computing
http://www.mycroftcomputing.com
Mon, Feb 19 2007 3:47 AMPermanent Link

Roy Lambert

NLH Associates

Team Elevate Team Elevate

Gordon

The syntax changed a bit

insert into "Memory\MemTimeOff" <<<<<<<<<<<<<<<<<<<<<<<<<<
select ReasonID, WeekDate, EmpID, Hours
from TimeOff
where EmpID = 0 or EmpID = :EmpID

Roy Lambert
Mon, Feb 19 2007 6:41 AMPermanent Link

Tim Young [Elevate Software]

Elevate Software, Inc.

Avatar

Email timyoung@elevatesoft.com

Gordon,


<< I create a TDBISAMTable component, set the TableName property to
"BenefitDetail", the Database property to "\\Remote\TimeOff2CS\" and  assign
the FieldDefs and IndexDefs.  When I execute the CreateTable procedure
(since the Exists property is False) I get the following error:

"DBISAM Engine Error # 11047 An unknown operating system error 53 occurred
with the table '\\Remote\TimeOff2CS\BenefitDetail.DAT'."

I've already created the database on the server, so I'm not sure why I'm
getting this error.  And when I've created the table manually thru
DBSys, the Exists property is still False.

So where am I going wrong? >>

If you're running the database server as a service, then you need to keep
the database tables local on the server machine.  Services run as the local
System account and cannot, by default, access network drives.

<< I'm starting to explore that for the next major release of all of my
products.  Since I'll be rewriting from the ground up, it's an ideal
opportunity to convert the app.  Of course, that also means handling data
conversion for 1000+ customers, some of whom are not very computer savvy. >>

The data conversion is not any worse for DBISAM 4 -> EDB than it it is for
DBISAM 3 -> DBISAM 4.

--
Tim Young
Elevate Software
www.elevatesoft.com

Mon, Feb 19 2007 6:44 AMPermanent Link

Tim Young [Elevate Software]

Elevate Software, Inc.

Avatar

Email timyoung@elevatesoft.com

Gordon,

<< OK.  I don't want to appear too dense, but I'm a little confused about
how to work with In-Memory tables in the context of a Remote database.
Previously (in DBISAM shared file version 3) I created the table (let's all
it MemTimeOff) in Memory by setting the DatabaseName to 'Memory' and issued
the CreateTable command.  Then to insert data into the MemTest table from
physical tables, I added a TDBISAMQuery to the data module, set the
SessionName to the application session (TestSession) and the DatabaseName to
the application DatabaseName (TestDatabase) and set the SQL to: >>

Review this section of the manual:

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

The syntax for referencing in-memory tables in SQL has changed in DBISAM 4.

..   The MEMORY keyword has been removed from SQL statements and should be
replaced with a database specification of "Memory\". For example, in 3.x you
would specify the following SQL SELECT statement to retrieve data from an
in-memory table:

SELECT * FROM MEMORY biolife

In version 4 you should use:

SELECT * FROM "\Memory\biolife"

--
Tim Young
Elevate Software
www.elevatesoft.com

Mon, Feb 19 2007 12:02 PMPermanent Link

Gordon Turner
Tim Young [Elevate Software] wrote:
>
> In version 4 you should use:
>
> SELECT * FROM "\Memory\biolife"

That helped.  I also had to add the remote database name to other
queries that joined memory tables and remote tables.  Thanks.  (You'd
think I'd remember stuff like that as I also have a couple Version 4
apps.  Just too much stuff to cram into my tiny, overworked brain.)

--
Gordon Turner
Mycroft Computing
http://www.mycroftcomputing.com
Image