Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: Wieder Online ---> provisorisches Office Forum <-
Access: SQL-Anfügeabfrage via Button ausführen
zurück: Parameterabfrage weiter: Filterkriterien Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Feedback Facebook-Likes Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
philbo
Gast


Verfasst am:
21. Jan 2009, 09:09
Rufname:

Access: SQL-Anfügeabfrage via Button ausführen - Access: SQL-Anfügeabfrage via Button ausführen

Nach oben
       Version: Office XP (2002)

Hallo...

ich habe folgendes Problem:
Ich habe mir ein Formular gebastelt, in dem ich mir in zwei comboboxen (alter User, neuer User) Werte auswähle.
Mit einem klick auf einen Button lasse ich ein SQL-Insert ausführen - vom gewählten nutzer in "alter User" werden seine Gruppen auf "neuer User" kopiert.

Jetzt ist mein Problem, dass ich mit einer ID (GUID) arbeiten muss. Wenn der alte User in mehreren Gruppen war, kopiert mir der Befehl zwar alles, vergibt aber bei den neu eingefügten Datensätzen immer dieselbe ID.
Ich vermute, dies liegt daran, dass alles in einem Schwung eingefügt wird.
Ich verwende ein Insert into mit einem Select auf die Werte die ich brauche und habe als Where-Bedingung den Namen des alten Users.

Hat jemand Tipps für mich, wie ich es erreiche, dass die Datensätze nacheinander eingefügt werden?

Danke,
Gruß
Philipp
Nachtrag: philbo am 21. Jan 2009 um 11:59 hat folgendes geschrieben:
Muss ich hier mit einem Recordset arbeiten ?
Aber wie funktioniert die Sache?
Z.Mart
SQL-Entwickler,VB.NET,C#,LINQ (love it!),VBA


Verfasst am:
21. Jan 2009, 13:17
Rufname: Zoli


AW: Access: SQL-Anfügeabfrage via Button ausführen - AW: Access: SQL-Anfügeabfrage via Button ausführen

Nach oben
       Version: Office XP (2002)

Hallo,
also ich denke was du machen willst, solltest du nicht mit
Code:
INSERT INTO
Sondern eher mit
Code:
UPDATE Tabelle1 AS T1
       INNER JOIN Tabelle 2 AS T2
       On T1.ID = T2.ID
SET    T1.Spalte1=T2.Spalte1

_________________
Regards
Zoli

PS: Das Feedback nicht vergessen, das hilft uns und anderen!
philbo
Gast


Verfasst am:
21. Jan 2009, 15:12
Rufname:

AW: Access: SQL-Anfügeabfrage via Button ausführen - AW: Access: SQL-Anfügeabfrage via Button ausführen

Nach oben
       Version: Office XP (2002)

Hmm, ich hab es glaube ich nicht genau genug erklären können, was ich erreichen will...

also, ich möchte ja neue Zeilen anhängen und keine bestehenden verändern.
Der Sinn hinter der Sache ist der, dass ein neuer User kommt und ich die Einträge, die ein anderer User in der Tabelle hat, für den neuen kopieren will - die alten Einträge sollen erhalten bleiben.

Grob gesagt sieht mein SQL-String so ungefähr aus:
Code:
    DoCmd.RunSQL "INSERT INTO dbo_tZustSec " & _
                       "(tZuID, tZust, tzufuernu, tZuSeit, tZuBis, " & _
                        "tZuBem, tZuPrio, tZuVergabRecht, " & _
                        "tZuZugriffRecht, tZuInRbAnz )" & _
                 "SELECT " & CreateGUID() & ", Z.tZust, " & _
                         Me!rbfuernutzer & ", '" & Me!tfDatum & "', " & _
                        "Z.tZuBis, Z.tzubem, Z.tZuPrio, " & _
                        "Z.tZuVergabRecht, Z.tZuZugriffRecht, " & _
                        "Z.tZuInRbAnz " & _
                   "FROM tNutzerAdmin AS N " & _
                        "INNER JOIN tZustSec AS Z " & _
                        "ON M.tNutzerNr = Z.tZuFuerNu " & _
                  "WHERE Z.tZuBis>=Date() " & _
                     "OR Z.tZuBis Is Null " & _
                    "AND Z.tZuFuerNu=" & Me!rbvonutzer & ";"
