Aufblitzen der Liste

Moderator: ModerationP

Aufblitzen der Liste

Beitragvon kathyv » 16. Mai 2021, 10:00

Hallo,
ein Klick in eine Liste soll den Datensatz des angeklickten Eintrags im Formular zeigen Das passiert auch.
Aber ist das Aufblitzen der Liste beim Klick vermeidbar?
Es muss mit diesem Code zusammenhängen:
Code: Alles auswählen
Private Sub lstPerso_AfterUpdate()
  Me.Recordset.FindFirst "ID=" & Str(lstPerso)
End Sub

Es gibt sonst keinen Code in der DB, der das verursachen könnte. Wird er deaktiviert, bleibt das Aufblitzen aus.
Die DB wurde angelegt, um das Phänomen zu überprüfen, das auch in der eigentlichen DB mit mehr Code auftritt.
Kann man das Aufbitzen vermeiden?
LG Kathy
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
kathyv
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 19
Registriert: 01. Dez 2020, 14:50

Re: Aufblitzen der Liste

Beitragvon KlausMz » 16. Mai 2021, 11:01

Hallo,
das Aufblitzen find ich jetzt nicht so störend, es ist auch nicht immer. Ich glaube auch, dass man das nicht wegkriegt.

Noch eine Anmerkung.
Warum machts Du aus einer Zahl einen String ?
Code: Alles auswählen
  Me.Recordset.FindFirst "ID=" & Str(lstPerso)

Außerdem sollte es einen Bezug auf das Formular geben. Also eher so:
Code: Alles auswählen
  Me.Recordset.FindFirst "ID=" & Me.lstPerso
Gruß
Klaus . . . . . Feedback wäre wünschenswert.
Ich möchte bitte keine unaufgeforderten PN. Fragen bitte im Forum.
Benutzeravatar
KlausMz
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 40161
Registriert: 06. Okt 2003, 15:09
Wohnort: Irgendwo in der Pfalz

Re: Aufblitzen der Liste

Beitragvon kathyv » 16. Mai 2021, 12:14

Hallo,
das Aufblitzen.... ist auch nicht immer.

Hast du das an dieser DB festgestellt oder aufgrund langjähriger Erfahrung? Es kann sein, dass ich bei anderen DB darauf nicht geachtet habe oder auch weil es nicht auftrat.
Warum machts Du aus einer Zahl einen String ?

lt. Hilfe: Criteria Erforderlich String Eine Zeichenfolge, um den Datensatz zu finden.
Man beginnt ja das Kriterium mit "ID=", also einem String und m.E. dann weiter mit Str(lstPerso), also auch einem String.
Ich weiß, dass es ohne die Str-Funktion geht, aber das führe ich darauf zurück, dass Access das intern regelt.
Besser auf jeden Fall Me.lstPerso. Bei fehlendem Me und bei dem Punkt (statt Me!lstPerso) scheint Access auch "großzügig" zu sein.
Code: Alles auswählen
 Me.Recordset.FindFirst

Warum versagt bei der Eingabe eigentlich die IntelliSense? Hat MS das übersehen oder ist das logisch?
LG Kathy
kathyv
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 19
Registriert: 01. Dez 2020, 14:50

Re: Aufblitzen der Liste

Beitragvon KlausMz » 16. Mai 2021, 13:00

Hallo,
ich habe das in deine Beispieldb festgestellt. Und da finde ich das gelegentliche Aufblitzen wenig störend.

Was das Str betrifft, so interpretierst Du die Hilfe falsch. Es geht um den Gesamtausdruck für das Kriterium und der muss ein String sein. Die einzelnen Bestandteile (Felder) des Strings sollten in den original Datentypen übergeben werden. ID ist eine Zahl und da ist auch der zu vergleichende Wert eine Zahl. Wenn es mit Str funktioniert, ist das der "Großzügigkeit" von Access zu verdanken.
Str wird in einem Kriterium so gut wie nie gebraucht und ist im hier gezeigten Kontext falsch.
So ist es richtig:
Code: Alles auswählen
Me.Recordset.FindFirst "ID=" & Me.lstPerso

Würdest Du hier eine feste Zahl übergeben, würde das so aussehen:
Code: Alles auswählen
Me.Recordset.FindFirst "ID= 123"

