Office: Tabelle A + Tabelle B = Tabelle C - nur wie?

Helfe beim Thema Tabelle A + Tabelle B = Tabelle C - nur wie? in Microsoft Access Hilfe um das Problem gemeinsam zu lösen; Hallo, ich habe drei Tabellen - aus der Tabelle A möchte ich verschiedene Zeilen zusammen mit einem bestimmten Wert der Tabelle B - in die Tabelle... Dieses Thema im Forum "Microsoft Access Hilfe" wurde erstellt von Schlauchi, 6. März 2009.

  1. Schlauchi Erfahrener User

    Tabelle A + Tabelle B = Tabelle C - nur wie?


    Hallo,

    ich habe drei Tabellen - aus der Tabelle A möchte ich verschiedene Zeilen zusammen mit einem bestimmten Wert der Tabelle B - in die Tabelle C kopieren.

    Tabelle A
    Spalte A Spalte B Spalte C Spalte D
    Kuchen 500g 2,00 Euro Index 1
    Brot 1000g 4,50 Euro Index 2

    Tabelle B
    Spalte A Spalte B
    Kunde E Max Mustermann
    Kunde X Xaver Heinemann
    Kunde C Sonja Sonnenschein

    Tabelle A wird nun gefiltert - das nur noch die Daten angezeigt werden die ich möchte.
    Tabell B - Kunde wird ausgewählt.

    in Tabelle C

    Nun soll aus Tabelle A und Tabelle B - die Daten in Tabelle C kopiert werden:

    Kunde X Brot 1000g 4,50 Euro
    Kunde X Kuchen 500g 2,00 Euro


    Ich schaffe es zwar ohne Probleme zwei Tabellen zu kopieren - aber nicht Werte aus 2en in eine Dritte.

    Hat da jemand eine Idee???

    So sieht derzeit der Code aus - TLC kommt aus Tabelle B - und soll beim einfügen in Tabelle C immer gleich bleiben.
    -----------------------------------------------------------------------------
    Private Sub cmdRealiseren_Click()

    Dim sqlRealiseren As String
    Dim sqlDelete As String
    Dim rs As DAO.Recordset
    Dim Ans As Integer
    Dim StName As String

    StName = Me.TLC

    sqlRealiseren = "INSERT INTO LSO " _
    & "SELECT * FROM PLO " _
    & "WHERE ETE <> 0; " _
    & "SET TLC = StName"



    Set rs = CurrentDb.OpenRecordset("Select Count(*) As [Recs] FROM PLO WHERE ETE <> 0")

    Ans = vbNo
    If rs![Recs] = 0 Then
    MsgBox "No Lessons to Copy", vbInformation, "No Lessons"
    Else
    Ans = MsgBox(rs![Recs] & " lessones will be added to student Plan" & vbCrLf & vbCrLf & _
    "Is that OK?", vbQuestion + vbYesNo, "Copy Lessons to Student Plan")
    End If
    rs.Close
    Set rs = Nothing

    If Ans = vbYes Then
    On Error Resume Next
    CurrentDb.Execute sqlRealiseren, dbFailOnError
    Debug.Print CurrentDb.RecordsAffected
    If Err.Number <> 0 Then
    MsgBox "INSERT FAILED" & vbCrLf & _
    Err.Number & " - " & Err.Description
    Err.Clear
    End If
    DBEngine.Idle dbRefreshCache

    'CurrentDb.Execute sqlDelete, dbFailOnError
    Debug.Print CurrentDb.RecordsAffected
    If Err.Number <> 0 Then
    MsgBox "DELETE FAILED" & vbCrLf & _
    Err.Number & " - " & Err.Description
    Err.Clear
    End If
    DBEngine.Idle dbRefreshCache
    End If
    DoCmd.Requery

    End Sub
     
    Schlauchi, 6. März 2009
    #1
  2. miriki Erfahrener User
    Hmmm... Wenn Du aus einer Tabelle in eine andere kopierst, sieht der SQL-Code ja so ähnlich aus wie:
    Code:
    INSERT INTO
      tabelle3
      ( feld3a, feld3b, ... )
    SELECT
      feld1a as feld3a, feld1b as feld3b, ...
    FROM
      tabelle1
    WHERE
      bedingung
    ORDER BY
      feld1a
    ;
    Interessant ist, wie Du die Felder aus tabelle2 jetzt noch mit an die von tabelle1 anhängen kannst. Wenn Du die 2 oder so Felder im Formular stehen hast, könntest Du direkt darauf zugreifen und sie als Konstante in das SQL-Statement mit einbauen:
    Code:
    [...]
    SELECT
      feld1a as feld3a, feld1b as feld3b,
      konstante1 as feld3c, konstante2 as feld3d, ...
    FROM
      tabelle1
    [...]
    Alternativ könntest Du natürlich sonst auch was mit JOIN versuchen. Aber vielleicht geht es mit o.a. leichter und schneller.

    Gruß, Michael
     
    miriki, 9. März 2009
    #2
  3. Schlauchi Erfahrener User
    An der Bedingung hänge ich

    Hi Michael,

    danke fürs feedback. Also irgendwo bleib ich immer hängen... Die Tabelle B war als "Bedingung" gedacht - gleiche Werte werden in neue Tabelle kopiert.

    Des geb ich jetzt auf. Gibts ne einfache Möglichkeit hier einen Eingabewert aus ner Fragebox - oder einfach aus einem Feld aus dem Formular hier die "WHERE" Bedingung zu füttern?

    Sonst füge ich da ein Dummy Feld zum anhacken ein. Das funktioniert ohne Probleme. Ist aber nur sinnvoll wenn ich nur wenige Datensätzte kopieren möchte....

    Idee?

    Oder könnte ich da einfach die Zeilen Markieren... und wie mit STRG+C und STRG+V wieder in Tabelle C einfügen?

    Danke und Gruß
    Björn
     
    Schlauchi, 10. März 2009
    #3
  4. miriki Erfahrener User

    Tabelle A + Tabelle B = Tabelle C - nur wie?

    Re: An der Bedingung hänge ich

    Kannst Du denn mal ausformulieren, was und unter welcher Bedingung Deine Abfrage denn nun wirklich konkret kopieren soll?

    Bislang war ja nur von Kopieren die Rede, was sich mit INSERT .. SELECT erledigen läßt. Aber Bedingungen müßten mit WHERE eingebunden werden. Mein Rateversuch hat es ja demnach nicht so ganz getroffen...

    Gruß, Michael
     
    miriki, 10. März 2009
    #4
  5. Schlauchi Erfahrener User
    so.... mal ne genaue Beschreibung.

    Hallo Michael,
    sorry für die wage Beschreibung.

    Also - ich habe eine Tabelle A - eines der Felder lautet "TLC" - der immer aus 3 Buchstaben besteht.

    Ich möchte per Knopfdruck - das alles was in der Tabelle A mit einem bestimmten 3 BuchstabenCode (TLC) ist - in Tabelle C kopiert wird.

    Lösungsversuch 1:
    So entwender soll ein PopUp erscheinen wo ich den TLC eingebe... und er kopiert eben dann diese Datensätze mit dem TLC feld was dem Eingabefeld entspicht.

    ODER

    Lösungsversuch 2:
    Ich habe ein TEXT Feld in meinem Formular - das als Variable für den WHERE herangenommen wird.

    ODER

    Lösungsversuch 3:
    Aus einem Dropdown im Formular (wo ich Werte aus Tabelle B - auch wieder das Feld "TLC" (diesemal aus dem KundenstammTabelle)) - auswähle - und dann diesen Wert nehme - als WHERE Bestimmung.
    Dies war der Ursprüngliche Wunsch/Gedanke - weil es für den User am einfachsten wäre.

    Ich schaffe es aber nicht -
    SELECT * Tabelle_A WHERE TLC = "diese Variable aus Lösung 1, 2 oder 3"
    zu definieren.

    Ist bestimmt einfach - und ich denke zu kompliziert. :roll:

    Einer er Wege müsste doch möglich sein... er kopiert mir ja alles - aber diesen "Filter" will er mir einfach nicht nehmen....

    Danke
     
    Schlauchi, 10. März 2009
    #5
  6. miriki Erfahrener User
    Re: so.... mal ne genaue Beschreibung.

    Nur, um nochmal ganz sicher zu gehen: Es sind eigentlich 2 Bedingungen, die erfüllt sein müssen, oder? Zum einen muß das Feld TLC in Tabelle1 mit dem im Formular gewählten Wert übereinstimmen, zum anderen muß das Feld TLC aus Tabelle 2 mit einem anderen im Formular gewählten Wert übereinstimmen?

    Also grob: Kopiere alle Werte aus Tabelle1+Tabelle2 in Tabelle3, bei denen Tabelle1.Tlc=Suchwert1 and Tabelle2.Tlc=Suchwert2

    Das wäre in Richtung JOIN, sieht mir aber irgendwie nach einer "schief und krumm" Geschichte aus. Denn wie sollen die Daten aus Tabelle1 und Tabelle2 miteinander verknüpft werden, wenn die Ergebnismengen aus den jeweiligen Bedingungen unterschiedlich groß sind?

    Oder sind Tabelle1 und Tabelle2 gleich aufgebaut und die beiden Teilmengen sollen nicht nebeneinander (Tabelle2 ergänzt Tabelle1 um zusätzliche Spalten) sondern untereinander (Tabelle2 stellt zusätzliche Zeilen zu Tabelle1 dar) in das Ergebnis kopiert werden?

    Also grob fomuliert: Kopiere alle Zeilen aus Tabelle1 in Tabelle3, bei denen Tabelle1.Tlc=Suchwert1. Kopiere dann alle Zeilen aus Tabelle2 in Tabelle 3 (anhängen), bei denen Tabelle2.Tlc=Suchwert2.

    Dann wäre es eher ein Thema für UNION.

    Gruß, Michael
     
    miriki, 10. März 2009
    #6
  7. Schlauchi Erfahrener User
    ...

    Tabelle 1 und Tabelle 3 sind von den Feldern 100% identisch.

    Tabelle 1 hat viele Werte verfügbar (so wie ein Katalog). Tabelle 1 zeigt mir im vonerein nur Werte an - die ich auch dem Kunden zuordnen könnte (bestimmte Bedingungen müssen erfüllt sein).
    Allerdings zeigt mit Tabelle 1 alle Werte an - die Für x-beliebige TLC (KundenCode) möglich wären.

    Nun möchte ich bestimmte Arktikel mit Beschreibung von Tabelle 1 in Tabelle 3 kopieren.

    Wenn ich nun mein Formular öffne - wähle ich als erstes einen Kunden aus der Stammdatenbank aus.

    So - quasi oben steht ein TLC mit dem dazugehörigen Namen - zwei seperate Felder.

    Tabelle 1 ist zum TLC des Formulars gelinkt - zeigt mir also nur die Datensäzte an, die den gleichen TLC haben - den ich ausgewählt habe.

    Tabelle 3 ist ebenfalls zum TLC gelinkt - zeigt mir an, was der Kunde schon alles in seinem Warenkorb hat. (Was er hat - wird in Tabelle 1 schon nicht mehr angezeigt).


    Tabelle 1 ist ja durch die Verlinkung gefiltert - im Hintergrund wären ja mehr Daten da...
    Deswegen - wenn ich mir nun einen Kunden aufrufe - möchte ich eben auch nur seine Daten kopieren können - bzw. die ich mir in der Tabelle 1 gefiltert habe.

    Aus Tabelle 2 wird NICHTS mitkopiert! Da wäre einfach nur ein TLC aus einem Dropdown verfügbar - um mir den Kundendatensatz für Tabelle 1+3 anzuzeigen.

    Gruß
    Björn
     
    Schlauchi, 10. März 2009
    #7
  8. miriki Erfahrener User

    Tabelle A + Tabelle B = Tabelle C - nur wie?

    Re: ...

    Ich weiß nicht, ob wir uns langsam nähern, aber ich versuch's nochmal:

    Tabelle1 - Artikelstamm:
    Artikel, Tlc

    Tabelle2 - Kundenstamm:
    Tlc, Kunde

    Tabelle3 - Warenkorb:
    Tlc, Artikel

    Formular zeigt alle Datensätze des Tlc, der in einer Kombobox, die auf Tabelle2 basiert, ausgewählt wurde.

    In Tabelle1 sind also z.B. 100 Datensätze, aber nur die 5, die ein Tlc von z.B. "135" haben, werden im Formular angezeigt. Die Kombobox enthält dabei jetzt den Wert "135" und in einem Feld daneben wird der Name z.B. "Hans Müller" angezeigt. Die 5 Datansätze werden jetzt in einem Endlos-Formular untereinander oder in einem Einzelformular hintereinander (Navigations-Buttons) angezeigt. Ein Umschalten auf einen anderen Tlc / Kunden in der Kombobox bewirkt ein neues Filtern des Formulars auf den dann aktuellen Tlc.

    Und jetzt... Genau welche Datensätze aus Tabelle1 sollen jetzt in Tabelle3 kopiert werden? Alle 5 aus obigem Beispiel? Oder soll da noch ein weiteres Filter-Argument greifen?

    Wenn nein, dann sieht das eigentlich ganz simpel aus:
    Code:
    INSERT INTO
      tabelle3
      ( feld3a, feld3b, ... )
    SELECT
      feld1a, feld1b, ...
    FROM
      tabelle1
    WHERE
      feld1a=suche1
    ;
    Und das würde in VBA dann ungefähr so aussehen:
    Code:
    dim tlc as string
    dim tabelle1 as string
    dim tabelle3 as string
    
    tlc = me!kombinationsfeld1.text
    tabelle1 = "tabelle1"
    tabelle2 = "tabelle3"
    
    sqlcopy = "INSERT INTO " & tabelle3 & " ( feld3a, feld3b, ... ) SELECT feld1a, feld1b, ... FROM " & tabelle1 & " WHERE feld1a='" & tlc & "';"
    docmd.runsql sqlcopy
    Gruß, Michael
     
    miriki, 10. März 2009
    #8
  9. Schlauchi Erfahrener User
    Genial!!! DANKE

    Hi Michael!

    Sagte ich doch - einfach ist es und ich war blind.

    Danke vielmals für deine Mühe!

    Dann kann ich ja bestimmt die WHERE Bedingung mit mehreren Verknüfen oder?
    WHERE TLC='" & TLCNameCheck & "';" AND WHERE ABC=....

    ??

    Super - und dafür hab ich mir 2 Nächte um die Ohren geschlagen....

    ---- Hier mein Resultat für andere "Blinde" mit etws mehr Text...----

    Private Sub Command37_Click()
    DBEngine.Idle dbRefreshCache
    Dim TLCNameCheck As String
    Dim tabelle1 As String
    Dim tabelle3 As String
    Dim Ans As Integer
    Dim rs As DAO.Recordset

    TLCNameCheck = Me.TLC


    tabelle1 = "PLOnoLSO"
    tabelle3 = "LSO"

    sqlcopy = "INSERT INTO " & tabelle3 & " SELECT * FROM " & tabelle1 & " WHERE TLC='" & TLCNameCheck & "';"
    Ans = vbNo
    Ans = msgbox("All lessones will be added to student Plan" & vbCrLf & vbCrLf & _
    "Is that OK?", vbQuestion + vbYesNo, "Copy Lessons to Student Plan")



    If Ans = vbYes Then
    DoCmd.RunSQL sqlcopy, dbFailOnError
    'CurrentDb.Execute sqlRealiseren, dbFailOnError
    Debug.Print CurrentDb.RecordsAffected
    If Err.Number <> 0 Then
    msgbox "INSERT FAILED" & vbCrLf & _
    Err.Number & " - " & Err.Description
    Err.Clear
    End If
    DoCmd.GoToRecord , "", acPrevious
    DoCmd.GoToRecord , "", acNext

    Else

    End If
    If Ans = vbNo Then
    msgbox "Nothing is copied"

    End If

    End Sub

    :-)
     
    Schlauchi, 10. März 2009
    #9
  10. miriki Erfahrener User
    Re: Genial!!! DANKE

    Aber klar, das ist kein Problem. Ich würde Dir allerdings empfehlen, lieber eine Klammerung mehr als zu wenig einzusetzen:
    Code:
    WHERE ( ([feld1]='abc') AND ([feld2]=123) )
    Das wird spätestens dann interessant, wenn Du noch weitere Bedingungen sowie AND mit OR gemischt einsetzen willst.

    Code:
    WHERE ( ( ([feld1]='abc') AND ([feld2]=123) ) OR ([feld2]=234) )
    WHERE ( ([feld1]='abc') AND ( ([feld2]=123) OR ([feld2]=234) ) )
    können gänzlich unterschiedliche Aussagen sein...

    Wichtig ist nur, daß Du unterscheidest, ob das Feld numerisch (Zahlen) oder alphanumerisch (Text) ist.
    Code:
    [feld1] = 123
    [feld2] = 'abc'
    Also darauf achten, daß bei Vergleichen mit alphanumerischen Werten die ' benötigt werden.

    Und bei Deinem Beispiel: Das ; gehört immer ganz ans Ende des SQL-Statements. Es wird benötigt, wenn man mehrere SQL-Statements hintereinander abfeuern will. (Allerdings bin ich mir jetzt nicht ganz sicher, ob Access das, wie z.B. MySql, überhaupt unterstützt...) Wenn man nur ein einzelnes SQL-Statement absetzt, kann man das ; ggf. auch ganz weglassen.

    Gruß, Michael
     
  11. Schlauchi Erfahrener User
    und noch was...

    So - nun habe ich es auch geschafft - zwei Bedingungen da reinzupacken :-)

    Code unten für die es interessant ist...

    Gibt es auch soetwas wie USER SELECT - das heißt ich kopiere die Datensätze die ich per Maus in der Tabelle A markiert habe - und nun per Klick in Tabelle C wandern?

    Man lernt ja nie aus - aber immer gerne dazu....


    sqlcopy = "INSERT INTO " & tabelle3 & " SELECT * FROM " & tabelle1 & " WHERE (TLC='" & TLCNameCheck & "') AND(Programm ='" & ProgChoice & "');"
     
    Schlauchi, 11. März 2009
    #11
  12. miriki Erfahrener User
    Re: und noch was...

    Mehr oder weniger, ja...

    Richte ein ja/nein Feld in Tabelle A ein, welches Du als Checkbox im Formular ("Datensatz zum Kopieren vormerken") darstellst.

    Dieses Feld packst Du dann als weitere Bedingung in Deine Abfrage ("AND ([copycheck]=true)"). Nach dem Kopieren löscht Du dann alle [copytrue] des entsprechenden [tlc].

    Gruß, Michael
     
