[VBA] Tabellen auslesen

darkex

Member
ID: 71122
L
21 Oktober 2006
9
1
Hallo,

gleich eins vorweg. Ich bin nicht einmal annähernd der VBA-Progger, hingegen mir PHP mehr zusagt. Leider komme ich in diesem Fall nicht drum herum, in einem VBA-Script hierumzuschmieren aus diesem Grunde wird es bestimmt den ein oder anderen VBA-Guru geben, der jetzt am Bildschirm sitzt und über meine Frage sowie Quellcode mit einem breiten Schmunzeln antworten wird. Der Gefahr muss ich mich aber aussetzen *lach*.

Ich möchte folgendes durchführen bzw soll das Script erledigen. In einer 1. Tabelle wird ein Insert durchgeführt der auch schon funktioniert. *stolzbin* Dann soll eine neue Tabelle angelegt werden. Auch das funktioniert bereits fehlerfrei. *doppelt stolzbin* Nun soll aus einer weiteren Tabelle, die bereits besteht und in der Daten enthalten sind, diese Daten ausgelesen werden und in die neu erstellte Tabelle eingetragen werden.

Hier mal der Quelltext:

PHP:
Private Sub eintragen_speichern_Click()
CurrentDb.Execute "CREATE TABLE " & Me!TrainingsID & " (Beschreibung TEXT, Teilnehmer TEXT, Teilgenommen_am TEXT)"
CurrentDb.Execute "INSERT INTO Trainings (TrainingsID, Trainingsbeschreibung, Trainingsende, Dauer, Bereich) VALUES ('" & Me!TrainingsID & "', '" & Me!Trainingsbeschreibung & "', '" & Me!Trainingsende & "', '" & Me!Dauer & "', '" & Me!Bereich & "')"

Nun sollen hier die Daten (TeilnehmerID, Name) aus der bereits bestehenden Tabelle Teilnehmer ausgelesen werden und in die Tabelle welche neu erstellt wurde eingetragen werden.
Es gibt in der Tabelle Teilnehmer auch mehrere Datensätze.

MsgBox "Das Training wurde erfolgreich eingetragen für den Bereich: " & Me!Bereich, vbOKOnly

Ich weiß weder wie ich diese Daten auslesen, noch wie ich eine Schleife bastle... da mich das Thema nun schon seit geschlagenen 3 Tagen verfolgt, hoffe ich hier auf Rettung. Wie schon erwähnt, darf auch gern über den Quelltext geschmunzelt werden. Er ist nicht schön, dafür selten *grins*

Danke schon mal im voraus.

LG
Darkex
 
Nur um die Daten von einer Tabelle in die andere zu übertragen, brauchst Du eigentlich keine Schleife. Das kannst Du direkt machen über


INSERT INTO neue_tabelle ( spaltenliste )
SELECT spaltenliste FROM alte_tabelle ;


wobei beim SELECT alles erlaubt ist, was normalerweise auch möglich ist. Nicht nur Spaltennnamen, sondern auch Konstanten, Funktionen usw.

Du könntest also z.B. schreiben:

INSERT INTO Me!TrainingsID ( Beschreibung, Teilnehmer, Teilgenommen_am )
SELECT 'blablabla' , TeilnehmerID , CURRENT_DATE FROM Me!Teilnehmer ;
 
Zuletzt bearbeitet:
Hallo transversalis,

danke für die Antwort. ;o)
Nur noch eine Verständnisfrage... was setze ich vor dem Insert into usw?!?

CurrentDb.Execute oder CurrentDb.Querys?!?

