[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Feb 2004
    Beiträge
    15

    SQL Column id ODBC

    Hallo,

    eine Windowsanwendung soll über ODBC Daten aus einer mit DDS erstellten Datenbankdatei lesen und auch zurückschreiben. Es handelt sich dabei um eine Software, die mit Progress entwickelt wurde, Version 91C. Beim Versuch über den CA ODBC Treiber auf die AS400 zuzugreifen, bringt die Windows-Seite eine Fehlermeldung : 'kein column id Satz verfügbar'
    Jetzt fragen die mich, ob ich in die Tabelle column Ids einfügen kann.
    Kann ich ?
    Kann ich mit DDS ?
    Oder geht das nur mit SQL ?

    Vielen Dank für jede Hilfe !

    Gerhard Wörlein

  2. #2
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Hi,

    Bzgl. Tabellenerweiterung:

    1: Ja
    2: Ja
    3: Auch

    Wenn der Source der DDS-Tabelle noch vorhanden ist, kann dort das neue Feld hinzugefügt und die Tabelle erstellt werden.
    Vorher sollte jedoch die Original-Tabelle gesichert werden (zB. umbenennen, in eine andere Lib verschieben).
    Und dann entweder via Insert Into in SQL oder mit CPYF die alten Daten in die neue Tabelle hinzufügen.

    Oder mit Alter Table in SQL die Tabelle erweitern.

    Bzgl. des eigentlichen Problems:
    Ich würde vorher mal eine Testtabelle anlegen um zu probieren, ob diese Anwendung wirklich eine ID-Column benötigt. Nicht zu vergessen, dass jede Tabelle sowieso eine ID-Column besitzt (RRN).
    Select RRN(Tab1), Tab1.* from Tab1

  3. #3
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    ... die erste zu klärende Frage ist, ob diese Tabelle auch anderweitig benutzt wird, "Wat den einen sin Uhl is den andern sin Nachtigal."
    ... die zweite zu klärende Frage ist, was die (Postgres) Anwendung an dieser Stelle eigentlich für ein SQL Statement absetzt.

    @Andreas: RRN ist mitnichten sowas wie eine Column ID, sondern die physikalische Satznummer im Datensegment; bei anderen (richtigen) Datenbanken kommt man an dieses Teil aus gutem Grund nicht dran.

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  4. #4
    Registriert seit
    Aug 2006
    Beiträge
    2.114
    Hallo,
    ist doch schön zu hören das es noch Leute gibt die mit Progress arbeiten.
    Hatte in den 90er Jahren lange und intensiv damit gearbeitet, und muß sagen das war eine Datenbank und Programmiersprache die ich wirklich toll fand.
    GG

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Mit der Erweiterung von Tabellen, insb. DDS, würde ich vorsichtig sein, da ja meistens eine Vielzahl anderer OPM/ILE-Programme darauf zugreifen und bei Änderung auf die Schnautze fallen.
    Zusätzlich ist dann das Vergeben der ID nicht unproblematisch, da dies beim WRITE/INSERT in jedem Programm gemacht werden muss.

    Es stellt sich daher auch die Frage (wie Dieter schon sagt), was Progress denn da benötigt.
    Meist reicht da die Definition einer LF mit UNIQUE-Key. Man muss dann ggf. auf die LF und nicht die PF zugreifen.
    Manche Programmierumgebungen kommen auch nicht damit zurecht, wenn mehr als 31 LF's an einer PF hängen und somit der Verweis auf die LF eher Erfolg verspricht (z.B. MS-Access).
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  6. #6
    Registriert seit
    Apr 2005
    Beiträge
    104
    'kein column id Satz verfügbar'
    Anscheinend ist das nur grausig übersetzt. Oder ?

    Wenn eine eindeutige RowId gemeint ist, ok, dann erstellt man mit SQL eben so ein Zusatzfeld, und definiert in den Contraints, daß es automatisch gefüllt und hochgezählt wird. Beim INSERT läßt man dieses Feld einfach weg, denn die Datenbank erzeugt es wirklich selber.

    Beim Lesen und Updaten ist es doch ganz vorteilhaft, die Rows damit leicht unterscheiden zu können. Daß das Feld selber aber auch nicht upgedatet werden kann, ist wohl logo.

    Leider kenne ich kaum klassische AS400-Anwendungen, die so was benutzen. Um die Java-Programmierer aber glücklich zu machen, habe ich bei meinen Tabellen oft so ein Feld hinten angefügt, und es ansonsten komplett ignoriert.

  7. #7
    Registriert seit
    Feb 2004
    Beiträge
    15

    gelöst....

    Vielen Dank für die Antworten. Es handelt sich hier um eine zusätzliche Identitätsspalte, die von der AS400 selbst gefüllt wird - praktisch einen tabelleninternen Schlüssel.
    Jedes numerische Feld kann man als diesen Schlüssel definieren der dann auch bei write Operationen ohne SQL korrekt weitergezählt wird.
    Das Feld CID als solche column ID wird z.B. so erstellt :

    CID NUMERIC(15, 0) GENERATED ALWAYS AS IDENTITY
    (START WITH 1 INCREMENT BY 1
    NO MINVALUE NO MAXVALUE
    CYCLE NO ORDER
    CACHE 20 )
    Leider kann man an mit DDS definierten Tabellen solche Spalten nicht hinzufügen, es gibt auch kein DDS Schlüsselwort dafür.

  8. #8
    Registriert seit
    Apr 2005
    Beiträge
    104
    Ja, genau das meinte ich auch.

    Es ist übrigens gar nicht schwer, mit DDS definierte Datenbankdateien im interaktiven SQL zu selektieren, und mit F13 eine SQL-Ausgabedatei zu erstellen, die dann nicht mehr die DDS-Merkmale trägt. Bei dieser Kopie kann man dann in einem zweiten Schritt leicht die Identity-Colum mit ALTER TABLE hinzufügen, denke ich.

  9. #9
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Mit dem SQL-Befehl Alter Table kann man auch DDS-beschriebene physische Dateien verändern und SQL Informationen integrieren (z.B. Identity columns).

    Für ein erneutes Erstellen sollte man sich dann den SQL-Code über den iSeries Navigator (auf die Tabelle positionieren, Rechtsclick und SQL generieren auswählen) und am besten in ein Source Member sichern. Mit RUNSQLSTM könnte dann die Datei (basierend auf dem SQL-Befehl) erneut erstellt werden.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  10. #10
    Registriert seit
    Feb 2004
    Beiträge
    15

    ja und nein

    Wenn die Datei mit DDS erstellt wurde, kann ich mit alter table keine column id einfügen.
    Wenn ich die Datei mit SQL neu erstelle, kann ich mit alter table einfügen, was ich will.

Similar Threads

  1. MS Access ODBC mit JOIN: SQL FEHLER666
    By olafu in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 05-10-06, 08:13
  2. iSeries Access ODBC Driver und MS SQL Server ...
    By rcauchy in forum NEWSboard Windows
    Antworten: 1
    Letzter Beitrag: 23-06-05, 13:28
  3. SQL - eindeutige ID für Satz ?
    By sim in forum NEWSboard Programmierung
    Antworten: 9
    Letzter Beitrag: 23-12-04, 09:48
  4. MS Access SQL Abfrage über ODBC
    By Helwo in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 19-03-02, 09:01
  5. Antworten: 10
    Letzter Beitrag: 09-03-01, 10:38

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •