fixing it more..

This commit is contained in:
Marc G. Fournier 1999-09-20 22:32:50 +00:00
parent a00a1a5641
commit 3848b4648a
67 changed files with 4808 additions and 0 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 207 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View File

@ -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&nbsp;
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>&nbsp;
<br>&nbsp;
<p><b><font size=+1>Global variables available</font></b>
<br>&nbsp;
<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>&nbsp;
<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&nbsp; procedures:
<ul>
<li>
<tt>new</tt>&nbsp; , 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.&nbsp; Here are some
procedures and functions defined for this namespace available to the user:
<br>&nbsp;
<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>&nbsp;
<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>

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 B

View File

@ -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>&nbsp;
<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>

View File

@ -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>&nbsp;
<BR><TT></TT>&nbsp;<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>

View File

@ -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 &lt;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>

View File

@ -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>&nbsp;
</body>
</html>

View File

@ -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>&nbsp; ..."</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>&nbsp;
<br>&nbsp;
<br>&nbsp;
</body>
</html>

View File

@ -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 &amp; 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>&nbsp;
</body>
</html>

View File

@ -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" );

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

View File

@ -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>&nbsp;&nbsp;&nbsp; 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>&nbsp;&nbsp;&nbsp; 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>&nbsp;&nbsp;&nbsp; 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>&nbsp;
<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>&nbsp;&nbsp;&nbsp; setSQL "select * from phonebook"</tt>
<br><tt>&nbsp;&nbsp;&nbsp; open</tt>
<br><tt>&nbsp;&nbsp;&nbsp; set nrecs [getRowCount]</tt>
<br><tt>&nbsp;&nbsp;&nbsp; moveLast</tt>
<br><tt>&nbsp;&nbsp;&nbsp; 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>&nbsp;
<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 &lt;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&nbsp; 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 !&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
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>

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

View File

@ -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>

View File

@ -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>

Binary file not shown.

After

Width:  |  Height:  |  Size: 789 B

View File

@ -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 : &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<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&nbsp;:</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B><TT><FONT SIZE=+1>pgsql-interfaces-request@postgresql.org
</FONT></TT></B>&nbsp;</P>
<P>having a single line in the body message :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<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 &lt;Majordomo@hub.org&gt; 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>

View File

@ -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>

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

View File

@ -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>&nbsp; or&nbsp;&nbsp; <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 &amp; 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>
&nbsp;&nbsp;&nbsp;&nbsp; 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.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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>&nbsp;&nbsp;&nbsp;&nbsp; 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>&nbsp;&nbsp;&nbsp;&nbsp; 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>&nbsp;&nbsp;&nbsp; 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>&nbsp;
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

View File

@ -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>&nbsp;<a href="index.html">Back</a>
</body>
</html>

View File

@ -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&nbsp;
<HR WIDTH="100%"></H1>
Beginning with 0.70 version, I have introduced in PgAccess two new modules
for operating with scripts and forms.
<P>&nbsp;&nbsp; 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>&nbsp;
<BR>&nbsp;&nbsp; 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>&nbsp;&nbsp; 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>
&nbsp;&nbsp; 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>&nbsp;&nbsp; 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&nbsp; <A HREF="forms.html">special
section concerning forms.</A>
<H3>
Scripts</H3>
&nbsp;&nbsp; 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>&nbsp;&nbsp; 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>&nbsp;&nbsp; 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>

View File

@ -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>

View File

@ -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

View File

@ -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>
&nbsp;<a href="mainwindow.gif">Main window</a> 9 Kb</li>
<li>
&nbsp;<a href="newtable.gif">Creating a new table</a> 9 Kb</li>
<li>
&nbsp;<a href="permissions.gif">Table access control</a> 10 Kb</li>
<li>
&nbsp;<a href="addindex.gif">Adding a new index</a> 12 Kb</li>
<li>
&nbsp;<a href="vdesigner.gif">The visual query designer</a> 16 Kb</li>
<li>
&nbsp;<a href="function.gif">Working with functions</a> 10 Kb</li>
<li>
&nbsp;<a href="forms.gif">Form designer</a> 19 Kb</li>
<li>
&nbsp;<a href="newuser.gif">User management</a> 4 Kb</li>
<li>
&nbsp;<a href="help.gif">Help</a> 7 Kb</li>
</ul>
</body>
</html>

View File

@ -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' &gt;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 &quot;preferences&quot; dialog window.</P>
</BODY>
</HTML>

View File

@ -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>

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -0,0 +1 @@
Cassileth, BR~Unorthodox Cancer Medicine~Cancer Investigation~~1986~4~6~591-598

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

View File

@ -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' &gt;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 &quot;preferences&quot; 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>

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View File

@ -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/&lt;name&gt;</samp>, where &lt;name&gt; 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>

View File

@ -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 -&gt;<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>&lt;username&gt;</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>

View File

@ -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>

View File

@ -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>&lt;username&gt;</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>

View File

@ -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>

View File

@ -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 -&gt;<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>

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View File

@ -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>

View File

@ -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>&nbsp;
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 896 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 873 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 907 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 908 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 896 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 897 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 870 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 911 B

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}