PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : VBA (für Access) Syntax Frage


Drexel
2005-12-06, 07:09:08
Hallo,

nachdem ich schon ziemlich viel mit PHP und MySQL hantiert habe, habe
ich jetzt mit meiner ersten Access-Anwendung angefangen. Ich habe da
aber noch eine Frage, zu der ich (mangels Bücher etc.) noch keine
Antwort gefunden habe.

Wofür ist die Klammerung bei VBA da. In C-Syntax-Sprachen, werden damit
bei einem Funktionsaufruf die Variablen bzw. Argumente übergeben.

Jetzt habe ich in VBA ein Form mit einem Button, wenn ich auf den Drücke
wird das aktuelle Form geschlossen und das Form des Hauptmenüs wieder
aufgemacht. Das Schließen sieht so aus und funktioniert auch:


Private Sub zurueck_Click()
DoCmd.Close acForm, "BenutzerAnlegenForm", acSaveNo
End Sub


Wenn ich die Argumente aber jetzt in Klammern setze (wie auch von dieser Popup-Hilfe vorgeschlagen), bekomme ich aber
folgende Fehlermeldung:

Fehler beim Kompilieren: Erwartet: =

An anderen Stellen funktioniert das mit dem Klammern wiederum.

Außerdem habe ich noch einen Button, der auf Knopfdruck ein
Insert-Statement ausführt (mit docmd.runsql). Das funktioniert zwar soweit, aber es kommt
jedesmal die Meldung, dass ein Datensatz verändert wird und ob ich das
wirklich will. Kann ich die Meldung unterdrücken?

Spearhead
2005-12-06, 07:48:35
Das mit den Klammern wird generell gesestzt, war mir auch schon aufgefallen, man kann wie du schon gemerkt hast aber eben nicht überall Parameter übergeben....

was die Datensatz-Meldung angeht, bei Excel gab's da ne Möglichkeit die application.alerts oder so ähnlich zu deaktivieren, such mal in der Richtung in der Hilfe oder in nem Tutorial oder so :)

Drexel
2005-12-06, 08:18:29
Ist aber seltsam, dass ich der close Funktion die Parameter acForm, "BenutzerAnlegenForm", acSaveNo nicht in einer Klammer übergeben kann, der OpenForm-Funktion kann ich die Parameter aber in Klammern übergeben. Es funktioniert aber auch ohne.

Also dass es ohne funktionieren kann seh ich ja noch ein, das ist halt wischiwaschi Microsoft Syntaxvereinfachung, aber das es ohne nicht funktioniert finde ich seltsam....

Drexel
2005-12-06, 08:47:31
Mangels Buch ist gut, fällt mir gerade auf, im MSDN findet man ja die komplette Objektreferenz etc :)

FlashBFE
2005-12-06, 08:48:34
Die Sache mit den Parametern in Klammern ist die, dass wenn du eine Prozedur mit mehreren Parametern in Klammern aufrufen willst, diese Prozedur eine Rückgabevariable erwartet. Ist einfach eine dumme Angewohnheit von VBA.

Also:

Sub Test1(Param1)
End Sub

Sub Test2(Param1, Param2)
End Sub

Sub Aufruf
dim X,Y,Z
Test1(X) 'funktioniert
Test1 X 'funktioniert
Test1 Param1 = X 'funktioniert
Test2(X, Y) 'funktioniert nicht
Test2 X, Y 'funktioniert
Test2 Param1 = X, Param2 = Y 'funktioniert
Z = Test2(X,Y) 'funktioniert
End Sub

Drexel
2005-12-06, 10:05:40
Hm, komische Sache.

Was steht denn dann in der letzte Zeile in Z drin, wenn die Funktion keinen Wert zurückgibt.

Und zur voretzten Zeile: Dann steht in Param1 einfach der Wert von x drin oder nicht? Was soll das??

Naja, andere Sache: Irgendwie komme ich gerade nicht so recht weiter und habe noch 2 Fragen. Ich habe hier ein Listenfeld mit Werten aus einer Datenbank gefüllt, mit Mehrfachauswahl erweitert.

Wie kann ich jetzt jetzt alle aktivierten Einträge durchlaufen, oder alle Einträge durchlaufen und prüfen welches aktiviert ist??

Das Feld wird mit der Eigenschaft Datensatzherkunft gefüllt: SELECT [Gruppe].[GruppeID], [Gruppe].[Gruppenname] FROM Gruppe;

Angezeigt wir im Formular nur der Gruppenname. Wo stelle ich denn ein, was angezeigt wird und was als Wert übertragen wird?

Danke für Eure Hilfe!

FlashBFE
2005-12-06, 16:06:28
Ich hab das gerade mal probiert: Das Letzte Aufrufbeispiel fuktioniert auch nicht, da hab ich Blödsinn geschrieben.

Es scheint einfach nur ein sinnloser Fehler zu sein.

Es gäbe aber noch die Alternative, das klassische Call zu benutzen, also

Call Test2( X, Y)

Bei dem Listenfeld kann ich spontan nicht helfen. Wenns in der Hilfe nicht drinsteht, dann guck mal ins MSDN.

Drexel
2005-12-06, 16:51:55
Das mit dem Listenfeld habe ich mittlerweiel gelöst. Die MSDN fidne ich mal super unüberischtlich, wieso ist da alles alphabetisch sortiert und nicht nach Kategorien, wie bei PHP z.B.? Woher soll ich wissen, mit welchem Buchstaben der Befehl oder was auch immer anfängt, den ich suche?

Juerg
2005-12-06, 20:37:26
Naja, andere Sache: Irgendwie komme ich gerade nicht so recht weiter und habe noch 2 Fragen. Ich habe hier ein Listenfeld mit Werten aus einer Datenbank gefüllt, mit Mehrfachauswahl erweitert.

Wie kann ich jetzt jetzt alle aktivierten Einträge durchlaufen, oder alle Einträge durchlaufen und prüfen welches aktiviert ist??

Das Feld wird mit der Eigenschaft Datensatzherkunft gefüllt: SELECT [Gruppe].[GruppeID], [Gruppe].[Gruppenname] FROM Gruppe;

Angezeigt wir im Formular nur der Gruppenname. Wo stelle ich denn ein, was angezeigt wird und was als Wert übertragen wird?

Danke für Eure Hilfe!

Die erste Frage:

CREATE VIEW ShowGroupNameOnly [Gruppe].[Gruppenname] AS SELECT [Gruppe].[GruppeID], [Gruppe].[Gruppenname] FROM Gruppe;


Die zweite Frage:

Dim cn As ADODB.Connection
Dim rs As ADODB.Connection
Dim fld As ADODB.Field

' create connection object
' create sql query string
' execute sql query
' Set rs = cn.Execute(sql)

Do While Not rs.EOF
For Each fld In rs.Fields
'your code
Next fld
rs.MoveNext
Loop

rs.Close
cn.Close

Set fld = Nothing
Set rs = Nothing
Set cn = Nothing