PDA

Vollständige Version anzeigen : Focus verloren?


ReaverSoul
11.05.2011, 07:40
Hi,

ich habe wieder mal ein kleines Problem. Wie man sieht - für die, die mir schonmal geholfen haben - arbeite ich immernoch an meinem Programm zum E-Mail generieren. Irgendwie erweiterte es sich immer wieder oder es werden Neuerungen eingebaut. Zum lernen gar nicht so schlecht, nur gibt es immer mal wieder einige Probleme.

Mein Quellcode hat sich zum ursprünglichen mittlerweile doch recht stark verändert. Ich möchte nun umgehen, dass User doppelt angelegt werden können. In der SChleife wird als erstes der Standart - wie die Mailadresse eigentlich ist - ausgegeben. sollte es diese schon geben, springt das Program zum zweiten, wo ein weiterer Buchstabe des Vornamens angefügt wird. Gibt es diese Variante auch schon, dann springt das Programm zur dritten Möglichkeit und es wird hinterm Nachnamen eine Zahl gesetzt.

Soweit so gut. Das Program läuft sogar und tut das, was es tun soll. Jedoch gibt es ein Problem. Ich klicke auf den Button und das Feld bleibt leer. Erst wenn ich den Focus - ich schaue z.b. in den IE oder klicke die Tabellenübersicht von Access an. Erst wenn ein anderes Fenster über mein Formular gelegen hat, schreibt das Prgramm die Daten in das Textfeld.

Sicherlich wieder nur ein kleines Problem, nur ich komme leider nicht drauf. Ich habe schon meine alten Unterlagen durchgesehen, verglichen. Den Code in eine neue Datenbank kopiert. Es bleibt dabei.

Mein Quellcode schaut mittlerweile wie folgt aus:


Private Sub EmailGen_Click()
' für die Original-Tabelle
Dim quellRS As Recordset

' für die neue Tabelle
Dim zielRS As Recordset

' Hilfsvariable für die eindeutige Bezeichnung aus der die Logins und eMail-Adresse generiert werden kann
Dim eindeutig As String

' Hilfsvariablen für die Schleife
Dim nameVorhanden As Boolean
Dim mutation As String

' Variablen um die Tabelle anzusprechen
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim qdf As DAO.QueryDef
Dim lngStore As String

' Variablen fürs Mail-generien
Dim strVornamen As String
Dim strNachname As String

' Tabelle aansprechen
Set db = CurrentDb
Set qdf = db.QueryDefs("Abfrage1")
qdf.Parameters!qryPersNr = PersNr
qdf.Execute
qdf.Close: Set qdf = Nothing
Set db = Nothing

'Bookmarksetzen
lngStore = Me!PersNr

'Bildschirmflackern reduzieren
Me.Painting = False

'Aktualisieren (Refresh)
Me.Requery

'Zurück zum Bookmark
Me.RecordsetClone.FindFirst "PersNr = '" & lngStore & "'"
Me.Bookmark = Me.RecordsetClone.Bookmark

DoEvents

' Als erstes Normal versuchen
mutation = 1

' Nicht Eindeutig bis das Gegenteil bewiesen ist
nameEindeutig = False

' Solange wie der Name nicht eindeutig ist
Do While Not nameEindeutig

' Erster Versuch: 1. Buchstabe Vorname und Nachname
If mutation = 1 Then
eindeutig = Left(LCase(Forms!fmHaupt!Vorname), 1) & "." & LCase(Forms!fmHaupt!Name)
EMail = eindeutig & "@klinikum-emden.de"
End If

' Zweiter Versuch: Voller Vorname und Nachname
If mutation = 2 Then
eindeutig = Left(LCase(Forms!fmHaupt!Vorname), 2) & "." & LCase(Forms!fmHaupt!Name)
EMail = eindeutig & "@klinikum-emden.de"
End If

' Alle anderen Versuche: Mit Zahl dahinter
If mutation >= 3 Then
eindeutig = Left(LCase(Forms!fmHaupt!Vorname), 1) & "." & LCase(Forms!fmHaupt!Name) & (mutation - 1)
EMail = eindeutig & "@klinikum-emden.de"
End If

' Nr für den nächsten Versuch festlegen
mutation = mutation + 1

' Gibts schon ??
strSQL = "select count(*) as anzahl from tbITerweitert where " & _
" eMail = '" & EMail & "'"

Set zielRS = CurrentDb().OpenRecordset(strSQL)
zielRS.MoveFirst

' Wenn ja, dann nicht Eindeutig
If (zielRS!anzahl > 0) Then
nameEindeutig = False
' Sonst Eindeutig
Else
nameEindeutig = True
End If

Loop
' Aus diesem Loop kommt auf jeden Fall ein eindeutiger Name heraus

' Updaten
strSQL = "update tbITerweitert set eMail='" & EMail & "'," & _
"where PersNr = " & PersNr

' Nichts zum Updaten da, also Neu anlegen
If CurrentDb.RecordsAffected = 0 Then
strSQL = "insert into tbITerweitert (PersNr, EMail,) " & _
" values (" & PersNr & ",'" & EMail & "')"

End If

End Sub


LG Reaver

wb_3001
13.05.2011, 07:54
Hallo ReaverSoul!

Zur Klärung fehlen mir einige Informationen:
Du erzeugst einen SQL-String.
Was machst Du mit diesem?
Ist die damit erzeugte Abfrage Datenquelle eines Formulares, welches in einem Textfeld (in welchem?) zunächst nichts anzeigt?
Wie wird die Abfrage als Grundlage des Formulares genutzt?
Um nähere Angaben ersucht Dich

Wolfgang