Und das "ID= 123" ist dann der Kriteriumsstring.
Hat man einen String zum Vergleich, so ist der in Hochkomma einzuschließen, aber auch hier ohne Str.
Wenn die ID ein String (Text) wäre, würde das so aussehen:
Code: Alles auswählen
Me.Recordset.FindFirst "ID='" & Me.lstPerso &"'"

Dann wäre das der Kriteriumsstring:
Code: Alles auswählen
Me.Recordset.FindFirst "ID= '123'"


Zu IntelliSense kann ich Dir nichts sagen. Der 1. Punkt funktioniert, der 2. nicht, ist bei mir auch so.
Gruß
Klaus . . . . . Feedback wäre wünschenswert.
Ich möchte bitte keine unaufgeforderten PN. Fragen bitte im Forum.
Benutzeravatar
KlausMz
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 40161
Registriert: 06. Okt 2003, 15:09
Wohnort: Irgendwo in der Pfalz

Re: Aufblitzen der Liste

Beitragvon knobbi38 » 16. Mai 2021, 13:46

@Klaus,

hier liegst du heute aber etwas daneben.

Kathy hat das schon sehr richtig erkannt und interpretiert. Das Argument bei FindFirst wird als String übergeben, also korrekt wäre:
Code: Alles auswählen
Me.Recordset.FindFirst "ID=" &  CStr(Me.lstPerso.Value)
' oder auch
strCriteria = "ID=" &  CStr(Me.lstPerso.Value)
Me.Recordset.FindFirst strCriteria
Bei deinem Vorschlag kommt stattdessen die implizite Typkonvertierung zur Anwendung.

Man könnte sich den gesamten Kriterienstring auch mit BuildCriteria zusammensetzen:
Code: Alles auswählen
strCriteria = Application.BuildCriteria("ID", dbLong, CStr(Me.lstPerso.Value))

Statt me.lstPerso.Value geht natürlich auch den Bang-Operator, also z.B. me!lstPerso.Value, aber das ist ein anderes Thema.

Gruß Ulrich
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3331
Registriert: 02. Jul 2015, 14:23

Re: Aufblitzen der Liste

Beitragvon Marco PB » 17. Mai 2021, 09:53

Ein braver Schüler konvertiert eine Zahl in einem String um sie zu einem String anzuhängen, zeigt aber dabei, den Unterschied zwischen dem Operator ' + ' und eben den Operator ' & ' nicht verstanden zu haben. Der einzige Unterschied ist nämlich dass ' & ', anders als ' + ', gegebenenfalls eine Zahl in ein String ohne Leerzeichen vorne und hinten konvertiert, sodass eine explizite Konvertierung ganz überflüssig ist und auf Kosten der Lesbarkeit geht.
Marco PB
 

Re: Aufblitzen der Liste

Beitragvon knobbi38 » 17. Mai 2021, 10:25

@Marco PB

Hier war mit keiner Silbe die Rede vom "+" Operator zum concatenieren von Strings.
Der einzige Unterschied ist nämlich dass ' & ', anders als ' + ', gegebenenfalls eine Zahl in ein String

Beim "&" Operator wird nicht "gegebenenfalls" ein numerischer Datentyp in einen String konvertiert, sondern immer.
... sodass eine explizite Konvertierung ganz überflüssig ist und auf Kosten der Lesbarkeit geht

Seit wann geht eine explizite Konvertierung zulasten der Lesbarkeit bzw. ist sie überflüssig?
Das sind sonderbare Ansichten ...

Ulrich

Edit: Tippfehler bereinigt.
Zuletzt geändert von knobbi38 am 19. Mai 2021, 11:48, insgesamt 1-mal geändert.
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3331
Registriert: 02. Jul 2015, 14:23

Re: Aufblitzen der Liste

Beitragvon Bitsqueezer » 17. Mai 2021, 11:04

Hallo,

zum Thema "IntelliSense": Im Fall des Formular-Recordsets ist das korrekt, da es sich hier NICHT um das DAO-Recordset handelt, sondern nur um ein generisches Objekt, genauso wie "Object" oder "Control" oder "Form".

Das heißt, es kann darin mehr als ein Objekttyp enthalten sein und IntelliSense listet nur solche Elemente, die allen in diesem Objekt enthaltenen Eigenschaften/Methoden gemeinsam sind.

