Datensatz per SQL in Access mit Abfrage

Hallo zusammen,

Ich bin neu in Sachen SQL und kaum versucht man was entstehen riesige Schluchten der Unwissenheit :smile:

ich habe 2 Tabellen die in etwa so aussehen

Tabelle1:

  • ID(SchlĂŒssel)

  • Bezeichner1(eindeutig,indiziert)

  • Bezeichner2

  • Bezeichner3

Tabelle2:

  • Bezeichner1(SchlĂŒssel)

  • ID (Beziehung 1:n mit ID zu Tabelle1(Tabelle1=1, Tabelle 2= n ^^))

  • Bezeichner2

  • Bezeichner3

  • Bezeichner4

nun versuch ich Daten in Tabelle2 einzufĂŒgen:
INSERT INTO Tabelle2(Bez1,ID,Bez2,Bez3,Bez4) VALUES(„nix“,(SELECT ID FROM Tabelle1 WHERE Bezeichner1 = „irgendwas“),„bisschen“,„viehlmehr“)

aber irgendwie funktioniert das nicht!

MfG
Enrico

Moin, Enrico,

aber irgendwie funktioniert das nicht!

mit irgendwie kommen wir nicht weiter. Das was Du erzÀhlst sollte mit dem, was Access Dir erzÀhlt, schon ein bisschen zu tun haben.

Auf den ersten Blick: Es gibt keine Spalten Bez1, Bez2, 


Auf den zweiten Blick ist mir völlig schleierhaft, was Du vorhast. Ich sehe eine 1:n- und gleichzeitig eine n:1-Beziehung, das ist eh Murks.

Gruß Ralf

Hallo Ralf,

ich hab mich wahrscheinlich (wie so oft) etwas kompliziert ausgedrĂŒckt!

ich habe eine tabelle mit einigen string-Spalten und einer ID, wobei ein stringfeld ebenfalls eindeutig ist.

und eine Zweite Tabelle in der ich EintrĂ€ge einfĂŒgen möchte die sich aber auf Zeilen der 1. Tabelle Beziehen und mithilfe der ID eindeutig identifiziert werden können! Nun will ich mir also sparen erst die ID festzustellen, zwischen zu speichern und dann in den neuen Datensatz der 2. Tabelle einzufĂŒgen!

Ich habe also den wert fĂŒr das eindeutige Stringfeld und möchte die passende ID aus der 1.Tabelle festellen und den neuen datensatz in Tabelle2 speichern in einem schritt!
also wie beschrieben in etwas so:
INSERT INTO Tabelle2(Bez1,ID,Bez2,Bez3,Bez4) VALUES(„nix“,(SELECT ID FROM Tabelle1 WHERE Bezeichner1 = „irgendwas“),„bisschen“,„viehlmehr“)

aber die Select-Anweisung ist irgendwie falsch, weiss nun leider nicht wie das richtig aussehen sollte!

Ich hoffe das war nun ein bisschen verstÀndlicher!

Enrico

Hallo Ralf,

ich glaube wir reden völlig aneinander vorbei.
Mir geht es letztendlich nur darum wie ich eine abfrage erstelle, welche einen neuen Datensatz in eine Tabelle schreibt. Dabei stammt ein wert aus einer anderen Tabelle der innerhalb der Abfrage geholt und in den neuen Datensatz integriert werden soll! Hm
 ich kann schlecht die ganze Tabelle hier Posten um das vielleicht etwas verstÀndlicher zu machen
 Ich versuchs trotzdem mal.

tblIAircrafts hat folgende Felder
ID (long) PrimĂ€rschlĂŒssel
ICAO (String)
Company (String)
Series (String)
Wake (string)

tblAircrafts
Registration (String) PrimĂ€rschlĂŒssel
MaxPax(integer)
Owner(String)
ID(FremdschlĂŒssel :stuck_out_tongue:)

In der Tabelle ‚tblIAircrafts‘ findet sich das Feld ICAO was fast eindeutig ist ĂŒber diesen Wert soll die ID aus Tabelle tblIAircrafts geholt werden (bei doppelten EintrĂ€gen reicht mir die erste gefundene ID, soll spĂ€ter noch so ĂŒberarbeitet das ICAO eindeutig ist, aber dafĂŒr fehlt mit im Moment die Zeit)

meine Gedankenansatz war nun einfach das mit folgendem SQL Statment zu tun!
INSERT INTO tblAircrafts(Registration,MaxPax,Owner,ID) VALUES(„passende Registration“,47,„Fumanchuairlines“,(SELECT ID FROM tblIAircrafts WHERE ICAO = ‚A3‘))

Allerdings funktioniert das mit der Unterabfrage nicht, die verursacht einen Fehler: „Die Abfrage muss auf mindestens einer Tabelle oder Abfrage basieren“

phu, hoffentlich konnte ich mein problem was deutlicher machen

Enrico

Moin, Enrico,

ich glaube wir reden völlig aneinander vorbei.

wohl wahr.

Allerdings funktioniert das mit der Unterabfrage nicht, die
verursacht einen Fehler: „Die Abfrage muss auf mindestens
einer Tabelle oder Abfrage basieren“

da liegt der Hund begraben1: Die Jet-Engine2 wird mit derartigen SelbstbezĂŒglichkeiten „Insert into TX 
 (Select from TX)“ nicht fertig. Du wirst Dir eine andere Lösung einfallen lassen mĂŒssen, zu dem Fehler weiß nichtmal Microsoft was zu sagen (die schĂ€men sich).

Gruß Ralf

1Was glaubst Du denn, warum ich auf dem „irgendwie“ herumreite?

2Von Access weiß ich definitiv, dass sowas nicht geht. Ich bin noch nicht dazugekommen, das Konstrukt in (zB) Sybase nachzustellen.

Hi!

SelbstbezĂŒglichkeiten „Insert into TX 
 (Select from TX)“

Halt!
Er meint ja ein „Insert into TXI 
 (Select from TXII)“

Allerdings wĂŒrde ich sowas in Oracle mithilfe eines INSERT-AS-SELECT machen:

insert into TXI values (string1, string2, ... , ID)
as
select 'Wert fuer string1','Wert fuer string2', ... , id
from TXII where code='eindeutiger Wert'

Geht das in Access nicht? (Bin zu faul, um es auszuprobieren)

GrĂŒĂŸe,
Tomh

Moin, Tom,h

SelbstbezĂŒglichkeiten „Insert into TX 
 (Select from TX)“

Halt!
Er meint ja ein „Insert into TXI 
 (Select from TXII)“

im Original:

tbllAircraft 
 tblAircraft

das habe ich nicht als römisch 2, sondern als Zitterfinger beim Schreiben des tbl gehalten, weil mir die Deklaration der Tabellen nicht so wichtig war :wink:

Gruß Ralf

Hi!

tbllAircraft 
 tblAircraft

das habe ich nicht als römisch 2, sondern als Zitterfinger
beim Schreiben des tbl gehalten, weil mir die Deklaration der
Tabellen nicht so wichtig war :wink:

Da sieht man wieder mal, dass es ab und zu hilfreich ist, mit Datenbankkonstruktionen konfrontiert zu werden, bei deren Namensgebung manch Schelm unterwegs war :wink:

GrĂŒĂŸe,
Tomh

Hallo Ihr beide :smile:
Hm, es ist einfach faszinierend wie meine Namensgebung interpretiert wird
 ich willst mal eben auseinander klabĂŒstern


tbl -Tabelle (und nein, der letzte Buchstabe ist KEIN i sonder ein L)
das I dahinter hab hab ich einfach dazwischen gemogelt als Synonym fĂŒr ‚INFO‘


und naja
 der Rest stellt dann tatsÀchlich den Tabellennamen dar :smile:

Das funktioniert also nicht
 und ich hatte es sooo sehr gehofft


Danke euch beiden

Und Danke Ralf fĂŒr Deine unendliche Geduld :smile:

Enrico

Neues Spiel, neues GlĂŒck
Hi ENrico,

ci h habe gerade ein Minimalbeispiel gestrickt, bin dabei ĂŒber ĂŒbelste Meldungen gestolpert und habe dann gesagt, jetzt is oiss wurscht:

**Aircraft** (<u>Aircraft</u>, ICAO)
**Registration** (<u>Registration</u>, FS\_Aircraft, maxpax)

 INSERT INTO Registration (FS\_Aircraft, maxpax)
 SELECT aircraft, 17 as maxpax
 FROM aircraft
 WHERE ICAO= "A3";