Die CreateGuid() ist eine Funktion, die ich mir irgendwo im Netz gestern besorgt hatte - diese erzeugt einfach eine Unique-ID.

Wenn ich den Code wie oben ausführen, werden alle Zeilen, die die Select-Abfrage für einen Nutzer als Ergebnis liefert, direkt in die Tabelle geschrieben werden und dadurch die Funktion CreateGuid() natürlich nur einmal ausgeführt - dies führt dazu, dass alle Zeilen dieselbe ID bekommen.

Ich müsste also irgendwie erreichen, dass wenn es mehrere Einträge für einen Nutzer gibt, diese nacheinander in die Tabelle geschrieben werden und CreateGuid() somit für jede Zeile ausgeführt wird.

Ich hoffe ich konnte es verständlich ausdrücken und hab euch nicht vollends verwirrt Smile
Z.Mart
SQL-Entwickler,VB.NET,C#,LINQ (love it!),VBA


Verfasst am:
21. Jan 2009, 15:40
Rufname: Zoli

AW: Access: SQL-Anfügeabfrage via Button ausführen - AW: Access: SQL-Anfügeabfrage via Button ausführen

Nach oben
       Version: Office XP (2002)

Hallo,
alles klar.

Das wird denke ich so nicht funktionieren, da die Funktion ja für jeden Datensatz in einer Schleife eine ID generieren müsste.

Ist das Backend auf einem SQL Server oder in Access?

Sorry ich frage das immer, da ich der Meinung bin, das sich solche Abfragen als gespeicherte Prozeduren einfach besser machen Smile

Wenn es nicht der Fall ist schau ich mal weiter....

_________________
Regards
Zoli

PS: Das Feedback nicht vergessen, das hilft uns und anderen!
philbo
Gast


Verfasst am:
21. Jan 2009, 16:31
Rufname:


AW: Access: SQL-Anfügeabfrage via Button ausführen - AW: Access: SQL-Anfügeabfrage via Button ausführen

Nach oben
       Version: Office XP (2002)

Genau... ich müsste quasi in einer Schleife Zeile für Zeile einfügen können und jedes Mal die Funktion CreateGuid() aufrufen.

Das Backend ist ein SQL2000-Server - wir greifen bloß per ODBC auf die DB zu.

Eine Lösung via Access wäre natürlich optimal, da wir über eine Access-DB viele Sache verwalten.

Gruß
Philipp
Z.Mart
SQL-Entwickler,VB.NET,C#,LINQ (love it!),VBA


Verfasst am:
21. Jan 2009, 17:04
Rufname: Zoli

AW: Access: SQL-Anfügeabfrage via Button ausführen - AW: Access: SQL-Anfügeabfrage via Button ausführen

Nach oben
       Version: Office XP (2002)

Hallo,
also gut.

Nur zur Information,
du kannst Parameter und allen Klim-Bims auch aus Access an SQL Prozeduren übergeben. Die Vorteile Scripte direkt auf dem SQL Server auszuführen überwiegen jedes Argument welches für Access spricht, vor allem Performance ;)

Ich schnippsle mal eben was in SQL zusammen.

Moment Geduld bitte...

_________________
Regards
Zoli

PS: Das Feedback nicht vergessen, das hilft uns und anderen!
philbo
Gast


Verfasst am:
21. Jan 2009, 17:22
Rufname:

AW: Access: SQL-Anfügeabfrage via Button ausführen - AW: Access: SQL-Anfügeabfrage via Button ausführen

Nach oben
       Version: Office XP (2002)

Hi nochmal,

hmm, danke schonmal für deine Mühe...
wusste ich bisher noch nicht, dass ich über Access Prozeduren auf dem SQL-Server anstarten kann, sogar mit Parametern.

