Supportnet Computer
Planet of Tech

Supportnet / Forum / Datenbanken

Die 3Preise Problem Frage





Frage

Also erstmal Hallo zusammen, Ich habe vollgendes Problem. Ich habe eine ArtikelNr eine Artikelbezeichnung und zu jedem Artikel habe ich 3 ab und zu sogar 4 Preise. Dieses Problem habe ich versucht über die SQL Abfrage zu lösen und zwar so in der einen Listbox habe ich volgendes als Datensatzherkunft angegeben : SELECT DISTINCTROW tblGruppe.wasid, tblGruppe.gruppe FROM tblGruppe; und in der zweiten Listbox habe ich volgendes in der Datensatzherkunft angegeben: SELECT DISTINCTROW tblUntergruppe.untergruppeid, tblUntergruppe.text1, tblUntergruppe.wasid FROM tblUntergruppe GROUP BY tblUntergruppe.untergruppeid, tblUntergruppe.text1, tblUntergruppe.wasid HAVING (((tblUntergruppe.wasid)=[forms]![frmWinWordDemoAdresse]![cb1])); Das alles funktioniert auch alles schön und gut. Nur das Problem bei der Ausgabe an WinWord wird statt Gruppe wird mir die Id angezeigt. Wenn ich aber die Reihenfolge in SQL ändere bzw in der SQL Anweisung. Dann spuckt er mir in Winword die Gruppe aus aber in der Access Oberfläche stehen jetzt die Zahlen drinnen. Ich weiß einfach keinen Rat mehr. Ich hoffe das ich in diesem Forum hilfe bekomme. Danke im Vorraus

Antwort 1 von disco

moin

versteh dein problem jetzt nicht so ganz. hab auch keine erfahrungen mit office anwendungen auf datenbanken.

du lässt also dein result der anfrage irgendwo ausgeben. und in dieser ausgabe wird dir statt der gruppe die id angezeigt?!

soweit richtig?

wenn du das statement jetzt änderst, also die spalte mit dem namen nach vorne brings, bekommst du in word den gruppennamen angezeigt, aber in access wird immer noch die id angezeigt?!

g,
disco

Antwort 2 von derparnia

fast alles richtig. Ich verusche es mal mit einem Beispiel zu erklären.

Also ich habe zwei Listenfelder. in dem ersten kann man auswählen zwischen Hardware (ID=1) und Software (ID=2)

und im zweiten kann man wenn man Hardware ausgewählt hat zwischen CPU(ID=5) und Grafikkarte(ID=6) auswählen

Soweit so gut. Das alles funktioniert auch. Nun möchte ich es aber an Word ausgeben. Jetzt erscheint aber in Word statt Hardware und CPU die ID´s 1 und 5

Ändere ich jetzt in der SQL- Anweisung die Plätze. Dann wird an Word der Name ausgegeben. Aber in der Access Oberfläche Stehen jetzt im Listenfeld die Zahlen drinnen. Also grad das umgekehrte Problem.

Antwort 3 von derparnia

Ich kann dir auch die Access Datenbank schicken ist glaub ich einfacher es dir anzuschauen als es hier zu erklären

Antwort 4 von disco

das würd nich viel bringen, kenn mich zwar mit SQL aus, aber hab noch nie was mit access gemacht.

schreib hier einfach mal die relevanten tabellen, und spalten rein. und was du genau für ein ergebnis ahben möchtest.
ungefär so:

tabelle1=
{
spalte1
name
id
}

tabelle2=
{
bla
spalte2
usw.
}

Antwort 5 von derparnia

Ok dann schreibe ich mal die wichtigten Tabellen hin


tblGruppe=

wasid gruppe
1 hardware
2 software
3 dienstleistung


tblArtikel=

text1 untergruppeid artikelid
233mmx cpu 1
win98 betriebssystem 2
....etc


tblUntergruppe=

untergruppeid text1 wasid
1 mainboard hardware
2 cpu hardware
5 ae-technik dienstleistung
9 office anwendung software
...etc

Alle tabellen sind miteinander Verknüpft.

Es gibt 3 Listenfelder mit einem Dropdown Menu.

Wo man z.B.: im ersten Listenfeld (namedeslistenfeldes=cb1): Hardware im zweiten Listenfeld (namedeslistenfeldes=cb2): CPU und im dritten Listenfeld (namedeslistenfeldes=cb3): 233mmx auswählen kann.

im ersten Listenfeld(cb1) steht folgende Anweisung:

SELECT DISTINCTROW tblGruppe.wasid, tblGruppe.gruppe FROM tblGruppe;

im zweiten Listenfeld(cb2) steht folgende Anweisung:

SELECT DISTINCTROW tblUntergruppe.untergruppeid, tblUntergruppe.text1, tblUntergruppe.wasid FROM tblUntergruppe GROUP BY tblUntergruppe.untergruppeid, tblUntergruppe.text1, tblUntergruppe.wasid HAVING (((tblUntergruppe.wasid)=[forms]![frmWinWordDemoAdresse]![cb1]));

und im dritten Listenfeld(cb3) steht folgende Anweisung:

