Query

mikel

Aktiver Benutzer
Beiträge
38
Hallo zusammen,
habe mal wieder eine Access Frage.

Hier die Fragestellung.

Ich habe eine tbl_kunden, tbl_kundenAkte, tbl_Angebot und eine tbl_Rechnung

Index in tbl_kunden ist: kunden_id
in KundenAkte ist dieser verknüpft mit der Zahl kundenid und dieses auch in den zwei anderen Tabellen.

Ich würde nung ein qyr erstellen wo tbl Angebot und tbl_rechnung im Formular auftauchen auch wenn keine Daten vorhanden sind. Sprich es gibt kein Angebot oder Rechnung. Dafür aber ein paar informationen in der KundenAkte. Kann man das ohne vba realisieren? Oder benötige ich dazu vba?

Grüße
 
Werbung:
Weil mir einmal wieder langweilig ist, hier ein Beispiel:
Die Basis erstellen:
Code:
create table kunden(id serial primary key, name text not null);
create table angebote(id serial primary key, name text not null);
create table rechnungen(id serial primary key, kunde integer references kunden(id), angebot integer references angebote(id));
insert into kunden(name) values ('Ralf');
insert into angebote(name) values ('2 Bier zum Preis von einem');
insert into rechnungen(kunde integer references kunden(id), angebot integer references angebote(id));

Die Abfrage mit Joins:
Code:
select kunden.name, angebot.name from rechnungen inner join kunden on (rechnungen.kunde = kunden.id) 
inner join angebote on (rechnungen.angebot = angebote.id);

Die Abfrage aktuell halten und abspeichern:
Code:
create view view_rechnungen as select kunden.name as kunde, angebote.name as angebot from rechnungen inner join kunden on
 (rechnungen.kunde = kunden.id) inner join angebote on (rechnungen.angebot = angebote.id);

Alles aus der Ansicht abfragen:
Code:
select * from view_rechnungen;

Resultat:
Code:
kunde    angebot
"Ralf"    "2 Bier zum Preis von einem"

Ich hoffe dir mit dem Post zu helfen ;)

LG Kampfgummibaerlie

EDIT: Ich nutze PostgreSQL...
 
Funzt. Noch eine Frage zum Update.

Code:
'Datensätze aus Tabelle 1 auslesen
strSQL = "Select kunden_id FROM tbl_kunden"
Set rstDaten = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset)

With rstDaten
    .MoveFirst
    Do Until .EOF
     satz_kundenid = .Fields("kunden_id")
        
    'Daten als Update übertragen
    SQLStr = "UPDATE tbl_angebot SET(kundenid) WHERE = satz_kundenid  "
      CurrentDb.Execute SQLStr, dbFailOnError
      
    .MoveNext
    Loop
    .Close
End With
Wie muss das WHERE aussehen?
 
hier die Syntax:

Code:
test=# \h update
Command:     UPDATE
Description: update rows of a table
Syntax:
[ WITH [ RECURSIVE ] with_query [, ...] ]
UPDATE [ ONLY ] table_name [ * ] [ [ AS ] alias ]
    SET { { column_name = { expression | DEFAULT } |
            ( column_name [, ...] ) = [ ROW ] ( { expression | DEFAULT } [, ...] ) |
            ( column_name [, ...] ) = ( sub-SELECT )
          } [, ...] |
          ROW = row_or_record_var
        }
    [ FROM from_item [, ...] ]
    [ WHERE condition | WHERE CURRENT OF cursor_name ]
    [ RETURNING * | output_expression [ [ AS ] output_name ] [, ...] ]

URL: https://www.postgresql.org/docs/15/sql-update.html
     https://www.enterprisedb.com/docs
 
Wie muss das WHERE aussehen?
Kommt drauf an, was Du machen willst.

Momentan hast Du eine Loop über alle Kunden, extrahierst deren ID in der Loop und möchtest die Tabelle für Angebote aktualisieren- mit dieser Kunden ID.

Du würdest wahrscheinlich nur einem (neuen) Angebot, die ID eines Kunden zuweisen wollen, einmalig.
 
Ja genau! Aber wie bekomme ich jetzt zum Test die ID's upgedatet ?

WHERE = "satz_kundenid" Muss ich noch ein Me!satz_kundenid setzen oder &.Keine Ahnung!
 
Also folgendes:

Code:
'Datensätze aus Tabelle 1 auslesen
strSQL = "Select kunden_id FROM tbl_kunden"
Set rstDaten = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset)

With rstDaten
    .MoveFirst
    Do Until .EOF
     satz_kundenid = .Fields("kunden_id")
     Debug.Print satz_kundenid
     Me.Requery
              
    .MoveNext
        Loop
    .Close
End With

Hier liest er mir alle 3 vorhanden Datensätze aus.

Jetzt sollten alle 3 Datensätze als UPDATE in die Tabelle tbl_Angebote übernommen werden.
Und da scheitert es gerade. Mit der WHERE Klausel kann ich daher nicht arbeiten, da es sich ja auf eine einzelen ID bezieht.

Mit folgendem komme ich auch nicht weiter:

Code:
SQLStr = "UPADTE tbl_angebot SET kundenid = satz_kundenid"
      CurrentDb.Execute SQLStr, dbFailOnError
Was mache ich Falsch?
 
Werbung:
ok. Bin einen Schritt weiter.
s sieht jetzt so aus:
Code:
'Datensätze aus Tabelle 1 auslesen
strSQL = "Select kunden_id FROM tbl_kunden"
Set rstDaten = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset)

SQLStr = "Select angebot_id, kundenid FROM tbl_angebot"
Set rstDaten = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset)

With rstDaten
    .MoveFirst
    Do Until .EOF
     satz_kundenid = .Fields("kunden_id")
     Debug.Print satz_kundenid
                
     SQLStr = "UPDATE tbl_angebot SET [kundenid]= " & satz_kundenid & " "
      CurrentDb.Execute SQLStr, dbFailOnError
     Me.Requery
     .MoveNext
        Loop
        
    .Close
End With

Allerdings werden jetzt alle Datensätze mit der gleichen "& satz_kundenid & "" überschrieben
 
Zurück
Oben