D.H. ja, dass ich die Auswahl der Nutzer Access-Seitig machen könnte und nur das Einfügen in die DB auf dem SQL-Server efolgt?!

Aber nochmal zurück zur reinen Lösung in Access...theoretisch müsste es doch eigentlich gehen... ich habe ne DB, in die wir per DoCmd.TransferText acImportDelim eine Textdatei importieren - das klappt seltsamer Weise ja auch.
Über den riesen Umweg Access -> Textdatei -> Access müsste man dann theoretisch auch ans Ziel kommen, ist aber total umständlich und unsinnig Rolling Eyes

Wenn du nen Beispiel für die Lösung auf dem Server hättest, wär das super.

Gruß
Philipp
Z.Mart
SQL-Entwickler,VB.NET,C#,LINQ (love it!),VBA


Verfasst am:
21. Jan 2009, 17:32
Rufname: Zoli

AW: Access: SQL-Anfügeabfrage via Button ausführen - AW: Access: SQL-Anfügeabfrage via Button ausführen

Nach oben
       Version: Office XP (2002)

Zitat:
Hallo nochmal,
bei dem Schreiben des Scriptes ist mir aufgefallen das so wie du das machst das für mich keinen Sinn ergibt....

Du willst bestehende Nutzerdaten aus einer Tabelle abrufen, Einträge ändern und sie nachfolgend als neuen Eintrag in die gleiche Tabelle schreiben?

Also das nenn ich mal mehr als umständlich....

Ein Script würde hier super viel Performance kosten, da man nach JEDEM EINZELNEN Datensatz einen "Table Scan" machen müßte, da ja vorher kein fester Index feststeht.
Dazu müßte eine WHILE Schleife auf dem Server ausgeführt werden, deren Ablauf mit BREAK und CONTINUE gesteuert wird (Restriktion wäre hier die neue ID).

Also ganz ehrlich....kannst du nicht ne ID Spalte die autmatisch IDs vergibt einbauen?

Zur absoluten Not schreibe ich das Script zuende, aber in VBA ist das kaum zu lösen, da du pro Datensatz ne Meldung vom Server brauchst.


Mir ist da noch was aufgefallen, wenn du mit Access IDs generierst, sind die nicht unbedingt im SQL Server Unique... Smile
Guck mal ob du nicht ein ID Feld einbauen kannst...

_________________
Regards
Zoli

PS: Das Feedback nicht vergessen, das hilft uns und anderen!
philbo
Gast


Verfasst am:
22. Jan 2009, 08:54
Rufname:

AW: Access: SQL-Anfügeabfrage via Button ausführen - AW: Access: SQL-Anfügeabfrage via Button ausführen

Nach oben
       Version: Office XP (2002)

Hallo,

also ein ID-Feld kann ich nicht einbauen, die Eigentliche Anwendung, die auf der DB basiert, ist gekauft, da kann ich an der Datenstruktur nichts ändern.

Ich könnte aber statt der GUID auch eine Kombination aus tNutzernr und tZust zusammensetzen lassen - die wäre dann auch eindeutig.

Eine niedrige Performance bei der Sache ist wirklich kein Problem - wir brauchen das nicht täglich sondern nur 2 bis 3 Mal im Monat (im Schnitt) und es sind pro neuen User dann in etwa 5 Datensätze, die dabei angelegt werden müssten.

Viele Grüße
Z.Mart
SQL-Entwickler,VB.NET,C#,LINQ (love it!),VBA


Verfasst am:
22. Jan 2009, 10:33
Rufname: Zoli

AW: Access: SQL-Anfügeabfrage via Button ausführen - AW: Access: SQL-Anfügeabfrage via Button ausführen

Nach oben
       Version: Office XP (2002)

Hallo,
naja ich halte es aber so trotzdem nicht für die beste Lösung ;)

