Discussion:
CurrentDb.Execute .. from ...mit ID-Übergabe ?
(zu alt für eine Antwort)
Steffen Brose
2007-05-28 16:41:08 UTC
Permalink
Hallo Allseits,
eine Frage (hoffentlich drücke ich mich halbwegs "verständlich" aus):

Ich baue mir mit Code eine Tab zusammen - Ausgangbasis für diese
Tab ist eine Abfrage - funktioniert prima.
Frage/Thema: - jetzt möchte ich in einer weitergehenden Sache, nur
die Sätze (über ID) die meinem aktuellem Satz im Formular entsprechen
anzeigen lassen
Also: z.Bsp. - im Formular steht Satz auf Satz 100 - wie kann diese ID 100
an "Zusammenbau "übergeben werden ?
also im Formular auf Satz 100 -> Befehlsschaltfläche = Klick :

Mein Code:
CurrentDb.Execute "SELECT" & _
" [Projektbezeichnung] AS Name," & _
" [Baubeginn] AS Anfang," & _
" INTO Temp_for_EINZEL" & _
" FROM [AB00_Einzel07]"

-> aber es soll eben nur (z.Bsp.) ID100 aus [AB00_Einzel07]
angezeigt werden -
kann man dies irgendwie als Bedingung beim FROM automatisch
einsetzen ? - also automatisch = auf welchem Satz (ID)
aktuell im Formular...

Danke Euch für einen Tipp / eine Hilfe - Gruß Steffen
Jens Schilling
2007-05-28 17:15:18 UTC
Permalink
Hallo, Steffen

Kommentare im Code ....
Post by Steffen Brose
Ich baue mir mit Code eine Tab zusammen - Ausgangbasis für diese
Tab ist eine Abfrage - funktioniert prima.
Frage/Thema: - jetzt möchte ich in einer weitergehenden Sache, nur
die Sätze (über ID) die meinem aktuellem Satz im Formular entsprechen
anzeigen lassen
Also: z.Bsp. - im Formular steht Satz auf Satz 100 - wie kann diese
ID 100 an "Zusammenbau "übergeben werden ?
Dim lgMyID as Long ' ich unterstelle einen Zahlenwert

lgMyID = Me!Forms!NameDesIDFeldes
Post by Steffen Brose
CurrentDb.Execute "SELECT" & _
" [Projektbezeichnung] AS Name," & _
" [Baubeginn] AS Anfang," & _
" INTO Temp_for_EINZEL" & _
" FROM [AB00_Einzel07]"
" FROM [AB00_Einzel07] Where ID = " & lgMyID

Ich bevorzuge im übrigen die Varinate, einen SQL-String an die
Execute-Methode zu übergeben, dann kann ich im Zweifelsfalle mir diesen mit
Debug.Print im Code ausgeben lassen, und testen.

Also etwa so :

Dim strSQL as String

strSQL = "Selcect ........ "
CurrentDb.Execute strSQL, dbFailOnError

Gruss
Jens
Jens Schilling
2007-05-28 17:42:16 UTC
Permalink
Hallo, Jens
Post by Jens Schilling
lgMyID = Me!Forms!NameDesIDFeldes
So wohl eher nicht ;-)

lgMyID = Me!NameDesIDFeldes

Gruss
Ingrid
Henry Habermacher
2007-05-29 04:52:02 UTC
Permalink
Hallo Jens
Post by Jens Schilling
Dim strSQL as String
strSQL = "Selcect ........ "
CurrentDb.Execute strSQL, dbFailOnError
Nie und nimmer. Scheint nicht Dein Tag (gewesen) zu sein:
Execute erlaubt nur Action Queries und ein Befehl "SELCECT" kennt kein SQL
Dialekt ;-)

Gruss
Henry
--
Keine E-Mails auf Postings in NGs. Danke.
Access FAQ www.donkarl.com
Jens Schilling
2007-05-29 06:24:17 UTC
Permalink
Hallo, Henry
Post by Henry Habermacher
Post by Jens Schilling
Dim strSQL as String
strSQL = "Selcect ........ "
CurrentDb.Execute strSQL, dbFailOnError
Im Gegenteil - darum sehe ich ja so alt aus ;-)
Post by Henry Habermacher
Execute erlaubt nur Action Queries
Richtig - aber hier geht's ja um eine Tabellenerstellungsabfrage; ich war
nur zu faul, den gesamten Code noch einmal hineinzukopieren.
Post by Henry Habermacher
und ein Befehl "SELCECT" kennt kein SQL Dialekt ;-)
Brauchst Du denn vielleicht noch ein "C" - ist zwar kein hohes, aber ein
grosses ;-)
--
Gruss
Jens
______________________________
FAQ: http://www.donkarl.com
Henry Habermacher
2007-05-29 06:41:25 UTC
Permalink
Hallo Jens
Post by Jens Schilling
Post by Henry Habermacher
Execute erlaubt nur Action Queries
Richtig - aber hier geht's ja um eine Tabellenerstellungsabfrage; ich
war nur zu faul, den gesamten Code noch einmal hineinzukopieren.
Huch, das habe ich glatt übersehen, selbst im OP!
Sehe nun wohl gleich alt aus ;-)
Post by Jens Schilling
Post by Henry Habermacher
und ein Befehl "SELCECT" kennt kein SQL Dialekt ;-)
Brauchst Du denn vielleicht noch ein "C" - ist zwar kein hohes, aber
ein grosses ;-)
Habe soeben eine Tagesdosis in Form von 2 500mg Tabletten reingeworfen, weil
es hier begonnen hat zu regnen und ich mich leicht erkältet habe. Aber
wirf's mal rüber, ein C kann man immer gebrauchen.

Gruss
Henry
--
Keine E-Mails auf Postings in NGs. Danke.
Access FAQ www.donkarl.com
Steffen Brose
2007-05-29 07:29:00 UTC
Permalink
Hallo Miteinander, ... also Jens seinen Tipp habe ich halbwegs "kapiert" -
geht es so - ist so machbar ? Vielen Dank - Gruß Steffen

->> also diese Varinate ?
Post by Jens Schilling
Dim lgMyID as Long ' ich unterstelle einen Zahlenwert
lgMyID = Me!Forms!NameDesIDFeldes
Post by Steffen Brose
CurrentDb.Execute "SELECT" & _
" [Projektbezeichnung] AS Name," & _
" [Baubeginn] AS Anfang," & _
" INTO Temp_for_EINZEL" & _
" FROM [AB00_Einzel07]"
" FROM [AB00_Einzel07] Where ID = " & lgMyID
Jens Schilling
2007-05-29 08:13:35 UTC
Permalink
Hallo, Steffen
Post by Steffen Brose
Jens seinen Tipp habe ich halbwegs
"kapiert" - geht es so - ist so machbar ?
Teste es doch einfach, aber...
Post by Steffen Brose
Post by Jens Schilling
lgMyID = Me!Forms!NameDesIDFeldes
... dies hat Ingrid ja bereits korrigiert, also :

lgMyID = Me!NameDesIDFeldes
--
Gruss
Jens
______________________________
FAQ: http://www.donkarl.com
Steffen Brose
2007-05-29 09:03:01 UTC
Permalink
Hallo Jens,... Schritt1 (mit Ingrids Korrektur) funktioniert
- nur noch bei:
FROM [AB00_Einzel07] Where ID = " & lgMyID
sagt Access = Syntaxfehler
Danke Dir für Deine Hilfe - Gruß Steffen
Jens Schilling
2007-05-29 09:49:12 UTC
Permalink
Hallo, Steffen
Post by Jens Schilling
FROM [AB00_Einzel07] Where ID = " & lgMyID
sagt Access = Syntaxfehler
Das Feld heisst auch ID, und ist ein numerisches Feld ?
--
Gruss
Jens
______________________________
FAQ: http://www.donkarl.com
Steffen Brose
2007-05-29 10:22:02 UTC
Permalink
Hallo Jens,
Post by Jens Schilling
Das Feld heisst auch ID, und ist ein numerisches Feld ?
= ja - ich habe auch mal mit einer "Live-ID" probiert - da gehts
also mit:
"FROM [AB00_Einzel07] Where ID = 1000"
geht es ... Danke Dir - Gruß Steffen
Jens Schilling
2007-05-29 10:36:32 UTC
Permalink
Hallo, Steffen
Post by Steffen Brose
Post by Jens Schilling
Das Feld heisst auch ID, und ist ein numerisches Feld ?
= ja - ich habe auch mal mit einer "Live-ID" probiert - da gehts
"FROM [AB00_Einzel07] Where ID = 1000"
geht es ...
Die ganze Zeile sollte so aussehen aus Dir :

" FROM [AB00_Einzel07] Where ID = " & lgMyID

Ansonsten poste doch noch mal Deinen Code...
--
Gruss
Jens
______________________________
FAQ: http://www.donkarl.com
Steffen Brose
2007-05-29 12:49:01 UTC
Permalink
Hallo Jens, so sieht's aus:
CurrentDb.Execute "SELECT" & _
" [Projektbezeichnung] AS Name," & _
" [Baubeginn] AS Anfang," & _
" INTO Temp_for_EINZEL" & _
" FROM [AB00_Einzel07] Where ID = " & lgMyID"

Ich glaube das letzte " ist irgendwie das Problem - weglassen geht nicht -
dann sagt Access: kein Anweisungsende ...??
Henry, mit dem Live-ID war nur Beispiel - das Feld heißt ID .
Danke Euch - Gruß Steffen
Jens Schilling
2007-05-29 13:07:29 UTC
Permalink
Hallo, Steffen
Post by Steffen Brose
CurrentDb.Execute "SELECT" & _
" [Projektbezeichnung] AS Name," & _
" [Baubeginn] AS Anfang," & _
" INTO Temp_for_EINZEL" & _
" FROM [AB00_Einzel07] Where ID = " & lgMyID"
Ich glaube das letzte " ist irgendwie das Problem -
Richtig - das gehört da nicht hin....
Post by Steffen Brose
weglassen geht nicht -
dann sagt Access: kein Anweisungsende ...??
Du musst es aber weglassen - und Dein Problem dürfte irgendwo in den
Zeilenumbrüchen der vorstehenden Zeilen liegen.
--
Gruss
Jens
______________________________
FAQ: http://www.donkarl.com
Steffen Brose
2007-05-29 13:51:02 UTC
Permalink
... jetzt hängt es nur noch an diesem "blö..." Zeilenabschluss..

Hallo Jens, Zeilenumbrüche = alle kontrolliert - kein Fehler
wenn ich das " am Zeilenende lösche wird es automatisch beim Verlassen der
Zeile wieder hingesetzt ... ?
mit dem Beispiel von vorhin funkt es ohne Problem, aber auch immer
nur mit einem " am Zeilenende
-> so:
CurrentDb.Execute "SELECT" & _
" [Projektbezeichnung] AS Name," & _
" [Baubeginn] AS Anfang," & _
" INTO Temp_for_EINZEL" & _
" FROM [AB00_Einzel07] Where ID = 1000"

Danke Dir Gruß Steffen

P.S. am lgMyID an sich kann es auch nicht liegen - ich habe vorm
Current.. eine msgbox gemacht - Inhalt von lgMyID wird auch richtig
angezeigt...?
Henry Habermacher
2007-05-29 13:57:20 UTC
Permalink
Hallo Steffen
Post by Steffen Brose
" FROM [AB00_Einzel07] Where ID = 1000"
Danke Dir Gruß Steffen
P.S. am lgMyID an sich kann es auch nicht liegen - ich habe vorm
Current.. eine msgbox gemacht - Inhalt von lgMyID wird auch richtig
angezeigt...?
Dann solltest Du aber nun oben wirklich die lgMyID verwenden, nicht
hardcodiert eine Zahl, also:

" FROM [AB00_Einzel07] Where ID = " & lgMyID

Wenn Du nicht nach dem = ein " und ein & hineinmachst, dann ist der String
nicht abgeschlossen, was dann der VBE für Dich übernimmt und das einfach
ganz hinten hinein schreibt.

Gruss
Henry
--
Keine E-Mails auf Postings in NGs. Danke.
Access FAQ www.donkarl.com
Steffen Brose
2007-05-29 15:02:01 UTC
Permalink
Hallo Jens, hallo Hennry... ich weiß auch nicht, was ich da die ganze Zeit
falsch gemacht habe... jetzt geh'ts auf einmal - ohne " am Zeilenenende also
mit:
" FROM [AB00_Einzel07] Where ID = " & lgMyID

Vielen Dank Euch für die Hilfe und Eure starken Nervern - für einen Laien -
Besten Dank - Gruß Steffen

Henry Habermacher
2007-05-29 13:33:01 UTC
Permalink
Hallo Steffen
Post by Steffen Brose
CurrentDb.Execute "SELECT" & _
" [Projektbezeichnung] AS Name," & _
" [Baubeginn] AS Anfang," & _
obiges "," ist zuviel. Ansonsten ist Name ein äusserst ungünstiger Feldnane,
setze diesen in [].
Post by Steffen Brose
" INTO Temp_for_EINZEL" & _
" FROM [AB00_Einzel07] Where ID = " & lgMyID"
ja, das ist auch zuviel.

Versuch's mal so:

CurrentDb.Execute "SELECT" & _
" [Projektbezeichnung] AS [Name]," & _
" [Baubeginn] AS Anfang" & _
" INTO Temp_for_EINZEL" & _
" FROM [AB00_Einzel07] Where ID = " & lgMyID _
, dbFailOnError

Den Parameter dbFailOnError solltest Du in jedem Fall angeben.

Gruss
Henry
--
Keine E-Mails auf Postings in NGs. Danke.
Access FAQ www.donkarl.com
Henry Habermacher
2007-05-29 12:21:09 UTC
Permalink
Hallo Steffen
Post by Steffen Brose
Post by Jens Schilling
Das Feld heisst auch ID, und ist ein numerisches Feld ?
= ja - ich habe auch mal mit einer "Live-ID" probiert - da gehts
"FROM [AB00_Einzel07] Where ID = 1000"
geht es ...
Wenn das Feld Live-ID heisst, dann musst Du auf jeden Fall [] drum herum
machen, sonst wird der SQL Parser das - als Operator interpretieren.
Bezüglich verwendung von Sonderzeichen in Objekt/Feldnamen gucke am besten
mal in die FAQ zum Thema Benamsungen.

Gruss
Henry
--
Keine E-Mails auf Postings in NGs. Danke.
Access FAQ www.donkarl.com
Henry Habermacher
2007-05-29 04:50:17 UTC
Permalink
Hallo Steffen
Post by Steffen Brose
Ich baue mir mit Code eine Tab zusammen - Ausgangbasis für diese
Tab ist eine Abfrage - funktioniert prima.
Frage/Thema: - jetzt möchte ich in einer weitergehenden Sache, nur
die Sätze (über ID) die meinem aktuellem Satz im Formular entsprechen
anzeigen lassen
Also: z.Bsp. - im Formular steht Satz auf Satz 100 - wie kann diese
ID 100 an "Zusammenbau "übergeben werden ?
CurrentDb.Execute "SELECT" & _
" [Projektbezeichnung] AS Name," & _
" [Baubeginn] AS Anfang," & _
" INTO Temp_for_EINZEL" & _
" FROM [AB00_Einzel07]"
-> aber es soll eben nur (z.Bsp.) ID100 aus [AB00_Einzel07]
angezeigt werden -
kann man dies irgendwie als Bedingung beim FROM automatisch
einsetzen ? - also automatisch = auf welchem Satz (ID)
aktuell im Formular...
Die Execute Methode des Database Objects erlaubt nur Aktionsabfragen, also
Update, Inserts, Deletes und DDL Statements. (Details siehe OH)

Wenn Du eine Abfrage öffnen willst, verwende das dafür vorgesehene QueryDef
Objekt. Du kannst dafür eine Funktion folgender Art einsetzen:

Public Function runSelectStatement(strSQL As String)
Const conTempQuery As String = "~tmp_Query"
Dim db As Database
Dim qdf As QueryDef
Set db = CurrentDb
On Error Resume Next
Set qdf = db.CreateQueryDef(conTempQuery, strSQL)
If Err Then
On Error GoTo 0
db.QueryDefs(conTempQuery).SQL = strSQL
End If
On Error GoTo 0
Set qdf = Nothing
Set db = Nothing
DoCmd.OpenQuery conTempQuery
End Function



HTH

Henry
--
Keine E-Mails auf Postings in NGs. Danke.
Access FAQ www.donkarl.com
Henry Habermacher
2007-05-29 06:42:54 UTC
Permalink
Hallo Henry

Schau' das Statement nochmals genauer an, es ist eine
Tabellenerstellungsabfrage!

Gruss
Ingrid
Post by Henry Habermacher
Die Execute Methode des Database Objects erlaubt nur Aktionsabfragen,
also Update, Inserts, Deletes und DDL Statements. (Details siehe OH)
Loading...