Neuigkeiten:

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

Mobiles Hauptmenü

Neueste Beiträge

#11
Formular / Re: zwei Unterformulare im Hau...
Letzter Beitrag von 1200er - November 10, 2025, 17:22:04
Hallo Klaus, sorry, das mit dem Code habe ich nicht gewusst. Wird beim nächsten Mal als Text eingefügt. Deine Korrektur im im Cade habe ich bereits umgesetzt und funktioniert. Vielen Dank
#12
Formular / Re: zwei Unterformulare im Hau...
Letzter Beitrag von MzKlMu - November 10, 2025, 17:03:32
Hallo,
oder als Einzeiler (Siehe Bild).

Bitte VBA Code immer als Text einfügen (mit den Codetags) niemals als Bild.
Code in Bildern kann man nicht kopieren.

Es ist überaus sinnvoll, ID's niemals nur ID nennen, sondern immer mit Bezug zur Tabelle benennen, z.B. FahrzeugID, Du weist sonst nicht, welche ID zu welcher Tabelle gehört. Und im Abfragen mit mehr Tabellen muss bei gleichen Namen immer der Tabellenname vorangestellt werden.
#13
Access Programmierung / Re: Vba Variablen in SQL-Abfra...
Letzter Beitrag von Hpseel - November 10, 2025, 16:53:38
Hallo Knobbi,
du hast sicher recht, LIKE entspricht mehr dem SQL Gedanken.
Ich bin wohl nach mehr als 30 Jahren Excel VBA Programmierung noch recht mit der "instr" Funktion verwachsen ...;-) Vermutlich habe ich sie einige tausend mal verwendet...

Einen kleinen Unterschied gibt es wohl: Bei LIKE muss noch der * hinten drangesetzt werden, bei instr genügt es, einfach die Buchstaben zu nehmen, die ab Position 1 erscheinen sollen, oder die bei instr(...) <> 0 irgendwo im Prüfstring vorkommen.

Meine ursprüngliche Frage "VBA Variablen im SQL String" ist glaube ich mit dem TempVar Ansatz zufriedenstellend gelöst. Du hast recht, wenn die Prozedur mehrfach durchlaufen wird, sollte man am Sub-Ende die TempVariable wieder löschen.
VG HPS
#14
Access Programmierung / Re: Vba Variablen in SQL-Abfra...
Letzter Beitrag von Knobbi38 - November 10, 2025, 15:29:35
@Hpseel

Deiner Argumentation mit Like kann ich nicht folgen. Instr() liefert doch exakt die gleiche Anzahl DS - dann doch besser Like().

"TempVars.Add "Ort", my_Var     ' also Zuweisung meiner Variablen an eine TempVar"
Damit wird der Tempvars Auflistung eine neues Tempvar-Objekt zugewiesen. Bei einer wiederholten Zuweisung wird zwar kein Fehler gemeldet, aber eigentlich wird für eine Zuweisung die Value Eigenschaft verwendet. Das wäre dann konsequent und besser lesbar.

Unabhängig davon sollten Eingaben nicht direkt ungeprüft verwendet werden. Besser ist es, dafür eine Parameterabfrage mit Like zu nutzen.

Knobbi38
#15
Access Programmierung / Re: Vba Variablen in SQL-Abfra...
Letzter Beitrag von Hpseel - November 10, 2025, 13:39:38
Hallo. vielen Dank für die Tipps!

>> "Like" liefert mir zu viele Ergebnisse, wenn nur wenige Buchstaben als Suchstring eingegeben werden.

Die anderen Vorschläge haben bei mir (Access 2016) nicht funktioniert.

Es wird wohl schon so sein, dass das VBA Programm den SQL-String an den Parser der Jet-Engine übergibt und dieser den Variablenbezug nicht auflösen kann ...

Ich habe mich gefragt, was er denn auflösen kann und bin auf eine Lösung mit TempVars gekommen:

Im Code:
  TempVars.Add "Ort", my_Var     ' also Zuweisung meiner Variablen an eine TempVar

  ...

  SQLStr = " Insert ......where instr(KOST.Ort, TempVars![Ort] = 1;"

Dieser "Umweg" über TempVars funktioniert und müsste auch bei anderen eingebauten Funktionen gehen.

Vielen Dank nochmal für die Tipps und weiter frohes Schaffen ! (Programmieren !)

