SQL generated inside dynamic W4GL frames: problem and workaround

SQL generated inside dynamic W4GL frames: problem and workaround

Post by Wojtek Rapp » Tue, 20 Sep 1994 06:27:09



People building W4GL applications through dynamic frames may be
interested to know about some unusual behaviour which severely
limits the ability to generate SQL. There is a workaround, however.

A little background first.

I am building a W4GL application for a banking client who wants to browse
through tables containing audit trails derived via auditdb -f -t...
with the data being displayed in a tablefield.  He needs a generic
browser for audit trail tables. I don't of course want to keep on writing
individual browse frames for 40-50 tables, especially since the list of such
tables is a growing one. For future expansion reasons I also don't want to
write a single frame which manages a dynamic tablefield and dynamic SQL.  

So the answer is a dynamic application which generates a browse frame
dynamically for any specified audit trail table.  You pass it a table name
and it creates a frame displaying a window with a tablefield full of audit
trail data.  

The first stage works fine.  The code is based on the Building a Frame
Dynamically chapter of the W4GL Programming Guide.  I am very impressed
by this feature: you can create a template and then generate frames at a
fraction of the time. I suspect that a lot of the Architect module in
OpenRoad is a development of this.

But now for the problem. It concerns the dreaded quoted constant in dynamic
code. It's important because a lot of generated SQL hangs from it.

In my case, the user has to be able to specify a selection criterion for
the data.  This is the 'date' attribute which all audit trail tables have
in common.  He enters a 'from' and/or a 'to' date to define a range of data
for browsing.   After being converted to char, this has to be placed as a
quoted constant in the where clause of the SQL SELECT statement inside the
dynamic frame.  

Generalising a bit, the problem concerns parameter passing from frame A,
where the user supplies the value, to frame C, where the parameter ends up
in the where clause of an SQL statment, through frame B, which dynamically
generates frame C.

If coded according to TFM, W4GL will refuse to supply the closing quote  
for the passed constant in the generated frame script and so the dynamic
frame won't compile because of an unterminated string. If you give up at
this point you have to admit that dynamic frames are useless because of a
bug which means that they can't handle about 80% of standard where clauses.
Stand by for simple workaround.

The essentials of this problem are as follows (it's W4GL code and we are
inside the dynamic frame generator):

                (Parameter 'from_time', type date passed, )
                ('date' is our table attribute.           )

