PostgreSQL GhostRec ? [erledigt]

Alles zum SQL-Dialekt

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

PostgreSQL GhostRec ? [erledigt]

Beitrag von AUGE_OHR »

hi,

ich frage mich gerade wie ich einen neuen Record aufnehme.
ich meine jetzt nicht INSERT ... nextVal() sondern die "Vorlage" von Felder etc.

ok ich habe die Informationen um über ein Array eine Maske zu "füllen" ... wie bei GOTO(0)
Zuletzt geändert von AUGE_OHR am Mi, 25. Jul 2012 0:01, insgesamt 1-mal geändert.
gruss by OHR
Jimmy
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: PostgreSQL GhostRec ?

Beitrag von UliTs »

Du mußt mengenorientiert denken :-) .
Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: PostgreSQL GhostRec ?

Beitrag von georg »

Hallo, Jimmy -


da SQL ja nicht nur Datenhaltung, sondern auch Datenbeschreibung ist, schreibt man eine kleine Funktion, die aufgrund der Datenbeschreibung einen solchen Ghost Record als Array abbildet, und beschickt die Dialog-Elemente mit den entsprechenden Werten.

Ach so, wenn's Dialog-Elemente geht, haben die doch eigentlich schon das richtige Format? Oder entscheidest Du aufgrund des Feldtyps aus dem Ghost Record, welches Dialog-Element Du verwendest?

Ein entsprechender Code-Abschnitt sieht bei mir so aus:

Code: Alles auswählen

oXbp := XbpSLE():new(...)
...
AAdd(aEntries, oXbp)
...
...
Xbp := XbpComboBox():new(...)
...
AAdd(aEntries, oXbp)

IF lFillFields
  nLen := Len(aData)
  FOR nI := 1 TO nLen
    aEntries[nI]:setData(aData[nI])
  NEXT
ENDIF
Da brauche ich keinen GhostRecord.


Gruss,

Georg

P.S.: Uli, über Deinen Rat muss ich jetzt erst mal meditieren ...
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: PostgreSQL GhostRec ?

Beitrag von brandelh »

georg hat geschrieben:da SQL ja nicht nur Datenhaltung, sondern auch Datenbeschreibung ist,
wie fragt man denn die Felder und Infos einer Datenbank und deren Tabellen per SQL ab ?
Gruß
Hubert
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: PostgreSQL GhostRec ?

Beitrag von UliTs »

