mirror of
https://github.com/postgres/postgres.git
synced 2025-05-12 16:21:30 +03:00
Bring pgaccess up to 0.82 - last update before release
This commit is contained in:
parent
77ac40d73e
commit
bb01e98d48
@ -24,7 +24,7 @@ PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
|
||||
|
||||
|
||||
|
||||
PGACCESS 0.81 1 March 1998
|
||||
PGACCESS 0.82 1 March 1998
|
||||
================================
|
||||
I dedicate this program to my little 4 year daughter Ana-Maria and my wife
|
||||
for their understanding. I hope they will forgive me for spending so many
|
||||
|
@ -1,104 +1,105 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
|
||||
<HTML>
|
||||
<HEAD>
|
||||
<TITLE></TITLE>
|
||||
<META NAME="GENERATOR" CONTENT="Mozilla/3.04Gold (X11; I; Linux 2.0.32 i586) [Netscape]">
|
||||
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
|
||||
<META NAME="GENERATOR" CONTENT="Mozilla/4.04 [en] (X11; I; Linux 2.0.32 i586) [Netscape]">
|
||||
</HEAD>
|
||||
<BODY TEXT="#000000" BGCOLOR="#FFEBCD" LINK="#0000EF" VLINK="#51188E" ALINK="#FF0000">
|
||||
|
||||
<H1>FORMS</H1>
|
||||
<H1>
|
||||
FORMS</H1>
|
||||
|
||||
<P>
|
||||
<HR WIDTH="100%"></P>
|
||||
<HR WIDTH="100%">
|
||||
|
||||
<P>This version (0.81) of PgAccess introduce the visual form builder.</P>
|
||||
<P>This version (0.82) of PgAccess introduce the visual form builder.
|
||||
|
||||
<P>For the moment, it has only some basic widgets : labels, entries, buttons
|
||||
, listboxes , checkboxes and radiobuttons.</P>
|
||||
, listboxes , checkboxes and radiobuttons.
|
||||
|
||||
<P>Also there is a query widget that allows you yo have access to a query
|
||||
results.</P>
|
||||
results.
|
||||
|
||||
<P>In a manner very similar with Visual Tcl or Visual Basic, the user must
|
||||
select a widget from the toolbar and drags on the canvas the rectangle
|
||||
that would define the widget. It can also specify some attributes in a
|
||||
separate window. Renaming, resizing items are possible modifying parameters
|
||||
in attribute window. Do not forget to press Enter in the edit field after
|
||||
changing a value in order to be accepted.</P>
|
||||
changing a value in order to be accepted.
|
||||
|
||||
<P>You can also move items by dragging them or delete them by pressing
|
||||
Del key.</P>
|
||||
Del key.
|
||||
|
||||
<P>In attribute window, there are some fields named <B><TT><FONT SIZE=+1>Command
|
||||
</FONT></TT></B>and <B><TT><FONT SIZE=+1>Variable</FONT></TT></B>.</P>
|
||||
</FONT></TT></B>and <B><TT><FONT SIZE=+1>Variable</FONT></TT></B>.
|
||||
|
||||
<P>The field <B><TT><FONT SIZE=+1>Command </FONT></TT></B>have meaning
|
||||
only for Button widgets and holds the command that will be invoked when
|
||||
the button is pressed.</P>
|
||||
the button is pressed.
|
||||
|
||||
<P>The field <B><TT><FONT SIZE=+1>Variable </FONT></TT></B>have meaning
|
||||
only for EditField , Label widgets and checkboxes and it is the name of
|
||||
the global variable that will hold the value for that widget. For checkboxes
|
||||
the values are 1 or 0.</P>
|
||||
the values are 1 or 0.
|
||||
|
||||
<P>In order to make a simple test, put an entry field and set it's variable
|
||||
to <B>v1</B> and a button who's command is "set v1 whisky". Press
|
||||
the button "Test form" and click on the button. In that entry
|
||||
should appear whisky. <BR>
|
||||
Another test is defining in Script module a script called "My first
|
||||
script" having the following commands:<BR>
|
||||
<TT><FONT SIZE=+1>tk_messageBox -title Warning -message "This is my
|
||||
first message!"<BR>
|
||||
</FONT></TT>and then define a button who's command is <B><TT><FONT SIZE=+1>execute_script
|
||||
"My first script"</FONT></TT></B>.</P>
|
||||
to <B>v1</B> and a button who's command is "set v1 whisky". Press the button
|
||||
"Test form" and click on the button. In that entry should appear whisky.
|
||||
<BR>Another test is defining in Script module a script called "My first
|
||||
script" having the following commands:
|
||||
<BR><TT><FONT SIZE=+1>tk_messageBox -title Warning -message "This is my
|
||||
first message!"</FONT></TT>
|
||||
<BR>and then define a button who's command is <B><TT><FONT SIZE=+1>execute_script
|
||||
"My first script"</FONT></TT></B>.
|
||||
<H2>
|
||||
Database manipulation</H2>
|
||||
Let's presume that our form have the internal name <B><TT>mf </TT></B>(my
|
||||
form). He wil be referred inside the Tcl/Tk source as <B><TT>.mf</TT></B>
|
||||
<BR>If you want to close the form in run-time you have to issue the command
|
||||
<B><TT>destroy .mf</TT></B>
|
||||
|
||||
<H2>Database manipulation</H2>
|
||||
|
||||
<P>Let's presume that our form have the internal name <B><TT>mf </TT></B>(my
|
||||
form). He wil be referred inside the Tcl/Tk source as <B><TT>.mf<BR>
|
||||
</TT></B>If you want to close the form in run-time you have to issue the
|
||||
command <B><TT>destroy .mf</TT></B></P>
|
||||
|
||||
<P>Also, any widget will have the name prefixed by <B><TT>.mf </TT></B> We
|
||||
will have <B><TT>.mf.button1</TT></B> or <B><TT>.mf.listbox1</TT></B> .</P>
|
||||
<P>Also, any widget will have the name prefixed by <B><TT>.mf </TT></B>
|
||||
We will have <B><TT>.mf.button1</TT></B> or <B><TT>.mf.listbox1</TT></B>
|
||||
.
|
||||
|
||||
<P>We can name the query widget <B><TT>qry</TT></B> for example. The complete
|
||||
name will be <B><TT>.mf.qry</TT></B> then.<BR>
|
||||
The <B><TT>Command </TT></B>property of the query widget must contain the
|
||||
SQL command that will be executed.<BR>
|
||||
When the form will be in run-time, automatically you will have acces to
|
||||
the following methods :</P>
|
||||
name will be <B><TT>.mf.qry</TT></B> then.
|
||||
<BR>The <B><TT>Command </TT></B>property of the query widget must contain
|
||||
the SQL command that will be executed.
|
||||
<BR>When the form will be in run-time, automatically you will have acces
|
||||
to the following methods :
|
||||
|
||||
<P><TT>.mf.qry:execute</TT> - opens the connection and execute the query
|
||||
(returns nothing)<BR>
|
||||
<TT>.mf.qry:nrecords</TT> - returns the number of records in the selected
|
||||
query<BR>
|
||||
<TT>.mf.qry:fields</TT> - returns a list of the fields in the result set<BR>
|
||||
<TT>.mf.qry:movefirst</TT> - move the cursor to the first record in the
|
||||
recordset<BR>
|
||||
<TT>.mf.qry:movelast , .mf.qry:movenext , .mf.qry:moveprevious </TT>- moves
|
||||
the cursor <BR>
|
||||
<TT>.mf.qry:updatecontrols</TT> - update the variables inside the designed
|
||||
form that have a particular name (I'll explain later)<BR>
|
||||
<TT>.mf.qry:close</TT> - close the connection (<B><FONT COLOR="#FF0000">if
|
||||
you don't close the query result, you will loose memory</FONT></B>)</P>
|
||||
(returns nothing)
|
||||
<BR><TT>.mf.qry:nrecords</TT> - returns the number of records in the selected
|
||||
query
|
||||
<BR><TT>.mf.qry:fields</TT> - returns a list of the fields in the result
|
||||
set
|
||||
<BR><TT>.mf.qry:movefirst</TT> - move the cursor to the first record in
|
||||
the recordset
|
||||
<BR><TT>.mf.qry:movelast , .mf.qry:movenext , .mf.qry:moveprevious </TT>-
|
||||
moves the cursor
|
||||
<BR><TT>.mf.qry:updatecontrols</TT> - update the variables inside the designed
|
||||
form that have a particular name (I'll explain later)
|
||||
<BR><TT>.mf.qry:close</TT> - close the connection (<B><FONT COLOR="#FF0000">if
|
||||
you don't close the query result, you will loose memory</FONT></B>)
|
||||
|
||||
<P>If you want to bound some controls to the fields of the recordset, you
|
||||
will have to name their associate variable like that :</P>
|
||||
will have to name their associate variable like that :
|
||||
|
||||
<P><TT>.mf.qry.salary</TT> to get the "salary" field , or <TT>.mf.qry.name</TT>
|
||||
to get the "name" field.</P>
|
||||
<P><TT>.mf.qry.salary</TT> to get the "salary" field , or <TT>.mf.qry.name</TT>
|
||||
to get the "name" field.
|
||||
|
||||
<P>It's simple, isn't it ? It's just like a new widget that have some properties
|
||||
and methods that can be accesed.<BR>
|
||||
Also, the name convention is just like in Tcl/Tk.</P>
|
||||
and methods that can be accesed.
|
||||
<BR>Also, the name convention is just like in Tcl/Tk.
|
||||
|
||||
<P>In order to avoid naming user defined forms with a particular
|
||||
name of another PgAccess form, I would recommend naming them as udf0, udf1
|
||||
(user defined form 0 , 1 )
|
||||
|
||||
<P>
|
||||
<HR WIDTH="25%"></P>
|
||||
<HR WIDTH="25%">
|
||||
|
||||
<P>Please feel free to send me your oppinion at <B>teo@flex.ro</B> on forms
|
||||
designing and usage.<BR>
|
||||
</P>
|
||||
|
||||
designing and usage.
|
||||
</BODY>
|
||||
</HTML>
|
||||
|
@ -1,124 +1,118 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
|
||||
<HTML>
|
||||
<HEAD>
|
||||
<TITLE>PgAccess - a Tcl/Tk PostgreSQL interface</TITLE>
|
||||
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
|
||||
<META NAME="GENERATOR" CONTENT="Mozilla/3.04Gold (X11; I; Linux 2.0.32 i586) [Netscape]">
|
||||
<META NAME="GENERATOR" CONTENT="Mozilla/4.04 [en] (X11; I; Linux 2.0.32 i586) [Netscape]">
|
||||
<TITLE>PgAccess - a Tcl/Tk PostgreSQL interface</TITLE>
|
||||
</HEAD>
|
||||
<BODY BGCOLOR="#FFFFFF">
|
||||
|
||||
<H1>PgAccess - a database management tool for <A HREF="http://www.postgreSQL.org">PostgreSQL</A></H1>
|
||||
<H1>
|
||||
PgAccess - a database management tool for <A HREF="http://www.postgreSQL.org">PostgreSQL</A></H1>
|
||||
|
||||
<P>
|
||||
<HR></P>
|
||||
<HR>
|
||||
|
||||
<P>This program is protected by the following <A HREF="copyright.html">copyright</A>
|
||||
</P>
|
||||
<LI>
|
||||
<A HREF="pgaccess-0.82.tar.gz">Download the last version of Pgaccess (press
|
||||
shift and click this link)</A>.</LI>
|
||||
|
||||
<LI><A HREF="pgaccess-0.81.tar.gz">Download the last version of Pgaccess
|
||||
(press shift and click this link)</A>.</LI>
|
||||
|
||||
<P>Latest version of PgAccess is 0.81 , 1 March 1998 ! </P>
|
||||
|
||||
<P>Latest version of PgAccess is 0.82 , 1 March 1998 !
|
||||
<BR>
|
||||
<CENTER><TABLE BORDER=3 CELLSPACING=0 CELLPADDING=0 WIDTH="100%" BGCOLOR="#FFB6C1" >
|
||||
<TR>
|
||||
<TD>
|
||||
<CENTER><P><BR>
|
||||
<B><FONT SIZE=+2>PgAccess can now design <A HREF="forms.html">Forms</A></FONT></B>,
|
||||
<B><FONT SIZE=+2><A HREF="pga-rad.html">Reports and Scripts</A></FONT></B></P></CENTER>
|
||||
<CENTER></CENTER>
|
||||
|
||||
<CENTER><B><FONT SIZE=+2>PgAccess can now design <A HREF="forms.html">Forms</A></FONT></B>,
|
||||
<B><FONT SIZE=+2><A HREF="pga-rad.html">Reports and Scripts</A></FONT></B></CENTER>
|
||||
</TD>
|
||||
</TR>
|
||||
</TABLE></CENTER>
|
||||
|
||||
<P>I think that there were some problems loading libpgtcl library. <BR>
|
||||
I invite you to read a <A HREF="index.html#libpgtcl">special section concerning
|
||||
<B>libpgtcl</B></A> </P>
|
||||
|
||||
<H3><FONT COLOR="#191970">What does PgAccess now!</FONT></H3>
|
||||
|
||||
<P>Here are some images from PgAccess windows : <A HREF="pic-pga-1.gif">Main
|
||||
I think that there were some problems loading libpgtcl library.
|
||||
<BR>I invite you to read a <A HREF="index.html#libpgtcl">special section
|
||||
concerning <B>libpgtcl</B></A>
|
||||
<H3>
|
||||
<FONT COLOR="#191970">What does PgAccess now!</FONT></H3>
|
||||
Here are some images from PgAccess windows : <A HREF="pic-pga-1.gif">Main
|
||||
window </A>, <A HREF="pic-pga-2.gif">table builder </A>, <A HREF="pic-pga-4.gif">table(query)
|
||||
view </A>, <A HREF="pic-pga-3.gif">visual query builder </A>. </P>
|
||||
view </A>, <A HREF="pic-pga-3.gif">visual query builder </A>.
|
||||
|
||||
<P><B>Tables</B> <BR>
|
||||
- opening tables for viewing, max 200 records (changed by preferences menu)
|
||||
<BR>
|
||||
- column resizing, dragging the vertical grid line (better in table space
|
||||
rather than in the table header) <BR>
|
||||
- text wrap in cells - layout saved for every table <BR>
|
||||
- import/export to external files (SDF,CSV) <BR>
|
||||
- filter capabilities (enter filter like (price>3.14) <BR>
|
||||
- sort order capabilities (enter manually the sort field(s)) <BR>
|
||||
- editing in place <BR>
|
||||
- improved table generator assistant <BR>
|
||||
- improved field editing <BR>
|
||||
<B>Queries</B> <BR>
|
||||
- define , edit and stores "user defined queries" <BR>
|
||||
- store queries as views <BR>
|
||||
- execution of queries <BR>
|
||||
- viewing of select type queries result <BR>
|
||||
- query deleting and renaming <BR>
|
||||
- <B><BLINK><FONT COLOR="#FF0000">NEW !!!</FONT></BLINK></B> Visual query
|
||||
builder with drag & drop capabilities. For any of you who had installed
|
||||
the Tcl/Tk plugin for Netscape Navigator, you can see it at work <A HREF="qbtclet.html">clicking
|
||||
here</A> <BR>
|
||||
<B>Sequences</B> <BR>
|
||||
- defines sequences, delete them and inspect them <BR>
|
||||
<B>Functions</B> <BR>
|
||||
- define, inspect and delete functions in SQL language <BR>
|
||||
<B>Reports<BR>
|
||||
</B>- design and display simple reports from tables<BR>
|
||||
- fields and labels, font changing, style and size<BR>
|
||||
- saves and loads report description from database<BR>
|
||||
- show report previews, sample postscript output file<BR>
|
||||
<B>Forms<BR>
|
||||
</B>- open user defined forms<BR>
|
||||
- form design module available<BR>
|
||||
- query widget available, controls bound to query results<BR>
|
||||
- <A HREF="forms.html">click here</A> for a description of forms and how
|
||||
they can be used<BR>
|
||||
<B>Scripts<BR>
|
||||
</B>- define, modify and call user defined scripts<BR>
|
||||
Here is <A HREF="pga-rad.html">a special section concerning forms and scripts</A>
|
||||
.</P>
|
||||
<P><B>Tables</B>
|
||||
<BR>- opening tables for viewing, max 200 records (changed by preferences
|
||||
menu)
|
||||
<BR>- column resizing, dragging the vertical grid line (better in table
|
||||
space rather than in the table header)
|
||||
<BR>- text wrap in cells - layout saved for every table
|
||||
<BR>- import/export to external files (SDF,CSV)
|
||||
<BR>- filter capabilities (enter filter like (price>3.14)
|
||||
<BR>- sort order capabilities (enter manually the sort field(s))
|
||||
<BR>- editing in place
|
||||
<BR>- improved table generator assistant
|
||||
<BR>- improved field editing
|
||||
<BR><B>Queries</B>
|
||||
<BR>- define , edit and stores "user defined queries"
|
||||
<BR>- store queries as views
|
||||
<BR>- execution of queries
|
||||
<BR>- viewing of select type queries result
|
||||
<BR>- query deleting and renaming
|
||||
<BR>- <B><BLINK><FONT COLOR="#FF0000">NEW !!!</FONT></BLINK></B> Visual
|
||||
query builder with drag & drop capabilities. For any of you who had
|
||||
installed the Tcl/Tk plugin for Netscape Navigator, you can see it at work
|
||||
<A HREF="qbtclet.html">clicking here</A>
|
||||
<BR><B>Sequences</B>
|
||||
<BR>- defines sequences, delete them and inspect them
|
||||
<BR><B>Functions</B>
|
||||
<BR>- define, inspect and delete functions in SQL language
|
||||
<BR><B>Reports</B>
|
||||
<BR>- design and display simple reports from tables
|
||||
<BR>- fields and labels, font changing, style and size
|
||||
<BR>- saves and loads report description from database
|
||||
<BR>- show report previews, sample postscript output file
|
||||
<BR><B>Forms</B>
|
||||
<BR>- open user defined forms
|
||||
<BR>- form design module available
|
||||
<BR>- query widget available, controls bound to query results
|
||||
<BR>- <A HREF="forms.html">click here</A> for a description of forms and
|
||||
how they can be used
|
||||
<BR><B>Scripts</B>
|
||||
<BR>- define, modify and call user defined scripts
|
||||
<BR>Here is <A HREF="pga-rad.html">a special section concerning forms and
|
||||
scripts</A> .
|
||||
|
||||
<P>On the TODO list! <BR>
|
||||
- table design (add new fields, renaming, etc.) <BR>
|
||||
<BR>
|
||||
</P>
|
||||
<P>On the TODO list!
|
||||
<BR>- table design (add new fields, renaming, etc.)
|
||||
|
||||
<P>
|
||||
|
||||
<P>If you have any comment, suggestion for improvements, please feel free
|
||||
to e-mail to : <A HREF="mailto:teo@flex.ro">teo@flex.ro </A> <BR>
|
||||
</P>
|
||||
to e-mail to : <A HREF="mailto:teo@flex.ro">teo@flex.ro </A>
|
||||
|
||||
<P><B><FONT COLOR="#FF1493"><FONT SIZE=+2>Mailing list for PgAccess </FONT></FONT></B><A HREF="maillist.html">Here
|
||||
you will find how to subscribe to this mailing list</A>.</P>
|
||||
you will find how to subscribe to this mailing list</A>.
|
||||
|
||||
<P>
|
||||
<HR></P>
|
||||
|
||||
<H1>More information about libgtcl</H1>
|
||||
|
||||
<P>Also, you will need the PostgreSQL to Tcl interface library, lined as
|
||||
a Tcl/Tk 'load'-able module. It is called libpgtcl and the source is located
|
||||
<HR>
|
||||
<H1>
|
||||
More information about libgtcl</H1>
|
||||
Also, you will need the PostgreSQL to Tcl interface library, lined as a
|
||||
Tcl/Tk 'load'-able module. It is called libpgtcl and the source is located
|
||||
in the PostgreSQL directory /src/interfaces/libpgtcl. Specifically, you
|
||||
will need a libpgtcl library that is 'load'-able from Tcl/Tk. This is technically
|
||||
different from an ordinary PostgreSQL loadable object file, because libpgtcl
|
||||
is a collection of object files. Under Linux, this is called libpgtcl.so.
|
||||
<BR>
|
||||
You can download <A HREF="libpgtcl.so">from here </A>a version already
|
||||
<BR>You can download <A HREF="libpgtcl.so">from here </A>a version already
|
||||
compiled for Linux i386 systems. Just copy libpgtcl.so into your system
|
||||
library director (/usr/lib) and go for it. One of the solutions is to remove
|
||||
from the source the line containing <B>load libpgtcl.so </B>and to load
|
||||
pgaccess.tcl not with wish, but with pgwish (or wishpg) that wish that
|
||||
was linked with libpgtcl library! </P>
|
||||
was linked with libpgtcl library!
|
||||
|
||||
<P>If you have installed RedHat 5.0, you should get the last distribution
|
||||
kit of postgreSQL and compile it from scratch. RedHat 5.0 is using some
|
||||
new versions of libraries and you have to compile and install again at
|
||||
least <B>libpq </B>and <B><TT>libpgtcl </TT></B>libraries.</P>
|
||||
|
||||
<P>However, the application should work without problems! </P>
|
||||
least <B>libpq </B>and <B><TT>libpgtcl </TT></B>libraries.
|
||||
|
||||
<P>However, the application should work without problems!
|
||||
</BODY>
|
||||
</HTML>
|
||||
|
@ -1,198 +1,65 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
|
||||
<HTML>
|
||||
<HEAD>
|
||||
<TITLE></TITLE>
|
||||
<META NAME="GENERATOR" CONTENT="Mozilla/3.04Gold (X11; I; Linux 2.0.32 i586) [Netscape]">
|
||||
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
|
||||
<META NAME="GENERATOR" CONTENT="Mozilla/4.04 [en] (X11; I; Linux 2.0.32 i586) [Netscape]">
|
||||
</HEAD>
|
||||
<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000EF" VLINK="#51188E" ALINK="#FF0000">
|
||||
|
||||
<H1>PgAccess - Scripts and Forms
|
||||
<H1>
|
||||
PgAccess - Scripts and Forms
|
||||
<HR WIDTH="100%"></H1>
|
||||
Beginning with 0.70 version, I have introduced in PgAccess two new modules
|
||||
for operating with scripts and forms.
|
||||
|
||||
<P>Beginning with 0.70 version, I have introduced in PgAccess two new modules
|
||||
for operating with scripts and forms.</P>
|
||||
<P> This would give to PgAccess the power of creating application
|
||||
directly into PgAccess, defining new modules, procedures, forms and possibly
|
||||
making it a rapid development tool for PostgreSQL. The "scripts" and "forms"
|
||||
modules are using two new tables called pga_forms and pga_scripts. PgAccess
|
||||
take care of creating them if user is opening a new database and grant
|
||||
ALL permissions on them to PUBLIC.
|
||||
<BR>
|
||||
<BR> Of course, when Designing a script, a simple text editor
|
||||
is opened and text is saved as is in pga_scripts table. When "designing"
|
||||
a form, a "form editor" that would be very similar with "Visual Tcl" is
|
||||
invoked.
|
||||
|
||||
<P> This would give to PgAccess the power of creating
|
||||
application directly into PgAccess, defining new modules, procedures, forms
|
||||
and possibly making it a rapid development tool for PostgreSQL. The "scripts"
|
||||
and "forms" modules are using two new tables called pga_forms
|
||||
and pga_scripts. PgAccess take care of creating them if user is opening
|
||||
a new database and grant ALL permissions on them to PUBLIC. <BR>
|
||||
Both scripts and forms are containing in fact sources
|
||||
of code written in Tcl/Tk and when the user has choose to "open"
|
||||
one of them, either by double-clicking in the main window or pressing the
|
||||
"Open" button PgAccess is searching for them in pga_forms or
|
||||
pga_scripts table, get the code and simply "<B>eval</B>" it !<BR>
|
||||
Of course, when Designing a script, a simple text editor
|
||||
is opened and text is saved as is in pga_scripts table. When "designing"
|
||||
a form, a "form editor" that would be very similar with "Visual
|
||||
Tcl" would be invoked.</P>
|
||||
|
||||
<P> This mechanism and the extremely versatile scripting
|
||||
mode of Tcl/Tk would give PgAccess a great power for creating end user
|
||||
application using PosgreSQL. The most important thing is that the user
|
||||
could call procedures and functions that I have used for building up PgAccess
|
||||
!</P>
|
||||
|
||||
<H3>Forms</H3>
|
||||
|
||||
<P> Forms are special Tcl/Tk source code that is used
|
||||
for creating windows and placing widgets inside it. When Tcl/Tk is "eval"
|
||||
them, a new window appears, with buttons as defined that could call "user
|
||||
defined scripts", "user defined procedures" or "internal
|
||||
PgAccess procedures".<BR>
|
||||
For the moment, 0.70 version of PgAccess does not have
|
||||
a module for designing forms. It is intended to make an interface to the
|
||||
most powerful program of designing applications under Tcl/Tk , Visual Tcl
|
||||
, so it could handle forms designed to be used inside PgAccess.<BR>
|
||||
Forms can hold all the widgets allowed in Tcl/Tk , buttons,
|
||||
<P> This mechanism and the extremely versatile scripting mode
|
||||
of Tcl/Tk would give PgAccess a great power for creating end user application
|
||||
using PosgreSQL. The most important thing is that the user could call procedures
|
||||
and functions that I have used for building up PgAccess !
|
||||
<H3>
|
||||
Forms</H3>
|
||||
Forms are used for creating windows and placing widgets inside
|
||||
it. When PgAccess interpreet them, a new window appear, with buttons as
|
||||
defined that could call "user defined scripts", "user defined procedures"
|
||||
or "internal PgAccess procedures".
|
||||
<BR> Forms can hold all the widgets allowed in Tcl/Tk , buttons,
|
||||
check-boxes, radio-buttons, list-boxes, frames, canvases, etc. With these
|
||||
forms, you can control your application so PgAccess would become just a
|
||||
"shell", a startup point for you applications.</P>
|
||||
|
||||
<H3>Scripts</H3>
|
||||
|
||||
<P> Scripts are normal Tcl/Tk code that is interpreted
|
||||
by Tcl/Tk. You can define your own procedures inside a script called "Library"
|
||||
for example. You can call your procedures from within another script, from
|
||||
another procedure.<BR>
|
||||
The most important thing is that you have total access
|
||||
"shell", a startup point for you applications. See the <A HREF="forms.html">special
|
||||
section concerning forms.</A>
|
||||
<H3>
|
||||
Scripts</H3>
|
||||
Scripts are normal Tcl/Tk code that is interpreted by Tcl/Tk.
|
||||
You can define your own procedures inside a script called "Library" for
|
||||
example. You can call your procedures from within another script, from
|
||||
another procedure.
|
||||
<BR> The most important thing is that you have total access
|
||||
to the PgAccess's core of functions and procedures used by me in building
|
||||
PgAccess as an application. Just write <B><TT><FONT COLOR="#000080">open_table
|
||||
"Your sample table"</FONT></TT></B> and you'll see the result.<BR>
|
||||
If you are writing a script called "Autoexec"
|
||||
then it will be executed every time the database is opened. You can put
|
||||
inside different commands that you want to be executed such as : running
|
||||
scripts that would define your own procedures such as <B><TT><FONT COLOR="#000080">execute_script
|
||||
"My own procedure library"</FONT></TT></B> or open a form with
|
||||
<B><TT><FONT COLOR="#000080">open_form "Main window with menu buttons"</FONT></TT></B>
|
||||
, and so on.</P>
|
||||
"Your sample table"</FONT></TT></B> and you'll see the result.
|
||||
<BR> If you are writing a script called "Autoexec" then it
|
||||
will be executed every time the database is opened. You can put inside
|
||||
different commands that you want to be executed such as : running scripts
|
||||
that would define your own procedures such as <B><TT><FONT COLOR="#000080">execute_script
|
||||
"My own procedure library"</FONT></TT></B> or open a form with <B><TT><FONT COLOR="#000080">open_form
|
||||
"Main window with menu buttons"</FONT></TT></B> , and so on.
|
||||
|
||||
<P>
|
||||
<HR WIDTH="100%"></P>
|
||||
|
||||
<H2>Examples :</H2>
|
||||
|
||||
<P>We would like to give you some examples for using forms and scripts.
|
||||
First of all, get your PgAccess 0.70 version NOW !</P>
|
||||
|
||||
<P><IMG SRC="a_right.gif" HEIGHT=20 WIDTH=20> Define your first
|
||||
form. Remember, the form design module hasn't arrived yet :-( , so you
|
||||
will have to define your first form using an action query :<BR>
|
||||
1. Click on Query tab and press "New" button<BR>
|
||||
2. Enter "<TT>Generate my first form</TT>" in Query name field<BR>
|
||||
3. Copy and paste from your browser window into query definition area the
|
||||
next text :<BR>
|
||||
<BR>
|
||||
<TT>insert into pga_forms values('My first form',' set base .pga_win_1;
|
||||
if {[winfo exists $base]} { wm deiconify $base; return }; toplevel $base
|
||||
-class Toplevel; wm focusmodel $base passive; wm geometry $base 395x389+325+188;
|
||||
wm maxsize $base 1009 738; wm minsize $base 1 1; wm overrideredirect $base
|
||||
0; wm resizable $base 1 1; wm deiconify $base; wm title $base "User
|
||||
defined Form No.1"; button $base.b1 -command {execute_script "My
|
||||
first script"} -text "My first button" ; button $base.bexit
|
||||
-command {destroy [focus]} -padx 9 -pady 3 -text Exit ; place $base.bexit
|
||||
-x 340 -y 355 -anchor nw -bordermode ignore ; place $base.b1 -x 10 -y 10
|
||||
-anchor nw;'); </TT></P>
|
||||
|
||||
<P>4. Press "Save query definition button" and then "Close"<BR>
|
||||
5. In the mai window, select by clicking the query "Generate my first
|
||||
form" and press "Open" button.</P>
|
||||
|
||||
<P>Your query must have been executed without errors! If you will check
|
||||
now the "Forms" tab, you will find there your first form. Press
|
||||
"Open" button and enjoy it! For the moment, if you will press
|
||||
"My first button" you will get an error message. Of course :
|
||||
we haven't yet defined our first script ! </P>
|
||||
|
||||
<P><IMG SRC="a_right.gif" HEIGHT=20 WIDTH=20> Defining our first
|
||||
script :<BR>
|
||||
1. Click on Scripts tab and pres "New" button<BR>
|
||||
2. Enter "My first script" in script's name field<BR>
|
||||
3. Enter the body as the script the following statements :<BR>
|
||||
<BR>
|
||||
<TT>MsgBox "Warning" "PgAccess unleashed!"<BR>
|
||||
open_table pga_scripts<BR>
|
||||
<BR>
|
||||
</TT>4. Press "Save" button then "Cancel"</P>
|
||||
|
||||
<P>It's now the time to define our first library script. I am defining
|
||||
not because I need it. I could write directly in "My first script"
|
||||
the instructions for creating that warning window but I only wanted to
|
||||
show you how you can mix PgAccess script execution with Tcl/Tk code and
|
||||
so on.</P>
|
||||
|
||||
<P><IMG SRC="a_right.gif" HEIGHT=20 WIDTH=20> Define our first
|
||||
library that will contain your "user defined" Tcl/Tk procedures
|
||||
and functions :<BR>
|
||||
1. Click on Scripts tab and pres "New" button<BR>
|
||||
2. Enter "My first library" in script's name field<BR>
|
||||
3. Enter the body of the script the following statements :<BR>
|
||||
<BR>
|
||||
<TT>proc MsgBox {title msg} {<BR>
|
||||
tk_messageBox -title $title -message
|
||||
$msg<BR>
|
||||
}<BR>
|
||||
<BR>
|
||||
</TT>4. Press "Save" button then "Cancel"</P>
|
||||
|
||||
<P><IMG SRC="file:/home/teo/a_right.gif" HEIGHT=20 WIDTH=20> Define
|
||||
our first autoexec script that will contain commands that will be executed
|
||||
when opening database :<BR>
|
||||
1. Click on Scripts tab and pres "New" button<BR>
|
||||
2. Enter "Autoexec" in script's name field<BR>
|
||||
3. Enter the body of the script the following statements :<BR>
|
||||
<BR>
|
||||
<TT>execute_script "My first library"<BR>
|
||||
open_form "My first form"<BR>
|
||||
<BR>
|
||||
</TT>4. Press "Save" button then "Cancel"</P>
|
||||
|
||||
<P>Everything is OK now! You will have to exit PgAccess and enter it again
|
||||
opening the same database ! Voila , your first form will pop-up on the
|
||||
screen, a message box is displayed and after clicking Ok button the table
|
||||
pga_scripts will be opened in table viewer revealing what's inside ! With
|
||||
this occasion I have shown how you could open in table view mode a "pga_..."
|
||||
system table that is hidden by PgAccess in main view mode!</P>
|
||||
|
||||
<P>I am stopping here, asking you to try this new features and sending
|
||||
me as more feed-backs as you can! What do you think about this new features
|
||||
? How would you like to be developed PgAccess in future ? In this
|
||||
moment, I am working in recoding the main part of PgAccess in order to
|
||||
give to the user more "system" functions that would help him
|
||||
creating new applications very easy.<BR>
|
||||
<BR>
|
||||
Remember : I'm waiting your messages at <A HREF="mailto:teo@flex.ro">teo@flex.ro</A>
|
||||
</P>
|
||||
<HR WIDTH="100%">
|
||||
<BR>Remember : I'm waiting your messages at <A HREF="mailto:teo@flex.ro">teo@flex.ro</A>
|
||||
|
||||
<P>
|
||||
<HR WIDTH="50%"></P>
|
||||
|
||||
<P>You will also have the ability of hiding the main window of PgAccess
|
||||
at the beginning of "Autoexec" script execution and showing it
|
||||
before destroying "My first form". For this example, delete the
|
||||
previously defined "My first form" and create it with another
|
||||
action query with this code :<BR>
|
||||
<BR>
|
||||
<TT>insert into pga_forms values('My first form',' set base .pga_win_1;
|
||||
if {[winfo exists $base]} { wm deiconify $base; return }; toplevel $base
|
||||
-class Toplevel; wm focusmodel $base passive; wm geometry $base 395x389+325+188;
|
||||
wm maxsize $base 1009 738; wm minsize $base 1 1; wm overrideredirect $base
|
||||
0; wm resizable $base 1 1; wm deiconify $base; wm title $base "User
|
||||
defined Form No.1"; button $base.b1 -command {execute_script "My
|
||||
first script"} -text "My first button" ; button $base.bexit
|
||||
-command {Window show .dw ; destroy [focus]} -padx 9 -pady 3 -text Exit
|
||||
; place $base.bexit -x 340 -y 355 -anchor nw -bordermode ignore ; place
|
||||
$base.b1 -x 10 -y 10 -anchor nw;'); <BR>
|
||||
<BR>
|
||||
</TT>This new one is just showing main window (.dw) before destroying the
|
||||
"user defined window" . <BR>
|
||||
Also make "Autoexec" script to show like this :<BR>
|
||||
<BR>
|
||||
<TT>execute_script "My first library"<BR>
|
||||
Window hide .dw<BR>
|
||||
open_form "My first form"</TT><BR>
|
||||
</P>
|
||||
|
||||
<HR WIDTH="50%">
|
||||
</BODY>
|
||||
</HTML>
|
||||
|
@ -671,6 +671,7 @@ foreach objinfo [lrange $info 4 end] {
|
||||
if {$mode=="design"} {fd_draw_object $i}
|
||||
incr j
|
||||
}
|
||||
if {$mode=="design"} {wm geometry .fd $fdvar(geometry)}
|
||||
}
|
||||
|
||||
proc {fd_mouse_down} {x y} {
|
||||
@ -870,7 +871,12 @@ switch $fdobj($item,t) {
|
||||
entry $base.$name -bo 1 -ba white -selectborderwidth 0 -highlightthickness 0
|
||||
if {$var!=""} {$base.$name configure -textvar $var}
|
||||
}
|
||||
label {set wh {} ; label $base.$name -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -anchor nw -padx 0 -pady 0 -text $fdobj($item,l)}
|
||||
label {
|
||||
set wh {}
|
||||
label $base.$name -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -anchor nw -padx 0 -pady 0 -text $fdobj($item,l)
|
||||
set var {} ; catch {set var $fdobj($item,v)}
|
||||
if {$var!=""} {$base.$name configure -textvar $var}
|
||||
}
|
||||
listbox {listbox $base.$name -borderwidth 1 -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*}
|
||||
}
|
||||
if $visual {eval [subst "place $base.$name -x [expr [lindex $coord 0]-1] -y [expr [lindex $coord 1]-1] -anchor nw $wh -bordermode ignore"]}
|
||||
@ -2559,7 +2565,7 @@ proc vTclWindow.about {base} {
|
||||
label $base.l2 -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -relief groove -text {A Tcl/Tk interface to
|
||||
PostgreSQL
|
||||
by Constantin Teodorescu}
|
||||
label $base.l3 -borderwidth 0 -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -relief sunken -text {vers 0.81}
|
||||
label $base.l3 -borderwidth 0 -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -relief sunken -text {vers 0.82}
|
||||
label $base.l4 -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -relief groove -text {You will always get the latest version at:
|
||||
http://www.flex.ro/pgaccess
|
||||
|
||||
@ -2782,7 +2788,7 @@ proc vTclWindow.fw {base} {
|
||||
###################
|
||||
toplevel $base -class Toplevel
|
||||
wm focusmodel $base passive
|
||||
wm geometry $base 306x288+298+290
|
||||
wm geometry $base 306x288+233+130
|
||||
wm maxsize $base 1009 738
|
||||
wm minsize $base 1 1
|
||||
wm overrideredirect $base 0
|
||||
@ -2907,7 +2913,7 @@ proc vTclWindow.mw {base} {
|
||||
###################
|
||||
toplevel $base -class Toplevel
|
||||
wm focusmodel $base passive
|
||||
wm geometry $base 550x400+189+228
|
||||
wm geometry $base 550x400+5+5
|
||||
wm maxsize $base 1009 738
|
||||
wm minsize $base 550 400
|
||||
wm overrideredirect $base 0
|
||||
@ -2993,7 +2999,7 @@ proc vTclWindow.nt {base} {
|
||||
###################
|
||||
toplevel $base -class Toplevel
|
||||
wm focusmodel $base passive
|
||||
wm geometry $base 630x312+148+315
|
||||
wm geometry $base 630x312+100+40
|
||||
wm maxsize $base 1009 738
|
||||
wm minsize $base 1 1
|
||||
wm overrideredirect $base 0
|
||||
@ -3316,7 +3322,7 @@ proc vTclWindow.qb {base} {
|
||||
###################
|
||||
toplevel $base -class Toplevel -cursor top_left_arrow
|
||||
wm focusmodel $base passive
|
||||
wm geometry $base 442x344+282+299
|
||||
wm geometry $base 442x344+150+150
|
||||
wm maxsize $base 1009 738
|
||||
wm minsize $base 1 1
|
||||
wm overrideredirect $base 0
|
||||
@ -3412,7 +3418,7 @@ proc vTclWindow.ql {base} {
|
||||
###################
|
||||
toplevel $base -class Toplevel -cursor top_left_arrow
|
||||
wm focusmodel $base passive
|
||||
wm geometry $base 759x530+233+177
|
||||
wm geometry $base 759x530+10+13
|
||||
wm maxsize $base 1009 738
|
||||
wm minsize $base 1 1
|
||||
wm overrideredirect $base 0
|
||||
@ -3548,7 +3554,7 @@ proc vTclWindow.rb {base} {
|
||||
###################
|
||||
toplevel $base -class Toplevel
|
||||
wm focusmodel $base passive
|
||||
wm geometry $base 652x426+96+160
|
||||
wm geometry $base 652x426+96+120
|
||||
wm maxsize $base 1009 738
|
||||
wm minsize $base 1 1
|
||||
wm overrideredirect $base 0
|
||||
@ -3786,7 +3792,7 @@ proc vTclWindow.rpv {base} {
|
||||
###################
|
||||
toplevel $base -class Toplevel
|
||||
wm focusmodel $base passive
|
||||
wm geometry $base 495x500+239+165
|
||||
wm geometry $base 495x500+230+50
|
||||
wm maxsize $base 1009 738
|
||||
wm minsize $base 1 1
|
||||
wm overrideredirect $base 0
|
||||
@ -3910,7 +3916,7 @@ proc vTclWindow.sw {base} {
|
||||
###################
|
||||
toplevel $base -class Toplevel
|
||||
wm focusmodel $base passive
|
||||
wm geometry $base 594x416+248+217
|
||||
wm geometry $base 594x416+192+152
|
||||
wm maxsize $base 1009 738
|
||||
wm minsize $base 300 300
|
||||
wm overrideredirect $base 0
|
||||
@ -3955,7 +3961,7 @@ proc vTclWindow.tiw {base} {
|
||||
###################
|
||||
toplevel $base -class Toplevel
|
||||
wm focusmodel $base passive
|
||||
wm geometry $base 390x460+243+120
|
||||
wm geometry $base 390x460+243+20
|
||||
wm maxsize $base 1009 738
|
||||
wm minsize $base 1 1
|
||||
wm overrideredirect $base 0
|
||||
@ -4023,7 +4029,7 @@ proc vTclWindow.fd {base} {
|
||||
###################
|
||||
toplevel $base -class Toplevel
|
||||
wm focusmodel $base passive
|
||||
wm geometry $base 377x315+185+234
|
||||
wm geometry $base 377x315+103+101
|
||||
wm maxsize $base 785 570
|
||||
wm minsize $base 1 1
|
||||
wm overrideredirect $base 0
|
||||
@ -4064,7 +4070,7 @@ proc vTclWindow.fda {base} {
|
||||
###################
|
||||
toplevel $base -class Toplevel
|
||||
wm focusmodel $base passive
|
||||
wm geometry $base 225x197+589+29
|
||||
wm geometry $base 225x197+561+0
|
||||
wm maxsize $base 785 570
|
||||
wm minsize $base 1 1
|
||||
wm overrideredirect $base 0
|
||||
@ -4214,7 +4220,7 @@ proc vTclWindow.fdcmd {base} {
|
||||
###################
|
||||
toplevel $base -class Toplevel
|
||||
wm focusmodel $base passive
|
||||
wm geometry $base 282x274+616+367
|
||||
wm geometry $base 282x274+504+229
|
||||
wm maxsize $base 785 570
|
||||
wm minsize $base 1 19
|
||||
wm overrideredirect $base 0
|
||||
@ -4269,7 +4275,7 @@ proc vTclWindow.fdmenu {base} {
|
||||
###################
|
||||
toplevel $base -class Toplevel
|
||||
wm focusmodel $base passive
|
||||
wm geometry $base 288x70+193+129
|
||||
wm geometry $base 288x70+103+0
|
||||
wm maxsize $base 785 570
|
||||
wm minsize $base 1 1
|
||||
wm overrideredirect $base 0
|
||||
@ -4361,7 +4367,7 @@ proc vTclWindow.fdtb {base} {
|
||||
###################
|
||||
toplevel $base -class Toplevel
|
||||
wm focusmodel $base passive
|
||||
wm geometry $base 90x152+65+180
|
||||
wm geometry $base 90x152+0+0
|
||||
wm maxsize $base 785 570
|
||||
wm minsize $base 1 1
|
||||
wm overrideredirect $base 0
|
||||
|
Loading…
x
Reference in New Issue
Block a user