Was nicht ganz so bekannt ist (weil eigentlich hauptsächlich von mittlerweile ausgestorbenen ADPs verwendet): Ein Formular-Recordset kann ein DAO-Recordset genauso wie ein ADO-Recordset sein. Im Normalfall ist es ein DAO-Recordset, man kann aber auch ein ADO-Recordset erstellen und es dem Formular-Recordset per Set-Befehl zuweisen. Das Formular kann dann wie bei DAO mit den etwas anderen Eigenschaften und Methoden von ADO genauso umgehen.

Wenn man IntelliSense verwendet möchte, muß man es hier also genau umgekehrt machen: Eine DAO-Recordsetvariable erstellen und dieser das Formular-Recordset zuweisen. Mit der Variable klappt dann auch IntelliSense.

Das generische Formular-Recordset-Objekt ist also sozusagen ein "Wrapper" für das echte Recordset-Objekt, das selbst keine Eigenschaften und Methoden hat und alle "Anfragen" an das darunterliegende Objekt weiterleitet. Zwei Ebenen kann IntelliSense aber nicht verarbeiten und da das Wrapper-Objekt nichts liefert, liefert auch IntelliSense nichts.

Natürlich muß man beachten, daß hier auch der Compiler nichts prüft. Will man also nicht erst zur Laufzeit auf mögliche Fehler stoßen, muß man in der Tat die Methode mit der Zuweisung zu einem DAO-Recordset verwenden. Der Compiler wird "Me.Recordset.Blödsinn" also nicht anmeckern.

Gruß

Christian
Bitsqueezer
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 8339
Registriert: 21. Jun 2007, 12:17

Re: Aufblitzen der Liste

Beitragvon kathyv » 18. Mai 2021, 13:56

Hallo,
danke.
Muss man das Aufblitzen also tatsächlich hinnehmen? Wenn es nur manchmal auftaucht, muss es ja einen Grund dafür geben.
zum Plusoperator
aus dem Direktbereich ergeben sich interessante Optionen für die Verkettung von Strings mit dem Plusoperator
Code: Alles auswählen
?"Hamburg" + NULL
Null
?"Hamburg" + ""
Hamburg

LG Kathy
kathyv
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 19
Registriert: 01. Dez 2020, 14:50

Re: Aufblitzen der Liste

Beitragvon Gast » 19. Mai 2021, 10:07

@Ulrich
Ansichten von einer, der seit 1973 in Basic programmiert und der uA. hunderte Programme korrigiert hat, die Andere geschrieben und nicht auf die Reihe gekriegt haben.
Und er heisst concatEnieren, oder noch besser verketten.
Gast
 

Re: Aufblitzen der Liste

Beitragvon knobbi38 » 19. Mai 2021, 11:47

Hallo Gast,

das Basic von 1973 sah aber noch ganz anders aus, als heutiges Visual Basic und gerade wenn du dich schon so lange mit Basic beschäftigst hast, solltest du eigentlich die Vorzüge einer expliziten Typkonvertierung erkannt haben und welche Fehlerquellen mit einer impliziten Konvertierung einhergehen.
Allerdings kann ich dir insoweit folgen, daß nicht jede implizite immer gleich durch eine explizite Konvertierung ersetzt werden muß bzw. sollte. Wenn man jedoch gerade eine Datentypkonvertierung hervorheben möchte oder an der Stelle mögliche Fehlerquellen ausschalten möchte, sollte man das auch durch eine explizite Konvertierung deutlich machen. Gerade Einsteiger habe es dadurch leichter.

Meine ganz persönliche Meinung ...

Ah, noch eine Frage, rein interessehalber: mit welchem Basicdialekt hast du 1973 auf welcher Maschine gearbeitet?

Gruß Ulrich

PS. Danke für den Hinweis auf den Tippfehler.
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3331
Registriert: 02. Jul 2015, 14:23

Re: Aufblitzen der Liste

Beitragvon derArb » 19. Mai 2021, 17:51

Hallo,
ganz sicher hat niemand 1973 schon in Basic programmierte "Volksanwendungen" auf den entsprechend dafür
gebauten "Volksmaschinen" korrigiert.
Maschinen wie Altair als eine der ersten, gab es erst ab ca. 1975. Da kamen sie dann alle wie Sinclair, Acorn, Commodore usw.
Jede Maschine hatte eine angepasste Basic-Sprache.
Ich hatte als PC den Texas Instruments TI-99/4A mir damals besorgt und in TBasic programmiert.
Das war immerhin schon eine Maschine mit 16bit Hauptspeicher und einer Erweiterungsbox von 16mb auf 32mb RAM
inkl. 5Zoll Floppy für 1000 DM !!!!... :badgrin:
MfG
derArb

