Erneut Feldsymbole & Datenreferenzen

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
5 Beiträge • Seite 1 von 1
5 Beiträge Seite 1 von 1

Erneut Feldsymbole & Datenreferenzen

Beitrag von Vrosk ( / / 0 / 3 ) »
Hallo Allerseits,
ich bastle momentan an einem Programm das in OO geschrieben ist, aber folgendes Problem würde auch beim prozeduralen Stil auftreten.
Bin in ABAP leider noch nicht so fit und fange an zu verzweifeln :wink:

Als Beispiel können wir das Flugdatenmodell nehmen.
ich habe das ganze mal zum testen als einfachen Report versucht, und rufe im Laufe des Reports folgendes Unterprogramm auf

Code: Alles auswählen.

FORM SELECT_TABLES_FROM_DB.
  LOOP AT it_tables INTO wa_tables.
    gv_tablename = wa_tables-tabname.
    gv_tablenumber = wa_tables-tabnumb.
    PERFORM SELECT_DB_TABLE.
  ENDLOOP.
ENDFORM.                    "SELECT_TABLES_FROM_DB
In "it_tables" stehen Tabellennamen, denen auch eine Nummer zugewiesen ist.
Nehmen wir an es wären scarr (1); spfli (2) & sflight (3).

Jetz soll generisch jede Tabelle aus der Datenbank gelesen werden.

Code: Alles auswählen.

FORM SELECT_DB_TABLE.
  CREATE DATA it_db_table TYPE STANDARD TABLE OF (gv_tablename).
  ASSIGN it_db_table->* TO <it_db_table>.

  SELECT * FROM (gv_tablename) INTO TABLE <it_db_table>
           WHERE carrid IN so_carrid.
Das funktioniert soweit ganz gut, allerdings überschreibt er jedes mal <it_db_table>, so dass sie am Ende nur die Daten von "scarr" behinhaltet, ich wollte aber für jede Tabelle ein eigenes Ergebnis haben.

Habe deswegen Folgendes dazu geschrieben:

Code: Alles auswählen.

  
CASE gv_tablenumber.
    WHEN 1.
      ASSIGN it_db_table->* TO <it_table_1>.
      MOVE <it_db_table> TO <it_table_1>.
    WHEN 2.
      ASSIGN it_db_table->* TO <it_table_2>.
      MOVE <it_db_table> TO <it_table_2>.
    WHEN 3.
      ASSIGN it_db_table->* TO <it_table_3>.
      MOVE <it_db_table> TO <it_table_3>.
  ENDCASE.
ENDFORM.
Ist zwar nicht so schön, aber es funktioniert soweit.
Sinn sollte halt sein, dass ich jegliche Tabellennamen in die "it_tables" eintragen kann.
Wenn jemand hier schon eine Ahnung hat, wie man das sauberer machen könnte, wäre ich bereits sehr dankbar.

Mein eigentliches Problem liegt aber im Folgenden:
Ich will im Laufe des Programms auf bestimmte Teile dieser Feldsymbole zugreifen, bzw den Inhalt aus der Tabelle auf die sie zeigen. Dies ist aber nicht möglich, weil sie nicht mehr "assigned" sind.

Könnt ihr mir an diesem Punkt vielleicht helfen?
Ich will mir eben keine festdefinierte Tabellen erzeugen, sondern wenn möglich alles nur über solche Feldsymbole und Referenzen laufen lassen.

Wie ich das ganze nachher in Methoden verpacke ist dann hoffe ich mal das kleinere Übel.

Vielen Dank schon mal im voraus
& viele Grüße.

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Beitrag von Asaph (Expert / 580 / 6 / 1 ) »
Hi,

schau mal in die Hilfe zu assign component..:


Code: Alles auswählen.

 DO. 
    ASSIGN COMPONENT SY-INDEX OF 
           STRUCTURE STR TO <FS>. 
    IF SY-SUBRC <> 0. EXIT. ENDIF. 
    WRITE <FS>. 
  ENDDO. 

lg Andreas

Beitrag von Flo (Specialist / 161 / 0 / 0 ) »
warum sind die Feldsymbole denn nicht mehr assigned:)
eigetnlich sollten die ihre Referenz nicht von alleine verlieren können.:)

Beitrag von Vrosk ( / / 0 / 3 ) »
wenn ich das wüsste, das sagt mir zumindest der laufzeitfehler ;)

Es wurde auf ein noch nicht zugewiesenes Feldsymbol zugegriffen (Datensegment Nr. 12).

Dieser Fehler tritt auf, wenn
- ein typisiertes Feldsymbol angesprochen wird, bevor es mittels
ASSIGN gesetzt wird, oder
- ein Feldsymbol angesprochen wird, das auf die Zeile einer
internen Tabelle gezeigt hat, die gelöscht wurde, oder .....

zweiteres ist ja eigentlich nicht der fall, obwohl es wahrscheinlich auch für ganze tabellen gilt :/

Beitrag von Gast ( / / 0 / 3 ) »
Hi.

Du benötigst ein Feld in der Tabelle it_tables, in welchem Du die Referenz auf die mit CREATE DATA erzeugte interne Tabelle hältst.

Dann hast Du den Datenbanktabellennamen und einen Zeiger auf eine (dyn. erzeugte) interne Tabelle in Deiner it_tables.

Das sollte passen und die Referenz nicht mehr überschreiben.

Gruss, Tim

Seite 1 von 1

Vergleichbare Themen

1
Antw.
1582
Views
Datenreferenzen, SELECT mit INTO NEW
von rob_abc » 17.11.2024 10:14 • Verfasst in ABAP® für Anfänger
9
Antw.
5281
Views
Rückgabe von Datenreferenzen
von SaskuAc » 02.06.2017 11:01 • Verfasst in ABAP® Core
4
Antw.
2540
Views
Feldsymbole
von kleiner SAPler » 20.06.2006 08:14 • Verfasst in ABAP® Core
1
Antw.
3168
Views
Feldsymbole
von JetGum » 16.07.2007 14:03 • Verfasst in ABAP® für Anfänger
0
Antw.
1064
Views
Assign und Feldsymbole
von kleiner SAPler » 20.06.2006 07:53 • Verfasst in ABAP® Core

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

RFC vs. ODATA
vor 6 Tagen von DeathAndPain 8 / 2332
FUBA 'HR_INFOTYPES_OPERATION'
vor 6 Tagen von DeathAndPain 2 / 1429
Frage zur redefinierten Methode
vor einer Woche von ralf.wenzel 12 / 2725

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.