# drop down menü (kombinationsfeld)



## Brauni (25. Juni 2002)

sers

mein problem:
ich gebe im feld PLZ, in access, eine nummer ein und daneben soll er mich alle orte in einem drop down menü (kombinationsfeld) mit der plz anzeigen. es gibt ja mehrere orte mit der selben PLZ.

weis wer wie man das problem lösen kann???
aulesen ist kein problem, nur das speichern in drop down menü funzt leider ned!

cu
brauni


----------



## Paranoia (25. Juni 2002)

hallo..


```
Combo1.AddItem "Ort"
```

das wiederholst du so lange, wie es orte für die passende plz gibt.
um die combobox zu leeren verwendest du folgenden code:


```
Combo1.Clear
```

hope it helps you..

greetings para


----------



## Brauni (25. Juni 2002)

sers

habe ich auch schon probiert. geht leider nicht. er schreibt nix in das kombinationsfeld hinein. hier mein coding:

Dim DBS As DAO.Database
Dim RST As DAO.Recordset

On Error Resume Next

varplz = 0
varplz = Forms!frm_kunde.plz.Value

Set DBS = CurrentDb()
Set RST = DBS.OpenRecordset("select ort from tbl_ortplz where plz = " & varplz & ";")

Do
varort = RST.Fields("ort")
Kombinationsfeld95.AddItem varort
RST.MoveNext
Loop Until RST.EOF

RST.Close
DBS.Close


----------



## Dario Linsky (25. Juni 2002)

ja, die controls bei access sind auch anders als die von vb. nervt mich auch immer wieder. 

wenn ich dich richtig verstehe, dann brauchst du eigentlich nichtmal unbedingt viel code. da die steuerelemente von access ja sowieso schon an die datenbank gebunden sind, musst du ja nur noch die datenherkunft festlegen.
im eigenschaftseditor unter der gleichnamigen eigenschaft oder - wenn es flexibel sein soll:

```
Kombinationsfeld95.RowSource = "SELECT ort FROM tbl_ortplz WHERE tblort.plz = " & Text0 & ";"
Me.Requery
```

funktioniert allerdings nur, wenn auch wirklich text in das control Text0 eingegeben worden ist.
ich versteh nur nicht so ganz, wieso mehrere orte die gleiche plz haben sollen? eher umgekehrt - ein ort hat mehrere plz's...

ps: das mit dem 'On Error Resume Next' solltest du dir abgewöhnen - so gibt's irgendwo einen fehler und irgendwas funktioniert nicht, und keiner weiss, wieso. schreib stattdessen lieber eine fehlerbehandlung die bei einem fehler abbricht und was anderes macht (user informieren z.b.).

pps: dao ist veraltet!


----------



## Brauni (25. Juni 2002)

ne
unsere gemeinde hat 2102
kleinengersdorf (nachbarskaf) hat auch 2102
sowie ein anderes kaf flandorf (hat auch 2102)

es funzt danke euch!!!!!!!!
ohe me.query funzt es auch.


----------



## Dario Linsky (25. Juni 2002)

mag sein, dass es bei dir auch ohne ein requery funktioniert. aber das ist einfach sauberer programmiert. sowas solltest du dir von anfang an angewöhnen, sonst wirst du immer wieder probleme mit solch banalen sachen haben. ich kenn das selber...
access macht da immer mal ganz gerne das, was es gerade machen möchte.


----------



## Brauni (26. Juni 2002)

wenn ich me.requery unter die sql anweisung einfüge funzt im formular überhaupt nix mehr.


----------



## Dario Linsky (26. Juni 2002)

komisch... bei mir geht das ohne probleme, ich mach das immer so, wenn ich den formular-inhalt veränder.
welche access-version hast du denn?


----------



## Brauni (26. Juni 2002)

ich verwend access xp
was macht me.requery genau??


----------



## Dario Linsky (26. Juni 2002)

requery bedeutet (wörtlich übersetzt) 'erneut abfragen' und genau das macht es auch: es fragt den datenbestand, der hinter dem formular (oder control) liegt einfach nochmal neu ab.
von sich aus macht access sowas glaub ich nicht immer sofort. ist jedenfalls bei access 2000 so.


----------



## Brauni (28. Juni 2002)

sers

was müsste ich eigentlich machen, wenn ich zuerst den ort eingebe und dann die postleitzahl haben will??
ich würde das coding beim focusverlust des kombifeldes (ort) einfügen. ich denk da würds hinpassen.

cu
brauni


----------



## Dario Linsky (28. Juni 2002)

nimm dir das ausgewählte item aus der combobox mit den orten und setz die rowsource-eigenschaft von der plz-combo auf:

```
"select * from plz where plz.ort = '" & dein_ort & "';"
```


----------



## Brauni (29. Juni 2002)

thx
eine frage hätte ich noch:
ich will in einem formular verhindern, dass man nicht 2 mal die selbe rechnungsnummer eingeben kann. wenn es nur zahlen sind ist es kein problem nur in einer rechnungsnummer kann auch ein buchstabe vorkommen und so muss ich das item in der tabelle as text und die variable als string deklarieren.
mit der sql anweisung kommt immer die fehlermeldung:
Datentypen in Kritierienausdruck unverträglich

Set rst = dbs.OpenRecordset("select nrtxt from tbl_punzierungsgeb where nrtxt = " & num & ";")

diese sql-anweisung funzt einwandfrei mit zahlen. sobald eine buchstabe in der variable num drinnen steht geht nix mehr!! 
wieso ist das so???

danke
brauni


----------



## Dario Linsky (29. Juni 2002)

das kannst du ganz einfach abfangen. mal angenommen, deine rechnungsnummer wird auf dem formular im control Text0 eingegeben:


```
Dim rst As ADODB.Recordset
Set rst = New ADODB.Recordset

If IsNumeric(Text0) Then
    rst.Open "SELECT nrtxt FROM tbl_punzierungsgeb WHERE nrtxt = " & Text0 & ";", CurrentProject.Connection, adOpenStatic, adLockPessimistic, -1
    If rst.RecordCount > 0 Then
        'Nummer schon vorhanden
    Else
        'Nummer noch nicht vorhanden
    End If
    rst.Close
Else
    'Eingabe ist nicht numerisch
End If

Set rst = Nothing
```

und lass die finger von dao. das benutzt heute kein mensch mehr.


----------



## Brauni (29. Juni 2002)

benutzerdefinierte typ nicht definiert

kommt bei: Dim rst As ADODB.Recordset

mit dao muss das ja auch gehen oder?
mit zahlen funzt es einwandfrei nur mit buchstaben oder gemischt funzt es ned.


----------



## Dario Linsky (30. Juni 2002)

im menü unter extras\verweise:
- dao 3.6 raus.
- microsoft activex data objects rein.
dann klappt's. 

isnumeric prüft, ob ein string einen numerischen wert (sprich eine zahl) enthält. wenn irgendwas anderes als zahlen in dem string vorkommen, liefert isnumeric false zurück und du kannst abbrechen.


----------



## Brauni (1. Juli 2002)

was ist eigentlich an DAO so schlecht??
ich beschäftige mich damit seit ca. 3 wochen und ich finde es super!


----------



## Dario Linsky (1. Juli 2002)

schlecht ist an dao eigentlich gar nichts. es ist nur einfach veraltet und wird früher oder später aussterben. microsoft stellt sich nämlich immer mehr auf ado um. und daher wird man so oder so nicht um ado herum kommen können.
dich zwingt ja niemand dazu, ado zu nehmen. es ist aber nicht besonders sinnvoll jetzt noch dao zu lernen, denn das hat eben keine zukunft mehr.


----------