Thema:

Tabelle A + Tabelle B = Tabelle C - nur wie?

Die Seite wird geladen...
  1. Tabelle A + Tabelle B = Tabelle C - nur wie? - Similar Threads - Tabelle Tabelle Tabelle

  2. Schriftart einer Tabelle im Unterformular verändern

    in Microsoft Access Hilfe
    Schriftart einer Tabelle im Unterformular verändern: Hallo, wie kann ich die Schriftart einer Tabelle ( Datenblatt ) im Unterformular verändern. Also nicht Global für alle! Mit freundlichen Grüßen
  3. Tabellenränder beim Druck ausblenden

    in Microsoft Word Hilfe
    Tabellenränder beim Druck ausblenden: Hallo zusammen, in meiner Vorlage habe ich eine Adressbox mit 2 Spalten und 3 Zeilen, sowie als Fußzeile eine Tabelle mit 4 Spalten und 3 Zeilen eingefügt. Zur besseren Orientierung möchte ich...
  4. 2 Tabellen nach bestimmten Kriterien synchronisieren

    in Microsoft Excel Hilfe
    2 Tabellen nach bestimmten Kriterien synchronisieren: Ich habe 2 identische Excel Dokumente -TB1 und TB2 haben gleiches Layout/ bedingte Formatierungen und Formeln enthalten -in TB1 Pflege ich alle Daten täglich (meine Daten) (mehrere Sheets) -in...
  5. Zusammenfassen von Tabellen

    in Microsoft Excel Hilfe
    Zusammenfassen von Tabellen: Guten Morgen zusammen, ich habe folgendes Problem bei dem ich nicht weiterkomme. Ausgangs Situation ist: Es gibt mehrere Tabellen mit Bestellungen z.b. so: Tabelle 1 = Bestellung1; Tabelle 2 =...
  6. Intelligente Tabelle Filter fixieren

    in Microsoft Excel Hilfe
    Intelligente Tabelle Filter fixieren: Moin, ich habe eine Tabelle wo ich eine Intelligente Tabelle von gemacht habe. Dann habe ich den dazu gehörigen Filter eingestellt. Wenn ich jetzt etwas Filtere, wird das Filterfenster auch...
  7. Datenübernahme in andere Tabelle ohne Leerzeilen, Anfänger

    in Microsoft Excel Hilfe
    Datenübernahme in andere Tabelle ohne Leerzeilen, Anfänger: Hallo, Auch wenn dieses Thema schon mehrere Male gepostet wurde, hab ich dennoch ein Probelm damit. Ich möchte Werte aus einer Tabelle in eine andere auflisten. Die ausgangs Tabelle enthält...
  8. Intelligente Tabelle mit Suchfeld durchsuchen?

    in Microsoft Excel Hilfe
    Intelligente Tabelle mit Suchfeld durchsuchen?: Hallo, ich habe kürzlich das Video "Eigene Suchleiste für Excel Tabellen" von Jakob Neubauer gesehen und fand das äußerst interessant. Wir haben eine Arbeitsmappe da haben wir einmal eine...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden