April 18, 2021, 02:00:32

Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!


Neueste Beiträge

Seiten 1 2 3 4 5 ... 10
21
Formular / Re: Noch'n Tipp: visuelle Sele...
Letzter Beitrag von Xoar - April 17, 2021, 11:32:48
Moin,

ich bin grundsätzlich interessiert. Weniger um die Nutzung der DB, sondern eher an die Art der Umsetzung.

Frei nach dem Motto, man muss das Rad ja nicht neu erfinden, könnte ich ggf. was für mich übernehmen.

🤗
22
Access Programmierung / Re: Türkische Buchstaben entfe...
Letzter Beitrag von crystal - April 16, 2021, 23:29:37
Hallo,
ich vermute doch eher, dass es sich hier nicht um ASCII-Zeichen, sondern um Unicode-Zeichen handelt, die ja aus mehreren Bytes bestehen.
Findige Anwender mit fremdsprachlichem Hintergrund wissen, wie man solche Zeichen in den Text einfügen kann und dem Programmierer damit das Leben schwer macht...
Solche Zeichen mit VBA-Bordmitteln zu ersetzen, ist vermutlich nicht so einfach.
Suche mal mit Google nach UTF-8, UTF-16 etc.
Ansonsten würde ich die Ersetzung für diese - hoffentlich - wenigen Fälle einfach händisch machen.
Gruß,
crystal
23
Formular / Noch'n Tipp: visuelle Selektio...
Letzter Beitrag von crystal - April 16, 2021, 23:06:05
Hallo Gemeinde,
heute habe ich meine Spendierhosen an...

Oft ist es doch so, dass man einen Datensatz suchen will, man kennt ungefähr ein paar Suchkriterien.
Man kann das mit einem UFo realisieren und im Kopf des Formulars Suchfelder anbieten.
Leider sind UFos nicht in der Lage, Datensätze unter- UND nebeneinander oder auch nur nebeneinander darzustellen und so wenig ergonomisch.
Mit ein wenig Fleiß und relativ wenig VBA-Code geht's auch anders. Für eine kleine, private Video-Verwaltung möchte ich z. B. nach Schauspielern suchen und habe dafür folgendes Formular entworfen:

Sie dürfen in diesem Board keine Dateianhänge sehen.

Ja - das sieht recht komplex aus, ist aber nicht so schwierig.
Es funktioniert so:
Im Formularkopf (dunkelgelb) können Suchkriterien definiert werden. Bei Feldern, hinter denen sich ein Select-Button befindet, können via Auswahl-Fenster jeweils mehrere Tags ausgewählt werden. Deren interne Referenzen werden in den grünen Feldern zur späteren Verwendung gespeichert (unsichtbar).

Nach Klicken des Lupe-Buttons wird ein SQL-String für die Suche gebastelt und ein Recordset ReadOnly geöffnet (im Code einfach Mal auf 200 Records begrenzt); finden sich mehr als 200 Records, erfolgt eine entspr. Warnung, ebenso wenn nichts gefunden wird.

Der Recordset wird eingelesen und nur die relevanten Felder (Name, Bild und interner Schlüssel) werden in entspr. Arrays kopiert.
Danach werden die ersten 20 Records angezeigt, der User kann zu anderen Seiten blättern (falls mehr als 20 Records gefunden werden).
Zur Darstellung der Funde dienen (hier) 20 Blöcke mit je 3 Feldern:
Name "NameX", Bild "BildX" und darüber gelegt ein transparenter Button "ButtonX" mit X = 1 bis 20. Im OnClick-Event der Buttons steht "=ButtonGeklickt(X)".
Um das Formular aufzubauen, habe ich einen solchen Block einmal definiert, dann als Zeile 5mal dupliziert und die Zeilen schließlich 4mal eingefügt. Dann noch die Namen angepasst und den Aufruf in den Buttons. Ist halt etwas Fleißarbeit...

In der Funktion "ButtonGeklickt(intButton as integer)" passiert zur Laufzeit alles andere. Es wird ein Popup-Dialog aufgerufen, der den Schauspieler komplett mit Namen und weiteren Daten sowie einem größeren Bild darstellt. Dieser Dialog hat Buttons "Übernehmen" und "Abbruch". Wird "Übernehmen" geklickt, wird der Rand des aufrufenden Buttons etwas dicker und rot dargestellt (ansonsten Haarlinie und schwarz). Die erfolgte Selektion merke ich mir in einem 200er-Boolean-Array.

Beim Wechsel zu einer anderen Seite werden andere (bis zu 20) Records dargestellt und ggf. rot umrandet, weil sie schon selektiert wurden. Der Code hinter "Nächste Seite" z. B. lautet sehr simpel:
Private Sub btnNext_Click()
    Call CheckPage(txtPageNo + 1)
End Sub
"CheckPage" macht den Rest, z. B. Start-Position der 200er-Arrays setzen, (bis zu) 20 Datensätze anzeigen (bzw. die restlichen Boxen leeren. Alles sehr simpel gestrickt.

Wer Interesse an dieser Lösung hat, kann ja schreiben und ich stelle kostenlos eine abgespeckte DB zur Verfügung. Das mache ich aber erst, wenn tatsächlich Interesse besteht... lol.

Gruß,
crystal
24
Formular / Tipp: "Debug"-Modus
Letzter Beitrag von crystal - April 16, 2021, 22:01:37
Hallo!

Hier ein kleiner Tipp als Geschenk...

Man kennt das ja: während der Entwicklung von Formularen stellt man im Formular wichtige interne Felder (Hauptschlüssel, Referenz-Schlüssel etc.) irgendwo im Formular dar, um z. B. schnell in der zugrunde liegenden Tabelle nachschauen zu können, was so geschieht...

Wenn alles fertig ist, könnte man diese Felder eigentlich entfernen, um dann doch festzustellen, dass man sie noch braucht, weil irgendwelche Änderungen am Formular anstehen oder Fehler gesucht werden müssen.

Inzwischen mache ich es oft so:
meine "Info-"Felder platziere ich (ggf. mit sehr kleiner Schrift und einer auffälligen Farbe) irgendwo im Formular, wo etwas Platz ist und setze sie alle auf "unsichtbar".
Zusätzlich definiere ich irgendwo einen Button mit Namen "btnDummy" und (wichtig) als Beschriftung "btn&Dummy". Breite und Höhe dieses Buttons setzte ich auf 0 (Null), so dass er unsichtbar ist. Im OnClick-Event schreibe ich dann z. B.
...
txtDSId.visible = not txtDSId.visible
txtExtRef.visible = not txtExtRef.visible
...

Zur Laufzeit brauche ich dann nur "Alt-D" drücken, um die internen Felder sichtbar bzw. wieder unsichtbar zu machen.
Außerdem hat man auch gleich ein "Focus-Opfer" - ein Feld also, dem man den Focus gibt, um Änderungen an anderen Formularfeldern machen zu können, was sonst zu der FM "Sie können nicht...wenn xxx den Focus hat" zu vermeiden. Im Gegensatz zum Drücken von "Alt-D" wird der OnClick-Event nicht ausgelöst, wenn man im VBA-Code nur "btnDummy.SetFocus" schreibt; da müsste man dann schon selbst noch die Entertaste drücken. Also: 2 Fliegen mit 1 Dummy...

Sehr klein, sehr hilfreich...

Gruß,
crystal

25
Tabelle/Abfrage / Summenfunktion - Ausdrucks-Gen...
Letzter Beitrag von essiggurkal - April 16, 2021, 21:16:43


Hallo werte Community (:

wir planen derzeit den Jahresabschluss und ich habe Probleme mit einer der Berechnung unseres Schrottwertes für diverse Ersatzteile.

Konkret beläuft sich das Problem auf den Parameter [lebeweg] = letzte Bewegung des Ersatzteiles. Die Berechnung ignoriert leider den Wert und wirft somit natürlich kein richtiges Ergebnis aus. Nach langem hin und her probieren offenbart sich mir leider noch immer keine Lösung und ich hoffe das mir hier eventuell geholfen werden könnte (:

Schrott: Summe(Wenn([Inventur]![FaktGr]=6 Oder [Inventur]![FaktGr]=9;(Wenn([Inventur]![lebeweg]<[(TS_Parameter]![BeginnGj]-10000);[Inventur]![BestWert];0));0))
26
Formular / Re: Formular für verschiedene ...
Letzter Beitrag von crystal - April 16, 2021, 20:54:26
@Beaker s.a.
Hallo!
Ja - mit openargs habe ich so manches auch hinbekommen im Form_Open-Event.
Leider geht das
.CloseButton = False
nicht - auch nicht in Form_Load.
FM etwa: ...im Entwurfsmode öffnen...

Also muss eine globale Funktion her, die in Form_Open aufgerufen wird (Luftcode vermutlich mit Syntax-Fehlern):
Private Sub Form_Open(Cancel As Integer)
...
if left(openargs,11) = "Bearbeiten=" then
'                       12345678901
   Call Toggle_Form(me.form.name, openargs)
   '^^^ dadurch wird dieses Formular geschlossen, bearbeitet, wieder geöffnet und der Code läuft hier
   'hin:
   'vvv
elseif left(openargs,12) = "XBearbeiten=" then
   lngKunde=clng(mid(openargs(13))
...

---------
Und in einem Modul:
---------

Public Function Toggle_Form(strForm as string, strOpenargs as string)
'erstmal aufrufendes formular schließen
   docmd.close acform,strForm
'jetzt dasselbe formular im designmode öffnen und gew. änderungen machen
   DoCmd.OpenForm strForm, acDesign
   with strform
      if stropenargs="Bearbeiten" then   
         .CloseButton=False
         ...
      else
         .CloseButton=True
         ...
      end if
   end with
'dann das formular schließen und gleich wieder normal öffnen,
'die originalen Openargs mit vorangestelltem X übergeben
   DoCmd.Close acForm, strForm, acSaveYes
   DoCmd.OpenForm strForm, acNormal, "X" & strOpenargs
end function

Etwas sehr mühsam und auch erst die halbe Miete (man müsste sich wohl noch im Formular selbst merken, in welchem Modus es gerade vorliegt. z. B. in btnDummy.Tag).

Von der Logik her müsste es doch so klappen - oder gibt es eine bessere Idee??? Ich möchte das Formular ungern duplizieren (enthält viel Code) und dann müsste ich Änderungen ja immer in beiden Formularen machen.

Gruß,
crystal
27
Tabelle/Abfrage / Re: Tabelle umformen
Letzter Beitrag von ebs17 - April 16, 2021, 18:41:27
ZitatIch starte eine neue Abfrage und wähle dann ... SQL-Ansicht
Genau so, eine UNION-Abfrage ist in etwa gleichwertig zu einer normalen Auswahlabfrage und als solche verwendbar.

Wenn Du eine neue Tabelle daraus erstellen willst - was auf Grund der besseren Datenstruktur sinnvoll wäre bei Entfernung der alten Tabelle, so ergänze die Anweisung etwa ...

SELECT * INTO NameNeueTabelle
FROM (Text der bisherigen Abfrage) AS X
28
Formular / Re: Formular für verschiedene ...
Letzter Beitrag von Beaker s.a. - April 16, 2021, 16:45:21
@crystal
Abgesehen davon dass ich es anders herum bevorzuge, also die
Auftragsbearbeitung/-anlage vom Kunden-Formular starte, kannst
du, wenn nicht anders in Verwendung, mit dem Parameter "OpenArgs"
das Startverhalten eines Forms beeinflussen.
Habe ich gerade selber so gemacht für die Verwaltung und Reservierung
unserer Billardtische. Bei der Verwaltung ist das UFo für die Reser-
vierungen "abgeschaltet", und bei der Reservierung sind die Felder
für die Verwaltung (inkl. Navi-Buttons) unsichtbar. So kann ich über
Listfelder (aufgeteilt nach Arten der Tische, - Pool, Snooker, Karambol)
einen Tisch im HFo aussuchen, und im UFo eine Reservierung dafür anlegen,
ohne an den Tischen "herummachen" zu können.

gruss ekkehard
29
Tabelle/Abfrage / Re: Tabelle umformen
Letzter Beitrag von alex-one - April 16, 2021, 15:30:24
Hallo,

@crystal => ebs17 liegt richtig, ich rede tatsächlich von einer Tabelle mit Datensätzen in Access.
Sorry, für die Verwirrung.

@ebs17
Vielen dank für die Antwort. :)
Jetzt hab ich aber noch die Frage, wo ich die Lösung eintragen muss. :-\
Ich starte eine neue Abfrage und wähle dann "Tabelle erstellen" (in SQL-Ansicht) und hier die Lösung oder als Union-Abfrage.
Bin hier ein bisschen Unerfahren, da ich in Access nur 0815-Datenbanken mit ein bisschen VBA erstelle. :P
30
Access Programmierung / Re: Türkische Buchstaben entfe...
Letzter Beitrag von ebs17 - April 16, 2021, 14:41:54
Im ersten Schritt könnte man den ASCII-Code dieses Zeichens ermitteln. Dann sollte man mit Chr(ASCIICode) weiterarbeiten können.
Seiten 1 2 3 4 5 ... 10