diff --git a/src/bin/pgaccess/doc/html/a_right.gif b/src/bin/pgaccess/doc/html/a_right.gif new file mode 100644 index 0000000000000000000000000000000000000000..386e27c304feb300eb29248ae887e13fb338bf70 Binary files /dev/null and b/src/bin/pgaccess/doc/html/a_right.gif differ diff --git a/src/bin/pgaccess/doc/html/addindex.gif b/src/bin/pgaccess/doc/html/addindex.gif new file mode 100644 index 0000000000000000000000000000000000000000..2ff0aa2084e9e573fb2a2de07a40a4bac5075282 Binary files /dev/null and b/src/bin/pgaccess/doc/html/addindex.gif differ diff --git a/src/bin/pgaccess/doc/html/api.html b/src/bin/pgaccess/doc/html/api.html new file mode 100644 index 0000000000000000000000000000000000000000..7630fd2054d1953ab783ceae29f657ae02712f38 --- /dev/null +++ b/src/bin/pgaccess/doc/html/api.html @@ -0,0 +1,232 @@ +<!doctype html public "-//w3c//dtd html 4.0 transitional//en"> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> + <meta name="GENERATOR" content="Mozilla/4.61 [en] (X11; I; Linux 2.2.11 i586) [Netscape]"> +</head> +<body bgcolor="#FEFEDF"> + +<h2> +PgAccess developer API</h2> + +<hr> +<br>Starting with PgAccess 0.98 I am planning to make available a complete +API for the PgAccess developers. I plan to make PgAccess not just an administrative +tool, but also a tool for easy build of small applications. +<p>That's why PgAccess 0.98 has been internally restructured, every main +module of PgAccess has became a namespace (see Tcl namespaces) in order +to hide the variables and internal procedures to the user. Also, all the +global variables that have been used before were grouped under a single +big associative array called <b>PgAcVar</b> (PgAccess variables) so they +should not interfere with user defined global variables. +<br> +<br> +<p><b><font size=+1>Global variables available</font></b> +<br> +<center><table BORDER=0 WIDTH="100%" NOSAVE > +<tr NOSAVE> +<td ALIGN=LEFT VALIGN=TOP NOSAVE><b>PgAcVar</b></td> + +<td>The main global associative array that hold together various information +needed by PgAccess. User should <b><font color="#FF0000">NOT</font></b> +alter it under any circumstances.</td> +</tr> + +<tr NOSAVE> +<td VALIGN=TOP NOSAVE><b>CurrentDB</b></td> + +<td>The handler of the current opened database. Can be used for database +operations as selects or command execution.</td> +</tr> + +<tr NOSAVE> +<td ALIGN=LEFT VALIGN=TOP NOSAVE><b>Messages</b></td> + +<td NOSAVE>The associative array that holds the translation for the current +language. Loaded from the appropriate language file from lib/languages +directory</td> +</tr> + +<tr NOSAVE> +<td ALIGN=LEFT VALIGN=TOP NOSAVE><b>PGACCESS_HOME</b></td> + +<td>Keep the system directory of PgAccess root installation</td> +</tr> +</table></center> + +<br> +<p><b><font size=+1>Window naming convention</font></b> +<p>Every toplevel window defined by PgAccess has the following naming convention. +Every window name starts with <tt>.pgaw</tt> (PgAccess window) followed +by a colon and a name. <i>Example:</i> +<blockquote><tt>.pgaw:User , .pgaw:About , .pgaw:ImportExport</tt></blockquote> +<b><font size=+1>Namespaces available</font></b> +<p>For every tab from the main database window there is a namespace defined +(Tables, Queries, Views, Functions, Sequences, Reports, Forms, Scripts, +Users, Schema). Every namespace has by default the following procedures: +<ul> +<li> +<tt>new</tt> , no parameter needed</li> + +<li> +<tt>open</tt> , need a single parameter, the object name</li> + +<li> +<tt>design</tt> , need a single parameter, the object name</li> +</ul> +You can use these procedures if you want to produce the same efects as +clicking on the desired tab and then on the "New", "Open" or "Design" buttons +from the main database window. +<br><i>Example:</i> +<blockquote><tt>Tables::open "customers"</tt> +<br><tt>Queries::open "Invoices received"</tt> +<br><tt>Forms::open "Add new invoice"</tt></blockquote> +The <tt>Tables::open</tt> procedure accepts two optional parameters, filter +and order. +<br><i>Example:</i> +<blockquote><tt>Tables::open "phonebook" "name ~* 'joe'" "age desc"</tt></blockquote> +will open a table view window with predefined filter "name ~* 'joe'" and +ordered by descending age. +<p>There is also a special namespace called Database. Here are some +procedures and functions defined for this namespace available to the user: +<br> +<table BORDER NOSAVE > +<tr BGCOLOR="#FFCCFF" NOSAVE> +<td NOSAVE><b>Name</b></td> + +<td NOSAVE><b>Parameters</b></td> + +<td><b>Type</b></td> + +<td><b>Returns</b></td> + +<td NOSAVE><b>Description</b></td> +</tr> + +<tr> +<td><b>vacuum</b></td> + +<td>none</td> + +<td>procedure</td> + +<td>nothing</td> + +<td>vacuums the current database</td> +</tr> + +<tr ALIGN=LEFT VALIGN=TOP NOSAVE> +<td><b>getTablesList</b></td> + +<td>none</td> + +<td>function</td> + +<td>list</td> + +<td NOSAVE>returns the list of tables from the current database</td> +</tr> + +<tr ALIGN=LEFT VALIGN=TOP NOSAVE> +<td><b>executeUpdate</b></td> + +<td>sqlcmd</td> + +<td>function</td> + +<td>integer</td> + +<td NOSAVE>execute the sqlcmd command on the current database returning +1 if no errors ocurred or 0 if the command failed</td> +</tr> +</table> + +<p><b><font size=+1>Global functions available</font></b> +<br> +<table BORDER NOSAVE > +<tr BGCOLOR="#99FFCC" NOSAVE> +<td><b>Name</b></td> + +<td><b>Parameters</b></td> + +<td NOSAVE><b>Description</b></td> +</tr> + +<tr ALIGN=LEFT VALIGN=TOP NOSAVE> +<td><b>setCursor</b></td> + +<td>type</td> + +<td NOSAVE>Set the cursor for all PgAccess windows, type of cursor can +be WAIT or CLOCK or WATCH for the hourglass , anything else (or none) to +return to the normal cursor shape</td> +</tr> + +<tr ALIGN=LEFT VALIGN=TOP NOSAVE> +<td><b>parameter</b></td> + +<td>msg</td> + +<td NOSAVE>Shows a modal input dialog with the msg message, wait for user +to enter the data and returns it as a string</td> +</tr> + +<tr> +<td><b>showError</b></td> + +<td>msg</td> + +<td>Shows a modal dialog window with an error message</td> +</tr> + +<tr> +<td></td> + +<td></td> + +<td></td> +</tr> + +<tr> +<td></td> + +<td></td> + +<td></td> +</tr> + +<tr> +<td></td> + +<td></td> + +<td></td> +</tr> + +<tr> +<td></td> + +<td></td> + +<td></td> +</tr> + +<tr> +<td></td> + +<td></td> + +<td></td> +</tr> + +<tr> +<td></td> + +<td></td> + +<td></td> +</tr> +</table> + +</body> +</html> diff --git a/src/bin/pgaccess/doc/html/ball.gif b/src/bin/pgaccess/doc/html/ball.gif new file mode 100644 index 0000000000000000000000000000000000000000..02d203471ed785ff5148f6ce7193cee8b248c447 Binary files /dev/null and b/src/bin/pgaccess/doc/html/ball.gif differ diff --git a/src/bin/pgaccess/doc/html/contents.html b/src/bin/pgaccess/doc/html/contents.html new file mode 100644 index 0000000000000000000000000000000000000000..971f3f43dce846097c0ccfb72ab29945b77dfd32 --- /dev/null +++ b/src/bin/pgaccess/doc/html/contents.html @@ -0,0 +1,29 @@ +<!doctype html public "-//w3c//dtd html 4.0 transitional//en"> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> + <meta name="GENERATOR" content="Mozilla/4.61 [en] (X11; I; Linux 2.2.11 i586) [Netscape]"> + <base target="right"> +</head> +<body bgcolor="#00FFFF"> +<img SRC="ball.gif" ><a href="main.html">What is PgAccess?</a> +<br><img SRC="ball.gif" ><a href="whatsnew.html">What's new?</a> +<br><img SRC="ball.gif" ><a href="features.html">Features</a> +<br><img SRC="ball.gif" ><a href="screenshots.html">Screenshots</a> +<br><img SRC="ball.gif" ><a href="faq.html">FAQ</a> +<br><img SRC="ball.gif" ><a href="documentation.html">Documentation</a> +<br><img SRC="ball.gif" ><a href="todo.html">To-Do list</a> +<br><img SRC="ball.gif" ><a href="download.html">Download</a> +<br> +<p><br> +<center> +<p><a href="http://www.linux.org"><img SRC="linux1.gif" BORDER=0 ></a></center> + +<p><b>Other links</b> +<br><img SRC="ball.gif" ><a href="http://www.postgresql.org">PostgreSQL</a> +<br><img SRC="ball.gif" ><a href="http://www.neuron.com/stewart/vtcl/index.html">Visual Tcl</a> +<br><img SRC="ball.gif" ><a href="http://www.scriptics.com">Tcl/Tk</a> +<br><img SRC="ball.gif" ><a href="http://www.linux.org">Linux</a> +<br><img SRC="ball.gif" ><a href="http://www.java.ro/vtclava/index.html">vTcLava</a> +</body> +</html> diff --git a/src/bin/pgaccess/doc/html/copyright.html b/src/bin/pgaccess/doc/html/copyright.html new file mode 100644 index 0000000000000000000000000000000000000000..d67654b88e7ee4391fcbdae141f6fba9c787d8cb --- /dev/null +++ b/src/bin/pgaccess/doc/html/copyright.html @@ -0,0 +1,39 @@ +<HTML> +<HEAD> + <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1"> + <META NAME="GENERATOR" CONTENT="Mozilla/4.03 [en] (X11; I; Linux 2.0.30 i586) [Netscape]"> + <TITLE>PgAccess - Copyright notice</TITLE> +</HEAD> +<BODY BGCOLOR="#FFFFFF"> +<TT>---------------------------------------------------------------------------</TT> +<BR><TT></TT> +<BR><TT></TT> <TT></TT> + +<P><TT>Copyright (c) 1994-7 Regents of the University of California</TT><TT></TT> + +<P><TT>Permission to use, copy, modify, and distribute this software and +its</TT> +<BR><TT>documentation for any purpose, without fee, and without a written +agreement</TT> +<BR><TT>is hereby granted, provided that the above copyright notice and +this</TT> +<BR><TT>paragraph and the following two paragraphs appear in all copies.</TT><TT></TT> + +<P><TT>IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY +PARTY FOR</TT> +<BR><TT>DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, +INCLUDING</TT> +<BR><TT>LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS</TT> +<BR><TT>DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED +OF THE</TT> +<BR><TT>POSSIBILITY OF SUCH DAMAGE.</TT><TT></TT> + +<P><TT>THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,</TT> +<BR><TT>INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY</TT> +<BR><TT>AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER +IS</TT> +<BR><TT>ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS +TO</TT> +<BR><TT>PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.</TT> +</BODY> +</HTML> diff --git a/src/bin/pgaccess/doc/html/documentation.html b/src/bin/pgaccess/doc/html/documentation.html new file mode 100644 index 0000000000000000000000000000000000000000..48d3fa5ec1406c45631b1f462ae6720f155b2bd2 --- /dev/null +++ b/src/bin/pgaccess/doc/html/documentation.html @@ -0,0 +1,19 @@ +<!doctype html public "-//w3c//dtd html 4.0 transitional//en"> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> + <meta name="GENERATOR" content="Mozilla/4.61 [en] (X11; I; Linux 2.2.11 i586) [Netscape]"> +</head> +<body bgcolor="#FEFEDF"> + +<h2> +Documentation</h2> + +<hr WIDTH="100%"> +<p>Still need to be written. Some information can be found in the help +included in the main program. +<p>Jim Lemon <Jim.Lemon@uts.EDU.AU> has started writing a <a href="tutorial/index.html">tutorial</a>. +Thought it is based on earlier versions than 0.98 it is a beginning after +all, isn't it ? +</body> +</html> diff --git a/src/bin/pgaccess/doc/html/download.html b/src/bin/pgaccess/doc/html/download.html new file mode 100644 index 0000000000000000000000000000000000000000..efbe7bf50aa8ef9e062d8d97e6e79f0084315873 --- /dev/null +++ b/src/bin/pgaccess/doc/html/download.html @@ -0,0 +1,42 @@ +<!doctype html public "-//w3c//dtd html 4.0 transitional//en"> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> + <meta name="GENERATOR" content="Mozilla/4.61 [en] (X11; I; Linux 2.2.11 i586) [Netscape]"> +</head> +<body bgcolor="#FEFEDF"> + +<h2> +Download</h2> + +<hr> +<br>The primary site for PgAccess downloads is: +<ul><a href="ftp://ftp.flex.ro/pub/pgaccess">ftp://ftp.flex.ro/pub/pgaccess</a> +<ul> +<li> +<a href="ftp://ftp.flex.ro/pub/pgaccess/pgaccess-0.98.tar.gz">Unix tar.gz +file</a></li> + +<li> +<a href="ftp://ftp.flex.ro/pub/pgaccess/pgaccess-0.98.zip">Windows .zip +file</a></li> +</ul> +</ul> + +<p>Another one (just with a little bit faster, try this one first) would +be : +<ul><a href="ftp://speedy.flex.ro/pub/pgaccess">ftp://speedy.flex.ro/pub/pgaccess</a> +<ul> +<li> +<a href="ftp://speedy.flex.ro/pub/pgaccess/pgaccess-0.98.tar.gz">Unix tar.gz +file</a></li> + +<li> +<a href="ftp://speedy.flex.ro/pub/pgaccess/pgaccess-0.98.zip">Windows .zip +file</a></li> +</ul> +</ul> + +<br> +</body> +</html> diff --git a/src/bin/pgaccess/doc/html/faq.html b/src/bin/pgaccess/doc/html/faq.html new file mode 100644 index 0000000000000000000000000000000000000000..f66dd8321ac1bbc7099bb1d7cd1b884c276e9bad --- /dev/null +++ b/src/bin/pgaccess/doc/html/faq.html @@ -0,0 +1,85 @@ +<!doctype html public "-//w3c//dtd html 4.0 transitional//en"> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> + <meta name="GENERATOR" content="Mozilla/4.61 [en] (X11; I; Linux 2.2.12 i586) [Netscape]"> +</head> +<body bgcolor="#FEFEDF"> + +<h2> +PgAccess - FAQ</h2> + +<hr> +<br><b>1. When I run PgAccess I got a message complaining about the crypt +library! What should I do?</b> +<blockquote>Versions of PostgreSQL prior to 6.5.1 couldn't reliably detect +the presence of the crypt library on RedHat 5.x systems. That's why the +libpgtcl library does not include reference to crypt. You will need to +get a proper copy of libpgtcl.so library or to compile one. Go to the postgresql +source directory into src/interfaces/libpgtcl and edit Makefile adding +-lcrypt to the end of the line SHLIB_LINKS. Make clean and make again. +Your libpgtcl.so is now prepare to run PgAccess. I strongly recommend you +to upgrade to PostgreSQL 6.5.1 where this problem has been solved.</blockquote> +<b>2. I cannot connect to a database from another machine</b> +<blockquote>There may be two problems here. First of all, PgAccess running +on the localhost is using two PostgreSQL dependent libraries, libpq and +libpgtcl. Each of them are compiled for a specific PostgreSQL version. +If the PostgreSQL version running on your server is different you might +experience problems. The other problem is related to access rights. On +the PostgreSQL server, in data directory there is a file pg_hba.conf that +will grant access rights to users based on host authentication. Ask your +database administrator to check if your workstation is listed there with +the appropriate access rights. Try for the beginning the 'trust' mode, +allowing full access to the databases.</blockquote> +<b>3. I am experiencing core dumps when trying to run PgAccess. Is PgAccess +broken?</b> +<blockquote>No. There were NEVER reported crashes because of PgAccess. +All of them were related to bad libraries usage. The most frequent was +the installing of a new PostgreSQL on a RedHat 5.x server where the postgresql-clients +rpm still exists. So, PgAccess was trying to use the old libpgtcl.so library +suitable for an older version of PostgreSQL. Before installing a new PostgreSQL +(either by compiling it ot by rpm packages) remove ANY TRACE of old PostgreSQL. +PgAccess is fully relying on libpgtcl library in order to get access to +the database so when you are experiencing that kind of problems, double-check +libpq and libpgtcl libraries.</blockquote> +<b>4. When I try to run PgAccess I get the following error : Application +initialization failed: couldn't connect to display ""</b> +<blockquote>That kind of error was reported on some Linux RedHat 5.x systems +when user has su - to root and tried to run PgAccess. Some unknown errors +in login scripts are not defining the DISPLAY environment and the wish +application cannot connect to the X display. Try typing <tt>export DISPLAY=localhost:0.0</tt> +and run PgAccess again.</blockquote> +<b>5. Cannot run PgAccess on a Windows machine.</b> +<blockquote>In order to use PgAccess on Windows you must have installed +two libraries libpq.dll and libpgtcl.dll suitable for your Tcl/Tk package +and your PostgreSQL server. Note that libraries that work with Tcl/Tk 8.0.x +won't work with Tcl/Tk 8.1.x and libraries that work with 6.4.2 backend +won't work with 6.5.x. So, you must properly identify your Tcl/Tk package +version and your PostgreSQL version and download from the Downloads section +(or pick from the win32/dll directory of PgAccess distribution) the right +files. Copy them into your Windows/System directory and try again. Also, +you should be able to access over the network the machine running the PostgreSQL +server (try ping-ing it) and have the proper access rights to the database.</blockquote> +<b>6. How much costs PgAccess?</b> +<blockquote>PgAccess is a free tool. You won't have to pay anything in +order to use it. It is protected by the following <a href="copyright.html">copyright</a> +as PostgreSQL is. I cannot guarantee technical support but I will try to +answer to your questions as much as I can.</blockquote> +<b>7. I want to translate PgAccess messages for xxx language. What should +I do?</b> +<blockquote>In the PgAccess distribution in lib/languages directory there +are files with messages translated for different languages. Copy one of +them and name it after your native language and then start editing it translating +all the messages. Save it into the same directory and that's all. Don't +forget to send me a copy in order to include it into the standard distribution.</blockquote> + +<p><br><b>8. I am receiving the following error: <tt>message invalid command +name "namespace" while executing "namespace eval Mainlib</tt> ..."</b> +<blockquote>That means 100% that you have an older version of Tcl/Tk that +don't recognize namespaces command. Please upgrade to Tcl/Tk 8.0.x minimum</blockquote> + +<br> +<br> +<br> +</body> +</html> diff --git a/src/bin/pgaccess/doc/html/features.html b/src/bin/pgaccess/doc/html/features.html new file mode 100644 index 0000000000000000000000000000000000000000..4531663be38cf7127cde98add57574aaa217efe0 --- /dev/null +++ b/src/bin/pgaccess/doc/html/features.html @@ -0,0 +1,52 @@ +<!doctype html public "-//w3c//dtd html 4.0 transitional//en"> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> + <meta name="GENERATOR" content="Mozilla/4.61 [en] (X11; I; Linux 2.2.11 i586) [Netscape]"> +</head> +<body bgcolor="#FEFEDF"> +<b>Tables</b> +<br>- opening multiple tables for viewing, max. n 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 with optional user input parameters ( select +* from invoices where year=[parameter "Year of selection"] ) +<br>- viewing of select type queries result +<br>- query deleting and renaming +<br>- 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, plpgsql and pgtcl languages +<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><b>Users</b> +<br>- define and modify user information +<p><b><a href="api.html">PgAccess API</a></b> for developing small applications +<br> +</body> +</html> diff --git a/src/bin/pgaccess/doc/html/formdemo.sql b/src/bin/pgaccess/doc/html/formdemo.sql new file mode 100644 index 0000000000000000000000000000000000000000..73bf1c5027fa27de059621c87bfac957a1163407 --- /dev/null +++ b/src/bin/pgaccess/doc/html/formdemo.sql @@ -0,0 +1,216 @@ +\connect - teo +CREATE SEQUENCE "cities_id_seq" start 7 increment 1 maxvalue 2147483647 minvalue 1 cache 1 ; +SELECT nextval ('cities_id_seq'); +CREATE TABLE "pga_queries" ( + "queryname" character varying(64), + "querytype" character, + "querycommand" text, + "querytables" text, + "querylinks" text, + "queryresults" text, + "querycomments" text); +CREATE TABLE "pga_forms" ( + "formname" character varying(64), + "formsource" text); +CREATE TABLE "pga_scripts" ( + "scriptname" character varying(64), + "scriptsource" text); +CREATE TABLE "pga_reports" ( + "reportname" character varying(64), + "reportsource" text, + "reportbody" text, + "reportprocs" text, + "reportoptions" text); +CREATE TABLE "phonebook" ( + "name" character varying(32), + "phone_nr" character varying(16), + "city" character varying(32), + "company" bool, + "continent" character varying(16)); +CREATE TABLE "pga_layout" ( + "tablename" character varying(64), + "nrcols" int2, + "colnames" text, + "colwidth" text); +CREATE TABLE "pga_schema" ( + "schemaname" character varying(64), + "schematables" text, + "schemalinks" text); +REVOKE ALL on "pga_schema" from PUBLIC; +GRANT ALL on "pga_schema" to PUBLIC; +CREATE TABLE "cities" ( + "id" int4 DEFAULT nextval('"cities_id_seq"') NOT NULL, + "name" character varying(32) NOT NULL, + "prefix" character varying(16) NOT NULL); +CREATE FUNCTION "getcityprefix" (int4 ) RETURNS varchar AS 'select prefix from cities where id = $1 ' LANGUAGE 'SQL'; +COPY "pga_queries" FROM stdin; +Query that can be saved as view S select * from phonebook where continent='usa' \N \N \N \N +\. +COPY "pga_forms" FROM stdin; +Working with Tables namespace f3 13 {3 4 5 6 7 9 10 11 12 13} 377x263+59+127 {radio usa {36 24 138 36} {} USA selcont} {radio europe {36 45 141 60} {} Europe selcont} {radio africa {36 66 147 81} {} Africa selcont} {label label6 {9 99 339 114} {} {Select one of the above continents and press} {}} {button button7 {270 93 354 117} {Tables::open phonebook "continent='$selcont'" $selorder} {Show them} {}} {button button9 {66 189 312 213} {Tables::design phonebook} {Show me the phonebook table structure} {}} {button button10 {141 228 240 252} {destroy .f3} {Close the form} {}} {button button11 {93 141 282 165} {Tables::open phonebook "company=true"} {Show me only the companies} {}} {radio name {183 24 261 36} {} {Order by name} selorder} {radio phone_nr {183 45 267 57} {} {Order by phone number} selorder} +A simple demo form asdf 14 {FS {set color none}} 370x310+50+75 {label label1 {15 36 99 57} {} {Selected color} {} label1 flat #000000 #d9d9d9 1} {entry entry2 {111 36 225 54} {} entry2 color entry2 sunken #000000 #fefefe 1} {radio red {249 21 342 36} {} {Red as cherry} color red flat #900000 #d9d9d9 1} {radio green {249 45 342 60} {} {Green as a melon} color green flat #008800 #d9d9d9 1} {radio blue {249 69 342 84} {} {Blue as the sky} color blue flat #00008c #d9d9d9 1} {button button6 {45 69 198 99} {set color spooky} {Set a weird color} {} button6 ridge #0000b0 #dfbcdf 2} {label label7 {24 129 149 145} {} {The checkbox's value} {} label7 flat #000000 #d9d9d9 1} {entry entry8 {162 127 172 145} {} entry8 cbvalue entry8 sunken #000000 #fefefe 1} {checkbox checkbox9 {180 126 279 150} {} {Check me :-)} cbvalue checkbox9 flat #000000 #d9d9d9 1} {button button10 {219 273 366 303} {destroy .asdf} {Close that simple form} {} button10 raised #000000 #d9d9d9 1} {button button11 {219 237 366 267} {Forms::open "Phone book"} {Open my phone book} {} button11 raised #000000 #d9d9d9 1} {listbox lb {12 192 162 267} {} listbox12 {} lb sunken #000000 #fefefe 1} {button button13 {12 156 162 186} {.asdf.lb insert end red green blue cyan white navy black purple maroon violet} {Add some information} {} button13 raised #000000 #d9d9d9 1} {button button14 {12 273 162 303} {.asdf.lb delete 0 end} {Clear this listbox} {} button14 raised #000000 #d9d9d9 1} +Working with listboxes f2 5 {FS {set thestudent ""}} 257x263+139+147 {listbox lb {6 6 246 186} {} listbox1 {} lb sunken #000000 #ffffd4 1} {button button2 {9 234 124 258} {# Populate the listbox with some data\ +#\ +\ +foreach student {John Bill Doe Gigi} {\ +\ .f2.lb insert end $student\ +}\ +\ +\ +\ +# Binding the event left button release to the\ +# list box\ +\ +bind .f2.lb <ButtonRelease-1> {\ +\ set idsel [.f2.lb curselection]\ +\ if {$idsel!=""} {\ +\ \ set thestudent [.f2.lb get $idsel]\ +\ }\ +}\ +\ +# Cleaning the variable thestudent\ +\ +set thestudent {}} {Show students} {} button2 groove #000000 #d9d9d9 2} {button button3 {132 234 247 258} {destroy .f2} {Close the form} {} button3 groove #000000 #d9d9d9 1} {label label4 {9 213 119 228} {} {You have selected} {} label4 flat #000000 #d9d9d9 1} {label label5 {129 213 219 228} {} {} thestudent label5 flat #00009a #d9d9d9 1} +The simplest form mf 5 {FS {set thename {}}} 306x136+82+146 {label label {42 45 99 60} {} Name {} label flat #000000 #d9d9d9 1 {Helvetica 12 bold italic}} {entry ename {120 42 219 63} {} entry2 thename ename sunken #000000 #fefefe 1 n} {button button3 {6 96 108 129} {set thename Teo} {Set the name} {} button3 raised #000000 #d9d9d9 1 n} {button button4 {192 96 300 129} {destroy .mf} {Close the form} {} button4 raised #000000 #d9d9d9 1 n} {button button5 {114 96 186 129} {set thename {}} {Clear it} {} button5 raised #000000 #d9d9d9 1 n} +Full featured form full 21 {FS {set entrydemo {nice}\ +set color {no color selected}}} 377x418+50+130 {label label1 {3 396 165 411} {} {Status line} {} {} sunken #000000 #d9d9d9 2 n} {label label2 {171 396 369 411} {} {Grooved status line} {} {} groove #000098 #d9d9d9 2 f} {label label3 {108 9 270 31} {} { Full featured form} {} {} ridge #000000 #d9d9d9 4 {Times 16 bold italic}} {button button4 {15 210 144 243} {.full.lb insert end {it's} a nice demo form} {Java style button} {} {} groove #6161b6 #d9d9d9 2 b} {label label5 {15 42 115 58} {} {Java style label} {} {} flat #6161b6 #d9d9d9 1 b} {entry entry6 {123 39 279 60} {} entry6 entrydemo {} groove #000000 #fefefe 2 {Courier 13}} {listbox lb {12 69 147 201} {} listbox8 {} {} ridge #000000 #ffffc8 2 n} {button button9 {18 264 39 282} {} 1 {} {} flat #000000 #d9d9d9 1 n} {button button10 {48 264 68 282} {} 2 {} {} flat #000000 #d9d9d9 1 n} {button button11 {78 264 234 282} {} {and other hidden buttons} {} {} flat #000000 #d9d9d9 1 n} {text txt {153 69 372 201} {} text12 {} {} sunken #000000 #d4ffff 1 n} {button button13 {150 210 369 243} {.full.txt tag configure bold -font {Helvetica 12 bold}\ +.full.txt tag configure italic -font {Helvetica 12 italic}\ +.full.txt tag configure large -font {Helvetica -14 bold}\ +.full.txt tag configure title -font {Helvetica 12 bold italic} -justify center\ +.full.txt tag configure link -font {Helvetica -12 underline} -foreground #000080\ +.full.txt tag configure code -font {Courier 13}\ +.full.txt tag configure warning -font {Helvetica 12 bold} -foreground #800000\ +\ +# That't the way help files are written\ +\ +.full.txt delete 1.0 end\ +.full.txt insert end {Centered title} {title} "\ +\ +You can make different " {} "portions of text bold" {bold} " or italic " {italic} ".\ +Some parts of them can be written as follows" {} "\ +SELECT * FROM PHONEBOOK" {code} "\ +You can also change " {} "colors for some words " {warning} "or underline them" {link} } {Old style button} {} {} raised #000000 #d9d9d9 2 n} {checkbox checkbox14 {48 297 153 309} {} different {} {} flat #00009c #d9d9d9 1 b} {checkbox checkbox15 {48 321 156 336} {} {fonts and} {} {} flat #cc0000 #d9d9d9 1 i} {checkbox checkbox16 {48 345 156 360} {} colors {} {} flat #00b600 #dfb2df 1 f} {radio radio17 {207 297 330 315} {} {red , rosu , rouge} color red flat #9c0000 #d9d9d9 1 n} {radio radio18 {207 321 324 333} {} {green , verde , vert} color green flat #009000 #d9d9d9 1 n} {radio radio19 {207 345 327 363} {} {blue , albastru, bleu} color blue flat #000000 #d9d9d9 1 n} {label selcolor {210 369 345 384} {} {} color {} flat #000000 #d9d9d9 1 n} {button button21 {285 258 363 285} {destroy .full} Exit {} {} raised #7c0000 #dfdbb8 1 b} +Phone book pb 28 {FS {}} 444x307+284+246 {label label1 {33 10 68 28} {} Name {} label1 flat #000000 #d9d9d9 1 n} {entry name_entry {87 9 227 27} {} entry2 DataSet(.pb.qs,name) name_entry sunken #000000 #fefefe 1 n} {label label3 {33 37 73 52} {} Phone {} label3 flat #000000 #d9d9d9 1 n} {entry entry4 {87 36 195 54} {} entry4 DataSet(.pb.qs,phone_nr) entry4 sunken #000000 #fefefe 1 n} {label label5 {33 64 78 82} {} City {} label5 flat #000000 #d9d9d9 1 n} {entry entry6 {87 63 195 81} {} entry6 DataSet(.pb.qs,city) entry6 sunken #000000 #fefefe 1 n} {query qs {3 6 33 33} {} query7 {} qs flat {} {} 1 n} {button button8 {174 177 246 203} {namespace eval DataControl(.pb.qs) {\ +\ setSQL "select oid,* from phonebook where name ~* '$what' order by name"\ +\ open\ +\ set nrecs [getRowCount]\ +\ updateDataSet\ +\ fill .pb.allnames name\ +\ bind .pb.allnames <ButtonRelease-1> {\ +\ set ancr [.pb.allnames curselection]\ +\ if {$ancr!=""} {\ +\ \ DataControl(.pb.qs)::moveTo $ancr\ +\ \ DataControl(.pb.qs)::updateDataSet\ +\ }\ +\ }\ +}} {Start search} {} button8 raised #000000 #d9d9d9 1 n} {button button9 {363 276 433 300} {DataControl(.pb.qs)::close\ +DataControl(.pb.qs)::clearDataSet\ +set nrecs {}\ +set what {}\ +destroy .pb\ +} Exit {} button9 raised #000000 #d9d9d9 2 n} {button button10 {291 237 313 257} {namespace eval DataControl(.pb.qs) {\ +\ moveFirst\ +\ updateDataSet\ +}\ +} |< {} button10 ridge #000092 #d9d9d9 2 n} {button button11 {324 237 346 257} {namespace eval DataControl(.pb.qs) {\ +\ movePrevious\ +\ updateDataSet\ +}\ +} << {} button11 ridge #000000 #d9d9d9 2 n} {button button12 {348 237 370 257} {namespace eval DataControl(.pb.qs) {\ +\ moveNext\ +\ updateDataSet\ +}} >> {} button12 ridge #000000 #d9d9d9 2 n} {button button13 {381 237 403 257} {namespace eval DataControl(.pb.qs) {\ +\ moveLast\ +\ updateDataSet\ +}\ +} >| {} button13 ridge #000088 #d9d9d9 2 n} {checkbox checkbox14 {33 87 126 105} {} {Is it a company ?} DataSet(.pb.qs,company) checkbox14 flat #000000 #d9d9d9 1 n} {radio usa {63 108 201 120} {} U.S.A. DataSet(.pb.qs,continent) usa flat #000000 #d9d9d9 1 n} {radio europe {63 126 204 141} {} Europe DataSet(.pb.qs,continent) europe flat #000000 #d9d9d9 1 n} {radio africa {63 144 210 159} {} Africa DataSet(.pb.qs,continent) africa flat #000000 #d9d9d9 1 n} {entry entry18 {129 180 169 198} {} entry18 what entry18 sunken #000000 #fefefe 1 n} {label label19 {108 219 188 234} {} {records found} {} label19 flat #000000 #d9d9d9 1 n} {label label20 {90 219 105 234} {} { } nrecs label20 flat #000000 #d9d9d9 1 n} {label label21 {3 252 33 267} {} OID= {} label21 flat #000000 #d9d9d9 1 n} {label label22 {39 252 87 267} {} { } pbqs(oid) label22 flat #000000 #d9d9d9 1 n} {button button23 {9 276 79 300} {set oid {}\ +catch {set oid $DataSet(.pb.qs,oid)}\ +if {[string trim $oid]!=""} {\ + sql_exec noquiet "update phonebook set name='$DataSet(.pb.qs,name)', phone_nr='$DataSet(.pb.qs,phone_nr)',city='$DataSet(.pb.qs,city)',company='$DataSet(.pb.qs,company)',continent='$DataSet(.pb.qs,continent)' where oid=$oid"\ +} else {\ + tk_messageBox -title Error -message "No record is displayed!"\ +}\ +\ +} Update {} button23 raised #000000 #d9d9d9 1 n} {button button24 {210 276 280 300} {set thisname $DataSet(.pb.qs,name)\ +if {[string trim $thisname] != ""} {\ +\ sql_exec noquiet "insert into phonebook values (\ +\ \ '$DataSet(.pb.qs,name)',\ +\ \ '$DataSet(.pb.qs,phone_nr)',\ +\ \ '$DataSet(.pb.qs,city)',\ +\ \ '$DataSet(.pb.qs,company)',\ +\ \ '$DataSet(.pb.qs,continent)'\ +\ )"\ +\ tk_messageBox -title Information -message "A new record has been added!"\ +} else {\ +\ tk_messageBox -title Error -message "This one doesn't have a name?"\ +}\ +\ +} {Add record} {} button24 raised #000000 #d9d9d9 1 n} {button button25 {141 276 204 300} {DataControl(.pb.qs)::clearDataSet\ +# clearcontrols stillinitialise\ +# incorectly booleans controls to {}\ +# so I force it to 'f' (false)\ +set DataSet(.pb.qs,company) f\ +focus .pb.name_entry} {Clear all} {} button25 raised #000000 #d9d9d9 1 n} {listbox allnames {249 6 435 231} {} listbox26 {} allnames sunken #000000 #fefefe 1 n} {label label27 {33 252 90 267} {} {} DataSet(.pb.qs,oid) label27 flat #000000 #d9d9d9 1 n} {label label28 {3 182 128 197} {} {Find name containing} {} {} flat #000000 #d9d9d9 1 n} +\. +COPY "pga_scripts" FROM stdin; +How are forms keeped inside ? Tables::open pga_forms\ +\ +\ +\ + +Opening a table with filters Tables::open phonebook "name ~* 'e'" "name desc"\ +\ +\ + +Autoexec Mainlib::tab_click Forms\ +Forms::open {Full featured form}\ +\ +\ + +\. +COPY "pga_reports" FROM stdin; +My phone book phonebook set PgAcVar(report,tablename) "phonebook" ; set PgAcVar(report,y_rpthdr) 21 ; set PgAcVar(report,y_pghdr) 47 ; set PgAcVar(report,y_detail) 66 ; set PgAcVar(report,y_pgfoo) 96 ; set PgAcVar(report,y_rptfoo) 126 ; .pgaw:ReportBuilder.c create text 10 35 -font -Adobe-Helvetica-Bold-R-Normal--*-120-*-*-*-*-*-* -anchor nw -text {name} -tags {t_l mov ro} ; .pgaw:ReportBuilder.c create text 10 52 -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -anchor nw -text {name} -tags {f-name t_f rg_detail mov ro} ; .pgaw:ReportBuilder.c create text 141 36 -font -Adobe-Helvetica-Bold-R-Normal--*-120-*-*-*-*-*-* -anchor nw -text {city} -tags {t_l mov ro} ; .pgaw:ReportBuilder.c create text 141 51 -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -anchor nw -text {city} -tags {f-city t_f rg_detail mov ro} ; .pgaw:ReportBuilder.c create text 231 35 -font -Adobe-Helvetica-Bold-R-Normal--*-120-*-*-*-*-*-* -anchor nw -text {phone_nr} -tags {t_l mov ro} ; .pgaw:ReportBuilder.c create text 231 51 -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -anchor nw -text {phone_nr} -tags {f-phone_nr t_f rg_detail mov ro} \N \N +\. +COPY "phonebook" FROM stdin; +FIAT 623463445 t europe +Gelu Voican 01-32234 Bucuresti f europe +Radu Vasile 01-5523423 Bucuresti f europe +MUGADUMBU SRL +92 534662634 Cairo t africa +Jimmy Page 66323452 f europe +IBM 623346234 \N t usa +John Doe +44 35 2993825 Washington f usa +Bill Clinton +44 35 9283845 New York f usa +Monica Levintchi +44 38 5234526 Dallas f usa +Bill Gates +42 64 4523454 Los Angeles f usa +COMPAQ 623462345 \N t usa +SUN 784563253 \N t usa +DIGITAL 922644516 \N t usa +Frank Zappa 6734567 Montreal f usa +Constantin Teodorescu +40 39 611820 Braila f europe +Ngbendu Wazabanga 34577345 f africa +Mugabe Kandalam 7635745 f africa +Vasile Lupu 52345623 Bucuresti f europe +Gica Farafrica +42 64 4523454 Los Angeles f usa +Victor Ciorbea 634567 Bucuresti f europe +\. +COPY "pga_layout" FROM stdin; +pga_forms 2 formname formsource 82 713 +Usaisti 5 name phone_nr city company continent 150 150 150 150 150 +q1 5 name phone_nr city company continent 150 150 150 150 150 +view_saved_from_that_query 5 name phone_nr city company continent 150 150 150 150 150 +phonebook 5 name phone_nr city company continent 150 105 80 66 104 +Query that can be saved as view 5 name phone_nr city company continent 150 150 150 150 150 +cities 3 id name prefix 150 150 150 +\. +COPY "pga_schema" FROM stdin; +Simple schema cities 10 10 phonebook 201.0 84.0 {cities name phonebook city} +\. +COPY "cities" FROM stdin; +3 Braila 4039 +4 Galati 4036 +5 Dallas 5362 +6 Cairo 9352 +1 Bucuresti 4013 +7 Montreal 5325 +\. +CREATE UNIQUE INDEX "cities_id_key" on "cities" using btree ( "id" "int4_ops" ); diff --git a/src/bin/pgaccess/doc/html/forms.gif b/src/bin/pgaccess/doc/html/forms.gif new file mode 100644 index 0000000000000000000000000000000000000000..947d920b04b475628599d8d586d8eff253588553 Binary files /dev/null and b/src/bin/pgaccess/doc/html/forms.gif differ diff --git a/src/bin/pgaccess/doc/html/forms.html b/src/bin/pgaccess/doc/html/forms.html new file mode 100644 index 0000000000000000000000000000000000000000..57ecff52fcb75e6979246934073c6317f4de1d73 --- /dev/null +++ b/src/bin/pgaccess/doc/html/forms.html @@ -0,0 +1,203 @@ +<!doctype html public "-//w3c//dtd html 4.0 transitional//en"> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> + <meta name="GENERATOR" content="Mozilla/4.61 [en] (X11; I; Linux 2.2.11 i586) [Netscape]"> +</head> +<body text="#000000" bgcolor="#FEFEDF" link="#0000EF" vlink="#51188E" alink="#FF0000"> + +<h1> +FORMS</h1> + +<hr WIDTH="100%"> +<p>This version (0.97) of PgAccess has changed the form API : variable +handling, query results interface and control bindings naming convention. +Please read it carefully, download the database demo and practice a while +before trying to design your own forms. +<p>For the moment, it has only some basic widgets : labels, entries, buttons +, listboxes , checkboxes and radiobuttons. +<p>Also there is a pseudo data control widget that allows you yo have access +to a query results. +<p><b>How do you generate widgets :</b> +<ol> +<li> +select a widget from the toolbox by clicking the appropriate radiobutton</li> + +<li> +move to the canvas , point with the mouse at the desired location and click +the mouse button to begin</li> + +<li> +keeping the mouse-button pressed move the mouse in order to draw a rectangle +that will hold the widget</li> + +<li> +release the mouse-button</li> +</ol> +In the rectangle that you have designed it will appear the selected object. +<br>Move now to the attribute window to change some of its properties. +<p>Renaming, resizing items are possible (for the moment) only by modifying +appropriate parameters in attribute window. You <b>must </b>press Enter +in the edit field after changing a value in order to be accepted. +<p>You can also move items by dragging them or delete them by pressing +Del key after selecting them. +<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>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 field <b><tt><font size=+1>Variable </font></tt></b>have +meaning only for EditField , Label widgets , checkboxes and radiobuttons +and it is the name of the global variable that will hold the value for +that widget. For checkboxes the values are <b>t</b> and <b>f</b> (from +true and false) in order to simplify binding to logical data fields (PgAccess +0.82 used 0 and 1). +<p> For radiobuttons, it is usual to assign the same +variable to the same radiobuttons within the same group. That variable +will contain the name of the widget of the radiobutton that has been pressed. +Let's presume that you have entered 3 radiobuttons named red, green and +blue, all of them having the same variable named color. If you will press +them, they will assign their names to global variable. +<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!"</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>. +<br> +<h2> +Database manipulation</h2> +Let's presume that our form have the internal name <b><tt>mf </tt></b>(<b>m</b>y +<b>f</b>orm). Don't forget that the Tk window names could not start with +an uppercase letter. +<br>The window will 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> +<p>Also, any widget created inside this window (form) will have the name +prefixed by <b><tt>.mf ,</tt></b>so we will have <b><tt>.mf.button1</tt></b> +or <b><tt>.mf.listbox1</tt></b> . +<p>We can name the data control widget <b><tt>dc</tt></b> for example. +The fully qualified name for that "virtual widget" will be <b><tt>.mf.dc</tt></b> +then. A new namespace called <b><tt>DataControl(.mf.dc)</tt></b> will be +automatically defined. +<br>The <b><tt>Command </tt></b>property of the data control widget must +contain the SQL command that will be executed. +<br>When the form will be in run-time, automatically you will have access +to the following procedures and functions from the namespace: +<p><b><tt>open</tt></b> - opens the connection and execute the query (returns +nothing) +<br><b><tt>setSQL newsql</tt></b> - set the command query that will be +executed at the next <b><tt>open</tt></b> +<br><b><tt>getRowCount</tt></b> - returns the number of records of the +result set +<br><b><tt>getRowIndex </tt></b>- returns the current record number inside +the result set +<br><b><tt>getFieldList</tt></b> - returns a Tcl list containing the fields +names from the current result set +<br><b><tt>moveFirst</tt></b> - move the cursor to the first record in +the recordset +<br><b><tt>moveLast</tt></b><tt> , <b>moveNext</b> , <b>movePrevious</b></tt>- +moves the cursor there +<br><b><tt>moveTo newrecno</tt></b> - move the cursor to that new record +number (first is 0) +<br><b><tt>updateDataSet</tt></b> - update the variables inside the designed +form that have a particular name (I'll explain later) +<br><b><tt>clearDataSet</tt></b> - clear the associated DataSet variables +<br><tt><b>fill listbox field</b> </tt>- fill the named listbox (whole +widget name as <b><tt>.mf.listbox1</tt></b>) with the all the values of +that field from the current result set +<br><b><tt>close</tt></b> - close the result set (<b><font color="#FF0000">if +you don't close it, you will loose some memory</font></b>) +<p>These procedures and functions should be called in the normal Tcl namespace +mode as in the following example: +<p><tt>DataControl(.mf.dc)::setSQL "select * from phonebook"</tt> +<br><tt>DataControl(.mf.dc)::open</tt> +<br><tt>set nrecs [DataControl(.mf.dc)::getRowCount]</tt> +<p>If you complaint about writting to many DataControl(...) you can include +many commands into a single namespace eval as in the following example +: +<p><tt>namespace eval DataControl(.mf.dc) {</tt> +<br><tt> setSQL "select * from phonebook"</tt> +<br><tt> open</tt> +<br><tt> set nrecs [getRowCount]</tt> +<br><tt> moveLast</tt> +<br><tt> updateDataSet</tt> +<br><tt>}</tt> +<p>It's no need to close a query-result set if you want to assign it a +new SQL command and open it again. That will be done automatically releasing +the memory used for the last result set. +<br>Opening a new <b>DataControl</b> will automatically position the current +row index of the result set on the first row (index 0) and will define +a new global associative array named <b>DataSet</b> that will hold data +from the current row. The key into that array will be the fully qualified +name of the data control widget followed by a comma and the name of every +field in the selected rows. +<p><i>Example:</i> +<br><tt>DataSet(.mf.dc,name)</tt> +<br><tt>DataSet(.mf.dc,city)</tt> +<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><b><tt>DataSet(.mf.dc,salary)</tt></b> to get the "salary" field , or +<b><tt>DataSet(.mf.dc,name)</tt></b> to get the "name" field. Using the +data control procedures <b><tt>DataControl(.mf.dc)::moveNext</tt></b> or +movePrevious will automatically update the <b><tt>DataSet(.mf.dc,...)</tt></b> +array so the database information from entries in the form will be refreshed. +<br> +<p>Here it is a dumped <b><a href="formdemo.sql">sample database</a></b> +that contains a demo database. What should you do ? +<br>Shift-click the above URL in order to download that tiny file (4 Kb). +Create a empty database and <b><tt>psql yourdatabase <formdemo.sql</tt></b> +<p>You should find a single table called "phonebook" a form called "Phone +book" and another "A simple demo form". +<p>First of all enter and view the phonebook table in table view. Note +the fields and their values. +<br>Open the "Phone book" form and enter a letter (a, e or i) in the field +to the left of "Find" button then press Find. It's fine to enter one letter +in order to get more records in query result. You will get information +about the number of records selected, in the listbox you will see all the +values of field "name" from the current data set. Use buttons to move to +first, next, previous or last record within the record set. +<p>In order to add a new record, press the "New" button in order to get +new, clean entries. Fill them with your data and press "Add new" button. +A new phonebook record will be added. Also, if you want to update a record, +change it's values in the displayed fields after finding it and press "Update" +button. The values will be updated in the database BUT NOT IN THE CURRENT +QUERY RESULT . If you want to see them modified, make a new query trying +to find it again. +<p><font color="#000080">Before using the results from a query you should +know that the information that has been retrieved could be found only in +your computer client memory. It has <b>no live connection</b> to the data +from the database. That's why it isn't possible to develop a simple update +function as interface to that query-result widget. More than that : a query +result could be obtained from a SQL command that return a non-updatable +data set !!! For example fields gathered from multiple tables or summary +fields. It isn't just simple to make an automatic update procedure. The +programmer must know how to make the update or the append procedure, sometimes +using key fields to point to the desired record or an OID. There are examples +in the demo database in "Phone book" form. It may be possible that in the +future, I will develop another pseudo-widget describing a table. It would +be more simple than to implement an update or append or even a delete procedure.</font> +<p>There is in the demo database also another simple form called "A simple +demo form". It will show you how to handle variables from checkboxes, radiobuttons, +how to use listboxes, open another forms and so on. I think they will help +you. +<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>Please feel free to send me your opinion at <b>teo@flex.ro</b> on forms +designing and usage. +<p><b><font size=+1>KEEP IN MIND ! +THE FORM API MAY CHANGE IN ORDER TO BE MORE SIMPLE AND BETTER!</font></b> +<br><b><font size=+1>SEND ME YOUR WISHES, YOUR IDEAS, YOUR OPINIONS !</font></b> +<br><b><font size=+1>ALSO ... DON'T BLAME ME IF YOU WILL HAVE TO RE-DESIGN +YOUR OLD FORMS DUE TO SOME INCOMPATIBILITIES WITH NEWER PGACCESS VERSIONS.</font></b> +</body> +</html> diff --git a/src/bin/pgaccess/doc/html/function.gif b/src/bin/pgaccess/doc/html/function.gif new file mode 100644 index 0000000000000000000000000000000000000000..51634e5df9d585ddbe8b221a3fab4280e6b2abc0 Binary files /dev/null and b/src/bin/pgaccess/doc/html/function.gif differ diff --git a/src/bin/pgaccess/doc/html/help.gif b/src/bin/pgaccess/doc/html/help.gif new file mode 100644 index 0000000000000000000000000000000000000000..f08fee8fd38d3e566718d8da06a16cd7d813eadc Binary files /dev/null and b/src/bin/pgaccess/doc/html/help.gif differ diff --git a/src/bin/pgaccess/doc/html/index.html b/src/bin/pgaccess/doc/html/index.html new file mode 100644 index 0000000000000000000000000000000000000000..7ccda192907617d20645407374c1f53689b5c413 --- /dev/null +++ b/src/bin/pgaccess/doc/html/index.html @@ -0,0 +1,11 @@ +<HTML> +<HEAD> +<TITLE>PgAccess</TITLE> + +<FRAMESET COLS="200,*" border=0 framespacing=0 frameborder=no> + <FRAME NAME="left" scrolling="none" src="contents.html"> + <FRAME NAME="right" scrolling="nonw" src="main.html"> +</FRAMESET> + +</HTML> + diff --git a/src/bin/pgaccess/doc/html/irix.html b/src/bin/pgaccess/doc/html/irix.html new file mode 100644 index 0000000000000000000000000000000000000000..b678458569e0af499ca5a7ea60f8e7126355dd76 --- /dev/null +++ b/src/bin/pgaccess/doc/html/irix.html @@ -0,0 +1,133 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML> +<HEAD> + <TITLE>PgAccess on Irix</TITLE> + <META NAME="GENERATOR" CONTENT="Mozilla/3.04Gold (X11; I; Linux 2.0.33 i586) [Netscape]"> +</HEAD> +<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000EF" VLINK="#51188E" ALINK="#FF0000"> + +<H1>INSTALLING PgAccess UNDER IRIX 5.3. +<HR WIDTH="100%"></H1> + +<P><B><FONT COLOR="#000080">This HOWO-TO make PgAccess working under Irix +is written by Stuart Rison</FONT></B></P> + +<P>These are the steps that I had to follow to get pgaccess to run on an +INDIGO2 running postgreSQL 6.3.2 under IRIX 5.3. I make no guarantee whatsoever +that the same step will work for others but at least it should point you +in the right direction. Also, I am a biologist by training so I only got +pgaccess working by fudging (that is, trial and error) this means that +some of the steps may be unnecessary (e.g. compiling $postgreSQL_source/src/interfaces/libpgtcl +as both a shared and static library) and they certainly haven't been optimised +(I know nothing about compiler switches etc.).</P> + +<P><B>1) Requirements:</B></P> + +<UL> +<P>You will need:</P> + +<UL> +<LI>postgreSQL source (http://www.postgresql.org)</LI> + +<LI>tcl8.0 source (http://www.tclconsortium.org/)</LI> + +<LI>tk8.0 source (http://www.tclconsortium.org/)</LI> + +<LI>pgaccess source (http://www.flex.ro/pgaccess)</LI> +</UL> +</UL> + +<P><B>2) Installation:</B></P> + +<P>a) tcl/tk:</P> + +<UL> +<P>You must first install tcl and then tk (in that order). I just used +./configure, no switches and gmake. Their installation should be trouble +free. Then you must move headers and libraries to the right places so:</P> + +<P>Header files: both tcl and tk have a header file (tcl.h and tk.h). The +tcl.h file is in $tcl_source_dir/generic and the tk.h file is in $tk_source_dir/generic; +both should be copied to /usr/local/include.</P> + +<P>Libraries: compilation (with cc) of tcl and tk yield libraries libtcl8.0.a +and libtk8.0.a in $source_dir/unix. Both should be copied to /usr/local/lib.</P> +</UL> + +<P>b) postgreSQL:</P> + +<UL> +<P>Make sure you have a fully patched postgreSQL source. If your ./configure +says it can't load 'IRIX' settings then you most probably will need to +patch ./configure.</P> + +<P>Configure using ./configure with the following switches: ./configure +--with-includes=/usr/local/include</P> + +<P>--with-libraries=/usr/local/lib --with-tcl [this and previous line as +one]</P> + +<P>Then make, make install as usual</P> +</UL> + +<P>c) Compiling libpgtcl:</P> + +<UL> +<P>The source for libpgtcl is in $postgreSQL_directory/src/interfaces/libpgsql.</P> + +<P>I do this twice. Once with just gmake. This produces a static library +libpgtcl.a which I leave where it is (I don't know what to do with it but +it may just come in handy). The I modify Makefile manually with a text +editor. Essentially I modify two line:</P> + +<P>before:</P> + +<P># Shared library stuff</P> + +<P>install-shlib-dep := shlib :=</P> + +<P>after:</P> + +<P># Shared library stuff</P> + +<P>install-shlib-dep := install-shlib shlib := libpgtcl.so.1</P> + +<P>Then gmake -f Makefile_modified. This creates two shared (.so) libraries: +libpgtcl.so and libpgtcl.so.1. I can't tell the difference between them +so I copied them both to /usr/lib/.</P> +</UL> + +<P>d) running pgaccess:</P> + +<UL> +<P>Uncompress pgaccess (usually with gunzip and tar). So long as 'wish' +(a binary produced when compiling tk8.0) is somewhere in your path, you +should be able to run pgaccess with:</P> + +<P>wish -f $pgaccess_dir/pgaccess.tcl [postgreSQL_database_name]</P> +</UL> + +<P>e) et voila!</P> + +<P><B>3) Concluding remarks:</B></P> + +<UL> +<P>As I stated at the start of this document, following the procedure indicated +above worked for me. I am sure, however, that a few of the steps are unnecessary/non-optimised/stupid +etc. If any Unix (IRIX) boffin is reading this and you spot anything you +would like to comment/correct etc. please e-mail me (stuart@ludwig.ucl.ac.uk). +Also, if you just have questions and think I might help, please contact +me at the same e-mail.</P> + +<P>Finally, I can accept no responsibility if these steps don't work for +you or if it all goes horribly wrong and you 'damage' your computer trying +them. Let common sense prevail!</P> +</UL> + +<P>Good luck</P> + +<P>Stuart Rison LICR University College London London W1P 8BT<BR> +<A HREF="mailto:stuart@ludwig.ucl.ac.uk">stuart@ludwig.ucl.ac.uk</A></P> + +</BODY> +</HTML> diff --git a/src/bin/pgaccess/doc/html/linux1.gif b/src/bin/pgaccess/doc/html/linux1.gif new file mode 100644 index 0000000000000000000000000000000000000000..b98ac024d735a911da2481054ac9af3ed448282b Binary files /dev/null and b/src/bin/pgaccess/doc/html/linux1.gif differ diff --git a/src/bin/pgaccess/doc/html/maillist.html b/src/bin/pgaccess/doc/html/maillist.html new file mode 100644 index 0000000000000000000000000000000000000000..4e0ce850c96002d07a422fba10c54d2c7af5fe4f --- /dev/null +++ b/src/bin/pgaccess/doc/html/maillist.html @@ -0,0 +1,43 @@ +<!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]"> +</HEAD> +<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000EF" VLINK="#51188E" ALINK="#FF0000"> + +<P>The mailing list for PgAccess is : <B><TT>pgsql-interfaces@postgresql.org</TT></B></P> + +<P>If you have some questions regarding PgAccess you should mail to this +address. I will also answer to messages addresed directly to me but it +would be better to post your messages here because it might be possible +to get an answer quickly from another user of PgAccess.</P> + +<P> +<HR WIDTH="100%"></P> + +<P>To subscribe please send a mail message to :</P> + +<P> <B><TT><FONT SIZE=+1>pgsql-interfaces-request@postgresql.org +</FONT></TT></B> </P> + +<P>having a single line in the body message : <B><TT><FONT SIZE=+1>subscribe</FONT></TT></B></P> + +<P>In a couple of minutes , if everything is ok, you must receive something +like that :</P> + +<P> +<HR WIDTH="100%"></P> + +<P><TT>Welcome to the pgsql-interfaces mailing list!</TT></P> + +<P><TT>Please save this message for future reference. Thank you.</TT></P> + +<P><TT>If you ever want to remove yourself from this mailing list, you +can send mail to <Majordomo@hub.org> with the following command in +the body of your email message:</TT></P> + +<P><TT>unsubscribe pgsql-interfaces yourname@yourdomain</TT></P> +<TT></TT> +</BODY> +</HTML> diff --git a/src/bin/pgaccess/doc/html/main.html b/src/bin/pgaccess/doc/html/main.html new file mode 100644 index 0000000000000000000000000000000000000000..2bddfd61d4a978103730bd0aa5579196bde7acfb --- /dev/null +++ b/src/bin/pgaccess/doc/html/main.html @@ -0,0 +1,34 @@ +<!doctype html public "-//w3c//dtd html 4.0 transitional//en"> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> + <meta name="GENERATOR" content="Mozilla/4.61 [en] (X11; I; Linux 2.2.12 i586) [Netscape]"> +</head> +<body bgcolor="#FEFEDF"> + +<h1> +PgAccess +<hr WIDTH="100%"></h1> +A free graphical database management tool for <a href="http://www.postgresql.org">PostgreSQL</a>. +PgAccess has been written by <a href="mailto:teo@flex.ro">Constantin Teodorescu</a> +using Visual Tcl, the best tool for developing Tcl/Tk applications I've +ever seen. +<p><b>Last version</b> +<br>Last stable version is 0.98 , released on 29 August 1999. Read <a href="whatsnew.html">what's +new</a> in 0.98. +<p><b>Portability issues</b> +<br>PgAccess is available for every platform where PostgreSQL was ported +and where a Tcl/Tk package is available. PgAccess has been reported running +on : +<br>- Linux +<br>- FreeBSD +<br>- Solaris +<br>- HPUX +<br>- Irix +<br>- Windows 95,98,NT +<p>PgAccess needs Tcl/Tk versions 8.0.x and higher thought PgAccess. For +win32 platforms there are some special DLL's that have to be downloaded +and installed, more information <a href="win32.html">here</a>. +<p>PgAccess is protected by the following <a href="copyright.html">copyright</a>. +</body> +</html> diff --git a/src/bin/pgaccess/doc/html/mainwindow.gif b/src/bin/pgaccess/doc/html/mainwindow.gif new file mode 100644 index 0000000000000000000000000000000000000000..6a48792d194b5230566665f2e00725f1fb6ace27 Binary files /dev/null and b/src/bin/pgaccess/doc/html/mainwindow.gif differ diff --git a/src/bin/pgaccess/doc/html/newtable.gif b/src/bin/pgaccess/doc/html/newtable.gif new file mode 100644 index 0000000000000000000000000000000000000000..891d05698f9d32750cf9bfd6e755b312103e61e6 Binary files /dev/null and b/src/bin/pgaccess/doc/html/newtable.gif differ diff --git a/src/bin/pgaccess/doc/html/newuser.gif b/src/bin/pgaccess/doc/html/newuser.gif new file mode 100644 index 0000000000000000000000000000000000000000..5c56c9ad2998cd3a4ae31d3f43e26fd0a920ebf0 Binary files /dev/null and b/src/bin/pgaccess/doc/html/newuser.gif differ diff --git a/src/bin/pgaccess/doc/html/old_index.html b/src/bin/pgaccess/doc/html/old_index.html new file mode 100644 index 0000000000000000000000000000000000000000..4bbf11fcf07e0afd00a6a45ac702527261ac497d --- /dev/null +++ b/src/bin/pgaccess/doc/html/old_index.html @@ -0,0 +1,143 @@ +<!doctype html public "-//w3c//dtd html 4.0 transitional//en"> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> + <meta name="GENERATOR" content="Mozilla/4.61 [en] (X11; I; Linux 2.2.11 i586) [Netscape]"> + <title>PgAccess - a Tcl/Tk PostgreSQL interface</title> +</head> +<body bgcolor="#FFFFFF"> + +<h1> +PgAccess - a free database management tool for <a href="http://www.postgreSQL.org">PostgreSQL</a></h1> + +<hr> +<li> +Download the last version of PgAccess <a href="pgaccess-0.96.tar.gz">(press +shift and click this link) (tar.gz file)</a> or <a href="pgaccess.zip">this +one (zip file for Windows)</a></li> + +<center> +<p><br>Latest stable version of PgAccess is 0.97 , released 16 August 1999 +! +<p><font size=+2>PgAccess 0.93 and higher will not work from the beginning +with PostgreSQL 6.3.x !!</font> +<br><font size=+2>Read <a href="pg93patch.html">here</a> how to apply a +simple patch in order to make it work !</font></center> +<b><font color="#000000"><font size=+2></font></font></b> +<center><table BORDER=2 NOSAVE > +<tr NOSAVE> +<td NOSAVE><b><font color="#FF0000"><font size=+2>NEW</font></font></b></td> + +<td NOSAVE><b><font color="#000000"><font size=+2>International version +(english, french, italian, romanian)</font></font></b></td> +</tr> + +<tr NOSAVE> +<td NOSAVE><b><font color="#FF0000"><font size=+2>NEW</font></font></b></td> + +<td><b><font size=+2>Context sensitive Help</font></b></td> +</tr> +</table></center> + +<center> +<p>Precompiled libpgtcl and libpq binaries and dll's for i386 are <a href="ftp://ftp.flex.ro/pub/pgaccess">here +</a>!!!</center> + +<h3> +<font color="#000080">Installation problems</font></h3> + +<ul> +<li> +Some problems related with locale special characters could be solved by +this <a href="specialchars.html">simple patch</a></li> + +<li> +I think that there were some problems loading libpgtcl library. I invite +you to read a <a href="index.html#libpgtcl">special section concerning +libpgtcl</a></li> + +<li> +For Silicon Graphics Indigo computers, Irix operating system, there is +a <a href="irix.html">HOWTO make PgAccess to work</a></li> +</ul> + +<h3> +<font color="#191970">What does PgAccess now!</font></h3> +Here are some screenshots 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><b>Tables</b> +<br>- opening multiple tables for viewing, max. n 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 with optional user input parameters ( select +* from invoices where year=[parameter "Year of selection"] ) +<br>- viewing of select type queries result +<br>- query deleting and renaming +<br>- 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, plpgsql and pgtcl languages +<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><b>Users</b> +<br>- define and modify user information +<p>Here is <a href="pga-rad.html">a special section concerning forms and +scripts</a> . +<p>This program is protected by the following <a href="copyright.html">copyright</a> +<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> +<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> +<hr> +<h1> +More information about libpgtcl - downloads</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. +<p> 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! I do not recommend this one. +<p> If you have installed RedHat 5.x, you should +get the last distribution kit of PostgreSQL and compile it from scratch. +RedHat 5.x 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> PostgreSQL 6.4 release has a minor bug. I does not +include by default the crypt lib when compiling libpgtcl. So, you will +need to manually add a -lcrypt to SHLIB line in Makefile in src/interfaces/libpgtcl +and then make clean and make again. The new libpgtcl.so library is properly +configured to run pgaccess. +<br> +</body> +</html> diff --git a/src/bin/pgaccess/doc/html/permissions.gif b/src/bin/pgaccess/doc/html/permissions.gif new file mode 100644 index 0000000000000000000000000000000000000000..06c43491e07da0fe7a9fd7bb63f23eaf2aff968a Binary files /dev/null and b/src/bin/pgaccess/doc/html/permissions.gif differ diff --git a/src/bin/pgaccess/doc/html/pg93patch.html b/src/bin/pgaccess/doc/html/pg93patch.html new file mode 100644 index 0000000000000000000000000000000000000000..4c77bfac61bd84d1beb5c600bd12a589479aab3d --- /dev/null +++ b/src/bin/pgaccess/doc/html/pg93patch.html @@ -0,0 +1,25 @@ +<!doctype html public "-//w3c//dtd html 4.0 transitional//en"> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> + <meta name="GENERATOR" content="Mozilla/4.5 [en] (X11; I; Linux 2.0.36 i586) [Netscape]"> +</head> +<body text="#000000" bgcolor="#FFFFFF" link="#0000FF" vlink="#FF0000" alink="#000088"> + +<h1> +PgAccess 0.93 patch to make it work with PostgreSQL 6.3.x +<hr WIDTH="100%"></h1> + +<p><br>PgAccess 0.93 is working fine with PostgreSQL 6.4.x due to some +changes in libpgtcl ! +<p>There is a small patch that you have to make in order to make it work +with 6.3.x ! +<p>Replace in procedure <tt>wpg_exec</tt> the following line: +<p><tt>set pgsql(errmsg) [pg_result $pgsql(res) -error]</tt> +<p>with this one : +<p><tt>set pgsql(errmsg) "NO ERROR INFORMATION SUPPLIED"</tt> +<p>And it will work fine! In some error cases, you will not get the appropriate +error message from libpgtcl. +<p> <a href="index.html">Back</a> +</body> +</html> diff --git a/src/bin/pgaccess/doc/html/pga-rad.html b/src/bin/pgaccess/doc/html/pga-rad.html new file mode 100644 index 0000000000000000000000000000000000000000..7564cf7b553d0b62c648abb6ea667c077ff805c5 --- /dev/null +++ b/src/bin/pgaccess/doc/html/pga-rad.html @@ -0,0 +1,65 @@ +<HTML> +<HEAD> + <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 +<HR WIDTH="100%"></H1> +Beginning with 0.70 version, I have introduced in PgAccess two new modules +for operating with scripts and forms. + +<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 mechanism and the extremely versatile scripting mode +of Tcl/Tk would give PgAccess a great power for creating end user application +using PostgreSQL. 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 interpret 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. 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 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> +<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%"> +</BODY> +</HTML> diff --git a/src/bin/pgaccess/doc/html/qbtclet.html b/src/bin/pgaccess/doc/html/qbtclet.html new file mode 100644 index 0000000000000000000000000000000000000000..b990c0f15c3edc378ce7298aad511c5f622e56ae --- /dev/null +++ b/src/bin/pgaccess/doc/html/qbtclet.html @@ -0,0 +1,45 @@ +<html> + +<title> Visual Query Builder in Tcl/Tk </title> +<body bgcolor=white> +<h1> Visual Query Builder</h1> +<hr> +This visual query builder is included in <a href='http://www.flex.ro/pgaccess'> +PgAccess</a>, a visual interface to +<a href='http://www.postgreSQL.org'> PostgreSQL</a> written entirely in +vTcl , (Visual Tcl). + + +<p align="center"> + +<embed src="qbtclet.tcl" width=590 height=485> + +</p> + +<br> + + +Visual Query Designer demo<br> +Click <a href='qbtclet.tar.gz'>here</a> to download the source </a> +created by Constantin Teodorescu with vTcl (visual Tcl), teo@flex.ro +<hr> +Facitilies<br> + - drag and drop selection of fields<br> + - drag and drop fields from a table to another do create links<br> + - move table position by dragging<br> + - point and click any link or table then press delete to delete them<br> + - modify sort order by clicking on (unsorted)<br> + - enter filter conditions as criteria (>2000 , ='item')<br> + - easy panning of table and result panels<br> + - show SQL command<br> +<br> +If you want to use it for your database, modify ql_read_struct in order to read + your table structure. +<br> +Feel free to use, modify or copy this software for non-commercial purposes.<br> +In any other case, please contact me. +<br> +FLEX Consulting Braila, ROMANIA is able to deliver high end interfaces +and any other commercial products written in Tcl/Tk just like that you have seen. +</body> +</html> diff --git a/src/bin/pgaccess/doc/html/qbtclet.tcl b/src/bin/pgaccess/doc/html/qbtclet.tcl new file mode 100644 index 0000000000000000000000000000000000000000..9d086a3390071da50d1a1b7ac499cc7d0b616045 --- /dev/null +++ b/src/bin/pgaccess/doc/html/qbtclet.tcl @@ -0,0 +1,529 @@ +################################# +# GLOBAL VARIABLES +# +global qlvar; +global widget; + +################################# +# USER DEFINED PROCEDURES +# +proc init {argc argv} { +global qlvar +set qlvar(yoffs) 360 +set qlvar(xoffs) 50 +set qlvar(reswidth) 150 +} + +init $argc $argv + +proc main {argc argv} { + +} + +proc show_message {usrmsg} { +global msg +set msg $usrmsg +after 2000 {set msg {}} +} + +proc ql_delete_object {} { +global qlvar +# Checking if there +set obj [.c find withtag hili] +if {$obj==""} return +if {[ql_get_tag_info $obj link]=="s"} { +# if {[tk_messageBox -title WARNING -icon question -message "Remove link ?" -type yesno -default no]=="no"} return + show_message "Deleting the link from tables ..." + set linkid [ql_get_tag_info $obj lkid] + set qlvar(links) [lreplace $qlvar(links) $linkid $linkid] + .c delete links + ql_draw_links +} else { + set tablename [ql_get_tag_info $obj tab] + if {$tablename==""} return +# if {[tk_messageBox -title WARNING -icon question -message "Remove table $tablename from query ?" -type yesno -default no]=="no"} return + show_message "Deleting table from query ..." + for {set i [expr [llength $qlvar(restables)]-1]} {$i>=0} {incr i -1} { + if {$tablename==[lindex $qlvar(restables) $i]} { + set qlvar(resfields) [lreplace $qlvar(resfields) $i $i] + set qlvar(restables) [lreplace $qlvar(restables) $i $i] + set qlvar(rescriteria) [lreplace $qlvar(rescriteria) $i $i] + } + } + for {set i [expr [llength $qlvar(links)]-1]} {$i>=0} {incr i -1} { + set thelink [lindex $qlvar(links) $i] + if {($tablename==[lindex $thelink 0]) || ($tablename==[lindex $thelink 2])} { + set qlvar(links) [lreplace $qlvar(links) $i $i] + } + } + .c delete tab$tablename + .c delete links + ql_draw_links + ql_draw_res_panel +} +} + +proc ql_dragit {w x y} { +global draginfo +if {"$draginfo(obj)" != ""} { + set dx [expr $x - $draginfo(x)] + set dy [expr $y - $draginfo(y)] + if {$draginfo(is_a_table)} { + set taglist [.c gettags $draginfo(obj)] + set tabletag [lindex $taglist [lsearch -regexp $taglist "^tab"]] + $w move $tabletag $dx $dy + ql_draw_links + } else { + $w move $draginfo(obj) $dx $dy + } + set draginfo(x) $x + set draginfo(y) $y +} +} + +proc ql_dragstart {w x y} { +global draginfo +catch {unset draginfo} +set draginfo(obj) [$w find closest $x $y] +if {[ql_get_tag_info $draginfo(obj) r]=="ect"} { + # If it'a a rectangle, exit + set draginfo(obj) {} + return +} +. configure -cursor hand1 +.c raise $draginfo(obj) +set draginfo(table) 0 +if {[ql_get_tag_info $draginfo(obj) table]=="header"} { + set draginfo(is_a_table) 1 + .c itemconfigure [.c find withtag hili] -fill black + .c dtag [.c find withtag hili] hili + .c addtag hili withtag $draginfo(obj) + .c itemconfigure hili -fill blue +} else { + set draginfo(is_a_table) 0 +} +set draginfo(x) $x +set draginfo(y) $y +set draginfo(sx) $x +set draginfo(sy) $y +} + +proc ql_dragstop {x y} { +global draginfo qlvar +. configure -cursor top_left_arrow +set este {} +catch {set este $draginfo(obj)} +if {$este==""} return +# Re-establish the normal paint order so +# information won't be overlapped by table rectangles +# or link linkes +.c lower $draginfo(obj) +.c lower rect +.c lower links +set qlvar(panstarted) 0 +if {$draginfo(is_a_table)} { + set draginfo(obj) {} + .c delete links + ql_draw_links + return +} +.c move $draginfo(obj) [expr $draginfo(sx)-$x] [expr $draginfo(sy)-$y] +if {($y>$qlvar(yoffs)) && ($x>$qlvar(xoffs))} { + # Drop position : inside the result panel + # Compute the offset of the result panel due to panning + set resoffset [expr [lindex [.c bbox resmarker] 0]-$qlvar(xoffs)] + set newfld [.c itemcget $draginfo(obj) -text] + set tabtag [ql_get_tag_info $draginfo(obj) tab] + set col [expr int(($x-$qlvar(xoffs)-$resoffset)/$qlvar(reswidth))] + set qlvar(resfields) [linsert $qlvar(resfields) $col $newfld] + set qlvar(ressort) [linsert $qlvar(ressort) $col unsorted] + set qlvar(rescriteria) [linsert $qlvar(rescriteria) $col {}] + set qlvar(restables) [linsert $qlvar(restables) $col $tabtag] + ql_draw_res_panel +} else { + # Drop position : in the table panel + set droptarget [.c find overlapping $x $y $x $y] + set targettable {} + foreach item $droptarget { + set targettable [ql_get_tag_info $item tab] + set targetfield [ql_get_tag_info $item f-] + if {($targettable!="") && ($targetfield!="")} { + set droptarget $item + break + } + } + # check if target object isn't a rectangle + if {[ql_get_tag_info $droptarget rec]=="t"} {set targettable {}} + if {$targettable!=""} { + # Target has a table + # See about originate table + set sourcetable [ql_get_tag_info $draginfo(obj) tab] + if {$sourcetable!=""} { + # Source has also a tab .. tag + set sourcefield [ql_get_tag_info $draginfo(obj) f-] + if {$sourcetable!=$targettable} { + lappend qlvar(links) [list $sourcetable $sourcefield $targettable $targetfield $draginfo(obj) $droptarget] + ql_draw_links + } + } + } +} +# Erase information about onbject beeing dragged +set draginfo(obj) {} +} + +proc ql_draw_links {} { +global qlvar +.c delete links +set i 0 +foreach link $qlvar(links) { + # Compute the source and destination right edge + set sre [lindex [.c bbox tab[lindex $link 0]] 2] + set dre [lindex [.c bbox tab[lindex $link 2]] 2] + # Compute field bound boxes + set sbbox [.c bbox [lindex $link 4]] + set dbbox [.c bbox [lindex $link 5]] + # Compute the auxiliary lines + if {[lindex $sbbox 2] < [lindex $dbbox 0]} { + # Source object is on the left of target object + set x1 $sre + set y1 [expr ([lindex $sbbox 1]+[lindex $sbbox 3])/2] + .c create line $x1 $y1 [expr $x1+10] $y1 -tags [subst {links lkid$i}] -width 3 + set x2 [lindex $dbbox 0] + set y2 [expr ([lindex $dbbox 1]+[lindex $dbbox 3])/2] + .c create line [expr $x2-10] $y2 $x2 $y2 -tags {links} -width 3 + .c create line [expr $x1+10] $y1 [expr $x2-10] $y2 -tags [subst {links lkid$i}] -width 2 + } else { + # source object is on the right of target object + set x1 [lindex $sbbox 0] + set y1 [expr ([lindex $sbbox 1]+[lindex $sbbox 3])/2] + .c create line $x1 $y1 [expr $x1-10] $y1 -tags [subst {links lkid$i}] -width 3 + set x2 $dre + set y2 [expr ([lindex $dbbox 1]+[lindex $dbbox 3])/2] + .c create line $x2 $y2 [expr $x2+10] $y2 -width 3 -tags [subst {links lkid$i}] + .c create line [expr $x1-10] $y1 [expr $x2+10] $y2 -tags [subst {links lkid$i}] -width 2 + } + incr i +} +.c lower links +.c bind links <Button-1> {ql_link_click %x %y} +} + +proc ql_draw_lizzard {} { +global qlvar +ql_read_struct +.c delete all +set posx 20 +for {set it 0} {$it<$qlvar(ntables)} {incr it} { + ql_draw_table $it +# set posy 10 +# set tablename $qlvar(tablename$it) +# .c create text $posx $posy -text $tablename -anchor nw -tags [subst {tab$tablename f-oid mov tableheader}] -font -Adobe-Helvetica-Bold-R-Normal-*-*-120-*-*-*-*-* +# incr posy 16 +# foreach fld $qlvar(tablestruct$it) { +# .c create text $posx $posy -text $fld -anchor nw -tags [subst {f-$fld tab$tablename mov}] -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* +# incr posy 14 +# } +# set reg [.c bbox tab$tablename] +# .c create rectangle [lindex $reg 0] [lindex $reg 1] [lindex $reg 2] [lindex $reg 3] -fill #EEEEEE -tags [subst {rect tab$tablename}] +# .c create line [lindex $reg 0] [expr [lindex $reg 1]+15] [lindex $reg 2] [expr [lindex $reg 1]+15] -tags [subst {rect tab$tablename}] +# set posx [expr $posx+40+[lindex $reg 2]-[lindex $reg 0]] +} +.c lower rect +.c create line 0 $qlvar(yoffs) 10000 $qlvar(yoffs) -width 3 +.c create rectangle 0 $qlvar(yoffs) 10000 5000 -fill #FFFFFF +for {set i [expr 15+$qlvar(yoffs)]} {$i<500} {incr i 15} { + .c create line $qlvar(xoffs) $i 10000 $i -fill #CCCCCC -tags {resgrid} +} +for {set i $qlvar(xoffs)} {$i<10000} {incr i $qlvar(reswidth)} { + .c create line $i [expr 1+$qlvar(yoffs)] $i 10000 -fill #cccccc -tags {resgrid} +} +# Make a marker for result panel offset calculations (due to panning) +.c create line $qlvar(xoffs) $qlvar(yoffs) $qlvar(xoffs) 500 -tags {resmarker resgrid} +.c create rectangle 0 $qlvar(yoffs) $qlvar(xoffs) 5000 -fill #EEEEEE -tags {reshdr} +.c create text 5 [expr 1+$qlvar(yoffs)] -text Field: -anchor nw -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -tags {reshdr} +.c create text 5 [expr 16+$qlvar(yoffs)] -text Table: -anchor nw -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -tags {reshdr} +.c create text 5 [expr 31+$qlvar(yoffs)] -text Sort: -anchor nw -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -tags {reshdr} +.c create text 5 [expr 46+$qlvar(yoffs)] -text Criteria: -anchor nw -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -tags {reshdr} +.c bind mov <Button-1> {ql_dragstart %W %x %y} +.c bind mov <B1-Motion> {ql_dragit %W %x %y} +bind . <ButtonRelease-1> {ql_dragstop %x %y} +bind . <Button-1> {qlc_click %x %y %W} +bind . <B1-Motion> {ql_pan %x %y} +bind . <Key-Delete> {ql_delete_object} +set qlvar(resfields) {} +set qlvar(ressort) {} +set qlvar(rescriteria) {} +set qlvar(restables) {} +set qlvar(critedit) 0 +set qlvar(links) {} +set qlvar(linktodelete) {} +} + +proc ql_draw_res_panel {} { +global qlvar +# Compute the offset of the result panel due to panning +set resoffset [expr [lindex [.c bbox resmarker] 0]-$qlvar(xoffs)] + .c delete resp + for {set i 0} {$i<[llength $qlvar(resfields)]} {incr i} { + .c create text [expr $resoffset+4+$qlvar(xoffs)+$i*$qlvar(reswidth)] [expr 1+$qlvar(yoffs)] -text [lindex $qlvar(resfields) $i] -anchor nw -fill navy -tags {resf resp} -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* + .c create text [expr $resoffset+4+$qlvar(xoffs)+$i*$qlvar(reswidth)] [expr 16+$qlvar(yoffs)] -text [lindex $qlvar(restables) $i] -anchor nw -tags {resp rest} -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* + .c create text [expr $resoffset+4+$qlvar(xoffs)+$i*$qlvar(reswidth)] [expr 31+$qlvar(yoffs)] -text [lindex $qlvar(ressort) $i] -anchor nw -tags {resp sort} -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* + if {[lindex $qlvar(rescriteria) $i]!=""} { + .c create text [expr $resoffset+4+$qlvar(xoffs)+$i*$qlvar(reswidth)] [expr $qlvar(yoffs)+46+15*0] -anchor nw -text [lindex $qlvar(rescriteria) $i] -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -tags [subst {resp cr-c$i-r0}] + } + } + .c raise reshdr + .c bind sort <Button-1> {ql_swap_sort %W %x %y} +} + +proc ql_draw_table {it} { +global qlvar + +set posy 10 +set allbox [.c bbox rect] +if {$allbox==""} {set posx 10} else {set posx [expr 20+[lindex $allbox 2]]} +set tablename $qlvar(tablename$it) +.c create text $posx $posy -text $tablename -anchor nw -tags [subst {tab$tablename f-oid mov tableheader}] -font -Adobe-Helvetica-Bold-R-Normal-*-*-120-*-*-*-*-* +incr posy 16 +foreach fld $qlvar(tablestruct$it) { + .c create text $posx $posy -text $fld -anchor nw -tags [subst {f-$fld tab$tablename mov}] -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* + incr posy 14 +} +set reg [.c bbox tab$tablename] +.c create rectangle [lindex $reg 0] [lindex $reg 1] [lindex $reg 2] [lindex $reg 3] -fill #EEEEEE -tags [subst {rect tab$tablename}] +.c create line [lindex $reg 0] [expr [lindex $reg 1]+15] [lindex $reg 2] [expr [lindex $reg 1]+15] -tags [subst {rect tab$tablename}] +} + +proc ql_get_tag_info {obj prefix} { +set taglist [.c gettags $obj] +set tagpos [lsearch -regexp $taglist "^$prefix"] +if {$tagpos==-1} {return ""} +set thattag [lindex $taglist $tagpos] +return [string range $thattag [string length $prefix] end] +} + +proc ql_link_click {x y} { +global qlvar + +set obj [.c find closest $x $y 1 links] +if {[ql_get_tag_info $obj link]!="s"} return +.c itemconfigure [.c find withtag hili] -fill black +.c dtag [.c find withtag hili] hili +.c addtag hili withtag $obj +.c itemconfigure $obj -fill blue +} + +proc ql_pan {x y} { +global qlvar +set panstarted 0 +catch {set panstarted $qlvar(panstarted) } +if {!$panstarted} return +set dx [expr $x-$qlvar(panstartx)] +set dy [expr $y-$qlvar(panstarty)] +set qlvar(panstartx) $x +set qlvar(panstarty) $y +if {$qlvar(panobject)=="tables"} { + .c move mov $dx $dy + .c move links $dx $dy + .c move rect $dx $dy +} else { + .c move resp $dx 0 + .c move resgrid $dx 0 + .c raise reshdr +} +} + +proc ql_read_struct {} { +global qlvar + +set qlvar(ntables) 3 +set qlvar(tablename0) Facturi +set qlvar(tablename1) Nommat +set qlvar(tablename2) Incasari +set qlvar(tablestruct0) [list factura client valoare tva] +set qlvar(tablestruct1) [list cod denumire pret greutate procent_tva] +set qlvar(tablestruct2) [list data valoare nrdoc referinta] +} + +proc ql_show_sql {} { +global qlvar + +set sqlcmd "select " +for {set i 0} {$i<[llength $qlvar(resfields)]} {incr i} { + if {$sqlcmd!="select "} {set sqlcmd "$sqlcmd, "} + set sqlcmd "$sqlcmd[lindex $qlvar(restables) $i].[lindex $qlvar(resfields) $i]" +} +set tables {} +for {set i 0} {$i<$qlvar(ntables)} {incr i} { + lappend tables $qlvar(tablename$i) +} +set sqlcmd "$sqlcmd from [join $tables ,] " +set sup1 {} +if {[llength $qlvar(links)]>0} { + set sup1 "where " + foreach link $qlvar(links) { + if {$sup1!="where "} {set sup1 "$sup1 and "} + set sup1 "$sup1 ([lindex $link 0].[lindex $link 1]=[lindex $link 2].[lindex $link 3])" + } +} +for {set i 0} {$i<[llength $qlvar(resfields)]} {incr i} { + set crit [lindex $qlvar(rescriteria) $i] + if {$crit!=""} { + if {$sup1==""} {set sup1 "where "} + if {[string range $sup1 0 4]=="where"} {set sup1 "$sup1 and "} + set sup1 "$sup1 ([lindex $qlvar(restables) $i].[lindex $qlvar(resfields) $i]$crit) " + } +} +set sqlcmd "$sqlcmd $sup1" +set sup2 {} +for {set i 0} {$i<[llength $qlvar(ressort)]} {incr i} { + set how [lindex $qlvar(ressort) $i] + if {$how!="unsorted"} { + if {$how=="Ascending"} {set how asc} else {set how desc} + if {$sup2==""} {set sup2 " order by "} else {set sup2 "$sup2,"} + set sup2 "$sup2 [lindex $qlvar(resfields) $i] $how " + } +} +set sqlcmd "$sqlcmd $sup2" +set qlvar(sql) $sqlcmd +#tk_messageBox -message $sqlcmd +.c delete sqlpage +.c create rectangle 0 0 2000 [expr $qlvar(yoffs)-1] -fill #ffffff -tags {sqlpage} +.c create text 10 10 -text $sqlcmd -anchor nw -width 550 -tags {sqlpage} -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* +.c bind sqlpage <Button-1> {.c delete sqlpage} +} + +proc ql_swap_sort {w x y} { +global qlvar +set obj [$w find closest $x $y] +set taglist [.c gettags $obj] +if {[lsearch $taglist sort]==-1} return +set cum [.c itemcget $obj -text] +if {$cum=="unsorted"} { + set cum Ascending +} elseif {$cum=="Ascending"} { + set cum Descending +} else { + set cum unsorted +} +set col [expr int(($x-$qlvar(xoffs))/$qlvar(reswidth))] +set qlvar(ressort) [lreplace $qlvar(ressort) $col $col $cum] +.c itemconfigure $obj -text $cum +} + +proc qlc_click {x y w} { +global qlvar +set qlvar(panstarted) 0 +if {$w==".c"} { + set canpan 1 + if {$y<$qlvar(yoffs)} { + if {[llength [.c find overlapping $x $y $x $y]]!=0} {set canpan 0} + set qlvar(panobject) tables + } else { + set qlvar(panobject) result + } + if {$canpan} { + . configure -cursor hand1 + set qlvar(panstartx) $x + set qlvar(panstarty) $y + set qlvar(panstarted) 1 + } +} +set isedit 0 +catch {set isedit $qlvar(critedit)} +# Compute the offset of the result panel due to panning +set resoffset [expr [lindex [.c bbox resmarker] 0]-$qlvar(xoffs)] +if {$isedit} { + set qlvar(rescriteria) [lreplace $qlvar(rescriteria) $qlvar(critcol) $qlvar(critcol) $qlvar(critval)] + .c delete cr-c$qlvar(critcol)-r$qlvar(critrow) + .c create text [expr $resoffset+4+$qlvar(xoffs)+$qlvar(critcol)*$qlvar(reswidth)] [expr $qlvar(yoffs)+46+15*$qlvar(critrow)] -anchor nw -text $qlvar(critval) -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -tags [subst {resp cr-c$qlvar(critcol)-r$qlvar(critrow)}] + set qlvar(critedit) 0 +} +catch {destroy .entc} +if {$y<[expr $qlvar(yoffs)+46]} return +if {$x<[expr $qlvar(xoffs)+5]} return +set col [expr int(($x-$qlvar(xoffs)-$resoffset)/$qlvar(reswidth))] +if {$col>=[llength $qlvar(resfields)]} return +set nx [expr $col*$qlvar(reswidth)+8+$qlvar(xoffs)+$resoffset] +set ny [expr $qlvar(yoffs)+76] +# Get the old criteria value +set qlvar(critval) [lindex $qlvar(rescriteria) $col] +entry .entc -textvar qlvar(critval) -borderwidth 0 -background #FFFFFF -highlightthickness 0 -selectborderwidth 0 -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* +place .entc -x $nx -y $ny -height 14 +focus .entc +bind .entc <Button-1> {set qlvar(panstarted) 0} +set qlvar(critcol) $col +set qlvar(critrow) 0 +set qlvar(critedit) 1 +} + +proc Window {args} { +global vTcl + set cmd [lindex $args 0] + set name [lindex $args 1] + set newname [lindex $args 2] + set rest [lrange $args 3 end] + if {$name == "" || $cmd == ""} {return} + if {$newname == ""} { + set newname $name + } + set exists [winfo exists $newname] + switch $cmd { + show { + if {$exists == "1" && $name != "."} {wm deiconify $name; return} + if {[info procs vTclWindow(pre)$name] != ""} { + eval "vTclWindow(pre)$name $newname $rest" + } + if {[info procs vTclWindow$name] != ""} { + eval "vTclWindow$name $newname $rest" + } + if {[info procs vTclWindow(post)$name] != ""} { + eval "vTclWindow(post)$name $newname $rest" + } + } + hide { if $exists {wm withdraw $newname; return} } + iconify { if $exists {wm iconify $newname; return} } + destroy { if $exists {destroy $newname; return} } + } +} + + + set base "" + bind $base <B1-Motion> { + ql_pan %x %y + } + bind $base <Button-1> { + qlc_click %x %y %W + } + bind $base <ButtonRelease-1> { + ql_dragstop %x %y + } + bind $base <Key-Delete> { + ql_delete_object + } + canvas $base.c \ + -background #fefefe -borderwidth 2 -height 207 -relief ridge \ + -takefocus 0 -width 295 + label $base.msg -textvar msg -borderwidth 1 -relief sunken + button $base.b2 \ + -borderwidth 1 -command ql_draw_lizzard \ + -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -padx 9 \ + -pady 3 -text {Paint demo tables} + button $base.showbtn \ + -borderwidth 1 -command ql_show_sql \ + -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -padx 9 \ + -pady 3 -text {Show SQL} + ################### + # SETTING GEOMETRY + ################### + place $base.c \ + -x 5 -y 30 -width 578 -height 425 -anchor nw -bordermode ignore + place $base.b2 \ + -x 5 -y 5 -height 26 -anchor nw -bordermode ignore + place $base.showbtn \ + -x 130 -y 5 -height 26 -anchor nw -bordermode ignore + place $base.msg \ + -x 5 -y 460 -width 578 -anchor nw + +main $argc $argv diff --git a/src/bin/pgaccess/doc/html/screenshots.html b/src/bin/pgaccess/doc/html/screenshots.html new file mode 100644 index 0000000000000000000000000000000000000000..0cf3ac6b65bdb8e4c1ed438c18e2a5589c6c9930 --- /dev/null +++ b/src/bin/pgaccess/doc/html/screenshots.html @@ -0,0 +1,43 @@ +<!doctype html public "-//w3c//dtd html 4.0 transitional//en"> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> + <meta name="GENERATOR" content="Mozilla/4.61 [en] (X11; I; Linux 2.2.12 i586) [Netscape]"> +</head> +<body bgcolor="#FEFEDF"> + +<h3> +Image gallery +<hr WIDTH="100%"></h3> + +<ul> +<li> + <a href="mainwindow.gif">Main window</a> 9 Kb</li> + +<li> + <a href="newtable.gif">Creating a new table</a> 9 Kb</li> + +<li> + <a href="permissions.gif">Table access control</a> 10 Kb</li> + +<li> + <a href="addindex.gif">Adding a new index</a> 12 Kb</li> + +<li> + <a href="vdesigner.gif">The visual query designer</a> 16 Kb</li> + +<li> + <a href="function.gif">Working with functions</a> 10 Kb</li> + +<li> + <a href="forms.gif">Form designer</a> 19 Kb</li> + +<li> + <a href="newuser.gif">User management</a> 4 Kb</li> + +<li> + <a href="help.gif">Help</a> 7 Kb</li> +</ul> + +</body> +</html> diff --git a/src/bin/pgaccess/doc/html/specialchars.html b/src/bin/pgaccess/doc/html/specialchars.html new file mode 100644 index 0000000000000000000000000000000000000000..b6b82f2336a806ce60128781ed43b83243af7d3e --- /dev/null +++ b/src/bin/pgaccess/doc/html/specialchars.html @@ -0,0 +1,47 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML> +<HEAD> + <TITLE>Special locale characters</TITLE> + <META NAME="GENERATOR" CONTENT="Mozilla/3.04Gold (X11; I; Linux 2.0.32 i586) [Netscape]"> +</HEAD> +<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000EF" VLINK="#51188E" ALINK="#FF0000"> + +<H1>Special locale characters and PgAccess +<HR WIDTH="100%"></H1> + +<P>The problem is related with some special characters used in different +countries because PgAccess did not use fonts with `-ISO8859-1' encoding +-- </P> + +<P>The sollution was proposed by H.P.Heidinger ( hph@hphbbs.ruhr.de) and +it's very simple.</P> + +<P>If you look into PgAccess, you will find fonts declared as follows :</P> + +<P><TT>$ grep -e '-font' -i pgaccess.tcl<BR> +-font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* \<BR> +-font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* \<BR> +-font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* \<BR> +-font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* \</TT></P> + +<P>It should be something like: -adobe-helvetica-medium-r-normal-*-*-120-*-*-*-*-iso8859-1</P> + +<P>You can achieve this by running the following script :</P> + +<P><TT>#!/bin/sh<BR> +cp pgaccess.tcl pgaccess.tcl-org<BR> +cat pgaccess.tcl |\<BR> +sed -e's/\-\*\-\*\ /\-iso8859\-1\ /g' |\<BR> +sed -e's/\-\*\-\*\}/\-iso8859\-1}/g' |\<BR> +sed -e's/\-\*\-\*\]/\-iso8859\-1]/g' |\<BR> +sed -e's/\-\*\-\*$/\-iso8859\-1/g' |\<BR> +sed -e's/\-Clean\-/\-Fixed\-/g' |\<BR> +sed -e's/clean/fixed/g' >pgaccess.iso<BR> +mv pgaccess.iso pgaccess.tcl<BR> +chmod +x pgaccess.tcl</TT></P> + +<P>The final version of PgAccess (1.0) will let the user decide what fonts +will be used through a "preferences" dialog window.</P> + +</BODY> +</HTML> diff --git a/src/bin/pgaccess/doc/html/todo.html b/src/bin/pgaccess/doc/html/todo.html new file mode 100644 index 0000000000000000000000000000000000000000..f19b61ab90c94db30e04d2449b790f7d2eb6580f --- /dev/null +++ b/src/bin/pgaccess/doc/html/todo.html @@ -0,0 +1,11 @@ +<html> +<body bgcolor="#FEFEDF"> +<h2>ToDo List</h2><hr> + - Finish the report generator module<br> + - Enhance the form designer<br> + - Enhance the scripts module<br> + - Translations in other languages<br> +<br> +Please send any suggestions by mail to <a href="mailto:teo@flex.ro">Constantin Teodorescu</a>. +</body> +</html> diff --git a/src/bin/pgaccess/doc/html/tutorial/addref.jpg b/src/bin/pgaccess/doc/html/tutorial/addref.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ee0525d15cecc91742d6c0a42f5cefc9195bfebd Binary files /dev/null and b/src/bin/pgaccess/doc/html/tutorial/addref.jpg differ diff --git a/src/bin/pgaccess/doc/html/tutorial/altern_q.jpg b/src/bin/pgaccess/doc/html/tutorial/altern_q.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3fb02aebbd7cdf887746bc450730fa404ba4ab2c Binary files /dev/null and b/src/bin/pgaccess/doc/html/tutorial/altern_q.jpg differ diff --git a/src/bin/pgaccess/doc/html/tutorial/altern_v.jpg b/src/bin/pgaccess/doc/html/tutorial/altern_v.jpg new file mode 100644 index 0000000000000000000000000000000000000000..52cbbb077207034c3c570ec8b7a18b9702082b95 Binary files /dev/null and b/src/bin/pgaccess/doc/html/tutorial/altern_v.jpg differ diff --git a/src/bin/pgaccess/doc/html/tutorial/copyright.html b/src/bin/pgaccess/doc/html/tutorial/copyright.html new file mode 100644 index 0000000000000000000000000000000000000000..22eada2fc4324cb05d948fbf1baf7614af256124 Binary files /dev/null and b/src/bin/pgaccess/doc/html/tutorial/copyright.html differ diff --git a/src/bin/pgaccess/doc/html/tutorial/index.html b/src/bin/pgaccess/doc/html/tutorial/index.html new file mode 100644 index 0000000000000000000000000000000000000000..a63f1a89fbfcac70f99bc6ab70dd553df059c616 --- /dev/null +++ b/src/bin/pgaccess/doc/html/tutorial/index.html @@ -0,0 +1,33 @@ +<!doctype html public "-//w3c//dtd html 4.0 transitional//en"> +<html><head><title>PgAccess - a Tcl/Tk interface for PostgreSQL</title></head> +<body bgcolor="#C0C0C0"> +<h1>PgAccess - a Tcl/Tk interface for PostgreSQL</h1> +<hr> +<a name="intro"> +<ul><li><a href="intro.html">Introduction</a> + <ul><li><a href="intro.html#whatpga">What is PgAccess?</a> + <li><a href="intro.html#helppga">How to get help with PgAccess</a> + </ul> +<a name="start"> + <li><a href="start.html">Getting Started</a> + <ul><li><a href="start.html#getpga">How to get PgAccess</a> + <li><a href="start.html#uncpga">How to uncompress PgAccess</a> + <li><a href="start.html#putpga">Putting PgAccess where it will be found</a> + <li><a href="start.html#startpga">Starting PgAccess</a> + <li><a href="irix.html">Installing PgAccess under IRIX 5.3</a> + </ul> +<a name="problems"> + <li><a href="problems.html">Common Initial Problems</a> + <ul><li><a href="problems.html#connfail">Connection failure</a> + <li><a href="problems.html#nonuser">User not defined</a> + <li><a href="problems.html#libpg">libpgtcl not found</a> + <li><a href="problems.html#spchar">Locale specific characters</a> + <li><a href="problems.html#pg63">Problems with PostgreSQL 6.3.x</a> + </ul> + <li><a href="tut.html">PgAccess tutorial</a> + <ul><li><a href="tut_user.html">User Administration</a> + <li><a href="tut_new.html">Creating a table</a> + <li><a href="tut_edit.html">Editing a table</a> + <li><a href="tut_sel1.html">Querying - SELECT</a> +</ul> +</body></html> diff --git a/src/bin/pgaccess/doc/html/tutorial/intro.html b/src/bin/pgaccess/doc/html/tutorial/intro.html new file mode 100644 index 0000000000000000000000000000000000000000..2f056599edf0e63029c14157cbbb8199049b4725 --- /dev/null +++ b/src/bin/pgaccess/doc/html/tutorial/intro.html @@ -0,0 +1,39 @@ +<html><head><title>PgAccess - Introduction</title></head> +<body bgcolor="#C0C0C0"> +<h1>PgAccess - Introduction</h1> +<a name="whatpga"><h2>What is PgAccess?</h2> +PgAccess is a graphical user interface for the PostgreSQL database management +system written in the Tcl/Tk scripting language by Constantin Teodorescu. It +allows the user to interact with PostgreSQL in a manner similar to many PC +database applications, with menu choices and graphical tools like buttons. +This means that the user can avoid the basic command line interface for most +common tasks. PgAccess doesn't change the way PostgreSQL operates, just makes +it easier to use for those familiar with graphical interfaces.<p> +Obviously, you <u>must</u> have PostgreSQL installed and running, and Tcl/Tk on +your system before you can use PgAccess.<p> +PgAccess is an "open source" application. The source code is available to the +user, and may be modified by the user. The user can fix a bug, or change the +way a function operates. You may not want to get that involved with the +programming, but you have the option to do so. If you feel you have made an +improvement to the program, you are encouraged to share it with other users.<p> +If you are not familiar with how open source software can be altered and +redistributed, please read <a href="copyright.html">this</a>.<p> +<a name="helppga"><h2>How to get help with PgAccess</h2> +The mailing list for PgAccess is: <b>pgsql-interfaces@postgresql.org</b><p> +If you have any questions regarding PgAccess you should subscribe to this +list in the following way:<p> +First subscribe to the list by sending an email message to:<p> +<samp>pgsql-interfaces-request@postgresql.org</samp><p> +Send a single line in the body of the message as follows:<p> +<samp>subscribe</samp><p> +In a short time you should receive a message beginning like this:<p> +<samp>Welcome to the pgsql-interfaces mailing list!<br> +...</samp><p> +This will contain instructions on how to remove yourself from the mailing +list, so save that message. You may only want to ask a few questions and then +stop receiving messages.<p> +You may also email <a href="mailto:teo@flex.ro">Constantin Teodorescu</a> +directly, although writing to a mailing list with many correspondents will often +produce a quicker answer.<p> +<a href="index.html#intro">Back to index</a> +</body></html> diff --git a/src/bin/pgaccess/doc/html/tutorial/irix.html b/src/bin/pgaccess/doc/html/tutorial/irix.html new file mode 100644 index 0000000000000000000000000000000000000000..7d472aa9cdc1c67426bb97aba619a6bd40d89b28 --- /dev/null +++ b/src/bin/pgaccess/doc/html/tutorial/irix.html @@ -0,0 +1,133 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML> +<HEAD> + <TITLE>PgAccess on Irix</TITLE> + <META NAME="GENERATOR" CONTENT="Mozilla/3.04Gold (X11; I; Linux 2.0.33 i586) [Netscape]"> +</HEAD> +<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000EF" VLINK="#51188E" ALINK="#FF0000"> + +<H1>INSTALLING PgAccess UNDER IRIX 5.3. +<HR WIDTH="100%"></H1> + +<P><B><FONT COLOR="#000080">This HOWO-TO make PgAccess working under Irix +is written by Stuart Rison</FONT></B></P> + +<P>These are the steps that I had to follow to get pgaccess to run on an +INDIGO2 running postgreSQL 6.3.2 under IRIX 5.3. I make no guarantee whatsoever +that the same step will work for others but at least it should point you +in the right direction. Also, I am a biologist by training so I only got +pgaccess working by fudging (that is, trial and error) this means that +some of the steps may be unnecessary (e.g. compiling $postgreSQL_source/src/interfaces/libpgtcl +as both a shared and static library) and they certainly haven't been optimised +(I know nothing about compiler switches etc.).</P> + +<P><B>1) Requirements:</B></P> + +<UL> +<P>You will need:</P> + +<UL> +<LI>postgreSQL source (http://www.postgresql.org)</LI> + +<LI>tcl8.0 source (http://www.tclconsortium.org/)</LI> + +<LI>tk8.0 source (http://www.tclconsortium.org/)</LI> + +<LI>pgaccess source (http://www.flex.ro/pgaccess)</LI> +</UL> +</UL> + +<P><B>2) Installation:</B></P> + +<P>a) tcl/tk:</P> + +<UL> +<P>You must first install tcl and then tk (in that order). I just used +./configure, no switches and gmake. Their installation should be trouble +free. Then you must move headers and libraries to the right places so:</P> + +<P>Header files: both tcl and tk have a header file (tcl.h and tk.h). The +tcl.h file is in $tcl_source_dir/generic and the tk.h file is in $tk_source_dir/generic; +both should be copied to /usr/local/include.</P> + +<P>Libraries: compilation (with cc) of tcl and tk yield libraries libtcl8.0.a +and libtk8.0.a in $source_dir/unix. Both should be copied to /usr/local/lib.</P> +</UL> + +<P>b) postgreSQL:</P> + +<UL> +<P>Make sure you have a fully patched postgreSQL source. If your ./configure +says it can't load 'IRIX' settings then you most probably will need to +patch ./configure.</P> + +<P>Configure using ./configure with the following switches: ./configure +--with-includes=/usr/local/include</P> + +<P>--with-libraries=/usr/local/lib --with-tcl [this and previous line as +one]</P> + +<P>Then make, make install as usual</P> +</UL> + +<P>c) Compiling libpgtcl:</P> + +<UL> +<P>The source for libpgtcl is in $postgreSQL_directory/src/interfaces/libpgsql.</P> + +<P>I do this twice. Once with just gmake. This produces a static library +libpgtcl.a which I leave where it is (I don't know what to do with it but +it may just come in handy). The I modify Makefile manually with a text +editor. Essentially I modify two line:</P> + +<P>before:</P> + +<P># Shared library stuff</P> + +<P>install-shlib-dep := shlib :=</P> + +<P>after:</P> + +<P># Shared library stuff</P> + +<P>install-shlib-dep := install-shlib shlib := libpgtcl.so.1</P> + +<P>Then gmake -f Makefile_modified. This creates two shared (.so) libraries: +libpgtcl.so and libpgtcl.so.1. I can't tell the difference between them +so I copied them both to /usr/lib/.</P> +</UL> + +<P>d) running pgaccess:</P> + +<UL> +<P>Uncompress pgaccess (usually with gunzip and tar). So long as 'wish' +(a binary produced when compiling tk8.0) is somewhere in your path, you +should be able to run pgaccess with:</P> + +<P>wish -f $pgaccess_dir/pgaccess.tcl [postgreSQL_database_name]</P> +</UL> + +<P>e) et voila!</P> + +<P><B>3) Concluding remarks:</B></P> + +<UL> +<P>As I stated at the start of this document, following the procedure indicated +above worked for me. I am sure, however, that a few of the steps are unnecessary/non-optimised/stupid +etc. If any Unix (IRIX) boffin is reading this and you spot anything you +would like to comment/correct etc. please e-mail me (stuart@ludwig.ucl.ac.uk). +Also, if you just have questions and think I might help, please contact +me at the same e-mail.</P> + +<P>Finally, I can accept no responsibility if these steps don't work for +you or if it all goes horribly wrong and you 'damage' your computer trying +them. Let common sense prevail!</P> +</UL> + +<P>Good luck</P> + +<P>Stuart Rison LICR University College London London W1P 8BT<BR> +<A HREF="mailto:stuart@ludwig.ucl.ac.uk">stuart@ludwig.ucl.ac.uk</A></P> +<a href="index.html#start">Back to index</a> +</BODY> +</HTML> diff --git a/src/bin/pgaccess/doc/html/tutorial/newref.txt b/src/bin/pgaccess/doc/html/tutorial/newref.txt new file mode 100644 index 0000000000000000000000000000000000000000..ef2185f4b78cacbd7f4647966dcf215089a91f15 --- /dev/null +++ b/src/bin/pgaccess/doc/html/tutorial/newref.txt @@ -0,0 +1 @@ +Cassileth, BR~Unorthodox Cancer Medicine~Cancer Investigation~~1986~4~6~591-598 diff --git a/src/bin/pgaccess/doc/html/tutorial/newtable.jpg b/src/bin/pgaccess/doc/html/tutorial/newtable.jpg new file mode 100644 index 0000000000000000000000000000000000000000..06af40e741044ef042297c4a07c228eadac91ffe Binary files /dev/null and b/src/bin/pgaccess/doc/html/tutorial/newtable.jpg differ diff --git a/src/bin/pgaccess/doc/html/tutorial/newtable.tga b/src/bin/pgaccess/doc/html/tutorial/newtable.tga new file mode 100644 index 0000000000000000000000000000000000000000..6104f58bd85cd0aa417e75334f0fbc963cd6a611 Binary files /dev/null and b/src/bin/pgaccess/doc/html/tutorial/newtable.tga differ diff --git a/src/bin/pgaccess/doc/html/tutorial/problems.html b/src/bin/pgaccess/doc/html/tutorial/problems.html new file mode 100644 index 0000000000000000000000000000000000000000..2238fb617d8c04800e5686efed00e14f1c2a1183 --- /dev/null +++ b/src/bin/pgaccess/doc/html/tutorial/problems.html @@ -0,0 +1,83 @@ +<html><head><title>PgAccess - Common Problems</title></head> +<body bgcolor="#C0C0C0"> +<h1>Common Problems with PgAccess</h1> +<a name="connfail"><h2>Connection failure</h2> +One of the most common initial problems is the message:<p> +<samp>Error connecting database<br> +Connection to database failed<br> +connectDB() failed: Is the<br> +postmaster running and<br> +accepting TCP/IP (with -i)<br> +connections at 'localhost' on<br> +port '5432'?</samp><p> +This usually occurs because the "postmaster" (the postgreSQL backend) was not +started with the <samp>-i</samp> option. Usually just adding <samp>-i</samp> to +the command line that starts the postmaster and restarting will fix this.<p> +If you have installed the prewritten script to start <b>postgreSQL</b> +automatically, this option is (currently) commented out:<p> +<samp># PGOPTS="-i"</samp><p> +just remove the hash and space and comment out the "blank" option above:<p> +<samp>PGOPTS=""</samp><p> +<a name="nonuser"><h2>User not defined</h2> +Initially, <b>postgreSQL</b> only has one user, <samp>postgres</samp>, and any +other user who starts up PgAccess will get the message:<p> +<samp>Error connecting database<br> +Connection to database failed<br> +FATAL 1: SetUserId: user<br> +'jim' is not in 'pg_shadow'</samp><p> +See <b>User Administration</b> in the <b>PgAccess tutorial</b> for a description +of how to create users.<p> +<a name="libpg"><h2>libpgtcl not found</h2> +PgAccess requires a library of functions named <samp>libpgtcl</samp>. This +should be available with the postgreSQL distribution, and is usually placed in +the correct location when installing postgreSQL. First check that there is a +file named <samp>libpgtcl.so</samp> (perhaps with a number appended - or +<samp>libpgtcl.dll</samp> on Windows systems) on your +system. If not, you will have to download and perhaps compile this library.<p> +<samp>ftp://ftp.flex.ro/pub/pgaccess</samp><p> +is one place that you can download precompiled libpgtcl libraries for +PgAccess.<p> +<a name="spchar"> +<h2>Locale specific characters</h2> +This problem occurs with some special characters used in different +countries because PgAccess did not use fonts with `-ISO8859-1' encoding.<p> +One solution was proposed by H.P.Heidinger ( hph@hphbbs.ruhr.de) and +is very simple.<p> +If you look in the file pgaccess.tcl, you will find the fonts declared in +this manner:<p> +<TT>$ grep -e '-font' -i pgaccess.tcl<BR> +-font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* \<br> +...</TT></P> +The font declarations should be altered to:<p> +<tt>-font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-iso8859-1<br> +...</tt><p> +That is, inserting an asterisk between the first pair of hyphens, and changing +the final two asterisks to <samp>iso8859</samp> and <samp>1</samp> +respectively.<p> +You can alter the source code by running the following script : +<P><TT>#!/bin/sh<BR> +cp pgaccess.tcl pgaccess.tcl-org<BR> +cat pgaccess.tcl |\<BR> +sed -e's/\-\*\-\*\ /\-iso8859\-1\ /g' |\<BR> +sed -e's/\-\*\-\*\}/\-iso8859\-1}/g' |\<BR> +sed -e's/\-\*\-\*\]/\-iso8859\-1]/g' |\<BR> +sed -e's/\-\*\-\*$/\-iso8859\-1/g' |\<BR> +sed -e's/\-Clean\-/\-Fixed\-/g' |\<BR> +sed -e's/clean/fixed/g' >pgaccess.iso<BR> +mv pgaccess.iso pgaccess.tcl<BR> +chmod +x pgaccess.tcl</TT><P> +The final version of PgAccess (1.0) will let the user decide what fonts +will be used through a "preferences" dialog window.</p> +<a name="pg63"> +<h2>Problem with PostgreSQL 6.3.x</h2> +PgAccess 0.93 and later may have problems working with PostgreSQL 6.3.x. +Changes in libpgtcl have been made to remove these, but if you are +using PostgreSQL 6.3.x, this patch will allow you to get around the problems.<p> +In the procedure <tt>wpg_exec</tt> change the following line:<p> +<tt>set pgsql(errmsg) [pg_result $pgsql(res) -error]</tt><p> +to this:<p> +<tt>set pgsql(errmsg) "NO ERROR INFORMATION SUPPLIED"</tt><p> +and the program will work. The only disadvantage is that with some error +conditions, you will not get the appropriate error message from libpgtcl.<p> +<a href="index.html#problems">Back to index</a> +</body></html> diff --git a/src/bin/pgaccess/doc/html/tutorial/screen1.jpg b/src/bin/pgaccess/doc/html/tutorial/screen1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..572b5077d10fa76432858acdf6ca127977f52fa9 Binary files /dev/null and b/src/bin/pgaccess/doc/html/tutorial/screen1.jpg differ diff --git a/src/bin/pgaccess/doc/html/tutorial/sel_tbl.jpg b/src/bin/pgaccess/doc/html/tutorial/sel_tbl.jpg new file mode 100644 index 0000000000000000000000000000000000000000..548dbeead372a0dceb54dc67086fd4d0056fbfbc Binary files /dev/null and b/src/bin/pgaccess/doc/html/tutorial/sel_tbl.jpg differ diff --git a/src/bin/pgaccess/doc/html/tutorial/start.html b/src/bin/pgaccess/doc/html/tutorial/start.html new file mode 100644 index 0000000000000000000000000000000000000000..8ad8c2ae18f35ab04c42b609ef934a895d3ec57a --- /dev/null +++ b/src/bin/pgaccess/doc/html/tutorial/start.html @@ -0,0 +1,74 @@ +<html><head><title>PgAccess - Getting Started</title></head> +<body bgcolor="#C0C0C0"> +<h1>PgAccess - Getting Started</h1> +<a name="getpga"><h2>How to get PgAccess</h2> +If you have this HTML help system, you have probably already downloaded +PgAccess. If not, or you wish to download the latest version, it is available +from the URL:<p> +<samp>http://www.flex.ro</samp><p> +The home page will contain instructions on which files to download for your +operating system. Download the file to a directory where the program will +eventually reside (see below).<p> +<a name="uncpga"><h2>How to uncompress PgAccess</h2> +PgAccess, like most applications available for download, is usually downloaded +in compressed format to save download time. You must uncompress these files in +order to use the application.<p> +<h3>UNIX (Linux, BSD, IRIX, Solaris, etc.)</h3> +The files will be compressed using "gzip" and packaged using "tar", and have +filenames like this:<p> +<samp>pgaccess-n.nn.tar.gz</samp><p> +Note that "n.nn" will be the version number in an actual file.<p> +First decide where you want to have the program. A typical location on UNIX +systems is <samp>/usr/local/src/<name></samp>, where <name> is the name of +the program. To use this location, download or move the "tar.gz" file to the +directory <samp>/usr/local/src</samp>. Change to that directory, and +uncompress the file with the command:<p> +<samp>tar -zxvf pgaccess-n.nn.tar.gz</samp><p> +You should see the files listed as they are uncompressed and placed in the new +directory, and now have a directory named:<p> +<samp>/usr/local/src/pgaccess</samp><p> +In that directory will be all of the files that were packaged in the downloaded +file. When you have PgAccess working, you can delete the file with the ".tar" +or ".tar.gz" extension. +<h3>Windows</h3> +The files will be compressed so that "WinZip" will uncompress the package. Just +open the file with "WinZip" and the program files will be extracted.<p> +<a name="putpga"><h2>Putting PgAccess where it will be found</h2> +<h3>UNIX</h3> +In order to run PgAccess easily, the program file "pgaccess.tcl" should be in a +location on the "PATH" of the system. You can find out what the PATH is by +entering:<p> +<samp>echo $PATH<br> +/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin:/usr/local/bin:./:/usr/local/pgsql/bin +</samp><p> +Usually the directory <samp>/usr/local/bin</samp> will be in your PATH, and that +is a fairly common place to put programs like PgAccess. Other common +directories in the PATH are <samp>/usr/bin</samp> and <samp>/usr/sbin</samp>. +Simply move the file "pgaccess.tcl" to the directory where you want it.<p> +<h3>Windows</h3> +You will usually link PgAccess to an icon, so just specify the full path to the +program when you create the icon. +<a name=startpga"><h2>Starting PgAccess</h2> +The easiest way to start PgAccess is to simply invoke the program by name:<p> +<samp>pgaccess.tcl</samp><p> +If the program has been placed in a directory listed in the PATH, the PgAccess +window should appear.<p> +<h3>Starting from a menu</h3> +Most users will want to link the program to a menu or icon so that it can be +started using the mouse or other pointing device. Here is a method that will +work on most Linux X-Windows systems. Create a file named "pgaccess" in the directory +<samp>/etc/X11/wmconfig</samp> with the following contents:<p> +<samp>pgaccess name "PgAccess"<br> +pgaccess description "postgreSQL frontend"<br> +pgaccess mini-icon "mini-pgaccess.xpm"<br> +pgaccess group "Applications"<br> +pgaccess exec "pgaccess.tcl &"</samp><p> +This assumes that you have an "Applications" sub-menu. You may prefer +"Programs" or some other place. Also, you will have to create the +"mini-pgaccess.xpm" icon if you want it to appear. You can edit an existing +icon from the <samp>/usr/share/icons/mini</samp> directory in XPaint and rename +it. When you next start an X-Windows session, there should be a "PgAccess" item +on the menu that you have chosen. Clicking on this item should start +PgAccess.<p> +<a href="index.html#start">Back to index</a> +</body></html> diff --git a/src/bin/pgaccess/doc/html/tutorial/tut.html b/src/bin/pgaccess/doc/html/tutorial/tut.html new file mode 100644 index 0000000000000000000000000000000000000000..e5387e618dff06d35a243feea9e3f54f83f8ea5f --- /dev/null +++ b/src/bin/pgaccess/doc/html/tutorial/tut.html @@ -0,0 +1,50 @@ +<html><head><title>PgAccess - Tutorial</title></head> +<body bgcolor="#C0C0C0"> +<h1>PgAccess - Tutorial</h1> +<a name="admin"><h2>User Administration</h2> +The procedure for setting up <b>postgreSQL</b> usually results in a single user +named <samp>postgres</samp>. In order for anyone else to use <b>postgreSQL</b>, +users must be added. The program <samp>createuser</samp> accomplishes this. +First become the PostgreSQL administrator (usually <samp>postgres</samp>):<p> +<samp>su postgres</samp><p> +Then create a new user:<p> +<samp>createuser jim<br> +Enter user's postgres ID or RETURN to use unix user ID: 500 -><br> +Is user "jim" allowed to create databases (y/n) y<br> +Is user "jim" a superuser? (y/n) n<br> +createuser: jim was successfully added</samp><p> +You can use either the UNIX user ID or the postgres ID to identify users. See +the <b>postgreSQL</b> documentation in the "admin" section for a fuller +account of users and groups.<p> +To remove users, use the <samp>destroyuser</samp> command in the same way.<p> +<img src="screen1.jpg" border=1 align=right> +<a name="basic"><h2>Basic use of PgAccess</h2> +<h3>Creating a database</h3> +At the right is the window you should see when PgAccess starts up. The first +task for most users will be to create a database.<p> +Press the <em>New</em> button to bring up the window shown below. This will +allow you to specify the structure of the new table. It is important to note +that if you haven't specified a database when starting up PgAccess, this table +will be created in the database named <samp><username></samp>, your +username.<p> +Assume that you want to create a table with entries describing bibliographic +references in the field of chemistry. Choose a table name, such as +<samp>chemref</samp> that will be easy to recall and find in a list. Enter the +table name in the first input field.<p> +When you already have tables in a database, you can use the <em>Inherits</em> +button to toggle a list of existing tables to inherit characteristics of another +table. In this example, there should be no previous tables to use.<p> +Enter each field, giving it a name, field type and size, if the field type does +not imply the size. That is, if your first field was to be a sequence number, +and you selected <em>int2</em> as the field type, you would not have to specify +a field size. However, if your second field was to contain the author of the +reference, and was a <em>varchar</em> type, you would have to specify how many +characters would be allowed in the field.<p> +As you enter each field, click the <em>Add field</em> button to add it to the +list at the right side of the window. You can change the position of fields +using the <em>Move field up</em> and <em>Move field down</em> buttons, or delete +a field if you decide it isn't what you wanted. When you are finished +specifying fields, press the <em>Create table</em> button.<p> +<img src="newtable.jpg" border=1 align=right> +<a href="index.html#tut">Back to index</a> +</body></html> diff --git a/src/bin/pgaccess/doc/html/tutorial/tut_edit.html b/src/bin/pgaccess/doc/html/tutorial/tut_edit.html new file mode 100644 index 0000000000000000000000000000000000000000..8282fb9a422f23e8a7a5f21ee71967add3fccbfd --- /dev/null +++ b/src/bin/pgaccess/doc/html/tutorial/tut_edit.html @@ -0,0 +1,39 @@ +<html><head><title>PgAccess Tutorial</title></head> +<body bgcolor="#C0C0C0"> +<h1>PgAccess Tutorial - Editing a table</h1> +<img src="sel_tbl.jpg" border=1 align=right> +<h2>Adding records</h2> +Once you have a table, you can begin to add entries to it. In the main +PgAccess window, when you click the <em>Tables</em> button, you should see the +new table appear in the list of tables. Highlighting the table name by clicking +on it and clicking on the <em>Open</em> button will open that table in another +window, as shown below.<p> +The most straighforward way to add records to a table is to type the information +directly into the fields. Two records have been entered in the table shown. As +is common with this user interface, clicking the mouse while the pointer is in a +field will allow keyboard entry to that field. This type of entry is adequate +when the information arrives infrequently in small parcels, for instance in +keeping a table of contact information about other researchers. However, what +do you do when someone emails you the entire reference list for their doctoral +dissertation?<p> +This is best handled using the SQL <em>COPY</em> command. +First, the information will have to be massaged into shape in what is called a +'flat' ASCII file. This is simply a text file in which each line is a record, +and each field in each record is separated by a <em>delimiter</em> such as a +tilde (~). The fields will have to be in the same order as those in your table, +and there will have to be the same number of fields in each record as are in the +table, otherwise you may get unexpected data or no data at all. Say you produce +a text file named <samp>newref.txt</samp> that starts like this:<p> +<samp>Cassileth, BR~Unorthodox Cancer Medicine~Cancer Investigation~~1986~4~6~591-598 +<br>...</samp><p> +Notice that there are two consecutive tildes to allow for the fact that this +particular entry doesn't have anything in the <b>Editor</b> field. +You can then perform a <em>Query</em> as follows:<p> +<samp>COPY psyref FROM '/home/jim/newref.txt' USING DELIMITERS +'~';</samp><p> +This will read the records from <samp>newref.txt</samp> and insert them into the +table <samp>psyref</samp>. See the PostgreSQL documentation under the headings +<br><b>Tutorial|The Query Language|Populating a Class with Instances</b><p> +<img src="addref.jpg" border=1 align=right> +<a href="index.html#tut">Back to index</a> +</body></html> diff --git a/src/bin/pgaccess/doc/html/tutorial/tut_new.html b/src/bin/pgaccess/doc/html/tutorial/tut_new.html new file mode 100644 index 0000000000000000000000000000000000000000..8fca641e6c013bb425908aa2cf1520d69b21d021 --- /dev/null +++ b/src/bin/pgaccess/doc/html/tutorial/tut_new.html @@ -0,0 +1,36 @@ +<html><head><title>PgAccess Tutorial</title></head> +<body bgcolor="#C0C0C0"> +<h1>PgAccess Tutorial - Creating a table</h1> +<img src="screen1.jpg" border=1 align=right> +<h2>Creating a table</h2> +At the right is the window you should see when PgAccess starts up. The first +task for most users will be to create a database. Notice the 'buttons' at the +left of the main window. Clicking on these allows you to see the names of +different <em>objects</em> that are stored in your database, which should be +empty at the moment.<p> +Click the <em>Tables</em> and <em>New</em> buttons to bring up the window shown +below. This will allow you to specify the structure of the new table. It is +important to note that if you haven't specified a database when starting up +PgAccess, this table will be created in the database named +<samp><username></samp>, your username.<p> +Assume that you want to create a table with entries describing bibliographic +references in the field of psychology. Choose a table name, such as +<samp>psyref</samp> that will be easy to recall and find in a list. Enter the +table name in the first input field.<p> +When you already have tables in a database, you can use the <em>Inherits</em> +button to toggle a list of existing tables to inherit characteristics of another +table. In this example, there should be no previous tables to use.<p> +Enter each field, giving it a name, field type and size, if the field type does +not imply the size. That is, if your first field was to be a sequence number, +and you selected <em>int2</em> as the field type, you would not have to specify +a field size. However, if your second field was to contain the author of the +reference, and was a <em>varchar</em> type, you would have to specify how many +characters would be allowed in the field.<p> +As you enter each field, click the <em>Add field</em> button to add it to the +list at the right side of the window. You can change the position of fields +using the <em>Move field up</em> and <em>Move field down</em> buttons, or delete +a field if you decide it isn't what you wanted. When you are finished +specifying fields, press the <em>Create table</em> button.<p> +<img src="newtable.jpg" border=1 align=right> +<a href="index.html#tut">Back to index</a> +</body></html> diff --git a/src/bin/pgaccess/doc/html/tutorial/tut_sel1.html b/src/bin/pgaccess/doc/html/tutorial/tut_sel1.html new file mode 100644 index 0000000000000000000000000000000000000000..fdadbe8e6d3a15bd4ea366b897f3e11c888a5ad7 --- /dev/null +++ b/src/bin/pgaccess/doc/html/tutorial/tut_sel1.html @@ -0,0 +1,36 @@ +<html><head><title>PgAccess Tutorial</title></head> +<body bgcolor="#C0C0C0"> +<h1>PgAccess Tutorial - SELECT</h1> +<img src="altern_q.jpg" border=1 align=right> +<h2>What is a query?</h2> +<em>Query</em> is the term for an SQL command which will perform an operation +on a table. It is sometimes confusing to newcomers, as some of the operations +seem to have nothing to do with querying in the common sense of <em>asking</em>. +As we saw in the previous section, a <em>query</em> can simply copy +records from an ASCII file to a table.<p> +The PostgreSQL documentation has a complete list of <em>queries</em> that can be +used. We'll start with the common task of selecting records with certain +characteristics.<p> +<h2>Selecting records</h2> +<img src="altern_v.jpg" border=1 align=right> +Suppose that I want to know all of the references in the sample table +<em>psyref</em> for which the word "alternative" appeared in the title.<p> +By clicking <em>Query</em>, then <em>New</em>, a <b>Query builder</b> window will +appear. Clicking in the area below the buttons will allow the user to enter an +SQL <em>query</em>. The specification of the <em>query</em> must be exact or +PostgreSQL will return an error message.<p> +The <em>query</em> shown will <b>SELECT</b> those records from <em>psyref</em> +that contain the word "alternative" anywhere in the <em>title</em> field. The +'*' indicates that all of the fields are to be returned. You might only want to +return, for instance, the <em>author</em> field if you were only interested in +which authors had used that word in the title of their work.<p> +At the right is the record that fulfils these conditions, displayed in the +<b>Table viewer</b>. If you wanted to save this query for use again, +clicking the <em>Save query definition</em> button will do so. You will then +see <em>altern</em> listed under <em>Queries</em> when you return to the main +window. By clicking the <em>Save this query as a view</em> tickbox in the +<b>Query builder</b>, the result of your query will be saved as a +<em>View</em> which you can access from <em>Views</em> in the main window. +Click the <em>Close</em> button to leave the <b>Query builder</b>.<p> +<a href="index.html#tut">Back to index</a> +</body></html> diff --git a/src/bin/pgaccess/doc/html/tutorial/tut_user.html b/src/bin/pgaccess/doc/html/tutorial/tut_user.html new file mode 100644 index 0000000000000000000000000000000000000000..c4a6f09fbb31f59659845a76622fb3deff837f3e --- /dev/null +++ b/src/bin/pgaccess/doc/html/tutorial/tut_user.html @@ -0,0 +1,28 @@ +<html><head><title>PgAccess Tutorial</title></head> +<body bgcolor="#C0C0C0"> +<h1>PgAccess Tutorial - User Administration</h1> +While user administration is really not a part of the PgAccess program, it is +such a basic operation that a brief description is given here. +<h2>Creating users</h2> +The procedure for setting up <b>postgreSQL</b> usually results in a single user +named <samp>postgres</samp>. In order for anyone else to use <b>postgreSQL</b>, +users must be added. The program <samp>createuser</samp> accomplishes this. +First become the PostgreSQL administrator (usually <samp>postgres</samp>):<p> +<samp>su postgres</samp><p> +Then create a new user:<p> +<samp>createuser jim<br> +Enter user's postgres ID or RETURN to use unix user ID: 500 -><br> +Is user "jim" allowed to create databases (y/n) y<br> +Is user "jim" a superuser? (y/n) y<br> +createuser: jim was successfully added</samp><p> +You can use either the UNIX user ID or the postgres ID to identify users. See +the <b>postgreSQL</b> documentation in the "admin" section for a fuller +account of users and groups.<p> +The reason for using the command line to create the first user (other than +<em>postgres</em>) is that <em>postgres</em> may not have X-Window permission. +You can also create users using <b>PgAccess</b> if you are created as a +<em>superuser</em> as shown in the example above.<p> +<h2>Removing users</h2> +To remove users, use the <samp>destroyuser</samp> command in the same way.<p> +<a href="index.html#tut">Back to index</a> +</body></html> diff --git a/src/bin/pgaccess/doc/html/vdesigner.gif b/src/bin/pgaccess/doc/html/vdesigner.gif new file mode 100644 index 0000000000000000000000000000000000000000..71349e6daf4c52b8d64a14c05ccdecfa24c735ef Binary files /dev/null and b/src/bin/pgaccess/doc/html/vdesigner.gif differ diff --git a/src/bin/pgaccess/doc/html/whatsnew.html b/src/bin/pgaccess/doc/html/whatsnew.html new file mode 100644 index 0000000000000000000000000000000000000000..f2faede0153f90ab40822e349786f0b1c79b2dec --- /dev/null +++ b/src/bin/pgaccess/doc/html/whatsnew.html @@ -0,0 +1,50 @@ +<!doctype html public "-//w3c//dtd html 4.0 transitional//en"> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> + <meta name="GENERATOR" content="Mozilla/4.61 [en] (X11; I; Linux 2.2.11 i586) [Netscape]"> +</head> +<body bgcolor="#FEFEDF"> +<b>29 August 1999</b> - PgAccess 0.98 has been released! +<ul> +<li> +international version (romanian, french, italian translations available) +in separate files (japanese translation now possible)</li> + +<li> +context sensitive help, complete help for SQL commands</li> + +<li> +geometry changes for many forms</li> + +<li> +form designer enhancements (widget icons , new attribute window style, +form startup script)</li> + +<li> +ability to inspect PostgreSQL system tables (preferences)</li> + +<li> +enhanced table design window, table permissions</li> + +<li> +distribution archive changes</li> + +<li> +unified internal global variables</li> + +<li> +unified internal window naming conventions</li> + +<li> +usage of Tcl namespaces for all modules</li> + +<li> +PgAccess developer <a href="api.html">API</a></li> + +<li> +web site enhancements</li> +</ul> + +</body> +</html> diff --git a/src/bin/pgaccess/doc/html/win32.html b/src/bin/pgaccess/doc/html/win32.html new file mode 100644 index 0000000000000000000000000000000000000000..368eb9990eb6202a939c3a75d12938e177e840f9 --- /dev/null +++ b/src/bin/pgaccess/doc/html/win32.html @@ -0,0 +1,45 @@ +<!doctype html public "-//w3c//dtd html 4.0 transitional//en"> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> + <meta name="GENERATOR" content="Mozilla/4.61 [en] (X11; I; Linux 2.2.11 i586) [Netscape]"> +</head> +<body bgcolor="#FEFEDF"> + +<h2> +PgAccess on Win32</h2> + +<hr>In order to run PgAccess on a Win32 workstation you should follow the +following steps: +<ol> +<li> +download and install a Tcl/Tk package from <a href="http://www.scriptics.com">Scriptics</a> +(8.0.x or 8.1.x)</li> + +<li> +install PgAccess package</li> + +<li> +check the Tcl/Tk version that you have</li> + +<li> +check the PostgreSQL version installed on your database server machine</li> + +<li> +get from win32/dll directory the appropriate libraries suitable for your +Tcl/Tk version and PostgreSQL version and copy them into your Windows/System +directory renaming them as libpq.dll and libpgtcl.dll</li> + +<li> +check if your win32 workstation is able to see your database server (ping +yourdatabaseserver)</li> + +<li> +ask your database administrator to verify if your win32 workstation has +access rights to the database (pg_hba.conf)</li> +</ol> + +<p><br>You should be able to run PgAccess. +<br> +</body> +</html> diff --git a/src/bin/pgaccess/images/icon_button.gif b/src/bin/pgaccess/images/icon_button.gif new file mode 100644 index 0000000000000000000000000000000000000000..df7059192115b13aa31a7116392d0a7c4e6b6db0 Binary files /dev/null and b/src/bin/pgaccess/images/icon_button.gif differ diff --git a/src/bin/pgaccess/images/icon_checkbutton.gif b/src/bin/pgaccess/images/icon_checkbutton.gif new file mode 100644 index 0000000000000000000000000000000000000000..ddfe64ca8b41d205e3a714fef8f9a54c1fb490d9 Binary files /dev/null and b/src/bin/pgaccess/images/icon_checkbutton.gif differ diff --git a/src/bin/pgaccess/images/icon_entry.gif b/src/bin/pgaccess/images/icon_entry.gif new file mode 100644 index 0000000000000000000000000000000000000000..750d1ff5e43cdde5702b08bbc89ec5c8123a8e6c Binary files /dev/null and b/src/bin/pgaccess/images/icon_entry.gif differ diff --git a/src/bin/pgaccess/images/icon_frame.gif b/src/bin/pgaccess/images/icon_frame.gif new file mode 100644 index 0000000000000000000000000000000000000000..8541cbeab8d92371701f78a4aa12cd8ff227417f Binary files /dev/null and b/src/bin/pgaccess/images/icon_frame.gif differ diff --git a/src/bin/pgaccess/images/icon_label.gif b/src/bin/pgaccess/images/icon_label.gif new file mode 100644 index 0000000000000000000000000000000000000000..d60681690ce84ae61c296e84474f1288ae014b98 Binary files /dev/null and b/src/bin/pgaccess/images/icon_label.gif differ diff --git a/src/bin/pgaccess/images/icon_listbox.gif b/src/bin/pgaccess/images/icon_listbox.gif new file mode 100644 index 0000000000000000000000000000000000000000..c485e9be40607bd4aa2c0d5fb14e772dd10e9ba9 Binary files /dev/null and b/src/bin/pgaccess/images/icon_listbox.gif differ diff --git a/src/bin/pgaccess/images/icon_query.gif b/src/bin/pgaccess/images/icon_query.gif new file mode 100644 index 0000000000000000000000000000000000000000..ced0ef26a54d7150fe6f0589e561f8854eb2960a Binary files /dev/null and b/src/bin/pgaccess/images/icon_query.gif differ diff --git a/src/bin/pgaccess/images/icon_radiobutton.gif b/src/bin/pgaccess/images/icon_radiobutton.gif new file mode 100644 index 0000000000000000000000000000000000000000..9803df6729ca731f7cd9483a915d28af4fbd3912 Binary files /dev/null and b/src/bin/pgaccess/images/icon_radiobutton.gif differ diff --git a/src/bin/pgaccess/images/icon_text.gif b/src/bin/pgaccess/images/icon_text.gif new file mode 100644 index 0000000000000000000000000000000000000000..49d193c279655c0af9f547e312d0e1605f15f7c4 Binary files /dev/null and b/src/bin/pgaccess/images/icon_text.gif differ diff --git a/src/bin/pgaccess/lib/languages/francais b/src/bin/pgaccess/lib/languages/francais new file mode 100644 index 0000000000000000000000000000000000000000..62dc80bb42c776a2884c74d05bf8e012ead0d6aa --- /dev/null +++ b/src/bin/pgaccess/lib/languages/francais @@ -0,0 +1,525 @@ +array set Messages { + +"Label" "Etiquette" + +"Save schema" "Sauver schémas" + +"Is unique ?" "Est unique ?" + +"Report builder" "Constructeur d'états" + +"Criteria" "Critère" + +"FATAL ERROR upgrading PgAccess table" "ERREUR FATALE en actualisant la table PgAccess" + +"Save this query as a view" "Sauver cette requête comme vue ?" + +"Page header" "En-tête de page" + +"Query name" "Nom de requête" + +"Please select an object first!" "Selectionnez un objet d'abord" + +"Fields :" "Le champs de index" + +"Name" "Nom" + +"File name" "Nom du fichier" + +"Detail record" "Detail d'enregistrement" + +"Auto-load the last opened database at startup" "Chargement automatique de la base au démarrage" + +"Maxvalue" "Valeur maximale" + +"Start value" "Valeur de début" + +"Report fields" "Champs de l'état" + +"Test form" "Tester formulaire" + +"Error trying to connect to database '%s' on host %s \n\nPostgreSQL error message:%s" "Erreur de liaison à la base de données '%s' pour machine %s \n\nMessage d'erreur PostgreSQL :%s" + +"No field type ?" "Type champ inexistant ?" + +"User without name?" "Cette utilisateur a-t-il un nom?" + +"You have to supply a name for this schema!" "Vous devez fournir un nom pour ce schéma !" + +"Last value" "Dernière valeur" + +"Preferences" "Préférences" + +"View '%s' already exists!\nOverwrite ?" "La vue '%s' existe déjà!\n Ecraser ?" + +"You have to select an index!" "Vous devez selectionner un index!" + +"Field type" "Type de champ" + +"Script name" "Nom du script" + +"Reload" "Valider" + +"Remove table %s from query?" "Eliminer table %s de la requête ?" + +"SQL window" "Fenêtre SQL" + +"Allow user to create other users" "Peut créer d'autres utilisateurs" + +"Delete current record ?" "Détruire enregistrement courant ?" + +"List box" "Liste" + +"Save to query builder" "Sauver le constructeur de requêtes" + +"fixed width" "largeur de police fixe" + +"Scripts" "Scripts" + +"Yes" "Oui" + +"Add label" "Ajouter étiquette" + +"Sequence created!" "Le séquence avait été créée" + +"Field information" "Information de champ" + +"Design" "Editer" + +"Field" "Champ" + +"You have to supply an external file name!" "Vous devez fournir un nom du fichier" + +"Increment" "Incrément" + +"No" "Non" + +"Form design" "Création du formulaire" + +"You must supply a return type!" "Vous devez fournir un type de retour" + +"Remove field from result ?" "Eliminer champ du résultat ?" + +"There is another object (a %s) with the same name.\nPlease change it!" "Il y a un autre objet (%s) avec le même nom.\nChangez le SVP!" + +"This query has no commands?" "Cette requête n'a pas de définition?" + +"Execute query" "Execute requête" + +"field cannot be null" "champ ne peut être vide" + +"Help" "Aide" + +"Rename column" "Renomme champ" + +"Database" "Base de données" + +"Information" "Information" + +"Close" "Fermer" + +"Command" "Commande" + +"Table" "Table" + +"verify password" "encore un fois" + +"Vacuum" "Vider" + +"Default value" "Valeur par defaut" + +"Import" "Importer" + +"Delete index" "Détruire index" + +"Move up" "Monter" + +"index properties" "Propriétés d'index" + +"check" "vérifier" + +"Create new table" "Création de nouvelle table" + +"Visual query designer" "Créateur visuel de requêtes" + +"Delete all" "Détruire tous" + +"You are going to delete\n\n %s \n\nProceed?" "Vous allez détruire\n\n %s \n\nD'accord?" + +"Schema name" "Nom de schéma" + +"Error executing query" "Erreur en exécutant la requête" + +"Report name" "Nom de l'état" + +"Add field" "Ajout champ" + +"Field name" "Nom de champ" + +"FATAL ERROR searching for PgAccess system tables" "ERREUR FATALE en cherchant le système de tables PgAccess" + +"A big number of rows displayed in table view will take a lot of memory!" "L'affichage d'un grand nombre de colonnes prend beaucoup de mémoire" + +"Preview" "Pré-visualisation" + +"Users" "Utilisateurs" + +"Owner" "Auteur" + +"Form's window internal name" "Le nom interne de la fenêtre de formulaire" + +"Sort field" "Trier champs" + +"New name is the same as the old one!" "Le nouveau nom est le même que l'ancien" + +"Warning" "Avertissement" + +"Suggestions at" "Suggestions à" + +"Functions" "Fonctions" + +"Schema" "Schéma" + +"Open" "Ouvrir" + +"size" "taille" + +"Delete" "Détruire" + +"Returns" "Retours" + +"Define new user" "Définir nouvel utilisateur" + +"Move down" "Descendre" + +"Design script" "Script de création" + +"Check box" "Case à cocher" + +"FINAL WARNING" "DERNIER AVERTISSEMENT" + +"Add table" "Ajouter table" + +"Table viewer font" "Police de visualisateur de tables" + +"The field type is not specified!" "Le type de champ n'est pas spécifié" + +"Close test form" "Fermer test du formulaire" + +"Export table" "Exporter" + +"Add new index" "Ajout nouvel index" + +"Left" "Gauche" + +"Field delimiter" "Séparateur de champs" + +"Add formula" "Ajouter formule" + +"Open database" "Ouvre la base de données" + +"Return" "Retour" + +"Changed fonts may appear in the next working session!" "Les nouvelles polices apparaîtront à la prochaine session" + +"Error" "Erreur" + +"Enter a field name" "Entrez un nom de champ !" + +"field name" "Nom de champ" + +"Forms" "Formulaires" + +"Cannot add column" "Ne peut ajouter de colonne" + +"Clean" "Nettoyer" + +"Delete all objects ?" "Détruire tous les objets" + +"Preferred language" "Langage préféré" + +"Execute SQL" "Exécute SQL" + +"Sequences" "Séquences" + +"Button" "Bouton" + +"Language" "Langage" + +"Query '%s' was not found!" "La requête '%s' n'a pas été trouvée" + +"Object" "Objet" + +"Font fixed" "Police fixe" + +"Table name" "Nom de table" + +"Export" "Export" + +"Change user" "Changer utilisateur" + +"You must give object a new name!" "Vous devez donner un nouveau nom" + +"Query" "Requête" + +"User name" "Nom d'utilisateur" + +"Font normal" "Police normale" + +"Import table" "Importer" + +"Toolbar" "Outils" + +"Radio btn" "Radio" + +"You must supply a name for this function!" "Vous devez fournir un nom pour la fonction" + +"You have to select index fields!" "Vous devez selectionner le champ pour l'index" + +"Constraint" "Contrainte" + +"The script must have a name" "Le script doit avoir un nom" + +"Save" "Sauver" + +"Exit" "Quitter" + +"Inherits" "Source" + +"Delete field" "Détruire" + +"About" "A propos" + +"Empty field name ?" "Nom de champ inexistant ?" + +"All report information will be deleted.\n\nProceed ?" "Toutes les informations de l'état vont être détruites\n\nContinuer ?" + +"Host" "Machine" + +"vacuuming database %s ..." "Vider base %s ..." + +"Indexes defined" "Index définis" + +"You must specify field size!" "La taille du champ doit être précisée" + +"Schema '%s' already exists!" "Le schéma '%s' existe déjà!" + +"There is another field with the same name: '%s'!\n\nReplace it ?" "Il y a un autre champ avec le même nom : '%s'!\n\nRemplacer?" + +"Contents" "Contient" + +"Views" "Vues" + +"Variable" "Variable" + +"Error executing query\n\n%s\n\nPostgreSQL error message:\n%s\nPostgreSQL status:%s" "Erreur en exécutant la requête\n\n%s\n\nMessage d'erreur PostgreSQL :\n%s \n Statut de PostgreSQL:%s" + +"Filter conditions" "Conditions de filtre" + +"Error retrieving query definition" "Erreur en retrouvant la définition de la requête" + +"Error deleting view" "Erreur en détruisant la vue" + +"New" "Nouveau" + +"Tables" "Tables" + +"Create" "Créer" + +"Forms need an internal name, only literals, low case" "Les formulaires ont besoin d'un nom interne, seulement en lettres minuscules" + +"Do you want to save the form into the database?" "Voulez vous sauver le formulaire dans la base?" + +"Schema '%s' was not found!" "Le schéma '%s' n'a pas été trouvé" + +"proportional" "Proportionnelle" + +"Function saved!" "Le fonction avait ete créée" + +"with OIDs" "avec des OIDs" + +"Table information" "Information de table" + +"Error inserting new record" "Erreur en introduisant le nouvel enregistrement" + +"Column name '%s' already exists in this table!" "Le nom de colonne existe déjà dans cette table !" + +"File" "Fichier" + +"Your table has no fields!" "Cette table n'a pas de champ?" + +"Height" "Hauteur" + +"You will always get the latest version at:" "Le derniere version toujours à" + +"Form must have a name" "Le formulaire doit avoir un nom !" + +"Password" "Mot de passe" + +"Valid until (date)" "Valable jusqu'à" + +"Report source" "Source de l'état" + +"Allow user to create databases" "Peut créer une base" + +"Cancel" "Abandon" + +"Is clustered ?" "Est groupé ?" + +"Add new column" "Ajout nouveau champ" + +"Show SQL" "Montrez le code SQL." + +"New name" "Nouveau nom" + +"Table '%s' not found!" "Le table '%s' n'est pas trouvée" + +"Form name" "Nom du formulaire" + +"Visual designer" "Créateur visuel" + +"You choose to delete index\n\n %s \n\nProceed?" "Vous allez détruire index\n\n %s \n\nConfirmation?" + +"Error retrieving from" "Erreur en retrouvant..." + +"Save query definition" "Sauver la définition de la requête" + +"A Tcl/Tk interface to\nPostgreSQL\nby Constantin Teodorescu" "Une Tcl/Tk interface pour\nPostgreSQL\npar Constantin Teodorescu" + +"Operation completed!" "Opération finie" + +"Max rows displayed in table/query view" "Nombre maximal de colonnes affichées dans la table/vue de requête" + +"Passwords do not match!" "Les mots de passe ne vont pas" + +"Rename" "Renommer" + +"Entry" "Entrée" + +"Error retrieving schema definition" "Erreur en retrouvant la définition du schéma" + +"This is an action query!\n\nExecute it?" "Ceci est une requête d'action !\nExécuter ?" + +"Error retrieving view definition for" "Erreur en lisant la définition pour la vue" + +"options" "options" + +"Sequence '%s' not found!" "Le séquence '%s' n'a pas été trouvée" + +"Text" "Texte" + +"Tcl error executing pg_exec %s\n\n%s" "Erreur Tcl en exécutant %s\n\n%s" + +"Width" "Largeur" + +"You have to supply a name for this query!" "Vous devez donner un nom à cette requête" + +"Accessing data. Please wait ..." "Lit les données. Patience ..." + +"Report footer" "Pied de rapport" + +"Parameters" "Paramètres" + +"Queries" "Requêtes" + +"Query '%s' already exists!" "La requête '%s' existe dejà!" + +"Font bold" "Police grasse" + +"Query builder" "Constructeur de requêtes" + +"Error defining view" "Erreur en définissant la vue" + +"Top" "Haut" + +"You must supply a name for your table!" "Vous devez introduire un nom pour cette table" + +"Page footer" "Pied de page" + +"Font italic" "Police italique" + +"Field name not entered!" "Le nom de champ n'est pas entré" + +"Index name cannot be null!" "Le nom de l'index ne peut être nul" + +"Sort" "Trier" + +"Import-Export table" "Import/Export table" + +"Point" "Point" + +"type" "type" + +"You should supply a name for this sequence" "Vous devez donner un nom à la séquence" + +"Remove link ?" "Détruire cette liaison?" + +"You have to supply a table name!" "Vous devez fournir un nom de table" + +"Report header" "En tête de l'état" + +"Attributes" "Attributs" + +"Table '%s' already in schema" "Le table est déjà dans le schéma" + +"Username" "Utilisateur" + +"Minvalue" "Valeur minimale" + +"Sequence name" "Nom de séquence" + +"Define sequence" "Définir la séquence" + +"Function" "Fonction" + +"Sorting and filtering not (yet) available from queries!\n\nPlease enter them in the query definition!" "Tri et filtrage pas (encore) possible à partir des requêtes!\n\nEntrez les dans la définition de la requête SVP" + +"Reports" "Etats" + +"Columns" "Champs" + +"Indexes" "Index" + +"Permissions" "Permissions" + +"not null" "non vide" + +"Cluster index" "index groupe" + +"index columns" "index champs" + +"Add user" "Ajoute utilisateur" + +"Change permissions" "Change droits" + +"select" "sélections" + +"update" "actualise" + +"insert" "introduire" + +"rule" "règles" + +"Identification" "Identification" + +"Owner ID" "ID du propriétaire" + +"Has primary key ?" "A une clé primaire ?" + +"Has rules ?" "A des règles?" + +"Statistics" "Statistiques" + +"Number of tuples" "Nombre des enregistrements" + +"Number of pages" "Nombres des pages" + +"Index name" "Nom d'index" + +"Index fields" "Champs d'index" + +"Table OID" "OID de table" + +} + + diff --git a/src/bin/pgaccess/lib/languages/italiano b/src/bin/pgaccess/lib/languages/italiano new file mode 100644 index 0000000000000000000000000000000000000000..157dd4feb61307b76072f1c8f808696a9f4572d3 --- /dev/null +++ b/src/bin/pgaccess/lib/languages/italiano @@ -0,0 +1,539 @@ +array set Messages { + +"Label" "Etichetta" + +"Save schema" "Salva lo schema" + +"Is unique ?" "E' unico ?" + +"Report builder" "Report builder" + +"Criteria" "Criterio" + +"FATAL ERROR upgrading PgAccess table" "ERRORE FATALE aggiornando le tabelle PgAccess" + +"Save this query as a view" "Salva questa query come View" + +"Page header" "Testata di pagina" + +"Query name" "Nome query" + +"Please select an object first!" "Seleziona prima un'oggetto!" + +"Fields :" "Campi :" + +"Name" "Nome" + +"File name" "Nome del file" + +"Detail record" "Dettaglio del record" + +"Auto-load the last opened database at startup" "Apertura automatica ultimo database all'avvio" + +"Maxvalue" "Valore massimo" + +"Start value" "Valore d'inizio" + +"Report fields" "Campi disponibili" + +"Test form" "Test form" + +"Error trying to connect to database '%s' on host %s \n\nPostgreSQL error message:%s" "Errore di connessione al database '%s' sull'host %s \n\nMessaggio d'errore di PostgreSQL :%s" + +"No field type ?" "Nessun tipo per il campo?" + +"User without name?" "Utente senza nome ?" + +"You have to supply a name for this schema!" "Devi specificare un nome per lo schema!" + +"Last value" "Ultimo valore" + +"Preferences" "Preferenze" + +"View '%s' already exists!\nOverwrite ?" "View '%s' esiste gia'!\nSovrascrivo ?" + +"You have to select an index!" "Devi scegliere un'indice!" + +"Field type" "Tipo campo" + +"Script name" "Nome dello Script" + +"Reload" "Ricarica" + +"Remove table %s from query?" "Rimuovere la tabella %s dalla query?" + +"SQL window" "Finestra SQL" + +"Allow user to create other users" "L'utente puo' creare altri utenti" + +"Delete current record ?" "Cancello il record corrente? " + +"List box" "Lista" + +"Save to query builder" "Salva nel query builder" + +"fixed width" "larghezza fissa" + +"Scripts" "Scripts" + +"Yes" "Si" + +"Add label" "Aggiungi etichetta" + +"Sequence created!" "Sequenza creata !" + +"Field information" "Informazioni sul campo" + +"Design" "Disegna" + +"Field" "Campo" + +"You have to supply an external file name!" "Devi specificare un nome file esterno!" + +"Increment" "Incremento" + +"No" "No" + +"Form design" "Disegna il Form" + +"You must supply a return type!" "Devi specificare il tipo di dato ritornato" + +"Remove field from result ?" "Eliminare il campo dal risultato ?" + +"There is another object (a %s) with the same name.\nPlease change it!" "Esiste un'altro oggetto (un %s) con lo stesso nome.\nCambia nome!" + +"This query has no commands?" "Questa query non ha comandi ?" + +"Execute query" "Esegui query" + +"field cannot be null" "Il campo non puo' essere nullo" + +"Help" "Aiuto" + +"Rename column" "Rinomina campo" + +"Database" "Database" + +"Information" "Informazioni" + +"Close" "Chiudi" + +"Command" "Comando" + +"Table" "Tabella" + +"verify password" "verifica password" + +"Vacuum" "Vacuum" + +"Default value" "Valore predefinito" + +"Import" "Importa" + +"Delete index" "Cancella indice" + +"Move up" "Muovi su'" + +"index properties" "proprieta' dell'indice" + +"check" "Controlla" + +"Create new table" "Crea una nuova tabella" + +"Visual query designer" "Visual query designer" + +"Delete all" "Cancella tutto" + +"You are going to delete\n\n %s \n\nProceed?" "Stai per cancellare\n\n %s\n\n Procedo?" + +"Schema name" "Nome dello schema" + +"Error executing query" "Errore eseguendo la query" + +"Report name" "Nome del report" + +"Add field" "Aggiungi campo" + +"Field name" "Nome campo" + +"FATAL ERROR searching for PgAccess system tables" "ERRORE FATALE cercando le tabelle PgAccess di sistema" + +"A big number of rows displayed in table view will take a lot of memory!" "Un numero grande di righe visualizzate richiedera' molta memoria!" + +"Preview" "Anteprima" + +"Users" "Utenti" + +"Owner" "Proprietario" + +"Form's window internal name" "Il nome interno del form" + +"Sort field" "Campo ordinato" + +"New name is the same as the old one!" "Nuovo nome uguale al precedente!" + +"Warning" "Attenzione" + +"Suggestions at" "Suggerimenti a" + +"Functions" "Funzioni" + +"Schema" "Schema" + +"Open" "Apri" + +"size" "Dimensione" + +"Delete" "Cancella" + +"Returns" "Risultati" + +"Define new user" "Definisce nuovo utente" + +"Move down" "Muovi Giù" + +"Design script" "Design script" + +"Check box" "Casella si/no" + +"FINAL WARNING" "Ultimo Warning" + +"Add table" "Nuova tabella" + +"Table viewer font" "Carattere del visualizzatore tabelle" + +"The field type is not specified!" "Il tipo del campo non e' stato specificato!" + +"Close test form" "Chiudi test form" + +"Export table" "Esporta tabelle" + +"Add new index" "Aggiungi nuovo indice" + +"Left" "Sinistra" + +"Field delimiter" "Delimitatore di campo" + +"Add formula" "Aggiungi formula" + +"Open database" "Apri il Database" + +"Return" "Risultato" + +"Changed fonts may appear in the next working session!" "I caratteri cambiati saranno visibili nella prossima sessione!" + +"Error" "Errore" + +"Enter a field name" "Inserisci un nome campo" + +"field name" "Nome Campo" + +"Forms" "Forms" + +"Cannot add column" "Non posso aggiungere una colonna" + +"Clean" "Pulisci" + +"Delete all objects ?" "Cancellare tutti gli oggetti ?" + +"Preferred language" "Lingua preferita" + +"Execute SQL" "Esegui SQL" + +"Sequences" "Sequences" + +"Button" "Bottone" + +"Language" "Lingua" + +"Query '%s' was not found!" "La query '%s' non e' stata trovata!" + +"Object" "Oggetto" + +"Font fixed" "Carattere fisso" + +"Table name" "Nome tabella" + +"Export" "Esporta" + +"Change user" "Cambia utente" + +"You must give object a new name!" "Devi dare un nuovo nome all'oggetto!" + +"Query" "Query" + +"User name" "Nome utente" + +"Font normal" "Carattere normale" + +"Import table" "Importa" + +"Toolbar" "Barra degli strumenti" + +"Radio btn" "Bottone a scelta" + +"You must supply a name for this function!" "Devi fornire un nome per questa funzione!" + +"You have to select index fields!" "Devi selezionare i campi dell'indice" + +"Constraint" "Constraint" + +"The script must have a name" "Lo script deve avere un nome" + +"Save" "Salva" + +"Exit" "Esci" + +"Inherits" "Eredita" + +"Delete field" "Cancella campo" + +"About" "Apropos" + +"Empty field name ?" "Nome del campo vuoto?" + +"All report information will be deleted.\n\nProceed ?" "Tutte le informazioni relative al report saranno cancellate.\n\n Procedo ?" + +"Host" "Host" + +"vacuuming database %s ..." "vacuuming database %s ..." + +"Indexes defined" "Indici definiti" + +"Owner ID" "Proprietario ID" + +"You must specify field size!" "Devi specificare la dimensione del campo!" + +"Schema '%s' already exists!" "Lo schema '%s' esiste gia'!" + +"There is another field with the same name: '%s'!\n\nReplace it ?" "C'e' un'altro campo con lo stesso nome: '%s'!\n\nSostituisco ? " + +"Contents" "Contenuto" + +"Views" "Views" + +"Variable" "Variabile" + +"Error executing query\n\n%s\n\nPostgreSQL error message:\n%s\nPostgreSQL status:%s" "Errore eseguendo la query\n\n%s\n\nErrore PostgreSQL:\n%s\nPostgreSQL status:%s" + +"Filter conditions" "Condizioni di filtro" + +"Error retrieving query definition" "Errore caricando la definizione della query" + +"Error deleting view" "Errore durante la cancellazione" + +"New" "Nuovo" + +"Tables" "Tabelle" + +"Create" "Crea" + +"Forms need an internal name, only literals, low case" "Il form ha bisogno di un nome interno, solo lettere minuscole" + +"Do you want to save the form into the database?" "Vuoi salvare il form nel database ?" + +"Schema '%s' was not found!" "Lo schema '%s' non e' stato trovato!" + +"proportional" "proporzionale" + +"Function saved!" "Funzione salvata!" + +"with OIDs" "con OIDs" + +"Table information" "Informazioni tabella" + +"Error inserting new record" "Errore inserendo il nuovo record" + +"Column name '%s' already exists in this table!" "Il campo '%s' esiste gia'!" + +"File" "File" + +"Your table has no fields!" "La tabella non ha campi !" + +"Height" "Altezza" + +"You will always get the latest version at:" "Troverai l'ultima versione su:" + +"Form must have a name" "Il form deve avere un nome" + +"Password" "Password" + +"Valid until (date)" "Valido fino a" + +"Report source" "Sorgente del report" + +"Allow user to create databases" "L'utente puo' creare database" + +"Cancel" "Abbandona" + +"Is clustered ?" "Is clustered ?" + +"Add new column" "Aggiungi nuovo campo" + +"Show SQL" "Mostra SQL" + +"New name" "Nuovo nome" + +"Table '%s' not found!" "Tabella '%s' non trovata!" + +"Form name" "Nome form" + +"Visual designer" "Visual Designer" + +"You choose to delete index\n\n %s \n\nProceed?" "Hai scelto di cancellare l'indice\n\n %s \n\nProcedo?" + +"Error retrieving from" "Errore caricando da" + +"Save query definition" "Salva la definizione della query" + +"A Tcl/Tk interface to\nPostgreSQL\nby Constantin Teodorescu" "Una interfaccia Tcl/Tk verso\nPostgreSQL\n di Constantin Teodorescu" + +"Operation completed!" "Operazione completata!" + +"Max rows displayed in table/query view" "Numero massimo di righe nella visualiz. tabella/query" + +"Passwords do not match!" "La password non corrisponde!" + +"Rename" "Rinomina" + +"Entry" "Entry" + +"Error retrieving schema definition" "Errore caricando la definizione dello schema" + +"This is an action query!\n\nExecute it?" "Questa e' una query d'azione\n\nLa eseguo?" + +"Error retrieving view definition for" "Errore caricando la definizione di" + +"options" "opzioni" + +"Sequence '%s' not found!" "Sequence '%s' non trovata!" + +"Text" "Testo" + +"Tcl error executing pg_exec %s\n\n%s" "Errore Tcl eseguendo pg_exec %s\n\n%s" + +"Width" "Larghezza" + +"You have to supply a name for this query!" "Devi specificare un nomer per la query" + +"Accessing data. Please wait ..." "Carico i dati, attendi..." + +"Report footer" "Piede del report" + +"Parameters" "Parametri" + +"Queries" "Queries" + +"Query '%s' already exists!" "La query '%s' esiste gia'!" + +"Font bold" "Carattere grassetto" + +"Query builder" "Query builder" + +"Error defining view" "Errore definendo la query" + +"Top" "Sopra" + +"You must supply a name for your table!" "Devi specificare un nome per la tabella!" + +"Page footer" "Pie' di pagina" + +"Font italic" "Carattere corsivo" + +"Field name not entered!" "Nome del campo non inserito!" + +"Index name cannot be null!" "Il nome dell'indice non puo' essere nullo!" + +"Sort" "Ordina" + +"Import-Export table" "Importa/Esporta tabella" + +"Point" "Punto" + +"type" "tipo" + +"You should supply a name for this sequence" "Tu devi fornire un nome per la sequenza" + +"Remove link ?" "Rimuovere collegamento ?" + +"You have to supply a table name!" "Devi specificare il nome tabella!" + +"Report header" "Testata del report" + +"Attributes" "Attributi" + +"Table '%s' already in schema" "Tabella '%s' esiste gia' nello schema!" + +"Username" "Nome utente" + +"Minvalue" "Valore minimo" + +"Sequence name" "Nome del sequence" + +"Define sequence" "Definisci la sequenza" + +"Function" "Funzione" + +"Sorting and filtering not (yet) available from queries!\n\nPlease enter them in the query definition!" "Ordinamento e filtri non ancora disponibili dalle query!\n\nInseriscili nella definizione della query!" + +"Reports" "Reports" + +"primary key" "chiave primaria" + +"Visual schema designer" "Ambiente sviluppo relazioni visuale" + +Print Stampa + +"Print to Postscript" "Stampa Postscript" + +Commands Azioni + +"Report preview" "Anteprima report" + +"The printed image in Postscript is in the file pgaccess-report.ps" "La stampa in Poscript è nel file pgaccess-report.ps" + +"Columns" "Campi" + +"Indexes" "Indici" + +"Permissions" "Autorita" + +"not null" "non nullo" + +"Cluster index" "Cluster indice" + +"index columns" "campi dello indice" + +"Add user" "Nuovo utente" + +"Change permissions" "Cambiare autorita" + +"select" "selezioni" + +"update" "update" + +"insert" "inserisci" + +"rule" "regoli" + +"Identification" "Identificatione" + +"Owner ID" "ID dello proprieta" + +"Has primary key ?" "Chiave primaria ?" + +"Has rules ?" "Regoli definiti ?" + +"Statistics" "Statistica" + +"Number of tuples" "Numero righe" + +"Number of pages" "Numero pagine" + +"Index name" "Nome indici" + +"Index fields" "Campi dello indice" + +"Table OID" "Tabella OID" + +} diff --git a/src/bin/pgaccess/lib/languages/magyar b/src/bin/pgaccess/lib/languages/magyar new file mode 100644 index 0000000000000000000000000000000000000000..3293632e616ec0b4710aa2ddcb092aba30c08628 --- /dev/null +++ b/src/bin/pgaccess/lib/languages/magyar @@ -0,0 +1,525 @@ +array set Messages { + +"Label" "Cimke" + +"Save schema" "Séma mentése" + +"Is unique ?" "Egyedi (UNIQUE) ?" + +"Report builder" "Jelentés szerkesztõ" + +"Criteria" "Feltételek" + +"FATAL ERROR upgrading PgAccess table" "FATÁLIS HIBA keletkezett a PgAccess tábla frissitése közben" + +"Save this query as a view" "Nézetként (VIEW) akarod elmenteni a lekérdezést?" + +"Page header" "Oldal fejléc" + +"Query name" "Lekérdezés név" + +"Please select an object first!" "Elõször válassz egy objektumot!" + +"Fields :" "Mezõk :" + +"Name" "Név" + +"File name" "Fájl név" + +"Detail record" "Részletes bejegyzés" + +"Auto-load the last opened database at startup" "Az utolsóként használt adatbázis automatikus nyitésa inditáskor" + +"Maxvalue" "Maximális érték" + +"Start value" "Kezdõérték" + +"Report fields" "Jelentés mezõk" + +"Test form" "Teszt kérdõiv (FORM)" + +"Error trying to connect to database '%s' on host %s \n\nPostgreSQL error message:%s" "Hiba a(z) '%s' nevû adatbázishoz kapcsolódás közben a(z) '%s' szerveren.\n\nPostgreSQL hibaüzenet:%s" + +"No field type ?" "Nincs a mezõnek tipusa ?" + +"User without name?" "Felhasználó név nélkül ?" + +"You have to supply a name for this schema!" "Nevet kell adj ennek a sémának !" + +"Last value" "Legutóbbi érték" + +"Preferences" "Beállitások" + +"View '%s' already exists!\nOverwrite ?" "A(z) '%s' nevû nézet (VIEW) már létezik!\n Felülirás ?" + +"You have to select an index!" "Választanod kell egy indexet!" + +"Field type" "Mezõtipus" + +"Script name" "Szkript neve" + +"Reload" "Újratölt" + +"Remove table %s from query?" "Törölni akarod a(z) '%s' táblát ebbõl a lekérdezésbõl ?" + +"SQL window" "SQL ablak" + +"Allow user to create other users" "Engedély a felhasználónak új felhasználó készitésére" + +"Delete current record ?" "Az aktuális bejegyzés törlése ?" + +"List box" "Lista" + +"Save to query builder" "Mentsd a lekérdezés szerkesztõbe" + +"fixed width" "fix szélesség" + +"Scripts" "Szkriptek" + +"Yes" "Igen" + +"Add label" "Adj hozzá cimkét" + +"Sequence created!" "A szekvencia (SEQUENCE) elkészült!" + +"Field information" "Mezõ információ" + +"Design" "Tervezés" + +"Field" "Mezõ" + +"You have to supply an external file name!" "Meg kell adj egy külsõ fájlnevet!" + +"Increment" "Növelés" + +"No" "Nem" + +"Form design" "Kérdõiv (FORM) tervezés" + +"You must supply a return type!" "Szükség van visszatérési értékre!" + +"Remove field from result ?" "A mezö törlése az eredménybõl ?" + +"There is another object (a %s) with the same name.\nPlease change it!" "Van már ilyen nevû (%s) objektum!\nLégyszives változtasd meg!" + +"This query has no commands?" "Ebben a lekérdezésben nincs parancs?" + +"Execute query" "Lekérdezés futtatása" + +"field cannot be null" "a mezõ nem lehet NULL" + +"Help" "Súgó" + +"Rename column" "Az oszlop átnevezése" + +"Database" "Adatbázis" + +"Information" "Információ" + +"Close" "Zárás" + +"Command" "Utasitás" + +"Table" "Tábla" + +"verify password" "jelszó ellenõrzés" + +"Vacuum" "Porszivózás (VACUUM)" + +"Default value" "Alapérték" + +"Import" "Behozatal" + +"Delete index" "Index törlés" + +"Move up" "Mozgasd fel" + +"index properties" "index tulajdonságok" + +"check" "ellenõrzi" + +"Create new table" "Új tábla készités" + +"Visual query designer" "Lekérdezés tervezõ" + +"Delete all" "Törölni mindet" + +"You are going to delete\n\n %s \n\nProceed?" "Le fogod törölni az alábbit:\n\n %s \n\nFolytatod?" + +"Schema name" "Séma neve" + +"Error executing query" "Hiba a lekérdezés futtatása közben" + +"Report name" "Jelentés neve" + +"Add field" "Mezõ hozzáadás" + +"Field name" "Mezõnév" + +"FATAL ERROR searching for PgAccess system tables" "FATÁLIS HIBA a PgAccess rendszertáblák keresésénél" + +"A big number of rows displayed in table view will take a lot of memory!" "A nézetnél (VIEW) kijelzendõ sorok nagy száma miatt sok memória fog lefoglalódni !" + +"Preview" "Elõzetes nézet" + +"Users" "Felhasználók" + +"Owner" "Tulajdonos" + +"Form's window internal name" "Kérdõiv (FORM) ablakának belsõ használatú neve" + +"Sort field" "Mezõ rendezése" + +"New name is the same as the old one!" "Az új név megegyezik a régivel!" + +"Warning" "Figyelem" + +"Suggestions at" "Javaslatok itt:" + +"Functions" "Függvények" + +"Schema" "Séma" + +"Open" "Nyit" + +"size" "méret" + +"Delete" "Törlés" + +"Returns" "Visszatér" + +"Define new user" "Új felhasználó definiálása" + +"Move down" "Mozgasd le" + +"Design script" "Szkript tervezés" + +"Check box" "Check box" + +"FINAL WARNING" "UTOLSÓ FIGYELMEZTETÉS" + +"Add table" "Tábla hozzáadás" + +"Table viewer font" "Tábla nézõ betûkészlet" + +"The field type is not specified!" "A mezõ tipusa nincs megadva!" + +"Close test form" "Zárd le a teszt kérdõivet (FORM)" + +"Export table" "Tábla kivitel" + +"Add new index" "Ûj index hozzáadás" + +"Left" "Bal" + +"Field delimiter" "Mezõ határoló" + +"Add formula" "Formula hozzáadás" + +"Open database" "Adatbázis megnyitás" + +"Return" "Visszatérés" + +"Changed fonts may appear in the next working session!" "A megváltoztatott betûkészlet a következõ futtatásnál lesz látható!" + +"Error" "Hiba" + +"Enter a field name" "Adj meg egy mezõnevet !" + +"field name" "Mezõnév" + +"Forms" "Kérdõivek" + +"Cannot add column" "Nem lehet oszlopot hozzáadni" + +"Clean" "Törlés" + +"Delete all objects ?" "Minden objektum törlése ?" + +"Preferred language" "Választott nyelv" + +"Execute SQL" "SQL futtatás" + +"Sequences" "Szekvenciák" + +"Button" "Gomb" + +"Language" "Nyelv" + +"Query '%s' was not found!" "A(z) '%s' nevû lekérdezés nem található!" + +"Object" "Objektum" + +"Font fixed" "Fix betûkészlet" + +"Table name" "Táblanév" + +"Export" "Kivitel" + +"Change user" "Felhasználócsere" + +"You must give object a new name!" "Az objektumnak új nevet kell adjál!" + +"Query" "Lekérdezés" + +"User name" "Felhasználónév" + +"Font normal" "Normális betûkészlet" + +"Import table" "Tábla bevitel" + +"Toolbar" "Eszközpult" + +"Radio btn" "Rádiógomb" + +"You must supply a name for this function!" "Hiányzik a függvény neve!" + +"You have to select index fields!" "Az index mezõket kell választanod!" + +"Constraint" "Kényszer (CONSTRAINT)" + +"The script must have a name" "Hiányzik a szkript neve" + +"Save" "Mentés" + +"Exit" "Kilépés" + +"Inherits" "örökli" + +"Delete field" "Mezõ törlés" + +"About" "A programról" + +"Empty field name ?" "Nom de champ inexistant ?" + +"All report information will be deleted.\n\nProceed ?" "Toutes les informations de l'état vont être détruites\n\nContinuer ?" + +"Host" "Szerver" + +"vacuuming database %s ..." "A(z) %s adatbázis porszivózása ..." + +"Indexes defined" "Definiált indexek" + +"You must specify field size!" "Hiányzik a mezõméret!" + +"Schema '%s' already exists!" "A(z) '%s' schéma már létezik!" + +"There is another field with the same name: '%s'!\n\nReplace it ?" "Már van ilyen nevû mezõ: '%s'!\n\nFelülirás ?" + +"Contents" "Tartalom" + +"Views" "Nézetek" + +"Variable" "Változó" + +"Error executing query\n\n%s\n\nPostgreSQL error message:\n%s\nPostgreSQL status:%s" "Hiba a lekérdezés futtatása közben\n\n%s\n\nPostgreSQL hibaüzenet:\n%s\nPostgreSQL státusz:%s" + +"Filter conditions" "Szûrõfeltételek" + +"Error retrieving query definition" "Hiba a lekérdezés definiciójának betöltésénél" + +"Error deleting view" "Hiba a nézet (VIEW) törlésénél" + +"New" "Új" + +"Tables" "Táblák" + +"Create" "Elkészit" + +"Forms need an internal name, only literals, low case" "A kérdõiveknek (FORM) kell egy belsõ név, csak kisbetûkkel" + +"Do you want to save the form into the database?" "El akarod menteni a kérdõivet (FORM) az adatbázisba ?" + +"Schema '%s' was not found!" "A(z) '%s' nevû séma nem található!" + +"proportional" "megfelelõ" + +"Function saved!" "A függvény elmentve!" + +"with OIDs" "OID-ekkel" + +"Table information" "Tábla információ" + +"Error inserting new record" "Hiba az üj bejegyzés tárolásával" + +"Column name '%s' already exists in this table!" "A(z) '%s' nevû oszlop már létezik ebben a táblában !" + +"File" "Fájl" + +"Your table has no fields!" "A táblában nincsenek mezõk!" + +"Height" "Magasság" + +"You will always get the latest version at:" "A legfrissebb verzió megszerezhetõ innen:" + +"Form must have a name" "Hiányzik a kérdõiv (FORM) neve !" + +"Password" "Jelszó" + +"Valid until (date)" "Érvényes eddig (dátum)" + +"Report source" "A jelentés forrása" + +"Allow user to create databases" "Engedély a felhasználónak új adatbázis készitésére" + +"Cancel" "Mégsem" + +"Is clustered ?" "CLUSTER-elt ?" + +"Add new column" "Új oszlop hozzáadás" + +"Show SQL" "SQL parancsok" + +"New name" "Új név" + +"Table '%s' not found!" "A(z) '%s' nevû tábla nem található!" + +"Form name" "Kérdõiv (FORM) név" + +"Visual designer" "Tervezõ" + +"You choose to delete index\n\n %s \n\nProceed?" "Biztos, hogy akarod törölni az alábbi indexet?\n\n %s" + +"Error retrieving from" "Hiba a betöltésnél errõl a helyrõl" + +"Save query definition" "A lekérdezés elmentése" + +"A Tcl/Tk interface to\nPostgreSQL\nby Constantin Teodorescu" "Egy Tcl/Tk felület a\nPostgreSQL-hez\nKészitette: Constantin Teodorescu" + +"Operation completed!" "Beavatkozás végrehajtva!" + +"Max rows displayed in table/query view" "Maximális sorok száma a tábláknál/lekérdezéseknél" + +"Passwords do not match!" "A jelszók nem egyeznek!" + +"Rename" "Átnevezés" + +"Entry" "Bejegyzés" + +"Error retrieving schema definition" "Hiba a séma-definició betöltése közben" + +"This is an action query!\n\nExecute it?" "Ez nem lekérdezés, hanem parancs.\nFuttatás ?" + +"Error retrieving view definition for" "Hiba a nézet (VIEW) betöltése közben " + +"options" "beállitások" + +"Sequence '%s' not found!" "A(z) '%s' nevû szekvencia nem található!" + +"Text" "Szöveg" + +"Tcl error executing pg_exec %s\n\n%s" "Tcl hiba a pg_exec futtatásánál %s\n\n%s" + +"Width" "Szélesség" + +"You have to supply a name for this query!" "Hiányzik a lekérdezés neve!" + +"Accessing data. Please wait ..." "Adatelérés. Kis türelmet ..." + +"Report footer" "A jelentés alja" + +"Parameters" "Paraméterek" + +"Queries" "Lekérdezések" + +"Query '%s' already exists!" "A(z) '%s' nevû lekérdezés már létezik!" + +"Font bold" "Vastag betûkészlet" + +"Query builder" "Lekérdezés szerkesztõ" + +"Error defining view" "Hiba a nézet (VIEW) definiálásánál" + +"Top" "Csúcs" + +"You must supply a name for your table!" "Hiányzik a tábla neve!" + +"Page footer" "A lap alja" + +"Font italic" "Dõlt betûkészlet" + +"Field name not entered!" "A mezõnév hiányzik!" + +"Index name cannot be null!" "Az index nem lehet NULL!" + +"Sort" "Rendezés" + +"Import-Export table" "Tábla behozatal/kivitel" + +"Point" "Pont" + +"type" "tipus" + +"You should supply a name for this sequence" "Hiányzik a szekvencia neve!" + +"Remove link ?" "A kapcsolat törlése?" + +"You have to supply a table name!" "Hiányzik a tábla neve!" + +"Report header" "Jelentés fejléc" + +"Attributes" "Attribútumok" + +"Table '%s' already in schema" "A(z) '%s' tábla már szerepel a sémában!" + +"Username" "Felhasználó név" + +"Minvalue" "Minimális érték" + +"Sequence name" "Szekvencianév" + +"Define sequence" "Szekvencia definiálás" + +"Function" "Függvény" + +"Sorting and filtering not (yet) available from queries!\n\nPlease enter them in the query definition!" "A rendezés és szûrés (még) nem megoldott a lekérdezéseknél!\n\nHasználd õket a lekérdezés definiciókban!" + +"Reports" "Jelentések" + +"Columns" "Oszlopok" + +"Indexes" "Indexek" + +"Permissions" "Engedélyek" + +"not null" "nem NULL" + +"Cluster index" "Index CLUSTER-elés" + +"index columns" "indexelt oszlopok" + +"Add user" "Felhasználó hozzáadás" + +"Change permissions" "Engedélyek megváltoztatása" + +"select" "olvasás" + +"update" "frissités" + +"insert" "tárolás" + +"rule" "szabályok" + +"Identification" "Azonositás" + +"Owner ID" "Tulajdonos azonositó" + +"Has primary key ?" "Van elsõdleges kulcsa ?" + +"Has rules ?" "Vannak szabályok ?" + +"Statistics" "Statisztika" + +"Number of tuples" "Bejegyzések száma" + +"Number of pages" "Oldalak száma" + +"Index name" "Index név" + +"Index fields" "Index mezõk" + +"Table OID" "Tábla OID" + +} + + diff --git a/src/bin/pgaccess/lib/languages/romana b/src/bin/pgaccess/lib/languages/romana new file mode 100644 index 0000000000000000000000000000000000000000..d234ce3b0e7dafbf3effdd89fb8aa3eaabb3ab0b --- /dev/null +++ b/src/bin/pgaccess/lib/languages/romana @@ -0,0 +1,526 @@ +array set Messages { + +"Label" "Etichetã" + +"Save schema" "Salveazã planul" + +"Is unique ?" "Este index unic ?" + +"Report builder" "Proiectare rapoarte" + +"Criteria" "Conditie" + +"FATAL ERROR upgrading PgAccess table" "EROARE FATALA la actualizarea tabelei PgAccess" + +"Save this query as a view" "Salveazã aceastã selecþie ca o vedere" + +"Page header" "Cap de paginã" + +"Query name" "Nume selecþie" + +"Please select an object first!" "Selectati mai intai un obiect!" + +"Fields :" "Cîmpurile indexului" + +"Name" "Nume" + +"File name" "Nume fiºier" + +"Detail record" "Înregistrãri" + +"Auto-load the last opened database at startup" "Încarcã automat la lansare ultima bazã deschisã" + +"Maxvalue" "Valoare maximã" + +"Start value" "Începe de la" + +"Report fields" "Câmpuri disponibile" + +"Test form" "Testeazã macheta" + +"Error trying to connect to database '%s' on host %s \n\nPostgreSQL error message:%s" "Eroare la conectarea la baza de date '%s' pe masina %s \n\nMesajul de eroare PostgreSQL:%s" + +"No field type ?" "Tip cimp necompletat!" + +"User without name?" "Utilizatorul asta n-ar si el un nume?" + +"You have to supply a name for this schema!" "Trebuie sa dati un nume acestui plan!" + +"Last value" "Ultima valoare" + +"Preferences" "Preferinþe" + +"View '%s' already exists!\nOverwrite ?" "Vederea '%s' mai exista!\nO suprainscriem ?" + +"You have to select an index!" "Trebuie sa selectati un index!" + +"Field type" "Tip cãmp" + +"Script name" "Nume script" + +"Reload" "Reîncãrcare" + +"Remove table %s from query?" "Eliminati tabela %s din selectie?" + +"SQL window" "Comenzi SQL executate" + +"Allow user to create other users" "Are voie sã creeze alþi utilizatori" + +"Delete current record ?" "Stergeti inregistrarea curenta?" + +"List box" "Listã" + +"Save to query builder" "Salveazã fraza SQL" + +"fixed width" "lãþime fixã" + +"Scripts" "Scripturi" + +"Yes" "Da" + +"Add label" "Adaugã etichetã" + +"Sequence created!" "Secventa a fost creata!" + +"Field information" "Informaþii despre câmpuri" + +"Design" "Proiecteazã" + +"Field" "Cimp" + +"You have to supply an external file name!" "Trebuie sa introduceti numele fisierului extern!" + +"Increment" "Increment" + +"No" "Nu" + +"Form design" "Proiectare machetã" + +"You must supply a return type!" "Trebuie sa introduceti tipul rezultatului" + +"Remove field from result ?" "Eliminati acest cimp din rezultat?" + +"There is another object (a %s) with the same name.\nPlease change it!" "Mai este un obiect (%s) cu acelasi nume!\nSchimbati-l!" + +"This query has no commands?" "Aceasta selectie nu are definitie?" + +"Execute query" "Executã selecþia" + +"field cannot be null" "obligatoriu de completat" + +"Help" "Ajutor" + +"Rename column" "Redenumeºte cîmp" + +"Database" "Baza de date" + +"Information" "Informaþii" + +"Close" "Închide" + +"Command" "Comandã" + +"Table" "Tabela" + +"verify password" "verificã parola" + +"Vacuum" "Taseazã" + +"Default value" "Valoare implicitã" + +"Import" "Importã" + +"Delete index" "ªterge index" + +"Move up" "Urcã" + +"index properties" "proprietãþi index" + +"check" "verificã" + +"Create new table" "Creazã tabelã nouã" + +"Visual query designer" "Proiectare vizuala a selectiilor" + +"Delete all" "ªterge toate" + +"You are going to delete\n\n %s \n\nProceed?" "Urmeaza sa stergeti obiectul\n\n %s \n\nConfirmati?" + +"Schema name" "Numele planului" + +"Error executing query" "Eroare la executia selectiei" + +"Report name" "Nume raport" + +"Add field" "Adaugã-l" + +"Field name" "Nume câmp" + +"FATAL ERROR searching for PgAccess system tables" "EROARE FATALA la citirea tabelelor necesare PgAccess" + +"A big number of rows displayed in table view will take a lot of memory!" "Un numãr mare de înregistrãri încãrcate va lua multã memorie" + +"Preview" "Încercare" + +"Users" "Utilizatori" + +"Owner" "Aparþine lui" + +"Form's window internal name" "Numele intern al machetei" + +"Sort field" "Cîmpuri sortare" + +"New name is the same as the old one!" "Numele nou este acelasi cu numele vechi!" + +"Warning" "Avertisment" + +"Suggestions at" "Sugestii la" + +"Functions" "Funcþii" + +"Schema" "Plan" + +"Open" "Deschide" + +"size" "mãrime" + +"Delete" "ªterge" + +"Returns" "Întoarce" + +"Define new user" "Definire utilizator nou" + +"Move down" "Coboarã" + +"Design script" "Proiecteazã script" + +"Check box" "Marcaj" + +"FINAL WARNING" "AVERTISMENT FINAL" + +"Add table" "Adaugã tabelã" + +"Table viewer font" "Fonturi tabele" + +"The field type is not specified!" "Tipul cimpului nu a fost specificat" + +"Close test form" "Inchide macheta test" + +"Export table" "Exportã tabelã" + +"Add new index" "Adaugã index nou" + +"Left" "Stânga" + +"Field delimiter" "Delimitator cîmp" + +"Add formula" "Adaugã formulã" + +"Open database" "Deschide baza de date" + +"Return" "Selectat" + +"Changed fonts may appear in the next working session!" "Fonturile se vor schimba la urmãtoarea lansare" + +"Error" "Eroare" + +"Enter a field name" "Trebuie sa introduceti numele cimpului" + +"field name" "Nume cîmp" + +"Forms" "Machete" + +"Cannot add column" "Nu putem adauga cimpul" + +"Clean" "Curãþã" + +"Delete all objects ?" "Stergeti toate obiectele?" + +"Preferred language" "Limba preferatã" + +"Execute SQL" "Executã selecþia" + +"Sequences" "Secvenþe" + +"Button" "Buton" + +"Language" "Limbaj" + +"Query '%s' was not found!" "Definitia pentru selectia '%s' nu a fost gasita" + +"Object" "Obiect" + +"Font fixed" "Font fix" + +"Table name" "Nume tabelã" + +"Export" "Exportã" + +"Change user" "Modificare date utilizator" + +"You must give object a new name!" "Trebuie sa introduceti totusi numele nou" + +"Query" "Query" + +"User name" "Nume utilizator" + +"Font normal" "Font normal" + +"Import table" "Importã tabelã" + +"Toolbar" "Scule" + +"Radio btn" "Selector" + +"You must supply a name for this function!" "Trebuie sa introduceti un nume pentru aceasta functie" + +"You have to select index fields!" "Trebuie sa selectati cimpurile indexului!" + +"Constraint" "Cerinþe" + +"The script must have a name" "Script-ul ar trebui sa aiba un nume" + +"Save" "Salveazã" + +"Exit" "Terminare" + +"Inherits" "Strãmoºi" + +"Delete field" "ªterge cîmp" + +"About" "Despre" + +"Empty field name ?" "Nume cimp necompletat" + +"All report information will be deleted.\n\nProceed ?" "Toate obiectele din raport vor fi sterse!\n\nSinteti de acord?" + +"Host" "Maºina" + +"vacuuming database %s ..." "Tasãm baza de date %s ..." + +"Indexes defined" "Indecºi definiþi" + +"You must specify field size!" "Marimea cimpului trebuie specificata" + +"Schema '%s' already exists!" "Schema '%s' exista deja!" + +"There is another field with the same name: '%s'!\n\nReplace it ?" "Mai exista un cimp cu acelasi nume: '%s'!\n\nIl inlocuim cu descrierea noua?" + +"Contents" "Conþinut" + +"Views" "Vederi" + +"Variable" "Variabilã" + +"Error executing query\n\n%s\n\nPostgreSQL error message:\n%s\nPostgreSQL status:%s" "Eroare la executia selectiei:\n\n%s\n\nMesaj de eroare PostgreSQL:\n%s\nStare:%s" + +"Filter conditions" "Condiþii de filtrare" + +"Error retrieving query definition" "Eroare la citirea definitiei pentru selectie" + +"Error deleting view" "Eroare la stergerea vederii" + +"New" "Nou" + +"Tables" "Tabele" + +"Create" "Creazã" + +"Forms need an internal name, only literals, low case" "Machetele au nevoie de un nume intern, doar litere mici" + +"Do you want to save the form into the database?" "Vrei sa salvezi descrierea machetei in baza de date?" + +"Schema '%s' was not found!" "Schema '%s' nu a fost gasita!" + +"proportional" "proporþional" + +"Function saved!" "Functia a fost salvata!" + +"with OIDs" "cu OID-uri" + +"Table information" "Informaþii despre tabela" + +"Error inserting new record" "Eroare la adaugarea noii inregistrari" + +"Column name '%s' already exists in this table!" "Cimpul '%s' exista deja in tabela!" + +"File" "Fiºier" + +"Your table has no fields!" "Tabela asta nu are nici un cimp ?" + +"Height" "Înãlþime" + +"You will always get the latest version at:" "Întotdeauna ultima versiune se va gãsi la" + +"Form must have a name" "Macheta trebuie sa aiba si ea un nume!" + +"Password" "Parolã" + +"Valid until (date)" "Valabil pînã la" + +"Report source" "Sursa raportului" + +"Allow user to create databases" "Are voie sã creeze baze de date" + +"Cancel" "Abandon" + +"Is clustered ?" "E conglomerat ?" + +"Add new column" "Adaugã cîmp nou" + +"Show SQL" "Aratã comanda" + +"New name" "Nume nou" + +"Table '%s' not found!" "Tabela '%s' nu a fost gasita!" + +"Form name" "Nume machetã" + +"Visual designer" "Proiectare vizualã" + +"You choose to delete index\n\n %s \n\nProceed?" "Urmeaza sa stergeti indexul\n\n %s \n\nConfirmati?" + +"Error retrieving from" "Eroare la citirea tabelei" + +"Save query definition" "Salveazã definiþia selecþiei" + +"A Tcl/Tk interface to\nPostgreSQL\nby Constantin Teodorescu" "O interfaþã Tcl/Tk pentru\nPostgreSQL\nde Constantin Teodorescu" + +"Operation completed!" "Operatiune terminata!" + +"Max rows displayed in table/query view" "Numãr maxim înregistrãri afiºate" + +"Passwords do not match!" "Parolele nu se prea potrivesc!" + +"Rename" "Redenumeºte" + +"Entry" "Cîmp" + +"Error retrieving schema definition" "Eroare la citirea definitiei pentru plan" + +"This is an action query!\n\nExecute it?" "Aceasta este o comanda nu o selectie!\n\nO executam?" + +"Error retrieving view definition for" "Eroare la citirea definitiei pentru vederea" + +"options" "opþiuni" + +"Sequence '%s' not found!" "Secventa '%s' nu a fost gasita!" + +"Text" "Text" + +"Tcl error executing pg_exec %s\n\n%s" "Eroare Tcl la executia comenzii %s\n\n%s" + +"Width" "Lãþime" + +"You have to supply a name for this query!" "Trebuie sa dati totusi un nume acestei selectii" + +"Accessing data. Please wait ..." "Citim inregistrarile. Asteptati ..." + +"Report footer" "Încheiere raport" + +"Parameters" "Parametrii" + +"Queries" "Selecþii" + +"Query '%s' already exists!" "Selectia '%s' exista deja!" + +"Font bold" "Font îngroºat" + +"Query builder" "Proiectare selectii" + +"Error defining view" "Eroare la definirea vederii" + +"Top" "Sus" + +"You must supply a name for your table!" "Trebuie sa introduceti un nume pentru aceasta tabela!" + +"Page footer" "Încheiere paginã" + +"Font italic" "Font înclinat" + +"Field name not entered!" "Nu ati introdus numele cimpului!" + +"Index name cannot be null!" "Numele indexului trebuie sa fie completat!" + +"Sort" "Sortare" + +"Import-Export table" "Import/Export tabela" + +"Point" "Selecteazã" + +"type" "tip" + +"You should supply a name for this sequence" "Ar trebui sa dai un nume secventei" + +"Remove link ?" "Stergeti aceasta legatura?" + +"You have to supply a table name!" "Trebuie sa introduceti numele tabelei!" + +"Report header" "Cap de raport" + +"Attributes" "Atribute" + +"Table '%s' already in schema" "Tabela '%s' exista deja pe plan!" + +"Username" "Utilizator" + +"Minvalue" "Valoare minimã" + +"Sequence name" "Nume secvenþã" + +"Define sequence" "Defineºte secvenþã" + +"Function" "Funcþie" + +"Sorting and filtering not (yet) available from queries!\n\nPlease enter them in the query definition!" "Sortari si filtrari nu se pot face din vizualizare selectii\n\nSpecificati-le in definitia selectiei!" + +"Reports" "Rapoarte" + +"primary key" "cheie primarã" + +"Back" "Inapoi" + +"Columns" "Coloane" + +"Indexes" "Indecºi" + +"Permissions" "Drepturi" + +"not null" "nenul" + +"Cluster index" "Aglomereazã indexul" + +"index columns" "compunerea indexului" + +"Add user" "Adaugã utilizator" + +"Change permissions" "Schimbã drepturile de acces" + +"select" "selecþii" + +"update" "actualizãri" + +"insert" "inserãri" + +"rule" "reguli" + +"Identification" "Identificare" + +"Owner ID" "ID-ul proprietarului" + +"Has primary key ?" "Are cheie primarã ?" + +"Has rules ?" "Are reguli definite ?" + +"Statistics" "Statistice" + +"Number of tuples" "Numãr înregistrãri" + +"Number of pages" "Numãr pagini" + +"Index name" "Nume index" + +"Index fields" "Coloanele indexului" + +"Table OID" "OID-ul tabelei" +}