diff --git a/src/bin/pgaccess/doc/html/a_right.gif b/src/bin/pgaccess/doc/html/a_right.gif new file mode 100644 index 00000000000..386e27c304f Binary files /dev/null and b/src/bin/pgaccess/doc/html/a_right.gif differ diff --git a/src/bin/pgaccess/doc/html/addindex.gif b/src/bin/pgaccess/doc/html/addindex.gif new file mode 100644 index 00000000000..2ff0aa2084e Binary files /dev/null and b/src/bin/pgaccess/doc/html/addindex.gif differ diff --git a/src/bin/pgaccess/doc/html/api.html b/src/bin/pgaccess/doc/html/api.html new file mode 100644 index 00000000000..7630fd2054d --- /dev/null +++ b/src/bin/pgaccess/doc/html/api.html @@ -0,0 +1,232 @@ + + + + + + + + +

+PgAccess developer API

+ +
+
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. +

That's why PgAccess 0.98 has been internally restructured, every main +module of PgAccess has became a namespace (see Tcl namespaces) in order  +to hide the variables and internal procedures to the user. Also, all the +global variables that have been used before were grouped under a single +big associative array called PgAcVar (PgAccess variables) so they +should not interfere with user defined global variables. +
  +
  +

Global variables available +
  +

+ + + + + + + + + + + + + + + + + + + + + + + +
PgAcVarThe main global associative array that hold together various information +needed by PgAccess. User should NOT +alter it under any circumstances.
CurrentDBThe handler of the current opened database. Can be used for database +operations as selects or command execution.
MessagesThe associative array that holds the translation for the current +language. Loaded from the appropriate language file from lib/languages +directory
PGACCESS_HOMEKeep the system directory of PgAccess root installation
+ +
  +

Window naming convention +

Every toplevel window defined by PgAccess has the following naming convention. +Every window name starts with .pgaw (PgAccess window) followed +by a colon and a name. Example: +

.pgaw:User , .pgaw:About , .pgaw:ImportExport
+Namespaces available +

For every tab from the main database window there is a namespace defined +(Tables, Queries, Views, Functions, Sequences, Reports, Forms, Scripts, +Users, Schema). Every namespace has by default the following  procedures: +

+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. +
Example: +
Tables::open "customers" +
Queries::open "Invoices received" +
Forms::open "Add new invoice"
+The Tables::open procedure accepts two optional parameters, filter +and order. +
Example: +
Tables::open "phonebook" "name ~* 'joe'" "age desc"
+will open a table view window with predefined filter "name ~* 'joe'" and +ordered by descending age. +

There is also a special namespace called Database.  Here are some +procedures and functions defined for this namespace available to the user: +
  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameParametersTypeReturnsDescription
vacuumnoneprocedurenothingvacuums the current database
getTablesListnonefunctionlistreturns the list of tables from the current database
executeUpdatesqlcmdfunctionintegerexecute the sqlcmd command on the current database returning +1 if no errors ocurred or 0 if the command failed
+ +

Global functions available +
  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameParametersDescription
setCursortypeSet 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
parametermsgShows a modal input dialog with the msg message, wait for user +to enter the data and returns it as a string
showErrormsgShows a modal dialog window with an error message
+ + + diff --git a/src/bin/pgaccess/doc/html/ball.gif b/src/bin/pgaccess/doc/html/ball.gif new file mode 100644 index 00000000000..02d203471ed Binary files /dev/null and b/src/bin/pgaccess/doc/html/ball.gif differ diff --git a/src/bin/pgaccess/doc/html/contents.html b/src/bin/pgaccess/doc/html/contents.html new file mode 100644 index 00000000000..971f3f43dce --- /dev/null +++ b/src/bin/pgaccess/doc/html/contents.html @@ -0,0 +1,29 @@ + + + + + + + + +What is PgAccess? +
What's new? +
Features +
Screenshots +
FAQ +
Documentation +
To-Do list +
Download +
  +


+

+

+ +

Other links +
PostgreSQL +
Visual Tcl +
Tcl/Tk +
Linux +
vTcLava + + diff --git a/src/bin/pgaccess/doc/html/copyright.html b/src/bin/pgaccess/doc/html/copyright.html new file mode 100644 index 00000000000..d67654b88e7 --- /dev/null +++ b/src/bin/pgaccess/doc/html/copyright.html @@ -0,0 +1,39 @@ + + + + + PgAccess - Copyright notice + + +--------------------------------------------------------------------------- +
  +
  + +

Copyright (c) 1994-7 Regents of the University of California + +

Permission to use, copy, modify, and distribute this software and +its +
documentation for any purpose, without fee, and without a written +agreement +
is hereby granted, provided that the above copyright notice and +this +
paragraph and the following two paragraphs appear in all copies. + +

IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY +PARTY FOR +
DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, +INCLUDING +
LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS +
DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED +OF THE +
POSSIBILITY OF SUCH DAMAGE. + +

THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, +
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY +
AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER +IS +
ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS +TO +
PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + + diff --git a/src/bin/pgaccess/doc/html/documentation.html b/src/bin/pgaccess/doc/html/documentation.html new file mode 100644 index 00000000000..48d3fa5ec14 --- /dev/null +++ b/src/bin/pgaccess/doc/html/documentation.html @@ -0,0 +1,19 @@ + + + + + + + + +

+Documentation

+ +
+

Still need to be written. Some information can be found in the help +included in the main program. +

Jim Lemon <Jim.Lemon@uts.EDU.AU> has started writing a tutorial. +Thought it is based on earlier versions than 0.98 it is a beginning after +all, isn't it ? + + diff --git a/src/bin/pgaccess/doc/html/download.html b/src/bin/pgaccess/doc/html/download.html new file mode 100644 index 00000000000..efbe7bf50aa --- /dev/null +++ b/src/bin/pgaccess/doc/html/download.html @@ -0,0 +1,42 @@ + + + + + + + + +

+Download

+ +
+
The primary site for PgAccess downloads is: + + +

Another one (just with a little bit faster, try this one first) would +be : +

+ +
  + + diff --git a/src/bin/pgaccess/doc/html/faq.html b/src/bin/pgaccess/doc/html/faq.html new file mode 100644 index 00000000000..f66dd8321ac --- /dev/null +++ b/src/bin/pgaccess/doc/html/faq.html @@ -0,0 +1,85 @@ + + + + + + + + +

+PgAccess - FAQ

+ +
+
1. When I run PgAccess I got a message complaining about the crypt +library! What should I do? +
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.
+2. I cannot connect to a database from another machine +
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.
+3. I am experiencing core dumps when trying to run PgAccess. Is PgAccess +broken? +
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.
+4. When I try to run PgAccess I get the following error : Application +initialization failed: couldn't connect to display "" +
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 export DISPLAY=localhost:0.0 +and run PgAccess again.
+5. Cannot run PgAccess on a Windows machine. +
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.
+6. How much costs PgAccess? +
PgAccess is a free tool. You won't have to pay anything in +order to use it. It is protected by the following copyright +as PostgreSQL is. I cannot guarantee technical support but I will try to +answer to your questions as much as I can.
+7. I want to translate PgAccess messages for xxx language. What should +I do? +
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.
+ +


8. I am receiving the following error: message invalid command +name "namespace" while executing "namespace eval Mainlib  ..." +

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
+ +
  +
  +
  + + diff --git a/src/bin/pgaccess/doc/html/features.html b/src/bin/pgaccess/doc/html/features.html new file mode 100644 index 00000000000..4531663be38 --- /dev/null +++ b/src/bin/pgaccess/doc/html/features.html @@ -0,0 +1,52 @@ + + + + + + + +Tables +
- opening multiple tables for viewing, max. n records (changed by preferences +menu) +
- column resizing, dragging the vertical grid line (better in table +space rather than in the table header) +
- text wrap in cells - layout saved for every table +
- import/export to external files (SDF,CSV) +
- filter capabilities (enter filter like (price>3.14) +
- sort order capabilities (enter manually the sort field(s)) +
- editing in place +
- improved table generator assistant +
- improved field editing +
Queries +
- define , edit and stores "user defined queries" +
- store queries as views +
- execution of queries with optional user input parameters ( select +* from invoices where year=[parameter "Year of selection"] ) +
- viewing of select type queries result +
- query deleting and renaming +
- visual query builder with drag & drop capabilities. For any of +you who had installed the Tcl/Tk plugin for Netscape Navigator, you can +see it at work clicking here +
Sequences +
- defines sequences, delete them and inspect them +
Functions +
- define, inspect and delete functions in SQL, plpgsql and pgtcl languages +
Reports +
- design and display simple reports from tables +
- fields and labels, font changing, style and size +
- saves and loads report description from database +
- show report previews, sample postscript output file +
Forms +
- open user defined forms +
- form design module available +
- query widget available, controls bound to query results +
- click here for a description of forms and +how they can be used +
Scripts +
- define, modify and call user defined scripts +
Users +
- define and modify user information +

PgAccess API for developing small applications +
  + + diff --git a/src/bin/pgaccess/doc/html/formdemo.sql b/src/bin/pgaccess/doc/html/formdemo.sql new file mode 100644 index 00000000000..73bf1c5027f --- /dev/null +++ b/src/bin/pgaccess/doc/html/formdemo.sql @@ -0,0 +1,216 @@ +\connect - teo +CREATE SEQUENCE "cities_id_seq" start 7 increment 1 maxvalue 2147483647 minvalue 1 cache 1 ; +SELECT nextval ('cities_id_seq'); +CREATE TABLE "pga_queries" ( + "queryname" character varying(64), + "querytype" character, + "querycommand" text, + "querytables" text, + "querylinks" text, + "queryresults" text, + "querycomments" text); +CREATE TABLE "pga_forms" ( + "formname" character varying(64), + "formsource" text); +CREATE TABLE "pga_scripts" ( + "scriptname" character varying(64), + "scriptsource" text); +CREATE TABLE "pga_reports" ( + "reportname" character varying(64), + "reportsource" text, + "reportbody" text, + "reportprocs" text, + "reportoptions" text); +CREATE TABLE "phonebook" ( + "name" character varying(32), + "phone_nr" character varying(16), + "city" character varying(32), + "company" bool, + "continent" character varying(16)); +CREATE TABLE "pga_layout" ( + "tablename" character varying(64), + "nrcols" int2, + "colnames" text, + "colwidth" text); +CREATE TABLE "pga_schema" ( + "schemaname" character varying(64), + "schematables" text, + "schemalinks" text); +REVOKE ALL on "pga_schema" from PUBLIC; +GRANT ALL on "pga_schema" to PUBLIC; +CREATE TABLE "cities" ( + "id" int4 DEFAULT nextval('"cities_id_seq"') NOT NULL, + "name" character varying(32) NOT NULL, + "prefix" character varying(16) NOT NULL); +CREATE FUNCTION "getcityprefix" (int4 ) RETURNS varchar AS 'select prefix from cities where id = $1 ' LANGUAGE 'SQL'; +COPY "pga_queries" FROM stdin; +Query that can be saved as view S select * from phonebook where continent='usa' \N \N \N \N +\. +COPY "pga_forms" FROM stdin; +Working with Tables namespace f3 13 {3 4 5 6 7 9 10 11 12 13} 377x263+59+127 {radio usa {36 24 138 36} {} USA selcont} {radio europe {36 45 141 60} {} Europe selcont} {radio africa {36 66 147 81} {} Africa selcont} {label label6 {9 99 339 114} {} {Select one of the above continents and press} {}} {button button7 {270 93 354 117} {Tables::open phonebook "continent='$selcont'" $selorder} {Show them} {}} {button button9 {66 189 312 213} {Tables::design phonebook} {Show me the phonebook table structure} {}} {button button10 {141 228 240 252} {destroy .f3} {Close the form} {}} {button button11 {93 141 282 165} {Tables::open phonebook "company=true"} {Show me only the companies} {}} {radio name {183 24 261 36} {} {Order by name} selorder} {radio phone_nr {183 45 267 57} {} {Order by phone number} selorder} +A simple demo form asdf 14 {FS {set color none}} 370x310+50+75 {label label1 {15 36 99 57} {} {Selected color} {} label1 flat #000000 #d9d9d9 1} {entry entry2 {111 36 225 54} {} entry2 color entry2 sunken #000000 #fefefe 1} {radio red {249 21 342 36} {} {Red as cherry} color red flat #900000 #d9d9d9 1} {radio green {249 45 342 60} {} {Green as a melon} color green flat #008800 #d9d9d9 1} {radio blue {249 69 342 84} {} {Blue as the sky} color blue flat #00008c #d9d9d9 1} {button button6 {45 69 198 99} {set color spooky} {Set a weird color} {} button6 ridge #0000b0 #dfbcdf 2} {label label7 {24 129 149 145} {} {The checkbox's value} {} label7 flat #000000 #d9d9d9 1} {entry entry8 {162 127 172 145} {} entry8 cbvalue entry8 sunken #000000 #fefefe 1} {checkbox checkbox9 {180 126 279 150} {} {Check me :-)} cbvalue checkbox9 flat #000000 #d9d9d9 1} {button button10 {219 273 366 303} {destroy .asdf} {Close that simple form} {} button10 raised #000000 #d9d9d9 1} {button button11 {219 237 366 267} {Forms::open "Phone book"} {Open my phone book} {} button11 raised #000000 #d9d9d9 1} {listbox lb {12 192 162 267} {} listbox12 {} lb sunken #000000 #fefefe 1} {button button13 {12 156 162 186} {.asdf.lb insert end red green blue cyan white navy black purple maroon violet} {Add some information} {} button13 raised #000000 #d9d9d9 1} {button button14 {12 273 162 303} {.asdf.lb delete 0 end} {Clear this listbox} {} button14 raised #000000 #d9d9d9 1} +Working with listboxes f2 5 {FS {set thestudent ""}} 257x263+139+147 {listbox lb {6 6 246 186} {} listbox1 {} lb sunken #000000 #ffffd4 1} {button button2 {9 234 124 258} {# Populate the listbox with some data\ +#\ +\ +foreach student {John Bill Doe Gigi} {\ +\ .f2.lb insert end $student\ +}\ +\ +\ +\ +# Binding the event left button release to the\ +# list box\ +\ +bind .f2.lb {\ +\ 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 {\ +\ set ancr [.pb.allnames curselection]\ +\ if {$ancr!=""} {\ +\ \ DataControl(.pb.qs)::moveTo $ancr\ +\ \ DataControl(.pb.qs)::updateDataSet\ +\ }\ +\ }\ +}} {Start search} {} button8 raised #000000 #d9d9d9 1 n} {button button9 {363 276 433 300} {DataControl(.pb.qs)::close\ +DataControl(.pb.qs)::clearDataSet\ +set nrecs {}\ +set what {}\ +destroy .pb\ +} Exit {} button9 raised #000000 #d9d9d9 2 n} {button button10 {291 237 313 257} {namespace eval DataControl(.pb.qs) {\ +\ moveFirst\ +\ updateDataSet\ +}\ +} |< {} button10 ridge #000092 #d9d9d9 2 n} {button button11 {324 237 346 257} {namespace eval DataControl(.pb.qs) {\ +\ movePrevious\ +\ updateDataSet\ +}\ +} << {} button11 ridge #000000 #d9d9d9 2 n} {button button12 {348 237 370 257} {namespace eval DataControl(.pb.qs) {\ +\ moveNext\ +\ updateDataSet\ +}} >> {} button12 ridge #000000 #d9d9d9 2 n} {button button13 {381 237 403 257} {namespace eval DataControl(.pb.qs) {\ +\ moveLast\ +\ updateDataSet\ +}\ +} >| {} button13 ridge #000088 #d9d9d9 2 n} {checkbox checkbox14 {33 87 126 105} {} {Is it a company ?} DataSet(.pb.qs,company) checkbox14 flat #000000 #d9d9d9 1 n} {radio usa {63 108 201 120} {} U.S.A. DataSet(.pb.qs,continent) usa flat #000000 #d9d9d9 1 n} {radio europe {63 126 204 141} {} Europe DataSet(.pb.qs,continent) europe flat #000000 #d9d9d9 1 n} {radio africa {63 144 210 159} {} Africa DataSet(.pb.qs,continent) africa flat #000000 #d9d9d9 1 n} {entry entry18 {129 180 169 198} {} entry18 what entry18 sunken #000000 #fefefe 1 n} {label label19 {108 219 188 234} {} {records found} {} label19 flat #000000 #d9d9d9 1 n} {label label20 {90 219 105 234} {} { } nrecs label20 flat #000000 #d9d9d9 1 n} {label label21 {3 252 33 267} {} OID= {} label21 flat #000000 #d9d9d9 1 n} {label label22 {39 252 87 267} {} { } pbqs(oid) label22 flat #000000 #d9d9d9 1 n} {button button23 {9 276 79 300} {set oid {}\ +catch {set oid $DataSet(.pb.qs,oid)}\ +if {[string trim $oid]!=""} {\ + sql_exec noquiet "update phonebook set name='$DataSet(.pb.qs,name)', phone_nr='$DataSet(.pb.qs,phone_nr)',city='$DataSet(.pb.qs,city)',company='$DataSet(.pb.qs,company)',continent='$DataSet(.pb.qs,continent)' where oid=$oid"\ +} else {\ + tk_messageBox -title Error -message "No record is displayed!"\ +}\ +\ +} Update {} button23 raised #000000 #d9d9d9 1 n} {button button24 {210 276 280 300} {set thisname $DataSet(.pb.qs,name)\ +if {[string trim $thisname] != ""} {\ +\ sql_exec noquiet "insert into phonebook values (\ +\ \ '$DataSet(.pb.qs,name)',\ +\ \ '$DataSet(.pb.qs,phone_nr)',\ +\ \ '$DataSet(.pb.qs,city)',\ +\ \ '$DataSet(.pb.qs,company)',\ +\ \ '$DataSet(.pb.qs,continent)'\ +\ )"\ +\ tk_messageBox -title Information -message "A new record has been added!"\ +} else {\ +\ tk_messageBox -title Error -message "This one doesn't have a name?"\ +}\ +\ +} {Add record} {} button24 raised #000000 #d9d9d9 1 n} {button button25 {141 276 204 300} {DataControl(.pb.qs)::clearDataSet\ +# clearcontrols stillinitialise\ +# incorectly booleans controls to {}\ +# so I force it to 'f' (false)\ +set DataSet(.pb.qs,company) f\ +focus .pb.name_entry} {Clear all} {} button25 raised #000000 #d9d9d9 1 n} {listbox allnames {249 6 435 231} {} listbox26 {} allnames sunken #000000 #fefefe 1 n} {label label27 {33 252 90 267} {} {} DataSet(.pb.qs,oid) label27 flat #000000 #d9d9d9 1 n} {label label28 {3 182 128 197} {} {Find name containing} {} {} flat #000000 #d9d9d9 1 n} +\. +COPY "pga_scripts" FROM stdin; +How are forms keeped inside ? Tables::open pga_forms\ +\ +\ +\ + +Opening a table with filters Tables::open phonebook "name ~* 'e'" "name desc"\ +\ +\ + +Autoexec Mainlib::tab_click Forms\ +Forms::open {Full featured form}\ +\ +\ + +\. +COPY "pga_reports" FROM stdin; +My phone book phonebook set PgAcVar(report,tablename) "phonebook" ; set PgAcVar(report,y_rpthdr) 21 ; set PgAcVar(report,y_pghdr) 47 ; set PgAcVar(report,y_detail) 66 ; set PgAcVar(report,y_pgfoo) 96 ; set PgAcVar(report,y_rptfoo) 126 ; .pgaw:ReportBuilder.c create text 10 35 -font -Adobe-Helvetica-Bold-R-Normal--*-120-*-*-*-*-*-* -anchor nw -text {name} -tags {t_l mov ro} ; .pgaw:ReportBuilder.c create text 10 52 -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -anchor nw -text {name} -tags {f-name t_f rg_detail mov ro} ; .pgaw:ReportBuilder.c create text 141 36 -font -Adobe-Helvetica-Bold-R-Normal--*-120-*-*-*-*-*-* -anchor nw -text {city} -tags {t_l mov ro} ; .pgaw:ReportBuilder.c create text 141 51 -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -anchor nw -text {city} -tags {f-city t_f rg_detail mov ro} ; .pgaw:ReportBuilder.c create text 231 35 -font -Adobe-Helvetica-Bold-R-Normal--*-120-*-*-*-*-*-* -anchor nw -text {phone_nr} -tags {t_l mov ro} ; .pgaw:ReportBuilder.c create text 231 51 -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -anchor nw -text {phone_nr} -tags {f-phone_nr t_f rg_detail mov ro} \N \N +\. +COPY "phonebook" FROM stdin; +FIAT 623463445 t europe +Gelu Voican 01-32234 Bucuresti f europe +Radu Vasile 01-5523423 Bucuresti f europe +MUGADUMBU SRL +92 534662634 Cairo t africa +Jimmy Page 66323452 f europe +IBM 623346234 \N t usa +John Doe +44 35 2993825 Washington f usa +Bill Clinton +44 35 9283845 New York f usa +Monica Levintchi +44 38 5234526 Dallas f usa +Bill Gates +42 64 4523454 Los Angeles f usa +COMPAQ 623462345 \N t usa +SUN 784563253 \N t usa +DIGITAL 922644516 \N t usa +Frank Zappa 6734567 Montreal f usa +Constantin Teodorescu +40 39 611820 Braila f europe +Ngbendu Wazabanga 34577345 f africa +Mugabe Kandalam 7635745 f africa +Vasile Lupu 52345623 Bucuresti f europe +Gica Farafrica +42 64 4523454 Los Angeles f usa +Victor Ciorbea 634567 Bucuresti f europe +\. +COPY "pga_layout" FROM stdin; +pga_forms 2 formname formsource 82 713 +Usaisti 5 name phone_nr city company continent 150 150 150 150 150 +q1 5 name phone_nr city company continent 150 150 150 150 150 +view_saved_from_that_query 5 name phone_nr city company continent 150 150 150 150 150 +phonebook 5 name phone_nr city company continent 150 105 80 66 104 +Query that can be saved as view 5 name phone_nr city company continent 150 150 150 150 150 +cities 3 id name prefix 150 150 150 +\. +COPY "pga_schema" FROM stdin; +Simple schema cities 10 10 phonebook 201.0 84.0 {cities name phonebook city} +\. +COPY "cities" FROM stdin; +3 Braila 4039 +4 Galati 4036 +5 Dallas 5362 +6 Cairo 9352 +1 Bucuresti 4013 +7 Montreal 5325 +\. +CREATE UNIQUE INDEX "cities_id_key" on "cities" using btree ( "id" "int4_ops" ); diff --git a/src/bin/pgaccess/doc/html/forms.gif b/src/bin/pgaccess/doc/html/forms.gif new file mode 100644 index 00000000000..947d920b04b Binary files /dev/null and b/src/bin/pgaccess/doc/html/forms.gif differ diff --git a/src/bin/pgaccess/doc/html/forms.html b/src/bin/pgaccess/doc/html/forms.html new file mode 100644 index 00000000000..57ecff52fcb --- /dev/null +++ b/src/bin/pgaccess/doc/html/forms.html @@ -0,0 +1,203 @@ + + + + + + + + +

+FORMS

+ +
+

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. +

For the moment, it has only some basic widgets : labels, entries, buttons +, listboxes , checkboxes and radiobuttons. +

Also there is a pseudo data control widget that allows you yo have access +to a query results. +

How do you generate widgets : +

    +
  1. +select a widget from the toolbox by clicking the appropriate radiobutton
  2. + +
  3. +move to the canvas , point with the mouse at the desired location and click +the mouse button to begin
  4. + +
  5. +keeping the mouse-button pressed move the mouse in order to draw a rectangle +that will hold the widget
  6. + +
  7. +release the mouse-button
  8. +
+In the rectangle that you have designed it will appear the selected object. +
Move now to the attribute window to change some of its properties. +

Renaming, resizing items are possible (for the moment) only by modifying +appropriate parameters in attribute window. You must press Enter +in the edit field after changing a value in order to be accepted. +

You can also move items by dragging them or delete them by pressing +Del key after selecting them. +

In attribute window, there are some fields named Command +and +Variable. +

The field Command have meaning +only for Button widgets and holds the command that will be invoked when +the button is pressed. +

    The field Variable 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 t and f (from +true and false) in order to simplify binding to logical data fields (PgAccess +0.82 used 0 and 1). +

    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. +

    In order to make a simple test, put an entry field +and set it's variable to v1 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. +
Another test is defining in Script module a script called "My first +script" having the following commands: +
tk_messageBox -title Warning -message "This is my +first message!" +
and then define a button who's command is execute_script +"My first script". +
  +

+Database manipulation

+Let's presume that our form have the internal name mf (my +form). Don't forget that the Tk window names could not start with +an uppercase letter. +
The window will be referred inside the Tcl/Tk source as .mf +
If you want to close the form in run-time you have to issue the command +destroy +.mf +

Also, any widget created inside this window (form) will have the name +prefixed by .mf ,so we will have .mf.button1 +or .mf.listbox1 . +

We can name the data control widget dc for example. +The fully qualified name for that "virtual widget" will be .mf.dc +then. A new namespace called DataControl(.mf.dc) will be +automatically defined. +
The Command property of the data control widget must +contain the SQL command that will be executed. +
When the form will be in run-time, automatically you will have access +to the following procedures and functions from the namespace: +

open - opens the connection and execute the query (returns +nothing) +
setSQL newsql - set the command query that will be +executed at the next open +
getRowCount - returns the number of records of the +result set +
getRowIndex - returns the current record number inside +the result set +
getFieldList - returns a Tcl list containing the fields +names from the current result set +
moveFirst - move the cursor to the first record in +the recordset +
moveLast , moveNext , movePrevious- +moves the cursor there +
moveTo newrecno - move the cursor to that new record +number (first is 0) +
updateDataSet - update the variables inside the designed +form that have a particular name (I'll explain later) +
clearDataSet - clear the associated DataSet variables +
fill listbox field - fill the named listbox (whole +widget name as .mf.listbox1) with the all the values of +that field from the current result set +
close - close the result set (if +you don't close it, you will loose some memory) +

These procedures and functions should be called in the normal Tcl namespace +mode as in the following example: +

DataControl(.mf.dc)::setSQL "select * from phonebook" +
DataControl(.mf.dc)::open +
set nrecs [DataControl(.mf.dc)::getRowCount] +

If you complaint about writting to many DataControl(...) you can include +many commands into a single namespace eval as in the following example +: +

namespace eval DataControl(.mf.dc) { +
    setSQL "select * from phonebook" +
    open +
    set nrecs [getRowCount] +
    moveLast +
    updateDataSet +
} +

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. +
Opening a new DataControl 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 DataSet 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. +

Example: +
DataSet(.mf.dc,name) +
DataSet(.mf.dc,city) +

If you want to bound some controls to the fields of the recordset, you +will have to name their associate variable like that : +

DataSet(.mf.dc,salary) to get the "salary" field , or +DataSet(.mf.dc,name) to get the "name" field. Using the +data control procedures DataControl(.mf.dc)::moveNext or +movePrevious will automatically update the DataSet(.mf.dc,...) +array so the database information from entries in the form will be refreshed. +
  +

Here it is a dumped sample database +that contains a demo database. What should you do ? +
Shift-click the above URL in order to download that tiny file (4 Kb). +Create a empty database and psql yourdatabase <formdemo.sql +

You should find a single table called "phonebook" a form called "Phone +book" and another "A simple demo form". +

First of all enter and view the phonebook table in table view. Note +the fields and their values. +
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. +

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. +

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 no live connection 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. +

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. +

In order to avoid naming user defined forms with  a particular +name of another PgAccess form, I would recommend naming them as udf0, udf1 +(user defined form 0 , 1 ) +

+


+

Please feel free to send me your opinion at teo@flex.ro on forms +designing and usage. +

KEEP IN MIND !       +THE FORM API MAY CHANGE IN ORDER TO BE MORE SIMPLE AND BETTER! +
SEND ME YOUR WISHES, YOUR IDEAS, YOUR OPINIONS ! +
ALSO ... DON'T BLAME ME IF YOU WILL HAVE TO RE-DESIGN +YOUR OLD FORMS DUE TO SOME INCOMPATIBILITIES WITH NEWER PGACCESS VERSIONS. + + diff --git a/src/bin/pgaccess/doc/html/function.gif b/src/bin/pgaccess/doc/html/function.gif new file mode 100644 index 00000000000..51634e5df9d Binary files /dev/null and b/src/bin/pgaccess/doc/html/function.gif differ diff --git a/src/bin/pgaccess/doc/html/help.gif b/src/bin/pgaccess/doc/html/help.gif new file mode 100644 index 00000000000..f08fee8fd38 Binary files /dev/null and b/src/bin/pgaccess/doc/html/help.gif differ diff --git a/src/bin/pgaccess/doc/html/index.html b/src/bin/pgaccess/doc/html/index.html new file mode 100644 index 00000000000..7ccda192907 --- /dev/null +++ b/src/bin/pgaccess/doc/html/index.html @@ -0,0 +1,11 @@ + + +PgAccess + + + + + + + + diff --git a/src/bin/pgaccess/doc/html/irix.html b/src/bin/pgaccess/doc/html/irix.html new file mode 100644 index 00000000000..b678458569e --- /dev/null +++ b/src/bin/pgaccess/doc/html/irix.html @@ -0,0 +1,133 @@ + + + + PgAccess on Irix + + + + +

INSTALLING PgAccess UNDER IRIX 5.3. +

+ +

This HOWO-TO make PgAccess working under Irix +is written by Stuart Rison

+ +

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.).

+ +

1) Requirements:

+ + + +

2) Installation:

+ +

a) tcl/tk:

+ + + +

b) postgreSQL:

+ + + +

c) Compiling libpgtcl:

+ + + +

d) running pgaccess:

+ + + +

e) et voila!

+ +

3) Concluding remarks:

+ + + +

Good luck

+ +

Stuart Rison LICR University College London London W1P 8BT
+stuart@ludwig.ucl.ac.uk

+ + + diff --git a/src/bin/pgaccess/doc/html/linux1.gif b/src/bin/pgaccess/doc/html/linux1.gif new file mode 100644 index 00000000000..b98ac024d73 Binary files /dev/null and b/src/bin/pgaccess/doc/html/linux1.gif differ diff --git a/src/bin/pgaccess/doc/html/maillist.html b/src/bin/pgaccess/doc/html/maillist.html new file mode 100644 index 00000000000..4e0ce850c96 --- /dev/null +++ b/src/bin/pgaccess/doc/html/maillist.html @@ -0,0 +1,43 @@ + + + + + + + + +

The mailing list for PgAccess is :       pgsql-interfaces@postgresql.org

+ +

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.

+ +

+


+ +

To subscribe please send a mail message to :

+ +

     pgsql-interfaces-request@postgresql.org + 

+ +

having a single line in the body message :      subscribe

+ +

In a couple of minutes , if everything is ok, you must receive something +like that :

+ +

+


+ +

Welcome to the pgsql-interfaces mailing list!

+ +

Please save this message for future reference. Thank you.

+ +

If you ever want to remove yourself from this mailing list, you +can send mail to <Majordomo@hub.org> with the following command in +the body of your email message:

+ +

unsubscribe pgsql-interfaces yourname@yourdomain

+ + + diff --git a/src/bin/pgaccess/doc/html/main.html b/src/bin/pgaccess/doc/html/main.html new file mode 100644 index 00000000000..2bddfd61d4a --- /dev/null +++ b/src/bin/pgaccess/doc/html/main.html @@ -0,0 +1,34 @@ + + + + + + + + +

+PgAccess +

+A free graphical database management tool for PostgreSQL. +PgAccess has been written by Constantin Teodorescu +using Visual Tcl, the best tool for developing Tcl/Tk applications I've +ever seen. +

Last version +
Last stable version is 0.98 , released on 29 August 1999. Read what's +new in 0.98. +

Portability issues +
PgAccess is available for every platform where PostgreSQL was ported +and where a Tcl/Tk package is available. PgAccess has been reported running +on : +
- Linux +
- FreeBSD +
- Solaris +
- HPUX +
- Irix +
- Windows 95,98,NT +

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 here. +

PgAccess is protected by the following copyright. + + diff --git a/src/bin/pgaccess/doc/html/mainwindow.gif b/src/bin/pgaccess/doc/html/mainwindow.gif new file mode 100644 index 00000000000..6a48792d194 Binary files /dev/null and b/src/bin/pgaccess/doc/html/mainwindow.gif differ diff --git a/src/bin/pgaccess/doc/html/newtable.gif b/src/bin/pgaccess/doc/html/newtable.gif new file mode 100644 index 00000000000..891d05698f9 Binary files /dev/null and b/src/bin/pgaccess/doc/html/newtable.gif differ diff --git a/src/bin/pgaccess/doc/html/newuser.gif b/src/bin/pgaccess/doc/html/newuser.gif new file mode 100644 index 00000000000..5c56c9ad299 Binary files /dev/null and b/src/bin/pgaccess/doc/html/newuser.gif differ diff --git a/src/bin/pgaccess/doc/html/old_index.html b/src/bin/pgaccess/doc/html/old_index.html new file mode 100644 index 00000000000..4bbf11fcf07 --- /dev/null +++ b/src/bin/pgaccess/doc/html/old_index.html @@ -0,0 +1,143 @@ + + + + + + PgAccess - a Tcl/Tk PostgreSQL interface + + + +