Weil nur INSERT INTO usw... kommt bei mir ein Fehler. "Fehler beim kompilieren"... ;o(

Wie schon erwähnt, bin ich was VBA angeht, ein absoluter Noob... Und würde die Arbeit am liebsten liegen lassen *gring*

Danke schon mal für die Hilfe...
 
oh, das ist ein INSERT so wie Du in Deinem ersten Posting schon eines hattest.

Muss demnach auch ein CurrentDb.Execute davor. ( Und Hochkommata bei Textkonstanten usw ... )
 
sry, aber irgendwie stehe ich gerade so dermaßen auf dem Schlauch...
Ist es möglich das du mir den richtigen Code ins Forum hämmerst?!? Das Script treibt mich noch zum Wahnsinn... Und wieder ein fettes Danke für deine Antwort.
 
Mach ich gerne, aber dazu müsste ich den exakten Aufbau Deiner Tabellen kennen und präzise wissen, was Du von wo nach wo kopieren willst.
 
Du genaue Spaltenbezeichnungen sind irrelevant... das bekomm ich schon zusammen... mir geht es eher um ein Beispielcode.

Nehmen wir an: Tabelle 1 = Teilnehmer, Tabelle 2 = neue mit dem Namen der TrainingsID

Ich möchte nun die Spalte Namen aus der Tabelle 1 auslesen, und in die Tabelle 2 eintragen.

In PHP könnte das ganze so aussehen.

PHP:
$a=mysql_query("select name from Teilnehmer where abteilung='Test'");
while ($resa=mysql_fetch_array($a))
{
   mysql_query("insert into neue_tabelle set name='".$resa['name']."'");
}

Nur brauche ich halt genau diesen Code in VBA... *heul* Und da weiß ich nicht weiter...
 
dann müsste das Statement so lauten:

CurrentDb.Execute "INSERT INTO neue_tabelle (name) SELECT name from teilnehmer"


Das geht natürlich nur, wenn in der Tabelle neue_tabelle keine Spalten (ausser name ) vom Typ NOT NULL existieren
 
aaahhh ok... Es gibt aber in der Tabelle "neue_tabelle" noch andere Spalten... ;o(

Dann zeige ich doch mal die Struktur auf *grins*

Teilnehmer: TeilnehmerID, Name, Abteilung, Funktion
neue_tabelle: Beschreibung (soll aus dem Formular ausgelesen werden), Teilnehmer (Soll die TeilnehmerID aus der Tabelle "Teilnehmer" sein), Datum (soll ein Datumsfeld sein in dem ich eintrage, wann der Teilnehmer teilgenommen hat, beim Insert soll die Spalte aber erst einmal leer bleiben.)

Sodele... hoffe ich strapaziere deine Geduld nicht all zu sehr *schmunzel*
 
also, Spalten die leer bleiben sollen, haben wohl den Wert <NULL>. Brauchen wir beim Insert erstmal nicht zu berücksichtigen.

Beschreibung ... ist das der Name der neuen_tabelle, oder eine Spalte davon ? Ich vermute mal, eine Spalte davon und der Wert steht in "Me!Trainingsbeschreibung"

Dann wäre der Befehl:
CurrentDb.Execute "INSERT INTO neue_tabelle (name, beschreibung) SELECT teilnehmerID ,'" & Me!Trainingsbeschreibung & "' FROM teilnehmer"


Das
SELECT teilnehmerID ,'" & Me!Trainingsbeschreibung & "' FROM teilnehmer"
erzeugt eine Zwischentabelle aller TeilnehmerIDs mit der Beschreibung des Trainings. Also in etwa:


teilnehmerID Beschreibung
-------------------------
1.............. "tolles Seminar"
2.............. "tolles Seminar"
55............ "tolles Seminar"
123........... "tolles Seminar"

dieses Zwischenergebnis wird in neue_tabelle in den Spalten name und Beschreibung gespeichert.
 
Ohne jetzt den Klugscheißer raushängen zu lassen... beim näheren Betrachten des Codes verstehe ich den Zusammenbau... So einfach?!? WOW... *grins*

Was soll ich sagen. Der Code wurde eingebaut und Evola, es FUNKTIONIERT!!!

Danke dir. Bitte nicht bildlich ausmahlen, aber ich könnt dich Knutschen. 3 Tage hat mich das Ding auf Trapp gehalten, mir graue Haare beschehrt, mich kurz vor einem Herzinfarkt gebracht und nun funktioniert es *freu*.

Danke dir oh mein VBA-Guru *grins*

LG
Darkex