Und kaum machst man’s richtig, dann geht’s auch schon: ACCESS will an dieser Stelle keine Klammern um den Select herum und auch keine VALUES-Klausel.

Das Ganze ist fachlich natĂŒrlich immer noch Murks: ICAO darf nur einmal vorkommen, sonst knallt’s.

Gruß Ralf

Hallo Ralf,

hm
 scheint zu funktionieren
 zumindest bekomm ich die fehlermeldung das der datensatz nicht eingefĂŒgt werden kann wegen NULL oder Regelverletzung. Ich musste mir das natĂŒrlich etwas umstricken und sieht nun wie folgt aus:

INSERT INTO tblAircrafts ( Registration, MaxPax, Owner, CC, CY, [TimeStamp], ID )
SELECT „D-ABAK“ AS Registration, 47 AS MaxPax, „Fumanchuairlines“ AS Owner, 2 AS CC, 4 AS CY, NOW() AS [TIMESTAMP], tblIAircraft
FROM tblIAircrafts
WHERE ICAO=„A3“;

allerdings werd ich nun nach einem wert gefragt mittels einer Eingabebox.

Ich habe Deinen Text mal so interpretiert:

Aircraft (Aircraft, ICAO)
Registration (Registration, FS\_Aircraft, maxpax)

sind Deine Tabellen

 INSERT INTO Registration (FS\_Aircraft, maxpax)
 SELECT aircraft, 17 as maxpax
 FROM aircraft
 WHERE ICAO= "A3";

bei Deinem SQL-Statment ist mir eines nicht so klar.
Deiner Tabelle Registration wird keine Wert fĂŒr ‚Registration‘ ĂŒbergeben, wo kommt sie her?

lg Enrico

Moin, Enrico,

allerdings werd ich nun nach einem wert gefragt mittels einer
Eingabebox.

mach’s mir doch nicht so schwer. Nach welchem Wert?!? Die Eingabe wird generiert fĂŒr Spaltennamen, die es in Deiner Tabelle nicht gibt.

Deiner Tabelle Registration wird keine Wert fĂŒr ‚Registration‘
ĂŒbergeben, wo kommt sie her?

Das ist ein Autowert :smile:)) Und wo kĂ€me Deiner her? Wenn Du da jedesmal schreiben musst SELECT „D-ABAK“ AS Registration, dann kannst Du die Tabellen gleich von Hand befĂŒllen.

Gruß Ralf

Hallo Ralf,

ich glaub ich bin so ne richtige Pest am Hals :smile:

mach’s mir doch nicht so schwer. Nach welchem Wert?!?
Die Eingabe wird generiert fĂŒr Spaltennamen, die es in Deiner

Tabelle nicht gibt.

Nach tblIAircraft! habs auch schon probiert mit tblIAircraft.ID
hat aber keine Änderung zur folge gehabt!

Deiner Tabelle Registration wird keine Wert fĂŒr ‚Registration‘
ĂŒbergeben, wo kommt sie her?

Das ist ein Autowert :smile:)) Und wo kÀme Deiner her? Wenn Du da
jedesmal schreiben musst SELECT „D-ABAK“ AS
Registration
, dann kannst Du die Tabellen gleich von Hand
befĂŒllen.

naja ganz so einfach nun auch wieder nicht! die Werte werden zwar schon von Hand eingegeben, aber nach speziellen vorgaben
 eine Registration hat beispielsweise immer konstant 6 Zeichen, 5 davon Alphanumerisch und 1 trennzeichen! Alle anderen angaben spezifizieren den Datensatz! Dieses Tabelle eignet sich also kaum fĂŒr autowerte! Was das von Hand eingeben betrifft, so will ich tunlichst verhindern das irgendwer der das nachher mitbenutz direkten Zugriff auf die DB hat. Soll ja keiner drin blödsinn treiben
 naja ausser mir!

Enrico

Moin, Enrico,

ich glaub ich bin so ne richtige Pest am Hals :smile:

nein, aber Du machst es einem nicht leicht.

Stell hier die komplette SQL-Anweisung ein, dazu den Namen der Spalte, die in der Eingabebox auftaucht.

Gruß Ralf