+PgAccess - a free database management tool for PostgreSQL

+ +
+
  • +Download the last version of PgAccess (press +shift and click this link) (tar.gz file)  or   this +one (zip file for Windows)
  • + +
    +


    Latest stable version of PgAccess is 0.97 , released 16 August 1999 +! +

    PgAccess 0.93 and higher will not work from the beginning +with PostgreSQL 6.3.x !! +
    Read here how to apply a +simple patch in order to make it work !

    + +
    + + + + + + + + + + + +
    NEWInternational version +(english, french, italian, romanian)
    NEWContext sensitive Help
    + +
    +

    Precompiled libpgtcl and libpq binaries and dll's for i386 are here +!!!

    + +

    +Installation problems

    + + + +

    +What does PgAccess now!

    +Here are some screenshots from PgAccess windows : Main +window , table builder , table(query) +view , visual query builder . +

    Tables +
    - opening multiple tables for viewing, max. n records (changed by preferences +menu) +
    - column resizing, dragging the vertical grid line (better in table +space rather than in the table header) +
    - text wrap in cells - layout saved for every table +
    - import/export to external files (SDF,CSV) +
    - filter capabilities (enter filter like (price>3.14) +
    - sort order capabilities (enter manually the sort field(s)) +
    - editing in place +
    - improved table generator assistant +
    - improved field editing +
    Queries +
    - define , edit and stores "user defined queries" +
    - store queries as views +
    - execution of queries with optional user input parameters ( select +* from invoices where year=[parameter "Year of selection"] ) +
    - viewing of select type queries result +
    - query deleting and renaming +
    - visual query builder with drag & drop capabilities. For any of +you who had installed the Tcl/Tk plugin for Netscape Navigator, you can +see it at work clicking here +
    Sequences +
    - defines sequences, delete them and inspect them +
    Functions +
    - define, inspect and delete functions in SQL, plpgsql and pgtcl languages +
    Reports +
    - design and display simple reports from tables +
    - fields and labels, font changing, style and size +
    - saves and loads report description from database +
    - show report previews, sample postscript output file +
    Forms +
    - open user defined forms +
    - form design module available +
    - query widget available, controls bound to query results +
    - click here for a description of forms and +how they can be used +
    Scripts +
    - define, modify and call user defined scripts +
    Users +
    - define and modify user information +

    Here is a special section concerning forms and +scripts . +

    This program is protected by the following copyright +

    If you have any comment, suggestion for improvements, please feel free +to e-mail to : teo@flex.ro +

    Mailing list for PgAccess Here +you will find how to subscribe to this mailing list. +

    +


    +

    +More information about libpgtcl - downloads

    +     Also, you will need the PostgreSQL to Tcl interface +library, lined as a Tcl/Tk 'load'-able module. It is called libpgtcl and +the source is located in the PostgreSQL directory /src/interfaces/libpgtcl. +Specifically, you will need a libpgtcl library that is 'load'-able from +Tcl/Tk.      This is technically different from +an ordinary PostgreSQL loadable object file, because libpgtcl is a collection +of object files. Under Linux, this is called libpgtcl.so. +

         One of the solutions is to remove from the +source the line containing load libpgtcl.so 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. +

         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 libpq and libpgtcl libraries. +

        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. +
      + + diff --git a/src/bin/pgaccess/doc/html/permissions.gif b/src/bin/pgaccess/doc/html/permissions.gif new file mode 100644 index 00000000000..06c43491e07 Binary files /dev/null and b/src/bin/pgaccess/doc/html/permissions.gif differ diff --git a/src/bin/pgaccess/doc/html/pg93patch.html b/src/bin/pgaccess/doc/html/pg93patch.html new file mode 100644 index 00000000000..4c77bfac61b --- /dev/null +++ b/src/bin/pgaccess/doc/html/pg93patch.html @@ -0,0 +1,25 @@ + + + + + + + + +

    +PgAccess 0.93 patch to make it work with PostgreSQL 6.3.x +

    + +


    PgAccess 0.93 is working fine with PostgreSQL 6.4.x due to some +changes in libpgtcl ! +

    There is a small patch that you have to make in order to make it work +with 6.3.x ! +

    Replace in procedure wpg_exec the following line: +

    set pgsql(errmsg) [pg_result $pgsql(res) -error] +

    with this one : +

    set pgsql(errmsg) "NO ERROR INFORMATION SUPPLIED" +

    And it will work fine! In some error cases, you will not get the appropriate +error message from libpgtcl. +

     Back + + diff --git a/src/bin/pgaccess/doc/html/pga-rad.html b/src/bin/pgaccess/doc/html/pga-rad.html new file mode 100644 index 00000000000..7564cf7b553 --- /dev/null +++ b/src/bin/pgaccess/doc/html/pga-rad.html @@ -0,0 +1,65 @@ + + + + + + + +

    +PgAccess - Scripts and Forms  +

    +Beginning with 0.70 version, I have introduced in PgAccess two new modules +for operating with scripts and forms. + +

       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. +
      +
       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. + +

       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 ! +

    +Forms

    +   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". +
       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  special +section concerning forms. +

    +Scripts

    +   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. +
       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 open_table +"Your sample table" and you'll see the result. +
       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 execute_script +"My own procedure library" or open a form with open_form +"Main window with menu buttons" , and so on. + +

    +


    +
    Remember : I'm waiting your messages at teo@flex.ro + +

    +


    + + diff --git a/src/bin/pgaccess/doc/html/qbtclet.html b/src/bin/pgaccess/doc/html/qbtclet.html new file mode 100644 index 00000000000..b990c0f15c3 --- /dev/null +++ b/src/bin/pgaccess/doc/html/qbtclet.html @@ -0,0 +1,45 @@ + + + Visual Query Builder in Tcl/Tk + +

    Visual Query Builder

    +
    +This visual query builder is included in +PgAccess, a visual interface to + PostgreSQL written entirely in +vTcl , (Visual Tcl). + + +

    + + + +

    + +
    + + +Visual Query Designer demo
    +Click here to download the source +created by Constantin Teodorescu with vTcl (visual Tcl), teo@flex.ro +
    +Facitilies
    + - drag and drop selection of fields
    + - drag and drop fields from a table to another do create links
    + - move table position by dragging
    + - point and click any link or table then press delete to delete them
    + - modify sort order by clicking on (unsorted)
    + - enter filter conditions as criteria (>2000 , ='item')
    + - easy panning of table and result panels
    + - show SQL command
    +
    +If you want to use it for your database, modify ql_read_struct in order to read + your table structure. +
    +Feel free to use, modify or copy this software for non-commercial purposes.
    +In any other case, please contact me. +
    +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. + + diff --git a/src/bin/pgaccess/doc/html/qbtclet.tcl b/src/bin/pgaccess/doc/html/qbtclet.tcl new file mode 100644 index 00000000000..9d086a33900 --- /dev/null +++ b/src/bin/pgaccess/doc/html/qbtclet.tcl @@ -0,0 +1,529 @@ +################################# +# GLOBAL VARIABLES +# +global qlvar; +global widget; + +################################# +# USER DEFINED PROCEDURES +# +proc init {argc argv} { +global qlvar +set qlvar(yoffs) 360 +set qlvar(xoffs) 50 +set qlvar(reswidth) 150 +} + +init $argc $argv + +proc main {argc argv} { + +} + +proc show_message {usrmsg} { +global msg +set msg $usrmsg +after 2000 {set msg {}} +} + +proc ql_delete_object {} { +global qlvar +# Checking if there +set obj [.c find withtag hili] +if {$obj==""} return +if {[ql_get_tag_info $obj link]=="s"} { +# if {[tk_messageBox -title WARNING -icon question -message "Remove link ?" -type yesno -default no]=="no"} return + show_message "Deleting the link from tables ..." + set linkid [ql_get_tag_info $obj lkid] + set qlvar(links) [lreplace $qlvar(links) $linkid $linkid] + .c delete links + ql_draw_links +} else { + set tablename [ql_get_tag_info $obj tab] + if {$tablename==""} return +# if {[tk_messageBox -title WARNING -icon question -message "Remove table $tablename from query ?" -type yesno -default no]=="no"} return + show_message "Deleting table from query ..." + for {set i [expr [llength $qlvar(restables)]-1]} {$i>=0} {incr i -1} { + if {$tablename==[lindex $qlvar(restables) $i]} { + set qlvar(resfields) [lreplace $qlvar(resfields) $i $i] + set qlvar(restables) [lreplace $qlvar(restables) $i $i] + set qlvar(rescriteria) [lreplace $qlvar(rescriteria) $i $i] + } + } + for {set i [expr [llength $qlvar(links)]-1]} {$i>=0} {incr i -1} { + set thelink [lindex $qlvar(links) $i] + if {($tablename==[lindex $thelink 0]) || ($tablename==[lindex $thelink 2])} { + set qlvar(links) [lreplace $qlvar(links) $i $i] + } + } + .c delete tab$tablename + .c delete links + ql_draw_links + ql_draw_res_panel +} +} + +proc ql_dragit {w x y} { +global draginfo +if {"$draginfo(obj)" != ""} { + set dx [expr $x - $draginfo(x)] + set dy [expr $y - $draginfo(y)] + if {$draginfo(is_a_table)} { + set taglist [.c gettags $draginfo(obj)] + set tabletag [lindex $taglist [lsearch -regexp $taglist "^tab"]] + $w move $tabletag $dx $dy + ql_draw_links + } else { + $w move $draginfo(obj) $dx $dy + } + set draginfo(x) $x + set draginfo(y) $y +} +} + +proc ql_dragstart {w x y} { +global draginfo +catch {unset draginfo} +set draginfo(obj) [$w find closest $x $y] +if {[ql_get_tag_info $draginfo(obj) r]=="ect"} { + # If it'a a rectangle, exit + set draginfo(obj) {} + return +} +. configure -cursor hand1 +.c raise $draginfo(obj) +set draginfo(table) 0 +if {[ql_get_tag_info $draginfo(obj) table]=="header"} { + set draginfo(is_a_table) 1 + .c itemconfigure [.c find withtag hili] -fill black + .c dtag [.c find withtag hili] hili + .c addtag hili withtag $draginfo(obj) + .c itemconfigure hili -fill blue +} else { + set draginfo(is_a_table) 0 +} +set draginfo(x) $x +set draginfo(y) $y +set draginfo(sx) $x +set draginfo(sy) $y +} + +proc ql_dragstop {x y} { +global draginfo qlvar +. configure -cursor top_left_arrow +set este {} +catch {set este $draginfo(obj)} +if {$este==""} return +# Re-establish the normal paint order so +# information won't be overlapped by table rectangles +# or link linkes +.c lower $draginfo(obj) +.c lower rect +.c lower links +set qlvar(panstarted) 0 +if {$draginfo(is_a_table)} { + set draginfo(obj) {} + .c delete links + ql_draw_links + return +} +.c move $draginfo(obj) [expr $draginfo(sx)-$x] [expr $draginfo(sy)-$y] +if {($y>$qlvar(yoffs)) && ($x>$qlvar(xoffs))} { + # Drop position : inside the result panel + # Compute the offset of the result panel due to panning + set resoffset [expr [lindex [.c bbox resmarker] 0]-$qlvar(xoffs)] + set newfld [.c itemcget $draginfo(obj) -text] + set tabtag [ql_get_tag_info $draginfo(obj) tab] + set col [expr int(($x-$qlvar(xoffs)-$resoffset)/$qlvar(reswidth))] + set qlvar(resfields) [linsert $qlvar(resfields) $col $newfld] + set qlvar(ressort) [linsert $qlvar(ressort) $col unsorted] + set qlvar(rescriteria) [linsert $qlvar(rescriteria) $col {}] + set qlvar(restables) [linsert $qlvar(restables) $col $tabtag] + ql_draw_res_panel +} else { + # Drop position : in the table panel + set droptarget [.c find overlapping $x $y $x $y] + set targettable {} + foreach item $droptarget { + set targettable [ql_get_tag_info $item tab] + set targetfield [ql_get_tag_info $item f-] + if {($targettable!="") && ($targetfield!="")} { + set droptarget $item + break + } + } + # check if target object isn't a rectangle + if {[ql_get_tag_info $droptarget rec]=="t"} {set targettable {}} + if {$targettable!=""} { + # Target has a table + # See about originate table + set sourcetable [ql_get_tag_info $draginfo(obj) tab] + if {$sourcetable!=""} { + # Source has also a tab .. tag + set sourcefield [ql_get_tag_info $draginfo(obj) f-] + if {$sourcetable!=$targettable} { + lappend qlvar(links) [list $sourcetable $sourcefield $targettable $targetfield $draginfo(obj) $droptarget] + ql_draw_links + } + } + } +} +# Erase information about onbject beeing dragged +set draginfo(obj) {} +} + +proc ql_draw_links {} { +global qlvar +.c delete links +set i 0 +foreach link $qlvar(links) { + # Compute the source and destination right edge + set sre [lindex [.c bbox tab[lindex $link 0]] 2] + set dre [lindex [.c bbox tab[lindex $link 2]] 2] + # Compute field bound boxes + set sbbox [.c bbox [lindex $link 4]] + set dbbox [.c bbox [lindex $link 5]] + # Compute the auxiliary lines + if {[lindex $sbbox 2] < [lindex $dbbox 0]} { + # Source object is on the left of target object + set x1 $sre + set y1 [expr ([lindex $sbbox 1]+[lindex $sbbox 3])/2] + .c create line $x1 $y1 [expr $x1+10] $y1 -tags [subst {links lkid$i}] -width 3 + set x2 [lindex $dbbox 0] + set y2 [expr ([lindex $dbbox 1]+[lindex $dbbox 3])/2] + .c create line [expr $x2-10] $y2 $x2 $y2 -tags {links} -width 3 + .c create line [expr $x1+10] $y1 [expr $x2-10] $y2 -tags [subst {links lkid$i}] -width 2 + } else { + # source object is on the right of target object + set x1 [lindex $sbbox 0] + set y1 [expr ([lindex $sbbox 1]+[lindex $sbbox 3])/2] + .c create line $x1 $y1 [expr $x1-10] $y1 -tags [subst {links lkid$i}] -width 3 + set x2 $dre + set y2 [expr ([lindex $dbbox 1]+[lindex $dbbox 3])/2] + .c create line $x2 $y2 [expr $x2+10] $y2 -width 3 -tags [subst {links lkid$i}] + .c create line [expr $x1-10] $y1 [expr $x2+10] $y2 -tags [subst {links lkid$i}] -width 2 + } + incr i +} +.c lower links +.c bind links {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 {ql_dragstart %W %x %y} +.c bind mov {ql_dragit %W %x %y} +bind . {ql_dragstop %x %y} +bind . {qlc_click %x %y %W} +bind . {ql_pan %x %y} +bind . {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 {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 {.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 {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 { + ql_pan %x %y + } + bind $base { + qlc_click %x %y %W + } + bind $base { + ql_dragstop %x %y + } + bind $base { + ql_delete_object + } + canvas $base.c \ + -background #fefefe -borderwidth 2 -height 207 -relief ridge \ + -takefocus 0 -width 295 + label $base.msg -textvar msg -borderwidth 1 -relief sunken + button $base.b2 \ + -borderwidth 1 -command ql_draw_lizzard \ + -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -padx 9 \ + -pady 3 -text {Paint demo tables} + button $base.showbtn \ + -borderwidth 1 -command ql_show_sql \ + -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-* -padx 9 \ + -pady 3 -text {Show SQL} + ################### + # SETTING GEOMETRY + ################### + place $base.c \ + -x 5 -y 30 -width 578 -height 425 -anchor nw -bordermode ignore + place $base.b2 \ + -x 5 -y 5 -height 26 -anchor nw -bordermode ignore + place $base.showbtn \ + -x 130 -y 5 -height 26 -anchor nw -bordermode ignore + place $base.msg \ + -x 5 -y 460 -width 578 -anchor nw + +main $argc $argv diff --git a/src/bin/pgaccess/doc/html/screenshots.html b/src/bin/pgaccess/doc/html/screenshots.html new file mode 100644 index 00000000000..0cf3ac6b65b --- /dev/null +++ b/src/bin/pgaccess/doc/html/screenshots.html @@ -0,0 +1,43 @@ + + + + + + + + +

    +Image gallery +

    + + + + + diff --git a/src/bin/pgaccess/doc/html/specialchars.html b/src/bin/pgaccess/doc/html/specialchars.html new file mode 100644 index 00000000000..b6b82f2336a --- /dev/null +++ b/src/bin/pgaccess/doc/html/specialchars.html @@ -0,0 +1,47 @@ + + + + Special locale characters + + + + +

    Special locale characters and PgAccess +

    + +

    The problem is related with some special characters used in different +countries because PgAccess did not use fonts with `-ISO8859-1' encoding +--

    + +

    The sollution was proposed by H.P.Heidinger ( hph@hphbbs.ruhr.de) and +it's very simple.

    + +

    If you look into PgAccess, you will find fonts declared as follows :

    + +

    $ grep -e '-font' -i pgaccess.tcl
    +-font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* \
    +-font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* \
    +-font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* \
    +-font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* \

    + +

    It should be something like: -adobe-helvetica-medium-r-normal-*-*-120-*-*-*-*-iso8859-1

    + +

    You can achieve this by running the following script :

    + +

    #!/bin/sh
    +cp pgaccess.tcl pgaccess.tcl-org
    +cat pgaccess.tcl |\
    +sed -e's/\-\*\-\*\ /\-iso8859\-1\ /g' |\
    +sed -e's/\-\*\-\*\}/\-iso8859\-1}/g' |\
    +sed -e's/\-\*\-\*\]/\-iso8859\-1]/g' |\
    +sed -e's/\-\*\-\*$/\-iso8859\-1/g' |\
    +sed -e's/\-Clean\-/\-Fixed\-/g' |\
    +sed -e's/clean/fixed/g' >pgaccess.iso
    +mv pgaccess.iso pgaccess.tcl
    +chmod +x pgaccess.tcl

    + +

    The final version of PgAccess (1.0) will let the user decide what fonts +will be used through a "preferences" dialog window.

    + + + diff --git a/src/bin/pgaccess/doc/html/todo.html b/src/bin/pgaccess/doc/html/todo.html new file mode 100644 index 00000000000..f19b61ab90c --- /dev/null +++ b/src/bin/pgaccess/doc/html/todo.html @@ -0,0 +1,11 @@ + + +

    ToDo List


    + - Finish the report generator module
    + - Enhance the form designer
    + - Enhance the scripts module
    + - Translations in other languages
    +
    +Please send any suggestions by mail to Constantin Teodorescu. + + diff --git a/src/bin/pgaccess/doc/html/tutorial/addref.jpg b/src/bin/pgaccess/doc/html/tutorial/addref.jpg new file mode 100644 index 00000000000..ee0525d15ce Binary files /dev/null and b/src/bin/pgaccess/doc/html/tutorial/addref.jpg differ diff --git a/src/bin/pgaccess/doc/html/tutorial/altern_q.jpg b/src/bin/pgaccess/doc/html/tutorial/altern_q.jpg new file mode 100644 index 00000000000..3fb02aebbd7 Binary files /dev/null and b/src/bin/pgaccess/doc/html/tutorial/altern_q.jpg differ diff --git a/src/bin/pgaccess/doc/html/tutorial/altern_v.jpg b/src/bin/pgaccess/doc/html/tutorial/altern_v.jpg new file mode 100644 index 00000000000..52cbbb07720 Binary files /dev/null and b/src/bin/pgaccess/doc/html/tutorial/altern_v.jpg differ diff --git a/src/bin/pgaccess/doc/html/tutorial/copyright.html b/src/bin/pgaccess/doc/html/tutorial/copyright.html new file mode 100644 index 00000000000..22eada2fc43 Binary files /dev/null and b/src/bin/pgaccess/doc/html/tutorial/copyright.html differ diff --git a/src/bin/pgaccess/doc/html/tutorial/index.html b/src/bin/pgaccess/doc/html/tutorial/index.html new file mode 100644 index 00000000000..a63f1a89fbf --- /dev/null +++ b/src/bin/pgaccess/doc/html/tutorial/index.html @@ -0,0 +1,33 @@ + +PgAccess - a Tcl/Tk interface for PostgreSQL + +

    PgAccess - a Tcl/Tk interface for PostgreSQL

    +
    + +
    • Introduction + + +
    • Getting Started + + +
    • Common Initial Problems + +
    • PgAccess tutorial + + diff --git a/src/bin/pgaccess/doc/html/tutorial/intro.html b/src/bin/pgaccess/doc/html/tutorial/intro.html new file mode 100644 index 00000000000..2f056599edf --- /dev/null +++ b/src/bin/pgaccess/doc/html/tutorial/intro.html @@ -0,0 +1,39 @@ +PgAccess - Introduction + +

      PgAccess - Introduction

      +

      What is PgAccess?

      +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.

      +Obviously, you must have PostgreSQL installed and running, and Tcl/Tk on +your system before you can use PgAccess.

      +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.

      +If you are not familiar with how open source software can be altered and +redistributed, please read this.

      +

      How to get help with PgAccess

      +The mailing list for PgAccess is: pgsql-interfaces@postgresql.org

      +If you have any questions regarding PgAccess you should subscribe to this +list in the following way:

      +First subscribe to the list by sending an email message to:

      +pgsql-interfaces-request@postgresql.org

      +Send a single line in the body of the message as follows:

      +subscribe

      +In a short time you should receive a message beginning like this:

      +Welcome to the pgsql-interfaces mailing list!
      +...

      +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.

      +You may also email Constantin Teodorescu +directly, although writing to a mailing list with many correspondents will often +produce a quicker answer.

      +Back to index + diff --git a/src/bin/pgaccess/doc/html/tutorial/irix.html b/src/bin/pgaccess/doc/html/tutorial/irix.html new file mode 100644 index 00000000000..7d472aa9cdc --- /dev/null +++ b/src/bin/pgaccess/doc/html/tutorial/irix.html @@ -0,0 +1,133 @@ + + + + PgAccess on Irix + + + + +

      INSTALLING PgAccess UNDER IRIX 5.3. +

      + +

      This HOWO-TO make PgAccess working under Irix +is written by Stuart Rison

      + +

      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.).

      + +

      1) Requirements:

      + +
        +

        You will need:

        + +
          +
        • postgreSQL source (http://www.postgresql.org)
        • + +
        • tcl8.0 source (http://www.tclconsortium.org/)
        • + +
        • tk8.0 source (http://www.tclconsortium.org/)
        • + +
        • pgaccess source (http://www.flex.ro/pgaccess)
        • +
        +
      + +

      2) Installation:

      + +

      a) tcl/tk:

      + +
        +

        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:

        + +

        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.

        + +

        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.

        +
      + +

      b) postgreSQL:

      + +
        +

        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.

        + +

        Configure using ./configure with the following switches: ./configure +--with-includes=/usr/local/include

        + +

        --with-libraries=/usr/local/lib --with-tcl [this and previous line as +one]

        + +

        Then make, make install as usual

        +
      + +

      c) Compiling libpgtcl:

      + +
        +

        The source for libpgtcl is in $postgreSQL_directory/src/interfaces/libpgsql.

        + +

        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:

        + +

        before:

        + +

        # Shared library stuff

        + +

        install-shlib-dep := shlib :=

        + +

        after:

        + +

        # Shared library stuff

        + +

        install-shlib-dep := install-shlib shlib := libpgtcl.so.1

        + +

        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/.

        +
      + +

      d) running pgaccess:

      + +
        +

        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:

        + +

        wish -f $pgaccess_dir/pgaccess.tcl [postgreSQL_database_name]

        +
      + +

      e) et voila!

      + +

      3) Concluding remarks:

      + +
        +

        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.

        + +

        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!

        +
      + +

      Good luck

      + +

      Stuart Rison LICR University College London London W1P 8BT
      +stuart@ludwig.ucl.ac.uk

      +Back to index + + diff --git a/src/bin/pgaccess/doc/html/tutorial/newref.txt b/src/bin/pgaccess/doc/html/tutorial/newref.txt new file mode 100644 index 00000000000..ef2185f4b78 --- /dev/null +++ b/src/bin/pgaccess/doc/html/tutorial/newref.txt @@ -0,0 +1 @@ +Cassileth, BR~Unorthodox Cancer Medicine~Cancer Investigation~~1986~4~6~591-598 diff --git a/src/bin/pgaccess/doc/html/tutorial/newtable.jpg b/src/bin/pgaccess/doc/html/tutorial/newtable.jpg new file mode 100644 index 00000000000..06af40e7410 Binary files /dev/null and b/src/bin/pgaccess/doc/html/tutorial/newtable.jpg differ diff --git a/src/bin/pgaccess/doc/html/tutorial/newtable.tga b/src/bin/pgaccess/doc/html/tutorial/newtable.tga new file mode 100644 index 00000000000..6104f58bd85 Binary files /dev/null and b/src/bin/pgaccess/doc/html/tutorial/newtable.tga differ diff --git a/src/bin/pgaccess/doc/html/tutorial/problems.html b/src/bin/pgaccess/doc/html/tutorial/problems.html new file mode 100644 index 00000000000..2238fb617d8 --- /dev/null +++ b/src/bin/pgaccess/doc/html/tutorial/problems.html @@ -0,0 +1,83 @@ +PgAccess - Common Problems + +

      Common Problems with PgAccess

      +

      Connection failure

      +One of the most common initial problems is the message:

      +Error connecting database
      +Connection to database failed
      +connectDB() failed: Is the
      +postmaster running and
      +accepting TCP/IP (with -i)
      +connections at 'localhost' on
      +port '5432'?

      +This usually occurs because the "postmaster" (the postgreSQL backend) was not +started with the -i option. Usually just adding -i to +the command line that starts the postmaster and restarting will fix this.

      +If you have installed the prewritten script to start postgreSQL +automatically, this option is (currently) commented out:

      +# PGOPTS="-i"

      +just remove the hash and space and comment out the "blank" option above:

      +PGOPTS=""

      +

      User not defined

      +Initially, postgreSQL only has one user, postgres, and any +other user who starts up PgAccess will get the message:

      +Error connecting database
      +Connection to database failed
      +FATAL 1: SetUserId: user
      +'jim' is not in 'pg_shadow'

      +See User Administration in the PgAccess tutorial for a description +of how to create users.

      +

      libpgtcl not found

      +PgAccess requires a library of functions named libpgtcl. 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 libpgtcl.so (perhaps with a number appended - or +libpgtcl.dll on Windows systems) on your +system. If not, you will have to download and perhaps compile this library.

      +ftp://ftp.flex.ro/pub/pgaccess

      +is one place that you can download precompiled libpgtcl libraries for +PgAccess.

      + +

      Locale specific characters

      +This problem occurs with some special characters used in different +countries because PgAccess did not use fonts with `-ISO8859-1' encoding.

      +One solution was proposed by H.P.Heidinger ( hph@hphbbs.ruhr.de) and +is very simple.

      +If you look in the file pgaccess.tcl, you will find the fonts declared in +this manner:

      +$ grep -e '-font' -i pgaccess.tcl
      +-font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* \
      +...

      +The font declarations should be altered to:

      +-font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-iso8859-1
      +...

      +That is, inserting an asterisk between the first pair of hyphens, and changing +the final two asterisks to iso8859 and 1 +respectively.

      +You can alter the source code by running the following script : +

      #!/bin/sh
      +cp pgaccess.tcl pgaccess.tcl-org
      +cat pgaccess.tcl |\
      +sed -e's/\-\*\-\*\ /\-iso8859\-1\ /g' |\
      +sed -e's/\-\*\-\*\}/\-iso8859\-1}/g' |\
      +sed -e's/\-\*\-\*\]/\-iso8859\-1]/g' |\
      +sed -e's/\-\*\-\*$/\-iso8859\-1/g' |\
      +sed -e's/\-Clean\-/\-Fixed\-/g' |\
      +sed -e's/clean/fixed/g' >pgaccess.iso
      +mv pgaccess.iso pgaccess.tcl
      +chmod +x pgaccess.tcl

      +The final version of PgAccess (1.0) will let the user decide what fonts +will be used through a "preferences" dialog window.

      +
      +

      Problem with PostgreSQL 6.3.x

      +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.

      +In the procedure wpg_exec change the following line:

      +set pgsql(errmsg) [pg_result $pgsql(res) -error]

      +to this:

      +set pgsql(errmsg) "NO ERROR INFORMATION SUPPLIED"

      +and the program will work. The only disadvantage is that with some error +conditions, you will not get the appropriate error message from libpgtcl.

      +Back to index + diff --git a/src/bin/pgaccess/doc/html/tutorial/screen1.jpg b/src/bin/pgaccess/doc/html/tutorial/screen1.jpg new file mode 100644 index 00000000000..572b5077d10 Binary files /dev/null and b/src/bin/pgaccess/doc/html/tutorial/screen1.jpg differ diff --git a/src/bin/pgaccess/doc/html/tutorial/sel_tbl.jpg b/src/bin/pgaccess/doc/html/tutorial/sel_tbl.jpg new file mode 100644 index 00000000000..548dbeead37 Binary files /dev/null and b/src/bin/pgaccess/doc/html/tutorial/sel_tbl.jpg differ diff --git a/src/bin/pgaccess/doc/html/tutorial/start.html b/src/bin/pgaccess/doc/html/tutorial/start.html new file mode 100644 index 00000000000..8ad8c2ae18f --- /dev/null +++ b/src/bin/pgaccess/doc/html/tutorial/start.html @@ -0,0 +1,74 @@ +PgAccess - Getting Started + +

      PgAccess - Getting Started

      +

      How to get PgAccess

      +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:

      +http://www.flex.ro

      +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).

      +

      How to uncompress PgAccess

      +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.

      +

      UNIX (Linux, BSD, IRIX, Solaris, etc.)

      +The files will be compressed using "gzip" and packaged using "tar", and have +filenames like this:

      +pgaccess-n.nn.tar.gz

      +Note that "n.nn" will be the version number in an actual file.

      +First decide where you want to have the program. A typical location on UNIX +systems is /usr/local/src/<name>, where <name> is the name of +the program. To use this location, download or move the "tar.gz" file to the +directory /usr/local/src. Change to that directory, and +uncompress the file with the command:

      +tar -zxvf pgaccess-n.nn.tar.gz

      +You should see the files listed as they are uncompressed and placed in the new +directory, and now have a directory named:

      +/usr/local/src/pgaccess

      +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. +

      Windows

      +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.

      +

      Putting PgAccess where it will be found

      +

      UNIX

      +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:

      +echo $PATH
      +/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin:/usr/local/bin:./:/usr/local/pgsql/bin +

      +Usually the directory /usr/local/bin will be in your PATH, and that +is a fairly common place to put programs like PgAccess. Other common +directories in the PATH are /usr/bin and /usr/sbin. +Simply move the file "pgaccess.tcl" to the directory where you want it.

      +

      Windows

      +You will usually link PgAccess to an icon, so just specify the full path to the +program when you create the icon. +

      Starting PgAccess

      +The easiest way to start PgAccess is to simply invoke the program by name:

      +pgaccess.tcl

      +If the program has been placed in a directory listed in the PATH, the PgAccess +window should appear.

      +

      Starting from a menu

      +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 +/etc/X11/wmconfig with the following contents:

      +pgaccess name "PgAccess"
      +pgaccess description "postgreSQL frontend"
      +pgaccess mini-icon "mini-pgaccess.xpm"
      +pgaccess group "Applications"
      +pgaccess exec "pgaccess.tcl &"

      +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 /usr/share/icons/mini 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.

      +Back to index + diff --git a/src/bin/pgaccess/doc/html/tutorial/tut.html b/src/bin/pgaccess/doc/html/tutorial/tut.html new file mode 100644 index 00000000000..e5387e618df --- /dev/null +++ b/src/bin/pgaccess/doc/html/tutorial/tut.html @@ -0,0 +1,50 @@ +PgAccess - Tutorial + +

      PgAccess - Tutorial

      +

      User Administration

      +The procedure for setting up postgreSQL usually results in a single user +named postgres. In order for anyone else to use postgreSQL, +users must be added. The program createuser accomplishes this. +First become the PostgreSQL administrator (usually postgres):

      +su postgres

      +Then create a new user:

      +createuser jim
      +Enter user's postgres ID or RETURN to use unix user ID: 500 ->
      +Is user "jim" allowed to create databases (y/n) y
      +Is user "jim" a superuser? (y/n) n
      +createuser: jim was successfully added

      +You can use either the UNIX user ID or the postgres ID to identify users. See +the postgreSQL documentation in the "admin" section for a fuller +account of users and groups.

      +To remove users, use the destroyuser command in the same way.

      + +

      Basic use of PgAccess

      +

      Creating a database

      +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.

      +Press the New 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 <username>, your +username.

      +Assume that you want to create a table with entries describing bibliographic +references in the field of chemistry. Choose a table name, such as +chemref that will be easy to recall and find in a list. Enter the +table name in the first input field.

      +When you already have tables in a database, you can use the Inherits +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.

      +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 int2 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 varchar type, you would have to specify how many +characters would be allowed in the field.

      +As you enter each field, click the Add field button to add it to the +list at the right side of the window. You can change the position of fields +using the Move field up and Move field down buttons, or delete +a field if you decide it isn't what you wanted. When you are finished +specifying fields, press the Create table button.

      + +Back to index + diff --git a/src/bin/pgaccess/doc/html/tutorial/tut_edit.html b/src/bin/pgaccess/doc/html/tutorial/tut_edit.html new file mode 100644 index 00000000000..8282fb9a422 --- /dev/null +++ b/src/bin/pgaccess/doc/html/tutorial/tut_edit.html @@ -0,0 +1,39 @@ +PgAccess Tutorial + +

      PgAccess Tutorial - Editing a table

      + +

      Adding records

      +Once you have a table, you can begin to add entries to it. In the main +PgAccess window, when you click the Tables 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 Open button will open that table in another +window, as shown below.

      +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?

      +This is best handled using the SQL COPY 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 delimiter 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 newref.txt that starts like this:

      +Cassileth, BR~Unorthodox Cancer Medicine~Cancer Investigation~~1986~4~6~591-598 +
      ...

      +Notice that there are two consecutive tildes to allow for the fact that this +particular entry doesn't have anything in the Editor field. +You can then perform a Query as follows:

      +COPY psyref FROM '/home/jim/newref.txt' USING DELIMITERS +'~';

      +This will read the records from newref.txt and insert them into the +table psyref. See the PostgreSQL documentation under the headings +
      Tutorial|The Query Language|Populating a Class with Instances

      + +Back to index + diff --git a/src/bin/pgaccess/doc/html/tutorial/tut_new.html b/src/bin/pgaccess/doc/html/tutorial/tut_new.html new file mode 100644 index 00000000000..8fca641e6c0 --- /dev/null +++ b/src/bin/pgaccess/doc/html/tutorial/tut_new.html @@ -0,0 +1,36 @@ +PgAccess Tutorial + +

      PgAccess Tutorial - Creating a table

      + +

      Creating a table

      +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 objects that are stored in your database, which should be +empty at the moment.

      +Click the Tables and New 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 +<username>, your username.

      +Assume that you want to create a table with entries describing bibliographic +references in the field of psychology. Choose a table name, such as +psyref that will be easy to recall and find in a list. Enter the +table name in the first input field.

      +When you already have tables in a database, you can use the Inherits +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.

      +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 int2 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 varchar type, you would have to specify how many +characters would be allowed in the field.

      +As you enter each field, click the Add field button to add it to the +list at the right side of the window. You can change the position of fields +using the Move field up and Move field down buttons, or delete +a field if you decide it isn't what you wanted. When you are finished +specifying fields, press the Create table button.

      + +Back to index + diff --git a/src/bin/pgaccess/doc/html/tutorial/tut_sel1.html b/src/bin/pgaccess/doc/html/tutorial/tut_sel1.html new file mode 100644 index 00000000000..fdadbe8e6d3 --- /dev/null +++ b/src/bin/pgaccess/doc/html/tutorial/tut_sel1.html @@ -0,0 +1,36 @@ +PgAccess Tutorial + +

      PgAccess Tutorial - SELECT

      + +

      What is a query?

      +Query 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 asking. +As we saw in the previous section, a query can simply copy +records from an ASCII file to a table.

      +The PostgreSQL documentation has a complete list of queries that can be +used. We'll start with the common task of selecting records with certain +characteristics.

      +

      Selecting records

      + +Suppose that I want to know all of the references in the sample table +psyref for which the word "alternative" appeared in the title.

      +By clicking Query, then New, a Query builder window will +appear. Clicking in the area below the buttons will allow the user to enter an +SQL query. The specification of the query must be exact or +PostgreSQL will return an error message.

      +The query shown will SELECT those records from psyref +that contain the word "alternative" anywhere in the title field. The +'*' indicates that all of the fields are to be returned. You might only want to +return, for instance, the author field if you were only interested in +which authors had used that word in the title of their work.

      +At the right is the record that fulfils these conditions, displayed in the +Table viewer. If you wanted to save this query for use again, +clicking the Save query definition button will do so. You will then +see altern listed under Queries when you return to the main +window. By clicking the Save this query as a view tickbox in the +Query builder, the result of your query will be saved as a +View which you can access from Views in the main window. +Click the Close button to leave the Query builder.

      +Back to index + diff --git a/src/bin/pgaccess/doc/html/tutorial/tut_user.html b/src/bin/pgaccess/doc/html/tutorial/tut_user.html new file mode 100644 index 00000000000..c4a6f09fbb3 --- /dev/null +++ b/src/bin/pgaccess/doc/html/tutorial/tut_user.html @@ -0,0 +1,28 @@ +PgAccess Tutorial + +

      PgAccess Tutorial - User Administration

      +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. +

      Creating users

      +The procedure for setting up postgreSQL usually results in a single user +named postgres. In order for anyone else to use postgreSQL, +users must be added. The program createuser accomplishes this. +First become the PostgreSQL administrator (usually postgres):

      +su postgres

      +Then create a new user:

      +createuser jim
      +Enter user's postgres ID or RETURN to use unix user ID: 500 ->
      +Is user "jim" allowed to create databases (y/n) y
      +Is user "jim" a superuser? (y/n) y
      +createuser: jim was successfully added

      +You can use either the UNIX user ID or the postgres ID to identify users. See +the postgreSQL documentation in the "admin" section for a fuller +account of users and groups.

      +The reason for using the command line to create the first user (other than +postgres) is that postgres may not have X-Window permission. +You can also create users using PgAccess if you are created as a +superuser as shown in the example above.

      +

      Removing users

      +To remove users, use the destroyuser command in the same way.

      +Back to index + diff --git a/src/bin/pgaccess/doc/html/vdesigner.gif b/src/bin/pgaccess/doc/html/vdesigner.gif new file mode 100644 index 00000000000..71349e6daf4 Binary files /dev/null and b/src/bin/pgaccess/doc/html/vdesigner.gif differ diff --git a/src/bin/pgaccess/doc/html/whatsnew.html b/src/bin/pgaccess/doc/html/whatsnew.html new file mode 100644 index 00000000000..f2faede0153 --- /dev/null +++ b/src/bin/pgaccess/doc/html/whatsnew.html @@ -0,0 +1,50 @@ + + + + + + + +29 August 1999 - PgAccess 0.98 has been released! +

        +
      • +international version (romanian, french, italian translations available) +in separate files (japanese translation now possible)
      • + +
      • +context sensitive help, complete help for SQL commands
      • + +
      • +geometry changes for many forms
      • + +
      • +form designer enhancements (widget icons , new attribute window style, +form startup script)
      • + +
      • +ability to inspect PostgreSQL system tables (preferences)
      • + +
      • +enhanced table design window, table permissions
      • + +
      • +distribution archive changes
      • + +
      • +unified internal global variables
      • + +
      • +unified internal window naming conventions
      • + +
      • +usage of Tcl namespaces for all modules
      • + +
      • +PgAccess developer API
      • + +
      • +web site enhancements
      • +
      + + + diff --git a/src/bin/pgaccess/doc/html/win32.html b/src/bin/pgaccess/doc/html/win32.html new file mode 100644 index 00000000000..368eb9990eb --- /dev/null +++ b/src/bin/pgaccess/doc/html/win32.html @@ -0,0 +1,45 @@ + + + + + + + + +

      +PgAccess on Win32

      + +
      In order to run PgAccess on a Win32 workstation you should follow the +following steps: +
        +
      1. +download and install a Tcl/Tk package from Scriptics +(8.0.x or 8.1.x)
      2. + +
      3. +install PgAccess package
      4. + +
      5. +check the Tcl/Tk version that you have
      6. + +
      7. +check the PostgreSQL version installed on your database server machine
      8. + +
      9. +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
      10. + +
      11. +check if your win32 workstation is able to see your database server (ping +yourdatabaseserver)
      12. + +
      13. +ask your database administrator to verify if your win32 workstation has +access rights to the database (pg_hba.conf)
      14. +
      + +


      You should be able to run PgAccess. +
        + + diff --git a/src/bin/pgaccess/images/icon_button.gif b/src/bin/pgaccess/images/icon_button.gif new file mode 100644 index 00000000000..df705919211 Binary files /dev/null and b/src/bin/pgaccess/images/icon_button.gif differ diff --git a/src/bin/pgaccess/images/icon_checkbutton.gif b/src/bin/pgaccess/images/icon_checkbutton.gif new file mode 100644 index 00000000000..ddfe64ca8b4 Binary files /dev/null and b/src/bin/pgaccess/images/icon_checkbutton.gif differ diff --git a/src/bin/pgaccess/images/icon_entry.gif b/src/bin/pgaccess/images/icon_entry.gif new file mode 100644 index 00000000000..750d1ff5e43 Binary files /dev/null and b/src/bin/pgaccess/images/icon_entry.gif differ diff --git a/src/bin/pgaccess/images/icon_frame.gif b/src/bin/pgaccess/images/icon_frame.gif new file mode 100644 index 00000000000..8541cbeab8d Binary files /dev/null and b/src/bin/pgaccess/images/icon_frame.gif differ diff --git a/src/bin/pgaccess/images/icon_label.gif b/src/bin/pgaccess/images/icon_label.gif new file mode 100644 index 00000000000..d60681690ce Binary files /dev/null and b/src/bin/pgaccess/images/icon_label.gif differ diff --git a/src/bin/pgaccess/images/icon_listbox.gif b/src/bin/pgaccess/images/icon_listbox.gif new file mode 100644 index 00000000000..c485e9be406 Binary files /dev/null and b/src/bin/pgaccess/images/icon_listbox.gif differ diff --git a/src/bin/pgaccess/images/icon_query.gif b/src/bin/pgaccess/images/icon_query.gif new file mode 100644 index 00000000000..ced0ef26a54 Binary files /dev/null and b/src/bin/pgaccess/images/icon_query.gif differ diff --git a/src/bin/pgaccess/images/icon_radiobutton.gif b/src/bin/pgaccess/images/icon_radiobutton.gif new file mode 100644 index 00000000000..9803df6729c Binary files /dev/null and b/src/bin/pgaccess/images/icon_radiobutton.gif differ diff --git a/src/bin/pgaccess/images/icon_text.gif b/src/bin/pgaccess/images/icon_text.gif new file mode 100644 index 00000000000..49d193c2796 Binary files /dev/null and b/src/bin/pgaccess/images/icon_text.gif differ diff --git a/src/bin/pgaccess/lib/languages/francais b/src/bin/pgaccess/lib/languages/francais new file mode 100644 index 00000000000..62dc80bb42c --- /dev/null +++ b/src/bin/pgaccess/lib/languages/francais @@ -0,0 +1,525 @@ +array set Messages { + +"Label" "Etiquette" + +"Save schema" "Sauver schémas" + +"Is unique ?" "Est unique ?" + +"Report builder" "Constructeur d'états" + +"Criteria" "Critčre" + +"FATAL ERROR upgrading PgAccess table" "ERREUR FATALE en actualisant la table PgAccess" + +"Save this query as a view" "Sauver cette requęte comme vue ?" + +"Page header" "En-tęte de page" + +"Query name" "Nom de requęte" + +"Please select an object first!" "Selectionnez un objet d'abord" + +"Fields :" "Le champs de index" + +"Name" "Nom" + +"File name" "Nom du fichier" + +"Detail record" "Detail d'enregistrement" + +"Auto-load the last opened database at startup" "Chargement automatique de la base au démarrage" + +"Maxvalue" "Valeur maximale" + +"Start value" "Valeur de début" + +"Report fields" "Champs de l'état" + +"Test form" "Tester formulaire" + +"Error trying to connect to database '%s' on host %s \n\nPostgreSQL error message:%s" "Erreur de liaison ŕ la base de données '%s' pour machine %s \n\nMessage d'erreur PostgreSQL :%s" + +"No field type ?" "Type champ inexistant ?" + +"User without name?" "Cette utilisateur a-t-il un nom?" + +"You have to supply a name for this schema!" "Vous devez fournir un nom pour ce schéma !" + +"Last value" "Derničre valeur" + +"Preferences" "Préférences" + +"View '%s' already exists!\nOverwrite ?" "La vue '%s' existe déjŕ!\n Ecraser ?" + +"You have to select an index!" "Vous devez selectionner un index!" + +"Field type" "Type de champ" + +"Script name" "Nom du script" + +"Reload" "Valider" + +"Remove table %s from query?" "Eliminer table %s de la requęte ?" + +"SQL window" "Fenętre SQL" + +"Allow user to create other users" "Peut créer d'autres utilisateurs" + +"Delete current record ?" "Détruire enregistrement courant ?" + +"List box" "Liste" + +"Save to query builder" "Sauver le constructeur de requętes" + +"fixed width" "largeur de police fixe" + +"Scripts" "Scripts" + +"Yes" "Oui" + +"Add label" "Ajouter étiquette" + +"Sequence created!" "Le séquence avait été créée" + +"Field information" "Information de champ" + +"Design" "Editer" + +"Field" "Champ" + +"You have to supply an external file name!" "Vous devez fournir un nom du fichier" + +"Increment" "Incrément" + +"No" "Non" + +"Form design" "Création du formulaire" + +"You must supply a return type!" "Vous devez fournir un type de retour" + +"Remove field from result ?" "Eliminer champ du résultat ?" + +"There is another object (a %s) with the same name.\nPlease change it!" "Il y a un autre objet (%s) avec le męme nom.\nChangez le SVP!" + +"This query has no commands?" "Cette requęte n'a pas de définition?" + +"Execute query" "Execute requęte" + +"field cannot be null" "champ ne peut ętre vide" + +"Help" "Aide" + +"Rename column" "Renomme champ" + +"Database" "Base de données" + +"Information" "Information" + +"Close" "Fermer" + +"Command" "Commande" + +"Table" "Table" + +"verify password" "encore un fois" + +"Vacuum" "Vider" + +"Default value" "Valeur par defaut" + +"Import" "Importer" + +"Delete index" "Détruire index" + +"Move up" "Monter" + +"index properties" "Propriétés d'index" + +"check" "vérifier" + +"Create new table" "Création de nouvelle table" + +"Visual query designer" "Créateur visuel de requętes" + +"Delete all" "Détruire tous" + +"You are going to delete\n\n %s \n\nProceed?" "Vous allez détruire\n\n %s \n\nD'accord?" + +"Schema name" "Nom de schéma" + +"Error executing query" "Erreur en exécutant la requęte" + +"Report name" "Nom de l'état" + +"Add field" "Ajout champ" + +"Field name" "Nom de champ" + +"FATAL ERROR searching for PgAccess system tables" "ERREUR FATALE en cherchant le systčme de tables PgAccess" + +"A big number of rows displayed in table view will take a lot of memory!" "L'affichage d'un grand nombre de colonnes prend beaucoup de mémoire" + +"Preview" "Pré-visualisation" + +"Users" "Utilisateurs" + +"Owner" "Auteur" + +"Form's window internal name" "Le nom interne de la fenętre de formulaire" + +"Sort field" "Trier champs" + +"New name is the same as the old one!" "Le nouveau nom est le męme que l'ancien" + +"Warning" "Avertissement" + +"Suggestions at" "Suggestions ŕ" + +"Functions" "Fonctions" + +"Schema" "Schéma" + +"Open" "Ouvrir" + +"size" "taille" + +"Delete" "Détruire" + +"Returns" "Retours" + +"Define new user" "Définir nouvel utilisateur" + +"Move down" "Descendre" + +"Design script" "Script de création" + +"Check box" "Case ŕ cocher" + +"FINAL WARNING" "DERNIER AVERTISSEMENT" + +"Add table" "Ajouter table" + +"Table viewer font" "Police de visualisateur de tables" + +"The field type is not specified!" "Le type de champ n'est pas spécifié" + +"Close test form" "Fermer test du formulaire" + +"Export table" "Exporter" + +"Add new index" "Ajout nouvel index" + +"Left" "Gauche" + +"Field delimiter" "Séparateur de champs" + +"Add formula" "Ajouter formule" + +"Open database" "Ouvre la base de données" + +"Return" "Retour" + +"Changed fonts may appear in the next working session!" "Les nouvelles polices apparaîtront ŕ la prochaine session" + +"Error" "Erreur" + +"Enter a field name" "Entrez un nom de champ !" + +"field name" "Nom de champ" + +"Forms" "Formulaires" + +"Cannot add column" "Ne peut ajouter de colonne" + +"Clean" "Nettoyer" + +"Delete all objects ?" "Détruire tous les objets" + +"Preferred language" "Langage préféré" + +"Execute SQL" "Exécute SQL" + +"Sequences" "Séquences" + +"Button" "Bouton" + +"Language" "Langage" + +"Query '%s' was not found!" "La requęte '%s' n'a pas été trouvée" + +"Object" "Objet" + +"Font fixed" "Police fixe" + +"Table name" "Nom de table" + +"Export" "Export" + +"Change user" "Changer utilisateur" + +"You must give object a new name!" "Vous devez donner un nouveau nom" + +"Query" "Requęte" + +"User name" "Nom d'utilisateur" + +"Font normal" "Police normale" + +"Import table" "Importer" + +"Toolbar" "Outils" + +"Radio btn" "Radio" + +"You must supply a name for this function!" "Vous devez fournir un nom pour la fonction" + +"You have to select index fields!" "Vous devez selectionner le champ pour l'index" + +"Constraint" "Contrainte" + +"The script must have a name" "Le script doit avoir un nom" + +"Save" "Sauver" + +"Exit" "Quitter" + +"Inherits" "Source" + +"Delete field" "Détruire" + +"About" "A propos" + +"Empty field name ?" "Nom de champ inexistant ?" + +"All report information will be deleted.\n\nProceed ?" "Toutes les informations de l'état vont ętre détruites\n\nContinuer ?" + +"Host" "Machine" + +"vacuuming database %s ..." "Vider base %s ..." + +"Indexes defined" "Index définis" + +"You must specify field size!" "La taille du champ doit ętre précisée" + +"Schema '%s' already exists!" "Le schéma '%s' existe déjŕ!" + +"There is another field with the same name: '%s'!\n\nReplace it ?" "Il y a un autre champ avec le męme nom : '%s'!\n\nRemplacer?" + +"Contents" "Contient" + +"Views" "Vues" + +"Variable" "Variable" + +"Error executing query\n\n%s\n\nPostgreSQL error message:\n%s\nPostgreSQL status:%s" "Erreur en exécutant la requęte\n\n%s\n\nMessage d'erreur PostgreSQL :\n%s \n Statut de PostgreSQL:%s" + +"Filter conditions" "Conditions de filtre" + +"Error retrieving query definition" "Erreur en retrouvant la définition de la requęte" + +"Error deleting view" "Erreur en détruisant la vue" + +"New" "Nouveau" + +"Tables" "Tables" + +"Create" "Créer" + +"Forms need an internal name, only literals, low case" "Les formulaires ont besoin d'un nom interne, seulement en lettres minuscules" + +"Do you want to save the form into the database?" "Voulez vous sauver le formulaire dans la base?" + +"Schema '%s' was not found!" "Le schéma '%s' n'a pas été trouvé" + +"proportional" "Proportionnelle" + +"Function saved!" "Le fonction avait ete créée" + +"with OIDs" "avec des OIDs" + +"Table information" "Information de table" + +"Error inserting new record" "Erreur en introduisant le nouvel enregistrement" + +"Column name '%s' already exists in this table!" "Le nom de colonne existe déjŕ dans cette table !" + +"File" "Fichier" + +"Your table has no fields!" "Cette table n'a pas de champ?" + +"Height" "Hauteur" + +"You will always get the latest version at:" "Le derniere version toujours ŕ" + +"Form must have a name" "Le formulaire doit avoir un nom !" + +"Password" "Mot de passe" + +"Valid until (date)" "Valable jusqu'ŕ" + +"Report source" "Source de l'état" + +"Allow user to create databases" "Peut créer une base" + +"Cancel" "Abandon" + +"Is clustered ?" "Est groupé ?" + +"Add new column" "Ajout nouveau champ" + +"Show SQL" "Montrez le code SQL." + +"New name" "Nouveau nom" + +"Table '%s' not found!" "Le table '%s' n'est pas trouvée" + +"Form name" "Nom du formulaire" + +"Visual designer" "Créateur visuel" + +"You choose to delete index\n\n %s \n\nProceed?" "Vous allez détruire index\n\n %s \n\nConfirmation?" + +"Error retrieving from" "Erreur en retrouvant..." + +"Save query definition" "Sauver la définition de la requęte" + +"A Tcl/Tk interface to\nPostgreSQL\nby Constantin Teodorescu" "Une Tcl/Tk interface pour\nPostgreSQL\npar Constantin Teodorescu" + +"Operation completed!" "Opération finie" + +"Max rows displayed in table/query view" "Nombre maximal de colonnes affichées dans la table/vue de requęte" + +"Passwords do not match!" "Les mots de passe ne vont pas" + +"Rename" "Renommer" + +"Entry" "Entrée" + +"Error retrieving schema definition" "Erreur en retrouvant la définition du schéma" + +"This is an action query!\n\nExecute it?" "Ceci est une requęte d'action !\nExécuter ?" + +"Error retrieving view definition for" "Erreur en lisant la définition pour la vue" + +"options" "options" + +"Sequence '%s' not found!" "Le séquence '%s' n'a pas été trouvée" + +"Text" "Texte" + +"Tcl error executing pg_exec %s\n\n%s" "Erreur Tcl en exécutant %s\n\n%s" + +"Width" "Largeur" + +"You have to supply a name for this query!" "Vous devez donner un nom ŕ cette requęte" + +"Accessing data. Please wait ..." "Lit les données. Patience ..." + +"Report footer" "Pied de rapport" + +"Parameters" "Paramčtres" + +"Queries" "Requętes" + +"Query '%s' already exists!" "La requęte '%s' existe dejŕ!" + +"Font bold" "Police grasse" + +"Query builder" "Constructeur de requętes" + +"Error defining view" "Erreur en définissant la vue" + +"Top" "Haut" + +"You must supply a name for your table!" "Vous devez introduire un nom pour cette table" + +"Page footer" "Pied de page" + +"Font italic" "Police italique" + +"Field name not entered!" "Le nom de champ n'est pas entré" + +"Index name cannot be null!" "Le nom de l'index ne peut ętre nul" + +"Sort" "Trier" + +"Import-Export table" "Import/Export table" + +"Point" "Point" + +"type" "type" + +"You should supply a name for this sequence" "Vous devez donner un nom ŕ la séquence" + +"Remove link ?" "Détruire cette liaison?" + +"You have to supply a table name!" "Vous devez fournir un nom de table" + +"Report header" "En tęte de l'état" + +"Attributes" "Attributs" + +"Table '%s' already in schema" "Le table est déjŕ dans le schéma" + +"Username" "Utilisateur" + +"Minvalue" "Valeur minimale" + +"Sequence name" "Nom de séquence" + +"Define sequence" "Définir la séquence" + +"Function" "Fonction" + +"Sorting and filtering not (yet) available from queries!\n\nPlease enter them in the query definition!" "Tri et filtrage pas (encore) possible ŕ partir des requętes!\n\nEntrez les dans la définition de la requęte SVP" + +"Reports" "Etats" + +"Columns" "Champs" + +"Indexes" "Index" + +"Permissions" "Permissions" + +"not null" "non vide" + +"Cluster index" "index groupe" + +"index columns" "index champs" + +"Add user" "Ajoute utilisateur" + +"Change permissions" "Change droits" + +"select" "sélections" + +"update" "actualise" + +"insert" "introduire" + +"rule" "rčgles" + +"Identification" "Identification" + +"Owner ID" "ID du propriétaire" + +"Has primary key ?" "A une clé primaire ?" + +"Has rules ?" "A des rčgles?" + +"Statistics" "Statistiques" + +"Number of tuples" "Nombre des enregistrements" + +"Number of pages" "Nombres des pages" + +"Index name" "Nom d'index" + +"Index fields" "Champs d'index" + +"Table OID" "OID de table" + +} + + diff --git a/src/bin/pgaccess/lib/languages/italiano b/src/bin/pgaccess/lib/languages/italiano new file mode 100644 index 00000000000..157dd4feb61 --- /dev/null +++ b/src/bin/pgaccess/lib/languages/italiano @@ -0,0 +1,539 @@ +array set Messages { + +"Label" "Etichetta" + +"Save schema" "Salva lo schema" + +"Is unique ?" "E' unico ?" + +"Report builder" "Report builder" + +"Criteria" "Criterio" + +"FATAL ERROR upgrading PgAccess table" "ERRORE FATALE aggiornando le tabelle PgAccess" + +"Save this query as a view" "Salva questa query come View" + +"Page header" "Testata di pagina" + +"Query name" "Nome query" + +"Please select an object first!" "Seleziona prima un'oggetto!" + +"Fields :" "Campi :" + +"Name" "Nome" + +"File name" "Nome del file" + +"Detail record" "Dettaglio del record" + +"Auto-load the last opened database at startup" "Apertura automatica ultimo database all'avvio" + +"Maxvalue" "Valore massimo" + +"Start value" "Valore d'inizio" + +"Report fields" "Campi disponibili" + +"Test form" "Test form" + +"Error trying to connect to database '%s' on host %s \n\nPostgreSQL error message:%s" "Errore di connessione al database '%s' sull'host %s \n\nMessaggio d'errore di PostgreSQL :%s" + +"No field type ?" "Nessun tipo per il campo?" + +"User without name?" "Utente senza nome ?" + +"You have to supply a name for this schema!" "Devi specificare un nome per lo schema!" + +"Last value" "Ultimo valore" + +"Preferences" "Preferenze" + +"View '%s' already exists!\nOverwrite ?" "View '%s' esiste gia'!\nSovrascrivo ?" + +"You have to select an index!" "Devi scegliere un'indice!" + +"Field type" "Tipo campo" + +"Script name" "Nome dello Script" + +"Reload" "Ricarica" + +"Remove table %s from query?" "Rimuovere la tabella %s dalla query?" + +"SQL window" "Finestra SQL" + +"Allow user to create other users" "L'utente puo' creare altri utenti" + +"Delete current record ?" "Cancello il record corrente? " + +"List box" "Lista" + +"Save to query builder" "Salva nel query builder" + +"fixed width" "larghezza fissa" + +"Scripts" "Scripts" + +"Yes" "Si" + +"Add label" "Aggiungi etichetta" + +"Sequence created!" "Sequenza creata !" + +"Field information" "Informazioni sul campo" + +"Design" "Disegna" + +"Field" "Campo" + +"You have to supply an external file name!" "Devi specificare un nome file esterno!" + +"Increment" "Incremento" + +"No" "No" + +"Form design" "Disegna il Form" + +"You must supply a return type!" "Devi specificare il tipo di dato ritornato" + +"Remove field from result ?" "Eliminare il campo dal risultato ?" + +"There is another object (a %s) with the same name.\nPlease change it!" "Esiste un'altro oggetto (un %s) con lo stesso nome.\nCambia nome!" + +"This query has no commands?" "Questa query non ha comandi ?" + +"Execute query" "Esegui query" + +"field cannot be null" "Il campo non puo' essere nullo" + +"Help" "Aiuto" + +"Rename column" "Rinomina campo" + +"Database" "Database" + +"Information" "Informazioni" + +"Close" "Chiudi" + +"Command" "Comando" + +"Table" "Tabella" + +"verify password" "verifica password" + +"Vacuum" "Vacuum" + +"Default value" "Valore predefinito" + +"Import" "Importa" + +"Delete index" "Cancella indice" + +"Move up" "Muovi su'" + +"index properties" "proprieta' dell'indice" + +"check" "Controlla" + +"Create new table" "Crea una nuova tabella" + +"Visual query designer" "Visual query designer" + +"Delete all" "Cancella tutto" + +"You are going to delete\n\n %s \n\nProceed?" "Stai per cancellare\n\n %s\n\n Procedo?" + +"Schema name" "Nome dello schema" + +"Error executing query" "Errore eseguendo la query" + +"Report name" "Nome del report" + +"Add field" "Aggiungi campo" + +"Field name" "Nome campo" + +"FATAL ERROR searching for PgAccess system tables" "ERRORE FATALE cercando le tabelle PgAccess di sistema" + +"A big number of rows displayed in table view will take a lot of memory!" "Un numero grande di righe visualizzate richiedera' molta memoria!" + +"Preview" "Anteprima" + +"Users" "Utenti" + +"Owner" "Proprietario" + +"Form's window internal name" "Il nome interno del form" + +"Sort field" "Campo ordinato" + +"New name is the same as the old one!" "Nuovo nome uguale al precedente!" + +"Warning" "Attenzione" + +"Suggestions at" "Suggerimenti a" + +"Functions" "Funzioni" + +"Schema" "Schema" + +"Open" "Apri" + +"size" "Dimensione" + +"Delete" "Cancella" + +"Returns" "Risultati" + +"Define new user" "Definisce nuovo utente" + +"Move down" "Muovi Giů" + +"Design script" "Design script" + +"Check box" "Casella si/no" + +"FINAL WARNING" "Ultimo Warning" + +"Add table" "Nuova tabella" + +"Table viewer font" "Carattere del visualizzatore tabelle" + +"The field type is not specified!" "Il tipo del campo non e' stato specificato!" + +"Close test form" "Chiudi test form" + +"Export table" "Esporta tabelle" + +"Add new index" "Aggiungi nuovo indice" + +"Left" "Sinistra" + +"Field delimiter" "Delimitatore di campo" + +"Add formula" "Aggiungi formula" + +"Open database" "Apri il Database" + +"Return" "Risultato" + +"Changed fonts may appear in the next working session!" "I caratteri cambiati saranno visibili nella prossima sessione!" + +"Error" "Errore" + +"Enter a field name" "Inserisci un nome campo" + +"field name" "Nome Campo" + +"Forms" "Forms" + +"Cannot add column" "Non posso aggiungere una colonna" + +"Clean" "Pulisci" + +"Delete all objects ?" "Cancellare tutti gli oggetti ?" + +"Preferred language" "Lingua preferita" + +"Execute SQL" "Esegui SQL" + +"Sequences" "Sequences" + +"Button" "Bottone" + +"Language" "Lingua" + +"Query '%s' was not found!" "La query '%s' non e' stata trovata!" + +"Object" "Oggetto" + +"Font fixed" "Carattere fisso" + +"Table name" "Nome tabella" + +"Export" "Esporta" + +"Change user" "Cambia utente" + +"You must give object a new name!" "Devi dare un nuovo nome all'oggetto!" + +"Query" "Query" + +"User name" "Nome utente" + +"Font normal" "Carattere normale" + +"Import table" "Importa" + +"Toolbar" "Barra degli strumenti" + +"Radio btn" "Bottone a scelta" + +"You must supply a name for this function!" "Devi fornire un nome per questa funzione!" + +"You have to select index fields!" "Devi selezionare i campi dell'indice" + +"Constraint" "Constraint" + +"The script must have a name" "Lo script deve avere un nome" + +"Save" "Salva" + +"Exit" "Esci" + +"Inherits" "Eredita" + +"Delete field" "Cancella campo" + +"About" "Apropos" + +"Empty field name ?" "Nome del campo vuoto?" + +"All report information will be deleted.\n\nProceed ?" "Tutte le informazioni relative al report saranno cancellate.\n\n Procedo ?" + +"Host" "Host" + +"vacuuming database %s ..." "vacuuming database %s ..." + +"Indexes defined" "Indici definiti" + +"Owner ID" "Proprietario ID" + +"You must specify field size!" "Devi specificare la dimensione del campo!" + +"Schema '%s' already exists!" "Lo schema '%s' esiste gia'!" + +"There is another field with the same name: '%s'!\n\nReplace it ?" "C'e' un'altro campo con lo stesso nome: '%s'!\n\nSostituisco ? " + +"Contents" "Contenuto" + +"Views" "Views" + +"Variable" "Variabile" + +"Error executing query\n\n%s\n\nPostgreSQL error message:\n%s\nPostgreSQL status:%s" "Errore eseguendo la query\n\n%s\n\nErrore PostgreSQL:\n%s\nPostgreSQL status:%s" + +"Filter conditions" "Condizioni di filtro" + +"Error retrieving query definition" "Errore caricando la definizione della query" + +"Error deleting view" "Errore durante la cancellazione" + +"New" "Nuovo" + +"Tables" "Tabelle" + +"Create" "Crea" + +"Forms need an internal name, only literals, low case" "Il form ha bisogno di un nome interno, solo lettere minuscole" + +"Do you want to save the form into the database?" "Vuoi salvare il form nel database ?" + +"Schema '%s' was not found!" "Lo schema '%s' non e' stato trovato!" + +"proportional" "proporzionale" + +"Function saved!" "Funzione salvata!" + +"with OIDs" "con OIDs" + +"Table information" "Informazioni tabella" + +"Error inserting new record" "Errore inserendo il nuovo record" + +"Column name '%s' already exists in this table!" "Il campo '%s' esiste gia'!" + +"File" "File" + +"Your table has no fields!" "La tabella non ha campi !" + +"Height" "Altezza" + +"You will always get the latest version at:" "Troverai l'ultima versione su:" + +"Form must have a name" "Il form deve avere un nome" + +"Password" "Password" + +"Valid until (date)" "Valido fino a" + +"Report source" "Sorgente del report" + +"Allow user to create databases" "L'utente puo' creare database" + +"Cancel" "Abbandona" + +"Is clustered ?" "Is clustered ?" + +"Add new column" "Aggiungi nuovo campo" + +"Show SQL" "Mostra SQL" + +"New name" "Nuovo nome" + +"Table '%s' not found!" "Tabella '%s' non trovata!" + +"Form name" "Nome form" + +"Visual designer" "Visual Designer" + +"You choose to delete index\n\n %s \n\nProceed?" "Hai scelto di cancellare l'indice\n\n %s \n\nProcedo?" + +"Error retrieving from" "Errore caricando da" + +"Save query definition" "Salva la definizione della query" + +"A Tcl/Tk interface to\nPostgreSQL\nby Constantin Teodorescu" "Una interfaccia Tcl/Tk verso\nPostgreSQL\n di Constantin Teodorescu" + +"Operation completed!" "Operazione completata!" + +"Max rows displayed in table/query view" "Numero massimo di righe nella visualiz. tabella/query" + +"Passwords do not match!" "La password non corrisponde!" + +"Rename" "Rinomina" + +"Entry" "Entry" + +"Error retrieving schema definition" "Errore caricando la definizione dello schema" + +"This is an action query!\n\nExecute it?" "Questa e' una query d'azione\n\nLa eseguo?" + +"Error retrieving view definition for" "Errore caricando la definizione di" + +"options" "opzioni" + +"Sequence '%s' not found!" "Sequence '%s' non trovata!" + +"Text" "Testo" + +"Tcl error executing pg_exec %s\n\n%s" "Errore Tcl eseguendo pg_exec %s\n\n%s" + +"Width" "Larghezza" + +"You have to supply a name for this query!" "Devi specificare un nomer per la query" + +"Accessing data. Please wait ..." "Carico i dati, attendi..." + +"Report footer" "Piede del report" + +"Parameters" "Parametri" + +"Queries" "Queries" + +"Query '%s' already exists!" "La query '%s' esiste gia'!" + +"Font bold" "Carattere grassetto" + +"Query builder" "Query builder" + +"Error defining view" "Errore definendo la query" + +"Top" "Sopra" + +"You must supply a name for your table!" "Devi specificare un nome per la tabella!" + +"Page footer" "Pie' di pagina" + +"Font italic" "Carattere corsivo" + +"Field name not entered!" "Nome del campo non inserito!" + +"Index name cannot be null!" "Il nome dell'indice non puo' essere nullo!" + +"Sort" "Ordina" + +"Import-Export table" "Importa/Esporta tabella" + +"Point" "Punto" + +"type" "tipo" + +"You should supply a name for this sequence" "Tu devi fornire un nome per la sequenza" + +"Remove link ?" "Rimuovere collegamento ?" + +"You have to supply a table name!" "Devi specificare il nome tabella!" + +"Report header" "Testata del report" + +"Attributes" "Attributi" + +"Table '%s' already in schema" "Tabella '%s' esiste gia' nello schema!" + +"Username" "Nome utente" + +"Minvalue" "Valore minimo" + +"Sequence name" "Nome del sequence" + +"Define sequence" "Definisci la sequenza" + +"Function" "Funzione" + +"Sorting and filtering not (yet) available from queries!\n\nPlease enter them in the query definition!" "Ordinamento e filtri non ancora disponibili dalle query!\n\nInseriscili nella definizione della query!" + +"Reports" "Reports" + +"primary key" "chiave primaria" + +"Visual schema designer" "Ambiente sviluppo relazioni visuale" + +Print Stampa + +"Print to Postscript" "Stampa Postscript" + +Commands Azioni + +"Report preview" "Anteprima report" + +"The printed image in Postscript is in the file pgaccess-report.ps" "La stampa in Poscript č nel file pgaccess-report.ps" + +"Columns" "Campi" + +"Indexes" "Indici" + +"Permissions" "Autorita" + +"not null" "non nullo" + +"Cluster index" "Cluster indice" + +"index columns" "campi dello indice" + +"Add user" "Nuovo utente" + +"Change permissions" "Cambiare autorita" + +"select" "selezioni" + +"update" "update" + +"insert" "inserisci" + +"rule" "regoli" + +"Identification" "Identificatione" + +"Owner ID" "ID dello proprieta" + +"Has primary key ?" "Chiave primaria ?" + +"Has rules ?" "Regoli definiti ?" + +"Statistics" "Statistica" + +"Number of tuples" "Numero righe" + +"Number of pages" "Numero pagine" + +"Index name" "Nome indici" + +"Index fields" "Campi dello indice" + +"Table OID" "Tabella OID" + +} diff --git a/src/bin/pgaccess/lib/languages/magyar b/src/bin/pgaccess/lib/languages/magyar new file mode 100644 index 00000000000..3293632e616 --- /dev/null +++ b/src/bin/pgaccess/lib/languages/magyar @@ -0,0 +1,525 @@ +array set Messages { + +"Label" "Cimke" + +"Save schema" "Séma mentése" + +"Is unique ?" "Egyedi (UNIQUE) ?" + +"Report builder" "Jelentés szerkesztő" + +"Criteria" "Feltételek" + +"FATAL ERROR upgrading PgAccess table" "FATÁLIS HIBA keletkezett a PgAccess tábla frissitése közben" + +"Save this query as a view" "Nézetként (VIEW) akarod elmenteni a lekérdezést?" + +"Page header" "Oldal fejléc" + +"Query name" "Lekérdezés név" + +"Please select an object first!" "Először válassz egy objektumot!" + +"Fields :" "Mezők :" + +"Name" "Név" + +"File name" "Fájl név" + +"Detail record" "Részletes bejegyzés" + +"Auto-load the last opened database at startup" "Az utolsóként használt adatbázis automatikus nyitésa inditáskor" + +"Maxvalue" "Maximális érték" + +"Start value" "Kezdőérték" + +"Report fields" "Jelentés mezők" + +"Test form" "Teszt kérdőiv (FORM)" + +"Error trying to connect to database '%s' on host %s \n\nPostgreSQL error message:%s" "Hiba a(z) '%s' nevű adatbázishoz kapcsolódás közben a(z) '%s' szerveren.\n\nPostgreSQL hibaüzenet:%s" + +"No field type ?" "Nincs a mezőnek tipusa ?" + +"User without name?" "Felhasználó név nélkül ?" + +"You have to supply a name for this schema!" "Nevet kell adj ennek a sémának !" + +"Last value" "Legutóbbi érték" + +"Preferences" "Beállitások" + +"View '%s' already exists!\nOverwrite ?" "A(z) '%s' nevű nézet (VIEW) már létezik!\n Felülirás ?" + +"You have to select an index!" "Választanod kell egy indexet!" + +"Field type" "Mezőtipus" + +"Script name" "Szkript neve" + +"Reload" "Újratölt" + +"Remove table %s from query?" "Törölni akarod a(z) '%s' táblát ebből a lekérdezésből ?" + +"SQL window" "SQL ablak" + +"Allow user to create other users" "Engedély a felhasználónak új felhasználó készitésére" + +"Delete current record ?" "Az aktuális bejegyzés törlése ?" + +"List box" "Lista" + +"Save to query builder" "Mentsd a lekérdezés szerkesztőbe" + +"fixed width" "fix szélesség" + +"Scripts" "Szkriptek" + +"Yes" "Igen" + +"Add label" "Adj hozzá cimkét" + +"Sequence created!" "A szekvencia (SEQUENCE) elkészült!" + +"Field information" "Mező információ" + +"Design" "Tervezés" + +"Field" "Mező" + +"You have to supply an external file name!" "Meg kell adj egy külső fájlnevet!" + +"Increment" "Növelés" + +"No" "Nem" + +"Form design" "Kérdőiv (FORM) tervezés" + +"You must supply a return type!" "Szükség van visszatérési értékre!" + +"Remove field from result ?" "A mezö törlése az eredményből ?" + +"There is another object (a %s) with the same name.\nPlease change it!" "Van már ilyen nevű (%s) objektum!\nLégyszives változtasd meg!" + +"This query has no commands?" "Ebben a lekérdezésben nincs parancs?" + +"Execute query" "Lekérdezés futtatása" + +"field cannot be null" "a mező nem lehet NULL" + +"Help" "Súgó" + +"Rename column" "Az oszlop átnevezése" + +"Database" "Adatbázis" + +"Information" "Információ" + +"Close" "Zárás" + +"Command" "Utasitás" + +"Table" "Tábla" + +"verify password" "jelszó ellenőrzés" + +"Vacuum" "Porszivózás (VACUUM)" + +"Default value" "Alapérték" + +"Import" "Behozatal" + +"Delete index" "Index törlés" + +"Move up" "Mozgasd fel" + +"index properties" "index tulajdonságok" + +"check" "ellenőrzi" + +"Create new table" "Új tábla készités" + +"Visual query designer" "Lekérdezés tervező" + +"Delete all" "Törölni mindet" + +"You are going to delete\n\n %s \n\nProceed?" "Le fogod törölni az alábbit:\n\n %s \n\nFolytatod?" + +"Schema name" "Séma neve" + +"Error executing query" "Hiba a lekérdezés futtatása közben" + +"Report name" "Jelentés neve" + +"Add field" "Mező hozzáadás" + +"Field name" "Mezőnév" + +"FATAL ERROR searching for PgAccess system tables" "FATÁLIS HIBA a PgAccess rendszertáblák keresésénél" + +"A big number of rows displayed in table view will take a lot of memory!" "A nézetnél (VIEW) kijelzendő sorok nagy száma miatt sok memória fog lefoglalódni !" + +"Preview" "Előzetes nézet" + +"Users" "Felhasználók" + +"Owner" "Tulajdonos" + +"Form's window internal name" "Kérdőiv (FORM) ablakának belső használatú neve" + +"Sort field" "Mező rendezése" + +"New name is the same as the old one!" "Az új név megegyezik a régivel!" + +"Warning" "Figyelem" + +"Suggestions at" "Javaslatok itt:" + +"Functions" "Függvények" + +"Schema" "Séma" + +"Open" "Nyit" + +"size" "méret" + +"Delete" "Törlés" + +"Returns" "Visszatér" + +"Define new user" "Új felhasználó definiálása" + +"Move down" "Mozgasd le" + +"Design script" "Szkript tervezés" + +"Check box" "Check box" + +"FINAL WARNING" "UTOLSÓ FIGYELMEZTETÉS" + +"Add table" "Tábla hozzáadás" + +"Table viewer font" "Tábla néző betűkészlet" + +"The field type is not specified!" "A mező tipusa nincs megadva!" + +"Close test form" "Zárd le a teszt kérdőivet (FORM)" + +"Export table" "Tábla kivitel" + +"Add new index" "Űj index hozzáadás" + +"Left" "Bal" + +"Field delimiter" "Mező határoló" + +"Add formula" "Formula hozzáadás" + +"Open database" "Adatbázis megnyitás" + +"Return" "Visszatérés" + +"Changed fonts may appear in the next working session!" "A megváltoztatott betűkészlet a következő futtatásnál lesz látható!" + +"Error" "Hiba" + +"Enter a field name" "Adj meg egy mezőnevet !" + +"field name" "Mezőnév" + +"Forms" "Kérdőivek" + +"Cannot add column" "Nem lehet oszlopot hozzáadni" + +"Clean" "Törlés" + +"Delete all objects ?" "Minden objektum törlése ?" + +"Preferred language" "Választott nyelv" + +"Execute SQL" "SQL futtatás" + +"Sequences" "Szekvenciák" + +"Button" "Gomb" + +"Language" "Nyelv" + +"Query '%s' was not found!" "A(z) '%s' nevű lekérdezés nem található!" + +"Object" "Objektum" + +"Font fixed" "Fix betűkészlet" + +"Table name" "Táblanév" + +"Export" "Kivitel" + +"Change user" "Felhasználócsere" + +"You must give object a new name!" "Az objektumnak új nevet kell adjál!" + +"Query" "Lekérdezés" + +"User name" "Felhasználónév" + +"Font normal" "Normális betűkészlet" + +"Import table" "Tábla bevitel" + +"Toolbar" "Eszközpult" + +"Radio btn" "Rádiógomb" + +"You must supply a name for this function!" "Hiányzik a függvény neve!" + +"You have to select index fields!" "Az index mezőket kell választanod!" + +"Constraint" "Kényszer (CONSTRAINT)" + +"The script must have a name" "Hiányzik a szkript neve" + +"Save" "Mentés" + +"Exit" "Kilépés" + +"Inherits" "örökli" + +"Delete field" "Mező törlés" + +"About" "A programról" + +"Empty field name ?" "Nom de champ inexistant ?" + +"All report information will be deleted.\n\nProceed ?" "Toutes les informations de l'état vont ętre détruites\n\nContinuer ?" + +"Host" "Szerver" + +"vacuuming database %s ..." "A(z) %s adatbázis porszivózása ..." + +"Indexes defined" "Definiált indexek" + +"You must specify field size!" "Hiányzik a mezőméret!" + +"Schema '%s' already exists!" "A(z) '%s' schéma már létezik!" + +"There is another field with the same name: '%s'!\n\nReplace it ?" "Már van ilyen nevű mező: '%s'!\n\nFelülirás ?" + +"Contents" "Tartalom" + +"Views" "Nézetek" + +"Variable" "Változó" + +"Error executing query\n\n%s\n\nPostgreSQL error message:\n%s\nPostgreSQL status:%s" "Hiba a lekérdezés futtatása közben\n\n%s\n\nPostgreSQL hibaüzenet:\n%s\nPostgreSQL státusz:%s" + +"Filter conditions" "Szűrőfeltételek" + +"Error retrieving query definition" "Hiba a lekérdezés definiciójának betöltésénél" + +"Error deleting view" "Hiba a nézet (VIEW) törlésénél" + +"New" "Új" + +"Tables" "Táblák" + +"Create" "Elkészit" + +"Forms need an internal name, only literals, low case" "A kérdőiveknek (FORM) kell egy belső név, csak kisbetűkkel" + +"Do you want to save the form into the database?" "El akarod menteni a kérdőivet (FORM) az adatbázisba ?" + +"Schema '%s' was not found!" "A(z) '%s' nevű séma nem található!" + +"proportional" "megfelelő" + +"Function saved!" "A függvény elmentve!" + +"with OIDs" "OID-ekkel" + +"Table information" "Tábla információ" + +"Error inserting new record" "Hiba az üj bejegyzés tárolásával" + +"Column name '%s' already exists in this table!" "A(z) '%s' nevű oszlop már létezik ebben a táblában !" + +"File" "Fájl" + +"Your table has no fields!" "A táblában nincsenek mezők!" + +"Height" "Magasság" + +"You will always get the latest version at:" "A legfrissebb verzió megszerezhető innen:" + +"Form must have a name" "Hiányzik a kérdőiv (FORM) neve !" + +"Password" "Jelszó" + +"Valid until (date)" "Érvényes eddig (dátum)" + +"Report source" "A jelentés forrása" + +"Allow user to create databases" "Engedély a felhasználónak új adatbázis készitésére" + +"Cancel" "Mégsem" + +"Is clustered ?" "CLUSTER-elt ?" + +"Add new column" "Új oszlop hozzáadás" + +"Show SQL" "SQL parancsok" + +"New name" "Új név" + +"Table '%s' not found!" "A(z) '%s' nevű tábla nem található!" + +"Form name" "Kérdőiv (FORM) név" + +"Visual designer" "Tervező" + +"You choose to delete index\n\n %s \n\nProceed?" "Biztos, hogy akarod törölni az alábbi indexet?\n\n %s" + +"Error retrieving from" "Hiba a betöltésnél erről a helyről" + +"Save query definition" "A lekérdezés elmentése" + +"A Tcl/Tk interface to\nPostgreSQL\nby Constantin Teodorescu" "Egy Tcl/Tk felület a\nPostgreSQL-hez\nKészitette: Constantin Teodorescu" + +"Operation completed!" "Beavatkozás végrehajtva!" + +"Max rows displayed in table/query view" "Maximális sorok száma a tábláknál/lekérdezéseknél" + +"Passwords do not match!" "A jelszók nem egyeznek!" + +"Rename" "Átnevezés" + +"Entry" "Bejegyzés" + +"Error retrieving schema definition" "Hiba a séma-definició betöltése közben" + +"This is an action query!\n\nExecute it?" "Ez nem lekérdezés, hanem parancs.\nFuttatás ?" + +"Error retrieving view definition for" "Hiba a nézet (VIEW) betöltése közben " + +"options" "beállitások" + +"Sequence '%s' not found!" "A(z) '%s' nevű szekvencia nem található!" + +"Text" "Szöveg" + +"Tcl error executing pg_exec %s\n\n%s" "Tcl hiba a pg_exec futtatásánál %s\n\n%s" + +"Width" "Szélesség" + +"You have to supply a name for this query!" "Hiányzik a lekérdezés neve!" + +"Accessing data. Please wait ..." "Adatelérés. Kis türelmet ..." + +"Report footer" "A jelentés alja" + +"Parameters" "Paraméterek" + +"Queries" "Lekérdezések" + +"Query '%s' already exists!" "A(z) '%s' nevű lekérdezés már létezik!" + +"Font bold" "Vastag betűkészlet" + +"Query builder" "Lekérdezés szerkesztő" + +"Error defining view" "Hiba a nézet (VIEW) definiálásánál" + +"Top" "Csúcs" + +"You must supply a name for your table!" "Hiányzik a tábla neve!" + +"Page footer" "A lap alja" + +"Font italic" "Dőlt betűkészlet" + +"Field name not entered!" "A mezőnév hiányzik!" + +"Index name cannot be null!" "Az index nem lehet NULL!" + +"Sort" "Rendezés" + +"Import-Export table" "Tábla behozatal/kivitel" + +"Point" "Pont" + +"type" "tipus" + +"You should supply a name for this sequence" "Hiányzik a szekvencia neve!" + +"Remove link ?" "A kapcsolat törlése?" + +"You have to supply a table name!" "Hiányzik a tábla neve!" + +"Report header" "Jelentés fejléc" + +"Attributes" "Attribútumok" + +"Table '%s' already in schema" "A(z) '%s' tábla már szerepel a sémában!" + +"Username" "Felhasználó név" + +"Minvalue" "Minimális érték" + +"Sequence name" "Szekvencianév" + +"Define sequence" "Szekvencia definiálás" + +"Function" "Függvény" + +"Sorting and filtering not (yet) available from queries!\n\nPlease enter them in the query definition!" "A rendezés és szűrés (még) nem megoldott a lekérdezéseknél!\n\nHasználd őket a lekérdezés definiciókban!" + +"Reports" "Jelentések" + +"Columns" "Oszlopok" + +"Indexes" "Indexek" + +"Permissions" "Engedélyek" + +"not null" "nem NULL" + +"Cluster index" "Index CLUSTER-elés" + +"index columns" "indexelt oszlopok" + +"Add user" "Felhasználó hozzáadás" + +"Change permissions" "Engedélyek megváltoztatása" + +"select" "olvasás" + +"update" "frissités" + +"insert" "tárolás" + +"rule" "szabályok" + +"Identification" "Azonositás" + +"Owner ID" "Tulajdonos azonositó" + +"Has primary key ?" "Van elsődleges kulcsa ?" + +"Has rules ?" "Vannak szabályok ?" + +"Statistics" "Statisztika" + +"Number of tuples" "Bejegyzések száma" + +"Number of pages" "Oldalak száma" + +"Index name" "Index név" + +"Index fields" "Index mezők" + +"Table OID" "Tábla OID" + +} + + diff --git a/src/bin/pgaccess/lib/languages/romana b/src/bin/pgaccess/lib/languages/romana new file mode 100644 index 00000000000..d234ce3b0e7 --- /dev/null +++ b/src/bin/pgaccess/lib/languages/romana @@ -0,0 +1,526 @@ +array set Messages { + +"Label" "Etichetă" + +"Save schema" "Salvează planul" + +"Is unique ?" "Este index unic ?" + +"Report builder" "Proiectare rapoarte" + +"Criteria" "Conditie" + +"FATAL ERROR upgrading PgAccess table" "EROARE FATALA la actualizarea tabelei PgAccess" + +"Save this query as a view" "Salvează această selecţie ca o vedere" + +"Page header" "Cap de pagină" + +"Query name" "Nume selecţie" + +"Please select an object first!" "Selectati mai intai un obiect!" + +"Fields :" "Cîmpurile indexului" + +"Name" "Nume" + +"File name" "Nume fişier" + +"Detail record" "Înregistrări" + +"Auto-load the last opened database at startup" "Încarcă automat la lansare ultima bază deschisă" + +"Maxvalue" "Valoare maximă" + +"Start value" "Începe de la" + +"Report fields" "Câmpuri disponibile" + +"Test form" "Testează macheta" + +"Error trying to connect to database '%s' on host %s \n\nPostgreSQL error message:%s" "Eroare la conectarea la baza de date '%s' pe masina %s \n\nMesajul de eroare PostgreSQL:%s" + +"No field type ?" "Tip cimp necompletat!" + +"User without name?" "Utilizatorul asta n-ar si el un nume?" + +"You have to supply a name for this schema!" "Trebuie sa dati un nume acestui plan!" + +"Last value" "Ultima valoare" + +"Preferences" "Preferinţe" + +"View '%s' already exists!\nOverwrite ?" "Vederea '%s' mai exista!\nO suprainscriem ?" + +"You have to select an index!" "Trebuie sa selectati un index!" + +"Field type" "Tip cămp" + +"Script name" "Nume script" + +"Reload" "Reîncărcare" + +"Remove table %s from query?" "Eliminati tabela %s din selectie?" + +"SQL window" "Comenzi SQL executate" + +"Allow user to create other users" "Are voie să creeze alţi utilizatori" + +"Delete current record ?" "Stergeti inregistrarea curenta?" + +"List box" "Listă" + +"Save to query builder" "Salvează fraza SQL" + +"fixed width" "lăţime fixă" + +"Scripts" "Scripturi" + +"Yes" "Da" + +"Add label" "Adaugă etichetă" + +"Sequence created!" "Secventa a fost creata!" + +"Field information" "Informaţii despre câmpuri" + +"Design" "Proiectează" + +"Field" "Cimp" + +"You have to supply an external file name!" "Trebuie sa introduceti numele fisierului extern!" + +"Increment" "Increment" + +"No" "Nu" + +"Form design" "Proiectare machetă" + +"You must supply a return type!" "Trebuie sa introduceti tipul rezultatului" + +"Remove field from result ?" "Eliminati acest cimp din rezultat?" + +"There is another object (a %s) with the same name.\nPlease change it!" "Mai este un obiect (%s) cu acelasi nume!\nSchimbati-l!" + +"This query has no commands?" "Aceasta selectie nu are definitie?" + +"Execute query" "Execută selecţia" + +"field cannot be null" "obligatoriu de completat" + +"Help" "Ajutor" + +"Rename column" "Redenumeşte cîmp" + +"Database" "Baza de date" + +"Information" "Informaţii" + +"Close" "Închide" + +"Command" "Comandă" + +"Table" "Tabela" + +"verify password" "verifică parola" + +"Vacuum" "Tasează" + +"Default value" "Valoare implicită" + +"Import" "Importă" + +"Delete index" "Şterge index" + +"Move up" "Urcă" + +"index properties" "proprietăţi index" + +"check" "verifică" + +"Create new table" "Crează tabelă nouă" + +"Visual query designer" "Proiectare vizuala a selectiilor" + +"Delete all" "Şterge toate" + +"You are going to delete\n\n %s \n\nProceed?" "Urmeaza sa stergeti obiectul\n\n %s \n\nConfirmati?" + +"Schema name" "Numele planului" + +"Error executing query" "Eroare la executia selectiei" + +"Report name" "Nume raport" + +"Add field" "Adaugă-l" + +"Field name" "Nume câmp" + +"FATAL ERROR searching for PgAccess system tables" "EROARE FATALA la citirea tabelelor necesare PgAccess" + +"A big number of rows displayed in table view will take a lot of memory!" "Un număr mare de înregistrări încărcate va lua multă memorie" + +"Preview" "Încercare" + +"Users" "Utilizatori" + +"Owner" "Aparţine lui" + +"Form's window internal name" "Numele intern al machetei" + +"Sort field" "Cîmpuri sortare" + +"New name is the same as the old one!" "Numele nou este acelasi cu numele vechi!" + +"Warning" "Avertisment" + +"Suggestions at" "Sugestii la" + +"Functions" "Funcţii" + +"Schema" "Plan" + +"Open" "Deschide" + +"size" "mărime" + +"Delete" "Şterge" + +"Returns" "Întoarce" + +"Define new user" "Definire utilizator nou" + +"Move down" "Coboară" + +"Design script" "Proiectează script" + +"Check box" "Marcaj" + +"FINAL WARNING" "AVERTISMENT FINAL" + +"Add table" "Adaugă tabelă" + +"Table viewer font" "Fonturi tabele" + +"The field type is not specified!" "Tipul cimpului nu a fost specificat" + +"Close test form" "Inchide macheta test" + +"Export table" "Exportă tabelă" + +"Add new index" "Adaugă index nou" + +"Left" "Stânga" + +"Field delimiter" "Delimitator cîmp" + +"Add formula" "Adaugă formulă" + +"Open database" "Deschide baza de date" + +"Return" "Selectat" + +"Changed fonts may appear in the next working session!" "Fonturile se vor schimba la următoarea lansare" + +"Error" "Eroare" + +"Enter a field name" "Trebuie sa introduceti numele cimpului" + +"field name" "Nume cîmp" + +"Forms" "Machete" + +"Cannot add column" "Nu putem adauga cimpul" + +"Clean" "Curăţă" + +"Delete all objects ?" "Stergeti toate obiectele?" + +"Preferred language" "Limba preferată" + +"Execute SQL" "Execută selecţia" + +"Sequences" "Secvenţe" + +"Button" "Buton" + +"Language" "Limbaj" + +"Query '%s' was not found!" "Definitia pentru selectia '%s' nu a fost gasita" + +"Object" "Obiect" + +"Font fixed" "Font fix" + +"Table name" "Nume tabelă" + +"Export" "Exportă" + +"Change user" "Modificare date utilizator" + +"You must give object a new name!" "Trebuie sa introduceti totusi numele nou" + +"Query" "Query" + +"User name" "Nume utilizator" + +"Font normal" "Font normal" + +"Import table" "Importă tabelă" + +"Toolbar" "Scule" + +"Radio btn" "Selector" + +"You must supply a name for this function!" "Trebuie sa introduceti un nume pentru aceasta functie" + +"You have to select index fields!" "Trebuie sa selectati cimpurile indexului!" + +"Constraint" "Cerinţe" + +"The script must have a name" "Script-ul ar trebui sa aiba un nume" + +"Save" "Salvează" + +"Exit" "Terminare" + +"Inherits" "Strămoşi" + +"Delete field" "Şterge cîmp" + +"About" "Despre" + +"Empty field name ?" "Nume cimp necompletat" + +"All report information will be deleted.\n\nProceed ?" "Toate obiectele din raport vor fi sterse!\n\nSinteti de acord?" + +"Host" "Maşina" + +"vacuuming database %s ..." "Tasăm baza de date %s ..." + +"Indexes defined" "Indecşi definiţi" + +"You must specify field size!" "Marimea cimpului trebuie specificata" + +"Schema '%s' already exists!" "Schema '%s' exista deja!" + +"There is another field with the same name: '%s'!\n\nReplace it ?" "Mai exista un cimp cu acelasi nume: '%s'!\n\nIl inlocuim cu descrierea noua?" + +"Contents" "Conţinut" + +"Views" "Vederi" + +"Variable" "Variabilă" + +"Error executing query\n\n%s\n\nPostgreSQL error message:\n%s\nPostgreSQL status:%s" "Eroare la executia selectiei:\n\n%s\n\nMesaj de eroare PostgreSQL:\n%s\nStare:%s" + +"Filter conditions" "Condiţii de filtrare" + +"Error retrieving query definition" "Eroare la citirea definitiei pentru selectie" + +"Error deleting view" "Eroare la stergerea vederii" + +"New" "Nou" + +"Tables" "Tabele" + +"Create" "Crează" + +"Forms need an internal name, only literals, low case" "Machetele au nevoie de un nume intern, doar litere mici" + +"Do you want to save the form into the database?" "Vrei sa salvezi descrierea machetei in baza de date?" + +"Schema '%s' was not found!" "Schema '%s' nu a fost gasita!" + +"proportional" "proporţional" + +"Function saved!" "Functia a fost salvata!" + +"with OIDs" "cu OID-uri" + +"Table information" "Informaţii despre tabela" + +"Error inserting new record" "Eroare la adaugarea noii inregistrari" + +"Column name '%s' already exists in this table!" "Cimpul '%s' exista deja in tabela!" + +"File" "Fişier" + +"Your table has no fields!" "Tabela asta nu are nici un cimp ?" + +"Height" "Înălţime" + +"You will always get the latest version at:" "Întotdeauna ultima versiune se va găsi la" + +"Form must have a name" "Macheta trebuie sa aiba si ea un nume!" + +"Password" "Parolă" + +"Valid until (date)" "Valabil pînă la" + +"Report source" "Sursa raportului" + +"Allow user to create databases" "Are voie să creeze baze de date" + +"Cancel" "Abandon" + +"Is clustered ?" "E conglomerat ?" + +"Add new column" "Adaugă cîmp nou" + +"Show SQL" "Arată comanda" + +"New name" "Nume nou" + +"Table '%s' not found!" "Tabela '%s' nu a fost gasita!" + +"Form name" "Nume machetă" + +"Visual designer" "Proiectare vizuală" + +"You choose to delete index\n\n %s \n\nProceed?" "Urmeaza sa stergeti indexul\n\n %s \n\nConfirmati?" + +"Error retrieving from" "Eroare la citirea tabelei" + +"Save query definition" "Salvează definiţia selecţiei" + +"A Tcl/Tk interface to\nPostgreSQL\nby Constantin Teodorescu" "O interfaţă Tcl/Tk pentru\nPostgreSQL\nde Constantin Teodorescu" + +"Operation completed!" "Operatiune terminata!" + +"Max rows displayed in table/query view" "Număr maxim înregistrări afişate" + +"Passwords do not match!" "Parolele nu se prea potrivesc!" + +"Rename" "Redenumeşte" + +"Entry" "Cîmp" + +"Error retrieving schema definition" "Eroare la citirea definitiei pentru plan" + +"This is an action query!\n\nExecute it?" "Aceasta este o comanda nu o selectie!\n\nO executam?" + +"Error retrieving view definition for" "Eroare la citirea definitiei pentru vederea" + +"options" "opţiuni" + +"Sequence '%s' not found!" "Secventa '%s' nu a fost gasita!" + +"Text" "Text" + +"Tcl error executing pg_exec %s\n\n%s" "Eroare Tcl la executia comenzii %s\n\n%s" + +"Width" "Lăţime" + +"You have to supply a name for this query!" "Trebuie sa dati totusi un nume acestei selectii" + +"Accessing data. Please wait ..." "Citim inregistrarile. Asteptati ..." + +"Report footer" "Încheiere raport" + +"Parameters" "Parametrii" + +"Queries" "Selecţii" + +"Query '%s' already exists!" "Selectia '%s' exista deja!" + +"Font bold" "Font îngroşat" + +"Query builder" "Proiectare selectii" + +"Error defining view" "Eroare la definirea vederii" + +"Top" "Sus" + +"You must supply a name for your table!" "Trebuie sa introduceti un nume pentru aceasta tabela!" + +"Page footer" "Încheiere pagină" + +"Font italic" "Font înclinat" + +"Field name not entered!" "Nu ati introdus numele cimpului!" + +"Index name cannot be null!" "Numele indexului trebuie sa fie completat!" + +"Sort" "Sortare" + +"Import-Export table" "Import/Export tabela" + +"Point" "Selectează" + +"type" "tip" + +"You should supply a name for this sequence" "Ar trebui sa dai un nume secventei" + +"Remove link ?" "Stergeti aceasta legatura?" + +"You have to supply a table name!" "Trebuie sa introduceti numele tabelei!" + +"Report header" "Cap de raport" + +"Attributes" "Atribute" + +"Table '%s' already in schema" "Tabela '%s' exista deja pe plan!" + +"Username" "Utilizator" + +"Minvalue" "Valoare minimă" + +"Sequence name" "Nume secvenţă" + +"Define sequence" "Defineşte secvenţă" + +"Function" "Funcţie" + +"Sorting and filtering not (yet) available from queries!\n\nPlease enter them in the query definition!" "Sortari si filtrari nu se pot face din vizualizare selectii\n\nSpecificati-le in definitia selectiei!" + +"Reports" "Rapoarte" + +"primary key" "cheie primară" + +"Back" "Inapoi" + +"Columns" "Coloane" + +"Indexes" "Indecşi" + +"Permissions" "Drepturi" + +"not null" "nenul" + +"Cluster index" "Aglomerează indexul" + +"index columns" "compunerea indexului" + +"Add user" "Adaugă utilizator" + +"Change permissions" "Schimbă drepturile de acces" + +"select" "selecţii" + +"update" "actualizări" + +"insert" "inserări" + +"rule" "reguli" + +"Identification" "Identificare" + +"Owner ID" "ID-ul proprietarului" + +"Has primary key ?" "Are cheie primară ?" + +"Has rules ?" "Are reguli definite ?" + +"Statistics" "Statistice" + +"Number of tuples" "Număr înregistrări" + +"Number of pages" "Număr pagini" + +"Index name" "Nume index" + +"Index fields" "Coloanele indexului" + +"Table OID" "OID-ul tabelei" +}