HPS
#16
Formular / Re: zwei Unterformulare im Hau...
Letzter Beitrag von 1200er - November 10, 2025, 11:52:27
Hallo Ekkehard, vielen Dank für dein Kommentar. Ich habe inzwischen auf den Tipp von Klaus reagiert und ein anderes Formular erstellt. Des Weiteren habe ich einen Code zum öffnen eines Formulars bei Doppelklick auf Kennzeichen eingefügt (siehe Anhang). Funktioniert . Jetzt werde ich weiter machen. Verbesserungen sind ja immer möglich. Wenn Fragen auftreten, bin ich hier ja Gold richtig :-)
#17
Access Programmierung / Re: Vba Variablen in SQL-Abfra...
Letzter Beitrag von PhilS - November 10, 2025, 11:28:49
Zitat von: Hpseel am November 09, 2025, 22:17:12SQLstr = "insert into KOST_ERW Select KOST.* from KOST where instr(KOST.ORT, " & STR_Ort & ") = 1;"


Letzteres sollte laut Antwort #1 eigentlich funktionieren...
Du hast ein Detail übersehen. Zeichenfolgen müssen in Begrenzer eingeschlossen werden.
D.h.:

SQLstr = "insert into KOST_ERW Select KOST.* from KOST where instr(KOST.ORT, '" & STR_Ort & "') = 1;"Vor und hinter den ", die den String in VBA begrenzen, ist jeweils noch ein ', um den verketteten Text-Wert in dem resultierenden SQL-String zu begrenzen.

Ich würde hier auf das INSTR verzichten und stattdessen LIKE verwenden, weil das unmittelbar Teil des SQL-Standards ist und keine externe Funktion benötigt.

SQLstr = "insert into KOST_ERW Select KOST.* from KOST where KOST.ORT LIKE '*" & STR_Ort & "*';"

Zitat von: Knobbi38 am November 10, 2025, 11:05:26anstatt mit Like oder Instr() = 1 könnte man gleich einfach Left() verwenden.
Reines SQL (LIKE) ohne Funktionsaufruf (Left oder Instr) dürfte effizienter sein.
#18
Access Programmierung / Re: Vba Variablen in SQL-Abfra...
Letzter Beitrag von Knobbi38 - November 10, 2025, 11:05:26
Hallo,

anstatt mit Like oder Instr() = 1 könnte man gleich einfach Left() verwenden.

Stellt sich nur die Frage, wofür so eine Kopieraktion notwendig ist und warum die Tabelle nicht normalisiert ist, denn dann wäre so eine Krücke nicht notwendig.

Knobbi38
#19
Access Programmierung / Re: Vba Variablen in SQL-Abfra...
Letzter Beitrag von MartinHan - November 09, 2025, 22:51:07
Hi,

ich habe mal Chatgpt bemüht, die Antwort find ich gut erklärt:

In Access-SQL (also Jet/ACE SQL) funktioniert InStr() zwar, aber nur mit konkreten Werten oder Strings, nicht direkt mit VBA-Variablen innerhalb des SQL-Textes.

Wenn du schreibst:

SQLstr = "... where instr(KOST.ORT, STR_Ort) = 1;"

→ Dann denkt Access, dass STR_Ort eine Feldname ist, nicht deine VBA-Variable.
Daher kommt kein Treffer.

Du musst den Wert der VBA-Variable als Textliteral in den SQL-String einsetzen — also in einfache Hochkommas ' ' einbetten.

So geht's richtig:

Dim Str_Ort As String
Dim SQLstr As String

Str_Ort = "Passau"  ' oder "Pa"

SQLstr = "INSERT INTO KOST_ERW " & _
         "SELECT KOST.* FROM KOST " & _
         "WHERE InStr(KOST.ORT, '" & Str_Ort & "') = 1;

Falls "Passau" immer an Anfang steht, könnte man noch einfacher mit "Like" arbeiten.

Martin
#20
MS SQL-Server / Re: Softwareverteilung
Letzter Beitrag von MartinHan - November 09, 2025, 22:22:23
Danke für eure Beiträge,

bei jedem Aufruf das Programm zu kopieren halte ich offengesagt für nicht so gut gelöst...
Es ist natürlich ein Frage, wie groß die Datei ist.
Aber gut, ich habe auch deutlich weniger Benutzer, da reichen oft einfache Lösungen.
Das Wichtigste ist, es läuft robust.

ich habe mir mal die Posts kopiert und werde, wenn es mehr User werden, ggf. ein Redesign machen.

Martin