Skip to content

Michael

Forum Replies Created

Viewing 15 posts - 496 through 510 (of 526 total)
  • Author
    Posts
  • in reply to: Date Handling Bug in Personal #1617
    Michael
    Keymaster

    JDK wrote:
    > I think the bug is actually worse. Don't have time to document fully,
    > but if you change the display format to 24 hour (i.e. uncheck am/pm)
    > (and you can make it apply – there is a different bug here noted
    > below) and then enter a time in pm format using "pm" (e.g. "12:42
    > pm") the whole thing shuts down.

    I will have a look. This is all from the code in the date library, time
    library amd db1util actually, all of which are supplied in source. The
    functions are val2string(), fieldval2string(), string2fieldval(), etc.

    > When trying to modify table and changing display format, you won't
    > always get OK or DISPLAY buttons (they remain disabled) until you
    > change the field to indexed (and back to not indexed if you don't
    > actually want the field to be indexed but just want to change the
    > display format.)

    Hmmm. That sounds like the problem is that the oncellchange is not
    firing until after you leave the cell where you made the data type
    selection. I will have a look.

    Ciao, Neil

    in reply to: Toolbar #1414
    Michael
    Keymaster

    JDK wrote:
    > Whoops. Question follows but first Comment and 2 Suggestions.
    >
    > There just seems to be so much overhead to do something so simple.
    >
    > in main function() wxtoolbar tb tb =@ CreateToolBar() tb.setwindow(w)
    >
    >
    > Suggestion 1 //toolbars handled like opendataform() which I guess
    > would be in a library called something like ToolBarLib

    Actually, it can be just stuffed into a function and called during
    initialization. A full example is coming toward the end of this week.

    As for constants, it is a good idea to use a separate file for them and
    to include that file at the beginning of the program. Also, the
    syscolors type is part of uisyshelp.sml (which you have the source for)
    and all you need to do is to create a new object. It does the work of
    preparing it. To retrieve a color from a specific index in the type, it
    is easiest to use the symbolic constants found in uisyshelphdr.sma.

    Ciao, Neil

    in reply to: Date Handling Bug in Personal #1689
    Michael
    Keymaster

    JDK wrote:
    > Beyond the whole mess with indexing a date field.
    >
    >
    > If you enter
    >
    > "12 15 pm"
    >
    > it changes it to "12:15 am"
    >
    > Note the space instead of a colon. I developed a bad habit with
    > Superbase of entered times with the space. Which you can still do
    > with here except for this quirk.

    A quick question, did it change am to pm, or was that a typing error? As
    for the other, if you define the display format to use a space, it
    should retain it. The code that handles this reads the content,
    interprets it, and then redisplays it using the assigned display format.

    Ciao, Neil

    in reply to: SMB disabling in networks #2352
    Michael
    Keymaster

    Brian L Johnson wrote:
    > Well, well…
    >
    > Microsoft have just issued a security warning about the SMB2
    > protocol.
    >
    > http://www.microsoft.com/technet/security/advisory/975497.mspx
    >
    > This is the protocol that Vista uses by default.
    >
    > The one where you can't turn off OpLocks.
    >
    > The one where you have to actually turn off SMB2 so that Vista will
    > revert to SMB1 which is one where you CAN turn off OpLocks.

    Hi Brian,

    Thanks for this. So if the file server is running Vista, you have to
    turn off SMB2 in order to run SMB1? Interesting. And since SMB2 is on by
    default and doesn't support turning off oplocks, this was no doubt the
    culprit behind your recent problems with network locking.

    Another stupid move by Microsoft, just like the oplocks thing itself.
    Instead of turning off dangerous settings by default, they prefer to
    turn them on. The average SME won't have any on staff network admin and
    would be more likely to be using a light-weight home-brew solution based
    on a desktop database where this sort of functionality is required.
    Microsoft should leave these sorts of settings off and teach their MSCE
    types how to them on and *why* and *when* to turn them on, instead of
    putting everybody else's data at risk just so they can squeeze a little
    better performance out.

    Ciao, Neil

    in reply to: Toolbar #1574
    Michael
    Keymaster

    JDK wrote:
    > I really hate having to reinvent the wheel.
    >
    > Is there available code for a basic toolbar, i.e. selection buttons
    > plus Table plus Current Index, plus some blank buttons ohne bitmaps
    > to which basic functions (cut,copy,paste,printer set up,reports) can
    > be set.
    >
    > Getting the proper spacing and button size, etc for the "skinny form"
    > is kind of visually time consuming, especially when it is obvious
    > that you've already created this for the Personal.
    >

    The following is from the sample program that I will be releasing with
    the Quick Start Guide:

    function buildiconbar(syscolors colors)
    wxbitmap bmp, disbmp
    integer e
    wxtoolbar tb
    wxform f

    e = 0
    tb =@ wxtoolbar.new(16, 16, error=e)

    if tb !@= .nul
    f =@ combos(colors)
    if f !@= .nul
    tb.insertform(f, name="fileindexcombos")
    end if

    bmp =@ wxbitmap.new("16x16_selfirst.png", "png")
    disbmp =@ wxbitmap.new("16x16_selfirst_disabled.png", "png")
    tb.insert(bmp, disbmp, enabled=.false, tooltip="Select first
    record", name="tSelFirst")
    tb!tSelFirst.onclick.function =@ selrec

    bmp =@ wxbitmap.new("16x16_selrwnd.png", "png")
    disbmp =@ wxbitmap.new("16x16_selrwnd_disabled.png", "png")
    tb.insert(bmp, disbmp, enabled=.false, tooltip="Select rewind",
    name="tSelRwnd")
    tb!tSelRwnd.onclick.function =@ selrec

    bmp =@ wxbitmap.new("16x16_selprev.png", "png")
    disbmp =@ wxbitmap.new("16x16_selprev_disabled.png", "png")
    tb.insert(bmp, disbmp, enabled=.false, tooltip="Select previous
    record", name="tSelPrev")
    tb!tSelPrev.onclick.function =@ selrec

    bmp =@ wxbitmap.new("16x16_selcur.png", "png")
    disbmp =@ wxbitmap.new("16x16_selcur_disabled.png", "png")
    tb.insert(bmp, disbmp, enabled=.false, tooltip="Select current
    record", name="tSelCurr")
    tb!tSelCurr.onclick.function =@ selrec

    bmp =@ wxbitmap.new("16x16_selnext.png", "png")
    disbmp =@ wxbitmap.new("16x16_selnext_disabled.png", "png")
    tb.insert(bmp, disbmp, enabled=.false, tooltip="Select next
    record", name="tSelNext")
    tb!tSelNext.onclick.function =@ selrec

    bmp =@ wxbitmap.new("16x16_selffwrd.png", "png")
    disbmp =@ wxbitmap.new("16x16_selffwrd_disabled.png", "png")
    tb.insert(bmp, disbmp, enabled=.false, tooltip="Select fast
    forward", name="tSelFfwd")
    tb!tSelFfwd.onclick.function =@ selrec

    bmp =@ wxbitmap.new("16x16_sellast.png", "png")
    disbmp =@ wxbitmap.new("16x16_sellast_disabled.png", "png")
    tb.insert(bmp, disbmp, enabled=.false, tooltip="Select last
    record", name="tSelLast")
    tb!tSelLast.onclick.function =@ selrec

    bmp =@ wxbitmap.new("16x16_selkey.png", "png")
    disbmp =@ wxbitmap.new("16x16_selkey_disabled.png", "png")
    tb.insert(bmp, disbmp, enabled=.false, tooltip="Select a record
    by value", name="tSelKey")
    tb!tSelKey.onclick.function =@ selrec

    bmp =@ wxbitmap.new("16x16_pageprev.png", "png")
    disbmp =@ wxbitmap.new("16x16_pageprev_disabled.png", "png")
    tb.insert(bmp, disbmp, enabled=.false, tooltip="Show previous
    page", name="tPagePrev")
    tb!tPagePrev.onclick.function =@ changepage

    bmp =@ wxbitmap.new("16x16_pagenext.png", "png")
    disbmp =@ wxbitmap.new("16x16_pagenext_disabled.png", "png")
    tb.insert(bmp, disbmp, enabled=.false, tooltip="Show next
    page", name="tPageNext")
    tb!tPageNext.onclick.function =@ changepage
    end if
    end function tb

    Ciao, Neil

    in reply to: Using SelectKey #1711
    Michael
    Keymaster

    JDK wrote:
    > Figuring out the value of a field on the current record has always
    > been pretty straightforward in SB
    >
    > REQUEST YourField or REQUEST YourField.YourFile
    >
    > So how do I do it in SIMPOL
    >
    > function Details(type(*) me, dataform1 f) // f is the current form
    > and obviously works // with various select statements // e.g.
    > f.selectfirst(error=e)
    >
    > if me.type == wxmenuitem string test test = "TESTING TESTING"
    > wxmessagedialog(message = me.name,captiontext = test)
    >
    > //Here I want to determine the value of a //field FULLNAME on the
    > current record and //then pass it as string to variable test //for
    > sake of ease this field is a string so //I don't need to
    > manipulate/transform it //with .tostr() //I thought something like
    > this
    >
    > test = f.mastertable.record!FULLNAME
    >
    > //I've tried other variation using f.masterrecord.etc //without
    > success
    >
    > test = f.whatdoIuse!FULLNAME
    >
    > // this is check to see if I've done it correctly
    > wxmessagedialog(message = me.name,captiontext = test)
    >
    > //ETC. end function
    >

    The easy way would be to add db1util to your project, and then use
    fieldval2string().

    Ciao, Neil

    in reply to: Error 3, two windows with forms using same database? #1613
    Michael
    Keymaster

    JDK wrote:
    > I am using the web based thing in the Forum rather than thunderbird
    > and I see weird line breaks (two lines get put into one).
    >

    I have made a change that should deal with that in future.

    Ciao, Neil

    in reply to: Using SelectKey #1494
    Michael
    Keymaster

    JDK wrote:
    > I am having trouble understanding how to use formvar.selectkey().
    >
    > Consider the following:
    >
    > function DailyDetails()
    > integer iErrnum; iErrnum = 0
    > wxwindow w2
    > w2 =@ wxwindow.new(100,100,400,600,captiontext="Details",error=iErrnum)
    > string filename
    > filename = "C:SIMPOLFormsDetails.sxf"
    > integer error; error = 0
    > string errtext; errtext = ""
    > dataform1 f2
    > f2 =@ opendataform1(filename, error=error, errortext=errtext)
    > f2.setcontainer(w1)
    > //f2.selectfirst()
    > // instead I'd like to use f2.selectkey

    OK

    >
    > in Superbase, we could do this:
    >
    > OPEN FORM "C:PROGRA~1SBCLASDESAMPLESCLASSICBUGBASEEMPLOYEE.SBV"
    > SET INDEX "Lastname"
    > INDEX Lastname
    > SELECT FORM KEY "Holden"
    > SELECT FORM CURRENT FORM
    > So let's say that just like this Superbase example, my "Details.sfx" form
    > uses a table called "employee". It has a number of indexes. The first
    > index which will be the default one used in Simpol is "SSN".
    > But I want to use an index called "Fullname".
    >
    >
    > (In the SB example, the first index is "EmployeeNumber" which is why
    > I change it to "Lastname")
    >
    > anyvalue value; value = "Holden"
    > boolean lock; lock = .true
    > boolean found; found = .true
    > integer thisError; thisError = 0
    > // here is where I am not sure how to // "Set" the index to Fullname or
    > // otherwise declare and pass the index "Fullname"
    > // in fooling around I tried this which will work
    > // but only because I knew to go to the next
    > // index after the current one
    > f2.selectkey(value,f2.mastertable.currindex.next,lock,found,thisError) // surely there must be a better way
    > f2.selectcurrent()
    > wxprocess(1000000)
    > end function f2

    There is:

    f2.selectkey(value,f2.mastertable.table!Lastname,lock,found,thisError)

    Also, it is probably a bad idea to lock the record unless you intend to
    change it. Especially since you are passing a found parameter, which
    means that you will get a record object back even if it doesn't match,
    and even if it is wrong, you will still be locking it.

    >
    > By the way, the debugger really doesn't work correctly. I can't seem
    > to look at variables in function outside of main.

    If you mean the Watch window, that has been seen at times, but we
    thought we had fixed most of the cases. Normally you should still be
    able to hover your mouse over a variable in the code to see its value.
    Also, if you place the cursor in the variable and press Shift+F9, it
    should pop up the Watch window where you can do fairly extensive
    analysis of the variables.

    Ciao, Neil

    in reply to: Error 3, two windows with forms using same database? #1622
    Michael
    Keymaster

    JDK wrote:
    > As to the second part of your post:
    >
    >
    > Here is what I did:
    >
    > dataform1 f string filename filename = "C:SIMPOLFormsmyform.sxf"
    > string errtext; errtext = "" f =@
    > opendataform1(filename,error=error,errortext=errtext)
    >
    >
    > What you want me to do is A. open the datasource(s) and table(s)
    > AND then B. pass in opendatform1(all of that other stuff like
    > datasource and tables)
    >
    > I will acknowledge that in SB2 I do first open the databases(tables)
    > I'll be using and then open the form.
    >
    > But I sort of feel like WHY? Once I've created a form in Personal
    > and saved it as an .sxf shouldn't all of that stuff be accessible
    > through f which is created via opendataform1.
    >
    > Wouldn't it be logical that form object f must already contain
    > references to the datasource and the mastertable otherwise I would be
    > able to open the doggone thing up and see the correct data.
    >
    > Why do I need to pass it when I am already passing it through the
    > .sfx information?

    You don't have to, but you will need to use the PPCS versions of the
    tables in the form. If you open the tables using PPCS, then open the
    form, it will use the PPCS versions of the tables. If you then go into
    the form designer and save the form off, it will contain the PPCS
    information instead of the sbme information for opening the tables. Then
    it can open them for you, just by opening the form.

    Ciao, Neil

    in reply to: Error 3, two windows with forms using same database? #1702
    Michael
    Keymaster

    JDK wrote:
    > NR: If you have started it running as a server, then you can't open
    > it as a file. You have to open it using the server address. In the
    > config file it will tell you what the port number is (the default is
    > port 4000). In Personal you switch to ppcs as the type, and in the
    > box you would put 127.0.0.1:4000.
    >
    >
    > JDK: Well, now I get Error 10.

    Error 10 is a timeout. You typically get that if you are trying to open
    a table from somewehre that isn't sharing it. PPSR/PPCS in SIMPOL is
    also case-sensitive, so if the table is called FOO and its being shared
    as FOO, then you need to open it as FOO.

    > This is what my sample.cfg looks like:
    >
    > [Server]
    > port1=4000
    > txfactor1=0
    > port2=4001
    > txfactor=6
    > tcpport=24000
    > logfilename=samplelog.txt
    >
    > [Files]
    > 1=C:simpolutilitiessimpolserveradrb.sbm,240000000
    > 2=C:SIMPOLDataPayroll.sbm,240000000
    > 3=C:SIMPOLDatawages.sbm,240000000
    >
    > ***************
    >
    > First, I really don't understand what txfactor1, txfactor, tcpport
    > mean.

    txfactor1, etc. are directly related to the txfactor property in a PPCS
    connection. The txfactor1 goes with the port1, the txfactgor2 goes with
    the port2, etc. The easiest way to understand it is this:

    When using TCP/IP, the transport protocol is responsible for making sure
    that all of the data gets from one end to another. In UDP/IP, it is a
    broadcast protocol, so what happens is the server sends out all of the
    data it has, as fast as it can. Since the data travels in multiple hops
    over the Internet to you, if you are not getting the data as fast as it
    is sent, the interim servers may not cache it all along the way, and
    simply discard what they didn't have room for. Then the fact that it all
    failed to arrive will be noticed by the client, who will ask the server
    to resend. The server will resend ALL the data again, and the same
    problem may occur, since what is being dropped is at the end. To deal
    with this problem, the txfactor was added to the server and client, to
    allow the server to artificially slow down how fast it sends the data so
    that the transport route along the way won't have to discard any before
    it is forwarded again. In a local area network, you can connect to the
    port1 with a txfactor1 value of 0, and this will run at full speed. If
    you are debugging, you may need to connect to port2 which has been
    slowed down to txfactor 6 (or even higher sometimes). The reason is that
    in debug mode (or single-stepping) the application may not be processing
    the data fast enough as it comes in, if there is a lot of it.

    > Should I also have a line?
    >
    > port3=4003
    >
    > for the "wages.sbm

    All the tables are visible on all ports. The ports and the txfactors
    work together to allow the same database tables to be accessed on more
    than one port, choosing a pre-defined one with the most appropriate
    txfactor. In an in-house LAN, you may only need one, with a txfactor of 0.

    > And is this what the command line is supposed to look like:
    >
    > C:SIMPOLbinsmpw1_32.exe simpolserver.smp sample.cfg

    You generally should use smprun32 for command line programs, and
    smpwin32 for GUI programs. The simpolserver.smp is a command line
    program. The smpw1_32.exe is a special version of smpwin32.exe for
    debugging a program that can't be debugged in the IDE (rare cases). If
    the system has been normally installed, you don't even need to specify
    that, you can just do:

    simpolserver.smp sample.cfg

    from a cmd prompt.

    > Or do I have to be more explicit about where simpolserver.smp and
    > sample.cfg are located.

    I would open a cmd prompt from the Run item off the Start menu, and then
    CD there.

    > Do I run this from windows RUN? Or do I run this from someplace in
    > IDE?

    The program is designed to be run as a command line program. Eventually
    we will add a loader for services, which is what this should be though
    of as. Longer term, this program will have an HTML GUI like most routers
    provide and you can control it from a browser (because the program is
    designed to work on a server that may not have a GUI).

    Ciao, Neil

    in reply to: Error 3, two windows with forms using same database? #1619
    Michael
    Keymaster

    JDK wrote:
    > By the way what is the deal with formating in this forum.
    >
    > I seem to be losing my "line integrity".

    I am not quite sure what you mean. I use this from the news server and
    Thunderbird myself, but I just checked and everything looks okay on the
    forum too.

    Ciao, Neil

    in reply to: Error 3, two windows with forms using same database? #1419
    Michael
    Keymaster

    JDK wrote:
    > Unfortunately, I am a dingbat unable to follow the instructions in
    > the readme.txt. I followed directions I think and then tried to open
    >
    >
    > C:simpolutilitiessimpolserveradrb.sbm
    >
    > as ppcs type in "Personal" as a test. Error 48 getting tables.

    If you have started it running as a server, then you can't open it as a
    file. You have to open it using the server address. In the config file
    it will tell you what the port number is (the default is port 4000). In
    Personal you switch to ppcs as the type, and in the box you would put
    127.0.0.1:4000.

    > As to "just switching the types from sbme1table to type(db1table) and
    > then the code will work for both sbme1table and ppcstype1file."
    >
    > I really don't know what that means in the context of what I am
    > doing.
    >
    > At this stage of the game I am not doing anything. I am just opening
    > up forms, e.g.:
    >
    > dataform1 f string filename filename = "C:SIMPOLFormsmyform.sxf"
    > string errtext; errtext = "" f =@
    > opendataform1(filename,error=error,errortext=errtext)

    OK. But if your form doesn't use adrb.sbm, then the server you are
    trying out won't matter unless it is also sharing the tables from your
    *.sbm. Not only that, but if you are just opening the form and it only
    contains information about the *.sbm, and if you don't open the data
    source first and pass the table and the datasources to the
    opendataform1() function, then it still won't know where to find the
    data and it won't be able to use the ones that you open yourself expressly.

    This is not very different from Superbase, really. In Superbase you can
    do this:

    OPEN FORM "FOO"

    Which opens the form called FOO.SBV from the current directory, and as
    long as the database files are in the current directory, or in the same
    location as they were when the form was created, it will open those
    database files that it needs.

    However, if the database files are in a separate directory, and that is
    not the same location as the files were in when the form was created,
    then you will get an error opening the database files and it will fail.

    If using a form in SBL that was stored using PPCS database sources, if
    you don't have the database tables already open when you open the form,
    it will fail (Superbase does not store enough information to reopen the
    tables for you using PPCS).

    So in Superbase, especially if you are using a program designed to run
    in teh runtime system, to make this work, you might do:

    Superbase.ErrorhandlingPush()
    SET ERROR OFF ALL
    CLEAR ERRNO
    OPEN FILE SHARE,0"..datafoobar"
    IF ERRNO <> 0 THEN
    ' Error
    ELSE
    OPEN FILE SHARE,0"..datafoo2"
    IF ERRNO <> 0 THEN
    ' Error
    ELSE
    OPEN FORM "FOO"
    END IF
    END IF
    Superbase.ErrorhandlingPop()

    In SIMPOL, you have more overhead, since the environment is not doing
    everything for you (but that is why you can also get away with shipping
    less, depending on your application). The program below requires the
    formlib.sml. If you were to expand this significantly, you would create
    an application object and put the datasources dring and the tables array
    into it as properties, as well as the ppcstype1, since there is no real
    need to have more than one, no matter how many tables from however many
    different sources you are opening.

    function main()
    ppcstype1file foobar, foo2
    ppcstype1 ppcs
    integer e
    dring datasources
    datasourceinfo dsinfo
    array tables
    tbinfo tinfo
    dataform1 f

    e = 0
    ppcs =@ ppcstype1.new(udpport=.nul, error=e)
    if ppcs =@= .nul
    // Error
    else
    foobar =@ ppcs.openudpfile("127.0.0.1:4000", "FOOBAR", error=e)
    if foobar =@= .nul
    // error
    else
    datasources =@ dring.new()
    dsinfo =@ datasourceinfo.new(datasources, ppcstype1,
    "127.0.0.1:4000", ppcs, error=e)
    datasources.add(dsinfo.appnode)
    tinfo =@ tbinfo.new()
    tinfo.source =@ dsinfo
    tinfo.table =@ foobar
    tables =@ array.new()
    tables[1] =@ tinfo
    f =@ opendataform1("myform.sxf", datasources=datasources,
    tables=tables, error=e, errortext=errtext)
    if f =@= .nul
    // error
    else
    // continue from here
    end if
    end if
    end if
    end function

    Ciao, Neil

    in reply to: Error 3, two windows with forms using same database? #1542
    Michael
    Keymaster

    JDK wrote:
    > ok back to drawing board. is there a conversion app(in simpol or
    > elsewhere) that converts sbme table to ppcs table?

    It's the same file. Just use the simpolserver.smp in
    (Utilitiessimpolserver). All you need is a config file (a sample is
    there to work from. See the readme.txt for details. Then just use the
    ppcstype1 objects. For most things not related to table creation and
    management, you can just switch the types from sbme1table to
    type(db1table) and then the code will work for both sbme1table and
    ppcstype1file.

    Ciao, Neil

    in reply to: OLE example #1389
    Michael
    Keymaster

    JDK wrote:
    >> Try it then from Superbase, does it work? Or from Excel. The first
    >> step is making sure it works at all. I have had no end of support
    >> calls when I was at Superbase complaining that Superbase wasn't
    >> working, only to discover the actual problem was not a part of
    >> Superbase at all, it would turn out to be something totally
    >> unrelated, but because they were trying it from Superbase,
    >> Superbase was broken.
    >
    >
    > Yes, this is the problem where is it broken? First, am I doing
    > something wrong. I've always use DDE rather OLE; so it certainly
    > could be me.
    >
    > Second, I suppose if your OLE2Excel example worked without a hitch
    > (as it does is SB3); I would have presumed that I should first look
    > for the problem to be with WP. But as your OLE2Excel example didn't
    > work correctly. That puts Simpol into play as a source of problem.

    Possibly, though it may also be related to the version of Excel. When
    run on my machine, the ole2excel sample runs flawlessly. That is part of
    the problem. All this functionality does is give access to the OLE2
    layer, but everything that you do using it is dependent on the product
    that you are talking to. There are very definite limitations in the
    wxWidgets OLE2 support (only supporting out-of-process servers – exe's
    basically but not ActiveX controls).

    > Third, maybe the problem is on WP end. If someone could get the Excel
    > example working completely AND give an example using some other
    > application "WORD" maybe, then I would know that I need to search for
    > the problem within my capacities and/or with WP.

    This area tends to be full of experimentation, since it is not always
    well documented in target products.

    Until a number of people have done the experimentation, I can imagine it
    will take some time.

    Ciao, Neil

    in reply to: Error 3, two windows with forms using same database? #1727
    Michael
    Keymaster

    JDK wrote:
    > OK, there are obviously things I didn't understand about the
    > difference between SBME and PPCS data sources. And as I use SB2
    > rather than SB3, I also had some misunderstanding about what was
    > already possible using MDI mode.

    I see the confusion. The sbme1 objects are used to create and manipulate
    database tables in the *.sbm format. They open the containers for
    exclusive access. Although the sbme1 types support locking, this is
    primarily only of interest if you are using a multi-threaded application
    where more than one thread might be trying to work with the same
    database table concurrently (but since this is possible, locking calls
    are required for various things in sbme1).

    For normal multi-user access, you need to use PPSR to share the database
    tables that are in the *.sbm containers, and use ppcstype1 objects to
    access those tables. The tricky part of this is doing database
    maintenance, which has to be done in exclusive mode, so that requires
    shutting down the PPSR server (or at least unsharing the requisite
    tables and container) so that the target table can be opened and
    reorganized or modified using the sbme1 access method.

    Ciao, Neil

Viewing 15 posts - 496 through 510 (of 526 total)