Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Alte DB aufbohren

Begonnen von pampel, Januar 20, 2015, 06:42:07

⏪ vorheriges - nächstes ⏩

pampel

Hallo zusammen,
in einer alten DB soll in einem Bericht ein Feld ergänzt werden. Die DB-Strukur, d.h. die Tabellen/Beziehungen/Abfragen usw. ist nicht optimal, sollen (ja dürfen) aber (momentan) nicht verändert werden. Nun wurde ich, selbst kein Profi, gefragt, ob man in einem Bericht noch ein Feld aufnehmen kann.

Der Bericht tut bisher genau das, was er soll. An einer Stelle wir jedoch nur eine "Artikel-Nr" ausgewiesen, dort soll nun noch hinten dran die Beschreibung gedruckt werden. Ich habe nun ein ungebundenes Listenfeld eingefügt und wollte mit der folgenden (prinzipiellen) Konstruktion das Feld füllen:

SELECT tabelle.beschreibung FROM tabelle WHERE tabelle.artikelnummer = wert_aus_feld_artikelnummer_in_bericht;

Das klappt so nicht, denn ich bekomme ein Eingabefeld angezeigt mit einer Wertabfrage. Wenn ich in dieses Eingabefeld die richtige Artikelnummer eingebe, dann erscheint die richtige Beschreibung auch im neuen Listenfeld des Bericht. Prinzipiell ganau das, was ich will.

Mir fehlt aber die richtie Syntax, um den Wert aus dem Feld "Artikelnummer" des Berichts auszulesen. Ich habe schon "Me!Feldname!Value" (auch mit Punkt dazwischen) und ähnliche Konstruktionen ausprobiert, es klappt aber nicht.

Wie muss ich dieses SELECT in der Datensatzherkunft des Listenfeldes aufbauen, damit es mir jeweils die Artikelnummer aus den feldern ausliest und die Beschreibung in das neu eingefügte Feld schreibt?

Danke für Hnweise.


Gruß,

Stefan

MzKlMu

#1
Hallo,
das brauchst Du alles nicht, es würde auch nicht funktionieren. Ein Listenfeld macht auf einem Bericht auch keinen Sinn. Nimm die Tabelle mit der Beschreibung mit in die Datenherkunft des Berichts auf, mit der Verknüpfung über die Artikelnummer. Dann hast Du das Feld direkt zur Anzeige zur Verfügung.

Wie ist die Datenherkunft des Berichts ?
Gruß Klaus

pampel

Hallo,

OK - Du Guru - ich Newbie (nicht ganz) - vielen Dank zunächst für Deine Hinweise.

Trotzdem - ich kann momentan nichts an der DB verändern und diese Ergänzung soll schnell umgesetzt werden.

Da es ja prinzipiell möglich ist, den Wert aus dem Feld "Artikel-Nr" auszulesen, z.B. durch
Private Sub Report_Load()
  MsgBox "wert " & feld_mit_artikelnummer.Value
End Sub

oder in einem Texfeld im Steuerelementinhalt
=[feld_mit_artikelnummer].[Wert]

muss es doch möglich sein, damit auch ein SELECT zu stricken, der mir aus der Tabelle die Beschreibung druckt.

Auch wenn's vielleicht nicht richtig ist - ich brauche es genau so.


Danke für weitere Hinweise.

Gruß,

Stefan

MzKlMu

Hallo,
sorry, Du musst doch an der DB nichts verändern. Nur die Abfrage. Das ist eine Kleinigkeit. Und das Feld im Bericht muss ja auch dazu, dann kannst Du doch auch gleich die Abfrage für den Bericht ändern.

Mit Select kann man keinen einzelnen Wert aus einer Tabelle holen und in einem Feld darstellen. Dazu wäre DLookup() mit seinen Parametern und Kriterien notwendig. Aber das ist alles aufwendiger als die Abfrage zu ändern.
Gruß Klaus

pampel

Hallo,

die Tabelle (die ganze DB) ist nicht normalisiert, es hat ein "Bekannter eines Bekannten" so nebenbei mal gemacht. Daher kann und will ich nichts an der Struktur verändern.

Es ist sicher nicht das gelbe vom Ei, aber mein Lösungswunsch ist es eben, dieses SELECT-Statement richtig zu schreiben und den Wert dieses Textfeld auslesen zu können.

Wie gesagt: Access erkennt einen Fehler in diesem SELECT und fragt den Wert, der in dem Textfeld steht, mit einem eigenen Dialog ab. Gebe ich in diesen die richtige Artikel-Nr ein, dann erscheint in meinem Listenfeld die gewünschte Beschreibung im Listenfeld - so wie ich es will und wie's sein soll.

Mein Problem ist es, den Wert aus dem Textfeld "richtig" in das SELECT einzubinden. Ich habe es mit
SELECT bla FROM blub WHERE ArtikelNr =
- Me!name_des_textfeldes.value,
- Me.name_des_textfeldes.value,
- Forms!Name_des_Formulars!name_des_textfeldes.value
- usw.

ausprobiert. Doch immer kommt dies Dialogfeld mit der Wertabfrage.

Daher - wie muss das SELECT (vor allem das WHERE) geschrieben werden, um den Wert eines Textfeldes auszulesen und richtig einzubinden? Wenn ich eine entsprechende Abfrage mit einem festen Wert für die Artikelnummer zusammenbaue, dann liefert auch die die richtige Beschreibung.

Danke für Hinweise.


Gruß,

Stefan

MzKlMu

Hallo,
Du solltest lesen, was man Dir schreibt.
Zitat von: MzKlMuMit Select kann man keinen einzelnen Wert aus einer Tabelle holen und in einem Feld darstellen. Dazu wäre DLookup() mit seinen Parametern und Kriterien notwendig.
Im DLookup Befehl kannst Du die Artikelnummer als Where Klausel übergeben.

DLookup("Beschreibung","TabelleName","Artikelnummer = " & ArtikelnummerAusFormular)

Ich kann absolut nicht verstehen, warum Du nicht einfach die Abfrage änderst. Mit Änderung an der Abfrage wird keine Struktur verändert.
Gruß Klaus

pampel

Danke!

Du solltest lesen, was man Dir schreibt. - Dito


Gruß,

Stefan