LEVEL 1: (This is TFM code. It doesn't work. See LEVEL 2.)
       /* Build W4GL script string containing SELECT */
                ...
       where_string='where date >= '+HC_QUOTE+char(from_time)+HC_QUOTE;        
                ...
       /* etc. write to script file, set up Script attribute for frame */      

LEVEL 2: (This is the above in the script generated for the dynamic frame)
                ...
                /* select etc. from table */
                where  date>='01/01/94 00:00:00       <--- no closing quote!
                ...
                (Dynamic frame won't compile.  We crash here.)

                (But it should have the closing quote:)
                ...
                /* select etc. from table */
                where  date>='01/01/94 00:00:00'       <---  closing quote!
                ...

The workaround is as follows:

LEVEL 1:
                ...
                where_string='where date >= '+HC_QUOTE+char(from_time);
                where_string=where_string+HC_QUOTE;  /*concat() works too */

The closing quote needs to be in a separate statement.

Believe it or not, this took a day ... >: (

===========================================================================

Client/Server Systems (UK) Ltd. London.                  +44 (081) 692 2958

 
 
 

SQL generated inside dynamic W4GL frames: problem and workaround

Post by Duncan Mackind » Thu, 29 Sep 1994 20:07:21


[stuff deleted]

: Stand by for simple workaround.

: The essentials of this problem are as follows (it's W4GL code and we are
: inside the dynamic frame generator):

:               (Parameter 'from_time', type date passed, )
:               ('date' is our table attribute.           )

: LEVEL 1: (This is TFM code. It doesn't work. See LEVEL 2.)
:        /* Build W4GL script string containing SELECT */
:               ...
:        where_string='where date >= '+HC_QUOTE+char(from_time)+HC_QUOTE;        
:               ...
:        /* etc. write to script file, set up Script attribute for frame */      

: LEVEL 2: (This is the above in the script generated for the dynamic frame)
:               ...
:               /* select etc. from table */
:               where  date>='01/01/94 00:00:00       <--- no closing quote!
:               ...
:               (Dynamic frame won't compile.  We crash here.)
:      
:               (But it should have the closing quote:)
:               ...
:               /* select etc. from table */
:               where  date>='01/01/94 00:00:00'       <---  closing quote!
:               ...
:              
: The workaround is as follows:

: LEVEL 1:
:               ...
:               where_string='where date >= '+HC_QUOTE+char(from_time);
:               where_string=where_string+HC_QUOTE;  /*concat() works too */

: The closing quote needs to be in a separate statement.

: Believe it or not, this took a day ... >: (

: ===========================================================================

: Client/Server Systems (UK) Ltd. London.                  +44 (081) 692 2958

Wojtek,

Simple tests show there are no problems concatenating quotes.  What is the
definition of your where_string variable?  Are you sure the problem is not that
where_string is not long enough to hold the result of your first (failing)
expression.  Remember that the result of char(date) is 25 characters long,
including trailing spaces, thus if where_string is < 25+16=31 chars long, the
result will be truncated losing the trailing quote.  Your second concatenation
then works since where_string is probably defined as varchar, and thus the
trailing spaces are stripped, before the quote is appended.  The solution
would be to use varchar(date) rather than char(date), or enlarge the size
of where_string.

Duncan Mackinder
CA-INGRES UK Technical Support.

 
 
 

SQL generated inside dynamic W4GL frames: problem and workaround

Post by Steve Caswe » Thu, 29 Sep 1994 08:41:36



>People building W4GL applications through dynamic frames may be
>interested to know about some unusual behaviour which severely
>limits the ability to generate SQL. There is a workaround, however.

>A little background first.

>I am building a W4GL application for a banking client who wants to browse
>through tables containing audit trails derived via auditdb -f -t...
>with the data being displayed in a tablefield.  He needs a generic
>browser for audit trail tables. I don't of course want to keep on writing
>individual browse frames for 40-50 tables, especially since the list of such
>tables is a growing one. For future expansion reasons I also don't want to
>write a single frame which manages a dynamic tablefield and dynamic SQL.  

>So the answer is a dynamic application which generates a browse frame
>dynamically for any specified audit trail table.  You pass it a table name
>and it creates a frame displaying a window with a tablefield full of audit
>trail data.  

>The first stage works fine.  The code is based on the Building a Frame
>Dynamically chapter of the W4GL Programming Guide.  I am very impressed
>by this feature: you can create a template and then generate frames at a
>fraction of the time. I suspect that a lot of the Architect module in
>OpenRoad is a development of this.

>But now for the problem. It concerns the dreaded quoted constant in dynamic
>code. It's important because a lot of generated SQL hangs from it.

>In my case, the user has to be able to specify a selection criterion for
>the data.  This is the 'date' attribute which all audit trail tables have
>in common.  He enters a 'from' and/or a 'to' date to define a range of data
>for browsing.   After being converted to char, this has to be placed as a
>quoted constant in the where clause of the SQL SELECT statement inside the
>dynamic frame.  

>Generalising a bit, the problem concerns parameter passing from frame A,
>where the user supplies the value, to frame C, where the parameter ends up
>in the where clause of an SQL statment, through frame B, which dynamically
>generates frame C.

>If coded according to TFM, W4GL will refuse to supply the closing quote  
>for the passed constant in the generated frame script and so the dynamic
>frame won't compile because of an unterminated string. If you give up at
>this point you have to admit that dynamic frames are useless because of a
>bug which means that they can't handle about 80% of standard where clauses.
>Stand by for simple workaround.

>The essentials of this problem are as follows (it's W4GL code and we are
>inside the dynamic frame generator):

>            (Parameter 'from_time', type date passed, )
>            ('date' is our table attribute.           )

>LEVEL 1: (This is TFM code. It doesn't work. See LEVEL 2.)
>       /* Build W4GL script string containing SELECT */
>            ...
>       where_string='where date >= '+HC_QUOTE+char(from_time)+HC_QUOTE;        

I've done these kinds of things often (including with date data types) and
have not experienced this problem.  I wonder if the problem is with using
the CHAR coersion instead of VARCHAR.  I use VARCHAR exclusively for
coersion and I've never had a problem.

Also, what version does this behavior occur in?

- Show quoted text -

>            ...
>       /* etc. write to script file, set up Script attribute for frame */      

>LEVEL 2: (This is the above in the script generated for the dynamic frame)
>            ...
>            /* select etc. from table */
>            where  date>='01/01/94 00:00:00       <--- no closing quote!
>            ...
>            (Dynamic frame won't compile.  We crash here.)

>            (But it should have the closing quote:)
>            ...
>            /* select etc. from table */
>            where  date>='01/01/94 00:00:00'       <---  closing quote!
>            ...

>The workaround is as follows:

>LEVEL 1:
>            ...
>            where_string='where date >= '+HC_QUOTE+char(from_time);
>            where_string=where_string+HC_QUOTE;  /*concat() works too */

>The closing quote needs to be in a separate statement.

>Believe it or not, this took a day ... >: (

>===========================================================================

>Client/Server Systems (UK) Ltd. London.                  +44 (081) 692 2958

--

Steve Caswell           |   (404) 448-7727    |  "The opinions expressed are my

The Palmer Group        |   uunet!tpghq!sfc   |   but they're all I've got."

 
 
 

SQL generated inside dynamic W4GL frames: problem and workaround

Post by Mike Schilli » Sat, 01 Oct 1994 01:33:58


: Simple tests show there are no problems concatenating quotes.  What is the
: definition of your where_string variable?  Are you sure the problem is not that
: where_string is not long enough to hold the result of your first (failing)
: expression.  Remember that the result of char(date) is 25 characters long,
: including trailing spaces, thus if where_string is < 25+16=31 chars long, the
: result will be truncated losing the trailing quote.  Your second concatenation
: then works since where_string is probably defined as varchar, and thus the
: trailing spaces are stripped, before the quote is appended.  The solution
: would be to use varchar(date) rather than char(date), or enlarge the size
: of where_string.
:
: Duncan Mackinder
: CA-INGRES UK Technical Support.
:
To state the same thing more bluntly:

        Never mix chars and varchars in an expression.  The rules for type
        conversion and promotion are weird enough that:

                1. You almost certainly don't understand them fully.
                2. If you did understand them fully, you wouldn't like what they do.

The key is that 'char' is considered a higher type than 'varchar', so the
value of a mixed character-type expressions is a char of some size.
You can use the terminal monitor to experiment with the value of this
kind of expression.  In almost all cases you'll see either
unexpected trailing spaces or truncation, because the result is a char of
the *wrong* size.

Mike

 
 
 

SQL generated inside dynamic W4GL frames: problem and workaround

Post by Duncan MacGreg » Thu, 06 Oct 1994 08:15:19



>: Simple tests show there are no problems concatenating quotes.  What is the
>: definition of your where_string variable?  ...
[munch]
>:
>: Duncan Mackinder
>: CA-INGRES UK Technical Support.
>:


Quote:>To state the same thing more bluntly:

>    Never mix chars and varchars in an expression.  The rules for type
>    conversion and promotion are weird enough that:

>    1. You almost certainly don't understand them fully.
>    2. If you did understand them fully, you wouldn't like what they do.

[munch]

>Mike

No kidding.

I had a similar irritating experience with W4GL's (and Isql's) coercion rules
about a year ago.  What happens with the following command in isql?

SELECT length(charextract(<column>, <t>)) FROM <table>

Assuming that <column> is declared as type CHAR *or* VARCHAR, and that all
of the strings stored are at least length <t>, one should get back nothing
but a column of '1's, right?  Nope: if the character at position <t> in a
row is a blank, that row will have a zero!  The type of the catenated
exporession is coerced to type CHAR, and CHARs, as I have found, elide
trailing and isolated blanks.

Even catenating two blank/space-valued VARCHARs does not work right:  I found
that the expression "VARCHAR('first') + VARCHAR(' ')" yields a FIVE character
string (the arguments to '+' are apparently coerced to CHAR).

Maybe OpenROAD will fix this sort of thing ...
--

#include <disclaimer.h> | Goodness is a "scalar" quality, requiring balance.

 
 
 

SQL generated inside dynamic W4GL frames: problem and workaround

Post by Duncan Mackind » Sat, 08 Oct 1994 23:42:54


: No kidding.

: I had a similar irritating experience with W4GL's (and Isql's) coercion rules
: about a year ago.  What happens with the following command in isql?

: SELECT length(charextract(<column>, <t>)) FROM <table>

: Assuming that <column> is declared as type CHAR *or* VARCHAR, and that all
: of the strings stored are at least length <t>, one should get back nothing
: but a column of '1's, right?  Nope: if the character at position <t> in a
: row is a blank, that row will have a zero!  The type of the catenated
: exporession is coerced to type CHAR, and CHARs, as I have found, elide
: trailing and isolated blanks.
No the problem here is that length removes trailing blanks from char (or c)
data type before counting length, not that CHAR causes trailing blanks to be
lost.  If charextract returned a varchar type, the result of charextract would
be an empty string when the character extracted was a space since trailing
blanks are removed - either way the result of the count should be 0. So
what you are seeing is what the manual says should happen (which may not be
what you actually want :-))

: Even catenating two blank/space-valued VARCHARs does not work right:  I found
: that the expression "VARCHAR('first') + VARCHAR(' ')" yields a FIVE character
: string (the arguments to '+' are apparently coerced to CHAR).
Not according the the SQL Reference Manual (pp 2-58 in my 6.4 Dec 1991 copy).
Concatenation of a varchar with a varchar doesnt trim blanks from either
argument (because as varchars they never have trailing blanks) and then
returns a result type of varchar (which would also force any trailing blanks
to be removed).  Thus the second argument ' ' becomes '' on casting to
varchar, thus the result should be five characters.

: Maybe OpenROAD will fix this sort of thing ...
I doubt it - this is SQL behaviour so W4GL or OpenRoad or whatever should
just follow standard SQL behaviour.
: --

: #include <disclaimer.h> | Goodness is a "scalar" quality, requiring balance.

Duncan Mackinder
CA-INGRES UK Technical Support.

 
 
 

SQL generated inside dynamic W4GL frames: problem and workaround

Post by Thomas Ma » Sat, 08 Oct 1994 22:50:30


[...]

>>To state the same thing more bluntly:

>>        Never mix chars and varchars in an expression.  The rules for type
>>        conversion and promotion are weird enough that:

>>        1. You almost certainly don't understand them fully.
>>        2. If you did understand them fully, you wouldn't like what they do.

[...]

>I had a similar irritating experience with W4GL's (and Isql's) coercion rules
>about a year ago.  What happens with the following command in isql?

>SELECT length(charextract(<column>, <t>)) FROM <table>

>Assuming that <column> is declared as type CHAR *or* VARCHAR, and that all
>of the strings stored are at least length <t>, one should get back nothing
>but a column of '1's, right?  Nope: if the character at position <t> in a
>row is a blank, that row will have a zero!  The type of the catenated
>exporession is coerced to type CHAR, and CHARs, as I have found, elide
>trailing and isolated blanks.

>Even catenating two blank/space-valued VARCHARs does not work right:  I found
>that the expression "VARCHAR('first') + VARCHAR(' ')" yields a FIVE character
>string (the arguments to '+' are apparently coerced to CHAR).

This gives real fun, if you scan strings letter by letter and append
the letter to another string. Did cost me some time already...

Another funny thing is, when you call a C-procedure with varchars as
'byref'-parameters. If the varchar has trailing spaces, the appropriate
variable in the C procedure will have the leading spaces retained, but as
soon as the value of the (C-) variable is passed back to W4GL, the leading
spaces vanish misteriously. But INGRES told me, this works as it is designed.
It's a feature :)   :(

Quote:>Maybe OpenROAD will fix this sort of thing ...

I don't have any hope, as it does not seem to be considered a faulty
behaviour.

Thomas Mack
TU Braunschweig, Abt. Datenbanken

 
 
 

SQL generated inside dynamic W4GL frames: problem and workaround

Post by Thomas Ma » Sun, 09 Oct 1994 01:38:51


[...]
Quote:>: Even catenating two blank/space-valued VARCHARs does not work right:  I found
>: that the expression "VARCHAR('first') + VARCHAR(' ')" yields a FIVE character
>: string (the arguments to '+' are apparently coerced to CHAR).
>Not according the the SQL Reference Manual (pp 2-58 in my 6.4 Dec 1991 copy).
>Concatenation of a varchar with a varchar doesnt trim blanks from either
>argument (because as varchars they never have trailing blanks) and then
>returns a result type of varchar (which would also force any trailing blanks
>to be removed).  Thus the second argument ' ' becomes '' on casting to
>varchar, thus the result should be five characters.

I cannot confirm this. Neither I can find any mention, that varchars
don't have trailing blanks, nor does experience say so nor does the
first description of the problem be correct.

In the above mentioned manual you can find:

page 2-15: A varchar data type can contain any character, including
           non-printing characters and the null character...

page 2-29: The default data type for string literals is varchar, ...

So we can do some tests:

If you say, select length('    ')\g you will correctly get 4 as the
answer. If you say: select length('Hallo '+'  ')\g you will also get
the correct answer of '8'.

Casting to varchar doesn't matter by the way in all these cases.

It is becoming interesting, when one starts using functions. So, if
you try: select length(charextract('   ',1))\g you get '0' as the
result ( same for charextract(varchar('   '),1)... )!

Some statements from the manual:

page 2-53: The string functions operate on c, char, text or varchar
           data.

and:

page 2-57: Name: charextract(c1,n)    
           Result Type: any character data type
           Description: Returns the nth byte of c1. If n is larger than
                        the length of the string, then the result is a
                        blank character.

From this I would expect '1' as the result in the above example and
also '1' if I say: select length(charextract('Hallo',37))\g

The manual is either incorrect here or highly (extreme highly) misleading.

Back to the first example:

 VARCHAR('first') + VARCHAR(' ')

yields a _six_ character string (not five!), but:

 VARCHAR('first')+VARCHAR(charextract('some string',5))

yields a _five_ character string (while:

 VARCHAR('first') + VARCHAR(charextract('some string',4))

gives you a six character string).

I hope these funny behaviours will be straightened out some time,
maybe I should ask Ingres about this behaviour or at least about
the misleading descriptions in the SQL Ref. manual.

As I'm testing already, some more tests reveal, that only charextract
exhibits this kind of behaviour.

I'm still interested in more opinions on this, our system here is:
INGRES SunOS Version 6.4/04 (su4.u42/00), does it look differently in
other implementations?

Thomas

Thomas Mack
TU Braunschweig, Abt. Datenbanken

 
 
 

SQL generated inside dynamic W4GL frames: problem and workaround

Post by Jamison H Abbo » Wed, 12 Oct 1994 23:14:42


[a bunch of stuff about Ingres' absurd and NON-ANSI standard coercion and
 functions deleted...]

>: Maybe OpenROAD will fix this sort of thing ...
>I doubt it - this is SQL behaviour so W4GL or OpenRoad or whatever should
>just follow standard SQL behaviour.
>: --

>: #include <disclaimer.h> | Goodness is a "scalar" quality, requiring balance.
>Duncan Mackinder
>CA-INGRES UK Technical Support.

Say Duncan,

Would you mind pointing out just WHERE in the ANSI or ISO standards for SQL
this behavior is required (or even recommended).  I haven't been able to find
it, myself.  I'm sure that the people at Sybase, Informix, Microsoft would be
interested also since I've used their database products and never encountered
this kind of behavior either.

Jim Abbott

 
 
 

SQL generated inside dynamic W4GL frames: problem and workaround

Post by Jamison H Abbo » Wed, 12 Oct 1994 23:23:36



>[...]

[some text describing concatenation and string function problems deleted]

Quote:>I hope these funny behaviours will be straightened out some time,
>maybe I should ask Ingres about this behaviour or at least about
>the misleading descriptions in the SQL Ref. manual.

Agree, absolutely.  Please DO!

Quote:>As I'm testing already, some more tests reveal, that only charextract
>exhibits this kind of behaviour.
>I'm still interested in more opinions on this, our system here is:
>INGRES SunOS Version 6.4/04 (su4.u42/00), does it look differently in
>other implementations?

I haven't gotten bitten by the particular issues you describe above [deleted],
but I had to use FLOATING POINT MULTIPLIES instead of simple string concaten-
ation to get some query results formatted properly!  (6.? on VMS)

Ok, here's an opinion: despite Ingres' other technical strengths (hereby ack-
nowledged, so don't flame me) the datatype functions/operations are, in some
cases, irretrievably kludged and should be redone from scratch.

Jim Abbott

Quote:>Thomas
>Thomas Mack
>TU Braunschweig, Abt. Datenbanken

 
 
 

SQL generated inside dynamic W4GL frames: problem and workaround

Post by Duncan Mackind » Tue, 18 Oct 1994 19:20:56


: Say Duncan,

: Would you mind pointing out just WHERE in the ANSI or ISO standards for SQL
: this behavior is required (or even recommended).  I haven't been able to find
: it, myself.  I'm sure that the people at Sybase, Informix, Microsoft would be
: interested also since I've used their database products and never encountered
: this kind of behavior either.

: Jim Abbott

OK Jim,

I was a bit hasty in my reply.  I shouldnt have used the word standard,
since I wasnt thinking of the ANSI & ISO standards.  And yes I was wrong
about trailing spaces being removed from varchars, the place where we
do remove them is from character form fields.  Oh well, I guess getting
fried on the net is an occupational hazard :-)

Duncan Mackinder

 
 
 

SQL generated inside dynamic W4GL frames: problem and workaround

Post by Mike Glendinni » Thu, 20 Oct 1994 23:28:54




>It is becoming interesting, when one starts using functions. So, if
>you try: select length(charextract('   ',1))\g you get '0' as the
>result ( same for charextract(varchar('   '),1)... )!

>Back to the first example:

> VARCHAR('first') + VARCHAR(' ')

>yields a _six_ character string (not five!), but:

> VARCHAR('first')+VARCHAR(charextract('some string',5))

>yields a _five_ character string (while:

> VARCHAR('first') + VARCHAR(charextract('some string',4))

>gives you a six character string).

What's going on here is that implicit or explicit conversion *from* CHAR/C
types *does* trim trailing blanks (the assumption being that they were
added artificially anyway).  CHAREXTRACT is a function returning CHAR,
so the result will be trimmed on coercion to VARCHAR.

I'm not going to argue here whether this is "correct" or not.

You can manually avoid this by using the explicit conversion function
II_NOTRM_VCH.  For example:

  VARCHAR('first')+II_NOTRM_VCH(charextract('some string',5))

will return a six character string as Thomas expects.

Quote:>I hope these funny behaviours will be straightened out some time,
>maybe I should ask Ingres about this behaviour or at least about
>the misleading descriptions in the SQL Ref. manual.

I agree - there are literally hundreds of funnies within the ADF
functions!  Let's hope CA will sort some of them out...


---

P.S.  While we're on the subject of undocumented character functions,
presumably everybody has tried the following:

   SELECT XYZZY('Mike Glendinning')

before.  If you know who Don Woods and Will Crowther are, then you
might understand the answer (but I have trouble finding people that do)!

 
 
 

SQL generated inside dynamic W4GL frames: problem and workaround

Post by Thomas Ma » Sat, 22 Oct 1994 19:13:51






[...]
>> VARCHAR('first') + VARCHAR(' ')

>>yields a _six_ character string (not five!), but:

>> VARCHAR('first')+VARCHAR(charextract('some string',5))

>>yields a _five_ character string (while:

[...]
>What's going on here is that implicit or explicit conversion *from* CHAR/C
>types *does* trim trailing blanks (the assumption being that they were
>added artificially anyway).  CHAREXTRACT is a function returning CHAR,
>so the result will be trimmed on coercion to VARCHAR.

This is acknowledged as a bug in the documentation where it uncorrectly
reads, that charextract returns 'any character data type'.

Quote:>I'm not going to argue here whether this is "correct" or not.

>You can manually avoid this by using the explicit conversion function
>II_NOTRM_VCH.  For example:

>  VARCHAR('first')+II_NOTRM_VCH(charextract('some string',5))

>will return a six character string as Thomas expects.

Oh yes, this works ok, but where is this documented? I never found
any mention of the function II_NOTRM_VCH.

Funny, INGRES support tells you some completely different workarounds
like using chars instead of varchars instead of this simple additional
function.

Thanks for this solution,

Thomas Mack
TU Braunschweig, Abt. Datenbanken

 
 
 

SQL generated inside dynamic W4GL frames: problem and workaround

Post by Mike Glendinni » Tue, 25 Oct 1994 09:24:34






>>You can manually avoid this by using the explicit conversion function
>>II_NOTRM_VCH.  For example:

>>  VARCHAR('first')+II_NOTRM_VCH(charextract('some string',5))

>>will return a six character string as Thomas expects.

>Oh yes, this works ok, but where is this documented? I never found
>any mention of the function II_NOTRM_VCH.

Ah, the quality and completeness of the documentation is what makes
working with Ingres such fun!  And of course it allows consultants
such as myself to make a fairly good living as well :-)

You won't find II_NOTRM_VCH (or its companion II_NOTRM_TXT) in any
manuals, as the prefix II might lead you to guess.  They do get a
small mention in the C header file for UDTs ('ingres/files/iiadd.h')
in the list of function codes, however!

By the way, sorry for my late reply to this message (and others).  It
seems our news feed to Sequent in the US is a bit unreliable, and can
get over a week behind!


 
 
 

SQL generated inside dynamic W4GL frames: problem and workaround

Post by Tim Holm » Thu, 27 Oct 1994 00:12:55


: You won't find II_NOTRM_VCH (or its companion II_NOTRM_TXT) in any
: manuals

Wow, sorry Mike I just don't follow what these are supposed to be doing
here (sounds good though - the more undocumented features we can pull
out of the hat the better =):-) )

--
------------------------------------------------

------------------------------------------------

 
 
 

1. WINDOWS4GL dynamic frame problem

I hope someone is able to help me with the following problem :

How do you delete a dynamic frame which has been created using
FrameSource.Create()? At the moment I have to log out of WINDOWS4GL to get rid
of previously executed versions of the dynamic frame and allow the latest
changes to appear.

Also, I am able to create column fields for a table dynamically using a
prototype, but not from scratch. What attributes need to be defined for a
formfield which is to be inserted into a table dynamically?

Thank you
Angela Fowler

Department of Computer Science
University of Western Australia

2. contents from a stored procedure

3. SQL Server 6.5 Dynamic SQL inside Trigger to Access deleted Table

4. Transaction Aborting on sql call failure

5. W4GL-create and save a Frame at runtime

6. Error, Convert to VARCHAR drops values

7. INGRES W4gl Referencing Fields in Child Frame....

8. Security of setuid W4GL frame?

9. Blocking a frame in W4GL 2.0

10. W4GL - "Invisible" frames start up iconised

11. W4GL: How to scroll frames

12. W4GL: Frame-Placement like InputFocus