Je nach SQL-Dialog gibt es für jede Datenbank (beim ADS: Data Dictionary) Standardtabellen, die z.B. alle darin enthaltenen Tabellennamen, Felder, User, etc. enthalten.
So kommt man an die Tabellennamen. Für die Eigenschaften der Tabellen (Feldnamen, RI's, Trigger, Beschreibungen, etc.) gibt es spezielle SQL-Befehle um diese abzufragen :-) .
Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: PostgreSQL GhostRec ?

Beitrag von georg »

Hallo, Hubert -


Standard (aber nicht zwingend ANSI) ist

Code: Alles auswählen

DESCRIBE tablename
Bei SQLite lautet der Befehl

Code: Alles auswählen

SELECT * FROM sqlite_master WHERE name = 'tablename'
Das letzte Feld enthält den CREATE TABLE Befehl, aus dem man sich die Felder und ihre Struktur abbilden kann/muss.


Gruss,

Georg
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
bgl
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 43
Registriert: Di, 30. Aug 2011 20:45

Re: PostgreSQL GhostRec ?

Beitrag von bgl »

brandelh hat geschrieben:
georg hat geschrieben:da SQL ja nicht nur Datenhaltung, sondern auch Datenbeschreibung ist,
wie fragt man denn die Felder und Infos einer Datenbank und deren Tabellen per SQL ab ?
Es gibt Systemtabellen/-views, in denen die Datenstrukturen beschrieben sind, hier ein Beispiel in PostgreSQL (aus der Konsole):

Code: Alles auswählen

zensiert=# \dv information_schema.
                            List of relations
       Schema       |               Name                | Type |  Owner
--------------------+-----------------------------------+------+----------
 information_schema | _pg_foreign_data_wrappers         | view | postgres
 information_schema | _pg_foreign_servers               | view | postgres
 information_schema | _pg_user_mappings                 | view | postgres
 information_schema | administrable_role_authorizations | view | postgres
 information_schema | applicable_roles                  | view | postgres
 information_schema | attributes                        | view | postgres
 information_schema | check_constraint_routine_usage    | view | postgres
 information_schema | check_constraints                 | view | postgres
 information_schema | column_domain_usage               | view | postgres
 information_schema | column_privileges                 | view | postgres
 information_schema | column_udt_usage                  | view | postgres
 information_schema | columns                           | view | postgres
 information_schema | constraint_column_usage           | view | postgres
 information_schema | constraint_table_usage            | view | postgres
 information_schema | data_type_privileges              | view | postgres
 information_schema | domain_constraints                | view | postgres
 information_schema | domain_udt_usage                  | view | postgres
 information_schema | domains                           | view | postgres
 information_schema | element_types                     | view | postgres
 information_schema | enabled_roles                     | view | postgres
 information_schema | foreign_data_wrapper_options      | view | postgres
 information_schema | foreign_data_wrappers             | view | postgres
 information_schema | foreign_server_options            | view | postgres
 information_schema | foreign_servers                   | view | postgres
 information_schema | information_schema_catalog_name   | view | postgres
 information_schema | key_column_usage                  | view | postgres
 information_schema | parameters                        | view | postgres
 information_schema | referential_constraints           | view | postgres
 information_schema | role_column_grants                | view | postgres
 information_schema | role_routine_grants               | view | postgres
 information_schema | role_table_grants                 | view | postgres
 information_schema | role_usage_grants                 | view | postgres
 information_schema | routine_privileges                | view | postgres
 information_schema | routines                          | view | postgres
 information_schema | schemata                          | view | postgres
 information_schema | sequences                         | view | postgres
 information_schema | table_constraints                 | view | postgres
 information_schema | table_privileges                  | view | postgres
 information_schema | tables                            | view | postgres
 information_schema | triggered_update_columns          | view | postgres
 information_schema | triggers                          | view | postgres
 information_schema | usage_privileges                  | view | postgres
 information_schema | user_mapping_options              | view | postgres
 information_schema | user_mappings                     | view | postgres
 information_schema | view_column_usage                 | view | postgres
 information_schema | view_routine_usage                | view | postgres
 information_schema | view_table_usage                  | view | postgres
 information_schema | views                             | view | postgres
(48 rows)
Das wäre die Liste aller VIEWs, aus denen man sich die entsprechenden Informationen über die jeweilige Datenbank besorgen kann.

Hier ein Beispiel für den Aufbau einer solchen Tabelle (gekürzt: SQL code des VIEWs habe ich weggelassen weil hier erstmal irrelevant):

Code: Alles auswählen

zensiert=# \d information_schema.tables
                       View "information_schema.tables"
            Column            |               Type                | Modifiers
------------------------------+-----------------------------------+-----------
 table_catalog                | information_schema.sql_identifier |
 table_schema                 | information_schema.sql_identifier |
 table_name                   | information_schema.sql_identifier |
 table_type                   | information_schema.character_data |
 self_referencing_column_name | information_schema.sql_identifier |
 reference_generation         | information_schema.character_data |
 user_defined_type_catalog    | information_schema.sql_identifier |
 user_defined_type_schema     | information_schema.sql_identifier |
 user_defined_type_name       | information_schema.sql_identifier |
 is_insertable_into           | information_schema.character_data |
 is_typed                     | information_schema.character_data |
 commit_action                | information_schema.character_data |
Und hier noch ein kleines Beispiel für den Inhalt:

Code: Alles auswählen

zensiert=# SELECT table_schema, table_name, table_type from information_schema.tables WHERE table_schema='information_schema' LIMIT 5;
    table_schema    |        table_name        | table_type
--------------------+--------------------------+------------
 information_schema | user_mapping_options     | VIEW
 information_schema | user_mappings            | VIEW
 information_schema | tables                   | VIEW
 information_schema | triggered_update_columns | VIEW
 information_schema | triggers                 | VIEW
(5 rows)
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: PostgreSQL GhostRec ?

Beitrag von brandelh »

Danke für die Info.
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: PostgreSQL GhostRec ?

Beitrag von AUGE_OHR »

brandelh hat geschrieben:wie fragt man denn die Felder und Infos einer Datenbank und deren Tabellen per SQL ab ?
hier für PostgreSQL

Code: Alles auswählen

::exec( "SELECT column_name, data_type, character_maximum_length, numeric_precision, numeric_scale "+;
           "FROM information_schema.columns WHERE table_name='" + cTable + "'" )
das ganze ist übrigens in der METHOD PGSql:dbStruct( cTable ) (siehe PgSql.PRG / LibPG4ot.DLL )
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: PostgreSQL GhostRec ?

Beitrag von AUGE_OHR »

hi,
bgl hat geschrieben:Es gibt Systemtabellen/-views, in denen die Datenstrukturen beschrieben sind, hier ein Beispiel in PostgreSQL (aus der Konsole):

Code: Alles auswählen

zensiert=# \dv information_schema.
WOW ... DANKE =D>

Frage eines PG Newbie : "wie" gibst du es in der Console aus ? hat das was mit dem "# \dv" zu tun ?
gruss by OHR
Jimmy
bgl
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 43
Registriert: Di, 30. Aug 2011 20:45

Re: PostgreSQL GhostRec ? [erledigt]

Beitrag von bgl »

Ich benutze für den Zugriff das Konsolen-Interface, was bei der Datenbank dabei sein sollte: psql

Vermutlich kann man den Befehl aber auch analog in pgAdmin ausführen. Benutze ich nur relativ selten ;-)
Antworten