Scio me nihil scire...Εν οίδα οτι ουδέν οίδα... Ich weiss, dass ich nichts weiss (Sokrates)
Ich bevorzuge Beiträge mit korrekter deutscher Grammatik.
derArb
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 14663
Registriert: 19. Apr 2006, 18:39
Wohnort: Berlin

Re: Aufblitzen der Liste

Beitragvon Gast » 19. Mai 2021, 18:33

Hallo,
wo wir gerade in der Abtlg. "Früher" sind
Ich quäle mich gerade mit dem Phänomen eines alten Programms rum, bei dem folgendes Phänomen auftaucht.
Wird in dem Programm eine neue Vorlage erstellt, so landet sie in dessen Vorlagenordner. Sie kann genutzt werden und ist auch im Datei-Öffnen-Dialog des Programms zu sehen und zu verwenden.
Geht man in den Pfad im Win-Explorer, so ist sie dort nicht zu sehen. Aber alle Vorlagendateien, die vom Programm her dort sind.
Bisher im Win10-Explorer versucht:
1) Unter Ansicht , Optionen, Ansicht alle Dateien anzeigen, versteckte usw.; kein Erfolg
2) In der Eingabeaufforderung den Pfad auf den Vorlagenordner eingestellt.
- Mit Dir werden nur die Vorlagendateien des Programms gezeigt, nicht die selbst erstellte.
- Mit Attrib *.* werden nur die Vorlagendateien des Programms gezeigt und mit A angezeigt, also Archiv; die selbst erstellte ist nicht dabei.
- Mit attrib -a /s /d kommt "Zugriff verweigert". Daselbe mit dem -H-Parameter
Bis jetzt also nichts erreicht.
Warum wird die selbst erstellte Vorlage nicht gezeigt; auch unter DOS nicht? Unter den Eigenschaften sind sie nicht als schreibgeschützt oder versteckt aufgeführt. Und vor allem, wie kann ich meine Datei im Explorer angezeigt bekommen?
LG Kathy
Gast
 

Re: Aufblitzen der Liste

Beitragvon Bitsqueezer » 19. Mai 2021, 20:07

Hallo,

es gab nicht nur PCs in der Vergangenheit. BASIC gibt es seit 1964...
https://devskiller.com/de/geschichte-de ... rsprachen/
https://de.wikipedia.org/wiki/BASIC

@Kathy:
Vorlagen werden mittlerweile meistens nicht mehr im "Programme"-Ordner erstellt. Dort liegen nur die, die der Hersteller mitliefert. Für eigene werden dann entweder Ordner im "Dokumente"-Ordner erstellt oder in den Systemordnern des Benutzerprofils wie "Local", "LocalLow" oder "Roaming". Das macht Windows teilweise selbst, so daß alte Programme selbst davon nichts mitbekommen.
Am einfachsten suchst Du mal die gesamte Platte nach dem Dateinamen ab, das geht am leichtesten mit dem Explorer selbst.
Auch als Admin hast Du auf einige Ordner keinen Zugriff, das merkst Du dann, wenn Du "DOS"-Befehle verwendest (wobei es DOS in dem Sinn nicht mehr gibt). Das ist genauso, wenn Du manuell versuchst, auf bestimmte Systemordner zuzugreifen.
Statt "Attrib" würde man wennschon, dann "Dir" verwenden.

Gruß

Christian
Bitsqueezer
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 8339
Registriert: 21. Jun 2007, 12:17

Re: Aufblitzen der Liste

Beitragvon knobbi38 » 20. Mai 2021, 09:12

Hallo Kathy,

du kannst die Vorlagen nicht sehen, weil sie wahrscheinlich nicht in dem Ordner sind. Wie Christian schon gesagt hat, bleibt dir nur übrig, die Datei auf der gesamten Festplatte zu suchen, entweder mit dem Explorer, der Eingabeaufforderung und Dir() oder in der Powershell z.B. mit Get-ChildItem -path "C:\" -recurse | where name -like "*.txt"

Gruß Ulrich
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3331
Registriert: 02. Jul 2015, 14:23

Nächste

Zurück zu Access Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 35 Gäste