Also du müßtet auf dem Server, mit Hilfe des Management Studios, folgendes Script
einmalig ausführen (vorausgesetzt du hast die Berechtigung)
----Ungetestet!----
Code:
CREATE PROCEDURE INS_NEW_USERS
@rbfuernutzer AS VARCHAR(100),
@tfDatum AS datetime,
@rbvonutzer AS VARCHAR(100)
AS
BEGIN
SET NOCOUNT ON
SET ANSI_WARNINGS OFF;


BEGIN TRANSACTION
BEGIN TRY
EXECUTE('
INSERT INTO dbo_tZustSec
        (
                tZuID,
                tZust,
                tzufuernu,
                tZuSeit,
                tZuBis,
                tZuBem,
                tZuPrio,
                tZuVergabRecht,
                tZuZugriffRecht,
                tZuInRbAnz
        )
SELECT
        B.tNutzerNr+''+A.tZust
        ,A.tZust
        ,'+@rbfuernutzer+'
        ,'+@tfDatum+'
        ,A.tZuBis
        ,A.tzubem
        ,A.tZuPrio
        ,A.tZuVergabRecht
        ,A.tZuZugriffRecht
        ,A.tZuInRbAnz
FROM tZustSec AS A
        INNER JOIN tNutzerAdmin AS B
                ON (A.tZuFuerNu=B.tNutzerNr)
WHERE   ((tZustSec.tZuBis)>=Getdate() Or (tZustSec.tZuBis) IS NULL)
                AND
                ((tZustSec.tZuFuerNu)='+@rbvonutzer+'')
END TRY
BEGIN CATCH
   SELECT
      ERROR_NUMBER()
   IF @@TRANCOUNT>0
   ROLLBACK TRAN;
END CATCH;
IF @@TRANCOUNT>0
COMMIT TRAN

SET ANSI_WARNINGS ON
END
In Acces würdest du die Prozedur dann wie folgt aufrufen (Unter Verwendung einer ADO VErbindung zum SQL Server über SQL OLE DB Treiber)
Code:
    Dim strSQL As String
   
    strSQL = "INS_NEW_USERS @rbfuernutzer =" & rbfuernutzer & "," & _
                           "@tfDatum=" & tfDatum & "," & _
                           "@rbvonutzer =" & rbvonutzer
    Application.CurrentProject.Connection.Execute strSQL
Allerdings lässt es sich auch in VBA realisieren so wie du das möchtest.
Code:
    DoCmd.RunSQL "INSERT INTO dbo_tZustSec " & _
                       "(tZuID, tZust, tzufuernu, tZuSeit, tZuBis, " & _
                        "tZuBem, tZuPrio, tZuVergabRecht, " & _
                        "tZuZugriffRecht, tZuInRbAnz )" & _
                 "SELECT M.tNutzerNr+''+Z.tZust, Z.tZust, " & _
                         Me!rbfuernutzer & ", '" & Me!tfDatum & "', " & _
                        "Z.tZuBis, Z.tzubem, Z.tZuPrio, " & _
                        "Z.tZuVergabRecht, Z.tZuZugriffRecht, " & _
                        "Z.tZuInRbAnz " & _
                   "FROM tNutzerAdmin AS N " & _
                        "INNER JOIN tZustSec AS Z " & _
                        "ON M.tNutzerNr = Z.tZuFuerNu " & _
                  "WHERE Z.tZuBis>=Date() " & _
                     "OR Z.tZuBis Is Null " & _
                    "AND Z.tZuFuerNu=" & Me!rbvonutzer & ";"
Wobei ich mir sicher bin das es bei beiden Varianten Probleme geben wird, da INSERT Anweisungen in eine Tabelle ohne IDENTITY Spalte oder INDEX meist nicht ohne weiteres gehen.

Eine andere Möglichkeit ist , das du die Werte die du schreiben willst in Variablen sammelst und die Insert Anweisung dann auf die Art machst:
Code:
INSERT INTO Tabelle (Spalte1,Spalte2)
VALUES ('Wert1','Wert2')

_________________
Regards
Zoli

PS: Das Feedback nicht vergessen, das hilft uns und anderen!
philbo
Gast


Verfasst am:
22. Jan 2009, 14:45
Rufname:


gelöst: Access: SQL-Anfügeabfrage via Button ausführen - gelöst: Access: SQL-Anfügeabfrage via Button ausführen

Nach oben
       Version: Office XP (2002)

Hi...

also, nachdem es auch mit der Prozedur auf dem Server nicht geklappt hatte, habe ich mir die Struktur der Tabelle, in die ich schreiben will nochmal angeschaut.

Die ID-Spalte hat einen Autowert, der wiederum auf eine Prozedur zugreift und somit automatisch GUIDs erzeugt (hätte ich das mal eher gesehen).

Weitere Einfügefehler in meinem ursprünglichen Insert Into kamen dadurch, dass ich 4 Felder nicht befüllt habe, die aber keinen Null-Wert zulassen.

Nachdem ich die mit in meinen SQL-Befehl aufgenommen habe, funktioniert jetzt alles.

Danke für die Tipps und vor allem die Mühe.

Gruß
Philipp
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind
GMT + 1 Stunde

Diese Seite Freunden empfehlen

Seite 1 von 1
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen

Verwandte Themen
Forum / Themen   Antworten   Autor   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Access Tabellen & Abfragen: Module in Access ausführen 5 Gast_XY 4374 08. März 2010, 20:47
jens05 Module in Access ausführen
Keine neuen Beiträge Access Tabellen & Abfragen: Excel Tabellen per Button miteinander verknüpfen 0 Sebastian23 1097 18. Feb 2010, 16:08
Sebastian23 Excel Tabellen per Button miteinander verknüpfen
Keine neuen Beiträge Access Tabellen & Abfragen: Formatieren eine PivotCharts via VBA 0 TFree 190 16. Okt 2009, 12:48
TFree Formatieren eine PivotCharts via VBA
Keine neuen Beiträge Access Tabellen & Abfragen: Abfrage beim Access Start sofort ausführen! 2 100000dollarman 788 31. Aug 2009, 10:34
100000dollarman Abfrage beim Access Start sofort ausführen!
Keine neuen Beiträge Access Tabellen & Abfragen: Abfrage ausführen 10 gisiangel 508 25. Aug 2009, 08:54
gisiangel Abfrage ausführen
Keine neuen Beiträge Access Tabellen & Abfragen: Suchabfrage mit anschliessender Detailsuchabfrage mit Button 21 Gast Earthy 1197 22. Jun 2009, 07:13
Gast Earthy Suchabfrage mit anschliessender Detailsuchabfrage mit Button
Keine neuen Beiträge Access Tabellen & Abfragen: Anfügeabfrage zeilenweise ausführen? 2 XFire 403 31. Dez 2008, 02:54
Alf2009 Anfügeabfrage zeilenweise ausführen?
Keine neuen Beiträge Access Tabellen & Abfragen: Kriterium per Button im Formular zur Laufzeit ändern 8 ghostX 702 28. Nov 2008, 16:47
ghostX Kriterium per Button im Formular zur Laufzeit ändern
Keine neuen Beiträge Access Tabellen & Abfragen: mehrere Abfragen gleichzeitig ausführen 3 thelma 1411 20. Aug 2008, 14:00
Willi Wipp mehrere Abfragen gleichzeitig ausführen
Keine neuen Beiträge Access Tabellen & Abfragen: Mehrere unique Pin-codes per Button erstellen lassen 0 Musi 900 21. Mai 2008, 12:26
Musi Mehrere unique Pin-codes per Button erstellen lassen
Keine neuen Beiträge Access Tabellen & Abfragen: altes problem: excel import via Anfügeabfrage 8 Micha85 2431 26. März 2008, 10:59
Zed2k altes problem: excel import via Anfügeabfrage
Keine neuen Beiträge Access Tabellen & Abfragen: Nach klick auf Button Wav Abspielen 1 roboterbert 3016 19. Feb 2008, 21:06
jens05 Nach klick auf Button Wav Abspielen
 

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: HTML CSS