SELECT DISTINCTROW tblArtikel.artikelid, tblArtikel.text1, tblArtikel.untergruppeid FROM tblArtikel WHERE (((tblArtikel.untergruppeid)=[forms]![frmWinWordDemoAdresse]![cb2]));


Also ich möchte einfach das der in Listenfeld ausgewählte Inhalt sowohl in Access als auch in Word angezeigt wird und nicht die ID´s.

Ich hoffe ich habe es richtig aufgelistet.

und danke für deine Hilfe

Gruss
derparnia

Antwort 6 von disco

wie gesagt. kein plan von wor und access. aber wie ich dein problem jetzt verstehe. bekommst du mit dem gleichen sql-statement zwei verschiedene ergebnisse.
das kann ja so nicht sein

ich vermute jetzt erstmal, dass du die ergebnisse unterschiedlich verarbeitest/auswertest.

kannste mal in den beiden programen gucken, ob du dir auch die gleichen sachen aus dem result ziehst?

ich schau mir auch mal deine tabellen an

Antwort 7 von derparnia

Also wenn ich hardware, CPU und 233mmx auswähle dann erscheint in Word die Zahlen 1, 2 und 1. Also immer derren ID´s mit welchen die Tabellen miteinander verknüpft sind.

Antwort 8 von disco

sorry.
ich kann mir das auch gerade auch nur schwer bildlich vorstellen, da ich nichts mit office am hut habe. und deine probleme haben wohl nichts mit der DB oder dem Statement zu tun, sondern eher mit dem aufruf, bzw. der anzeige im word.

wenn da jetzt nicht noch was von jemand anderen kommt solltest du die frage vielleicht morgen mal neu stellen, da durch die vielen antworten, die wir produziert haben, die chance klein geworden ist, dass hier noch wer weiterliest.

viel glück noch

Antwort 9 von derparnia

Hmm also liegt es an der Ausgabe die an Word ausgegeben wird. Habe dir als letztes funken Hoffnung. Einen teil des Quelltext der Ausgabe hier reinkopiert. Vielleicht hilft es dir ja doch nocht. Wenn nicht will ich mich an dieser Stelle nochmals bei dir Bedanken das du dir die Zeit genommen hast mir zu helfen.

Gruss
derparnia



Option Compare Database
Option Explicit


´Aufruf:
´Diese Maske muß aus einer "Hauptmaske" heraus aufgerufen werden. Diese Hauptmaske muss alle Felder,
´die an WinWord übergeben werden sollen, enthalten.
´
´Der Aufruf muß als Openargs den Namen der "Hauptmaske" enthalten.
´Aufruf:
´           DoCmd.OpenForm "frmWinWord aufrufen", , , , , , Me.Name




Private Sub btnWinWord_Click()
Dim appWd As Word.Application
Dim WordDoc As Word.DOCUMENT
Dim Nix

Dim ctl As Control

Dim db As Database
Dim rst As Recordset
Dim rst1 As Recordset
Dim STextmarke As String
Dim SFeldName As String
Dim SMuss As Boolean

    
    With appWd
        ´ Vorlage als Dokument öffnen
        .Documents.Add Template:=Chr(34) & Me!Vorlage & Chr(34)

´ Textmarken / Feldnamen aus Tabelle "tblWordBrfSetup" einlesen, alle Textmarken durchlaufen
´ Messagebox, wenn Textmarke fehlt, sie aber als MUSS deklariert ist.

        Set db = CurrentDb
        Set rst = db.OpenRecordset("SELECT * FROM tblWordBrfSetup;", dbOpenDynaset)
                   
            Do While Not rst.EOF
                        
                rst.Edit
            
                    STextmarke = rst.Fields(0)
                    SFeldName = rst.Fields(1)
                    SMuss = rst.Fields(2)
    
                    If SMuss = True And .ActiveDocument.Bookmarks.Exists(STextmarke) = False Then
                            Nix = MsgBox("Textmarke " & STextmarke & " fehlt", vbCritical + vbOKCancel, "Textmarke ist Pflicht")
                            If Nix = vbCancel Then
                                .Quit (wdDoNotSaveChanges)
                                Exit Sub
                            End If
                    End If
                    
                    If .ActiveDocument.Bookmarks.Exists(STextmarke) = True Then
                        If ControlExist(Forms(Me.OpenArgs), SFeldName) Then
                            .ActiveDocument.Bookmarks(STextmarke).Select
                            .Selection.InsertAfter Nz(Forms(Me.OpenArgs)(SFeldName))
                        Else
                            Nix = MsgBox("Feldname " & Chr(34) & SFeldName & Chr(34) & " falsch / fehlerhaft", vbCritical + vbOKCancel, "Feldname fehlt, Maske: " & Forms(Me.OpenArgs).Name)
                            If Nix = vbCancel Then
                                .Quit (wdDoNotSaveChanges)
                                Exit Sub
                            End If
                        End If
                    End If
                       
                                               
    ´            rst.Update  ´Kein Update erforderlich, da nur lesend
                
                rst.MoveNext
                If rst.EOF Then Exit Do    ´ für den Fall, daß wir uns auf dem letzten Datensatz befinden
                
            Loop
            
            rst.Close
        
 
    
  




Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: