PDA

Vollständige Version anzeigen : DBEngine - too few parameter. expected 1


annivw
10.05.2004, 10:01
Hallo geliebtes Forum,


in diesem Codeteil ...

Function Hole_Kundendaten(strAnschriftstraße, strAnschriftPLZ, strAnschriftOrt, strAnschriftLand, strAnschriftKunde, _
strAnschriftAbteilung, strAnschriftAnsprechpartner, strAnrede, strAnschriftAdresszusatz)
Dim n As String
n = Forms("frm_Rechnung_erstellen").Controls("txtfirmenid").Column(0)
n = Me!txtFirmenid.Column(0)
'und hier kommt der fehler
n = DBEngine(0)(0).OpenRecordset("SELECT * FROM tab_kontakte where [Rechnungsid] =" & n, dbOpenForwardOnly)(0)
...
erhalte ich immer folgende Fehlermeldung
too few parameter. expected 1

in einem anderen Codesegment funktioniert diese Zeile jedoch vorzüglich?!"

hat irgendjemand eine Idee?

J_Eilers
10.05.2004, 10:03
Hi,

wo steht dieser Code und wie wird die Funktion aufgerufen?

annivw
10.05.2004, 10:11
Hi,

sorry, hab ich vergessen...
also der Code steht im Form_FRM_Rechnung_erstellen

und wird im Code wie folgt aufgerufen:

Public Sub textmarken_auslesen()
....
dim i As String
i = Hole_Kundendaten(strAnschriftstraße, strAnschriftPLZ, strAnschriftOrt, strAnschriftLand, strAnschriftKunde, _
strAnschriftAbteilung, strAnschriftAnsprechpartner, strAnrede, strAnschriftAdresszusatz)

J_Eilers
10.05.2004, 10:16
Also im Klassenmodul? Dann versuche es mal folgendermaßen mit der Funktion:

Function Hole_Kundendaten(strAnschriftstraße, strAnschriftPLZ, strAnschriftOrt, strAnschriftLand, strAnschriftKunde, _
strAnschriftAbteilung, strAnschriftAnsprechpartner, strAnrede, strAnschriftAdresszusatz) As Variant
Hole_Kundendaten = DBEngine(0)(0).OpenRecordset("SELECT * FROM tab_kontakte where [Rechnungsid] = " & _
Me!txtFirmenID.Column(0), dbOpenForwardOnly)(0)
End Function

Warum du die ganzen Strings übergibst muss ich aber nicht verstehen...

annivw
10.05.2004, 10:28
hi,

...
hab ich so kopiert wie du die Funktion geschrieben hast - leider erscheint der gleiche Fehler

wenn du mir sagtst, wie ich die Strings sinnvoller auslesen und an Textmarken übergeben kann -sag mir bitte Bescheid - lerne gern dazu...


Im Moment befülle ich die Textmarken in Word nämlich so:
'für die Felder die im aktuellen Formular sind so:
With .Selection
'Anschriftenblock
.Goto What:=wdGoToBookmark, Name:="Rechnungnr_präfix"
.TypeText IIf(Not IsNull(Me.txtRechnungspräfix), Me.txtRechnungspräfix, "")
...
'usw. und für die Felder, die nicht im aktuellen Formular gelistet werden wollte ich sei wie oben bereits beschrieben aus den entsprechende Tabellen auslesen und an Word wie folgt übergeben:

i = Hole_Kundendaten(strAnschriftstraße, strAnschriftPLZ, strAnschriftOrt, strAnschriftLand, strAnschriftKunde, _
strAnschriftAbteilung, strAnschriftAnsprechpartner, strAnrede, strAnschriftAdresszusatz)

...
.TypeText IIf(Not IsNull(strAnschrift_Straße), strAnschrift_Straße, "")
.Goto What:=wdGoToBookmark, Name:="anschrift_PLZ"

J_Eilers
10.05.2004, 10:33
Kenne mich mit der Übergabe an Word leider nicht aus, aber sinnvoller wäre es wohl einen Recordset zu öffnen und von dort die Daten zu übergeben. ungefähr so:

Dim rs As DAO.Recordset
Dim strSQL As String
Dim i As Integer

strSQL = "SELECT * FROM Tabelle WHERE ID = " & Me!ID
Set rs = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset)

While Not rs.EOF
For i = 0 To rs.Fields.Count
WordFeld(i) = rs.Fields(i)
Next i
Wend

rs.Close

Set rs = Nothing

Ungetestet und von dir anzupassen!

annivw
10.05.2004, 10:36
danke,
ich probiers das jetzt mal aus.
-melde mich dann nochmal...

ich habe die andere methode gewählt, weil ich dachte dass das schneller geht?!
außerdem (grübel, warum das bloß sein kann...) funktioniert der Code ja an anderer Stelle auch...

bis gleich mal


Mhhhm hab ich grad mal per Drag 'n Drop in meinen Code gepostet...
mit was ist denn
WORDFELD (i) ... zu ersetzten im der englischen Office 2K version?

J_Eilers
10.05.2004, 11:35
Durch den Ausdruck, mit dem du das Feld in Word befüllen kannst.

annivw
10.05.2004, 12:04
hi,
danke für die Mühe,

da ich jedoch auch mit dem Codesnipe von dir eine ähnliche Fehlermeldung erhalten habe, habe ich nun folgende lösung favorisiert:


n = Forms("frm_Rechnung_erstellen").Controls("txtfirmenid").Column(0)
strAnschrift_Straße = DLookup("[straße]", "[tab_kontakte]", "[kundenid] =" & n)


damit, kann ich die Daten (hinterher) problemlos nach Word übertragen

Arne Dieckmann
10.05.2004, 12:09
Du verwendest übrigens ein ganz anderes Feld im Kriterienteil der Dlookup-Funktion ("Kundenid" im Gegensatz zum Feld "Rechnungsid"). Stimmte denn der Feldname im ursprünglichen Code?

J_Eilers
10.05.2004, 12:10
Erstelle ein Modul und kopiere folgenden Code:

Public Function fLookUp(Feld As String, Tabelle As String, Optional Krit As String) As Variant
Dim strSQL As String

strSQL = "SELECT " & Feld & " FROM " & Tabelle
If Not IsMissing(Krit) Then
strSQL = strSQL & " WHERE " & Krit
End If

fLookUp = DBEngine(0)(0).OpenRecordset(strSQL, dbOpenForwardonly)(0)
End Function

Unter einem anderen Name speichern als fLookUp!!!

n = Forms("frm_Rechnung_erstellen").Controls("txtfirmenid").Column(0)
strAnschrift_Straße = fLookup("straße", "tab_kontakte", "kundenid =" & n)