SQL Lite mit VBA

  • Excel

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von Blaupunkt79.

    SQL Lite mit VBA

    Hallo Zusammen,

    kann man SQL Lite im VBA relativ problemlos verwenden oder muss man dazu .dll's installieren?

    Habe mit SQL Lite im Basic4Android bereits Erfahrungen sammeln können, Kenntnisse sind vorhanden, kann jemand trotzdem schreiben, inwieweit ich eine Datenbank per VBA initialisiere/öffne.

    Danke

    Gruss
    Jetzt habe ich Schwierigkeiten mit dem Synthax:

    Suchbegriff immer identisch "sahne".

    Einmal ohne Sortierung, einmal mit.

    Visual Basic-Quellcode

    1. Set DB = OpenDatabase(laufwerk & "\Systemdateien\Artikel.mdb")
    2. logtext = "Anwahl: Suche Artikelname": Call loggen
    3. tt4 = 1
    4. Worksheets("sucheartikel").Rows("1:" & Rows.Count).Delete
    5. If TextBox5 = "" Then MsgBox ("Bitte füllen Sie das Feld 'Artikeltext' aus!"): logtext = "Feld Artikeltext leer.": Call loggen: GoTo zuende
    6. sqlsearch = " SELECT * " & _
    7. " FROM Artikel9 " & _
    8. " WHERE Artikeltext LIKE '*" & TextBox5 & "*'"
    9. Set rec_adr = DB.OpenRecordset(sqlsearch)
    10. If rec_adr.RecordCount = 0 Then MsgBox ("Artikeltext nicht gefunden!"): logtext = "Artikeltext nicht gefunden.": Call loggen: GoTo zuende
    11. MsgBox (rec_adr.RecordCount)


    Als Message erhalte ich immer 1, ist allerdings verkehrt.

    Visual Basic-Quellcode

    1. Set DB = OpenDatabase(laufwerk & "\Systemdateien\Artikel.mdb")
    2. logtext = "Anwahl: Suche Artikelname": Call loggen
    3. tt4 = 1
    4. Worksheets("sucheartikel").Rows("1:" & Rows.Count).Delete
    5. If TextBox5 = "" Then MsgBox ("Bitte füllen Sie das Feld 'Artikeltext' aus!"): logtext = "Feld Artikeltext leer.": Call loggen: GoTo zuende
    6. sqlsearch = " SELECT * " & _
    7. " FROM Artikel9 " & _
    8. " WHERE Artikeltext LIKE '*" & TextBox5 & "*'" & _
    9. " Order by Warengruppe;"
    10. Set rec_adr = DB.OpenRecordset(sqlsearch)
    11. If rec_adr.RecordCount = 0 Then MsgBox ("Artikeltext nicht gefunden!"): logtext = "Artikeltext nicht gefunden.": Call loggen: GoTo zuende
    12. MsgBox (rec_adr.RecordCount)


    Hier erhalte ich als Message 190, dass ist auch korrekt.

    Was ist verkehrt an der Syntax ohne die Sortiervariante, also Variante 1?

    Danke

    Gruß
    Hmm im Access kam auch immer nur 1 raus, er hat quasi den ersten Zeichensatz gefunden und das wars, mit MOVENEXT kam das nächste Ergebnis, sieht nun so aus, hab nun ne Schleife eingebaut:

    Visual Basic-Quellcode

    1. Set DB = OpenDatabase(laufwerk & "\Systemdateien\Artikel.mdb")
    2. logtext = "Anwahl: Suche Artikelname": Call loggen
    3. tt4 = 1
    4. Worksheets("sucheartikel").Rows("1:" & Rows.Count).Delete
    5. If TextBox5 = "" Then MsgBox ("Bitte füllen Sie das Feld 'Artikeltext' aus!"): logtext = "Feld Artikeltext leer.": Call loggen: GoTo zuende
    6. sqlsearch = " SELECT * " & _
    7. " FROM Artikel9 " & _
    8. " WHERE Artikeltext LIKE '*" & TextBox5 & "*'"
    9. Set rec_adr = DB.OpenRecordset(sqlsearch)
    10. If rec_adr.RecordCount = 0 Then MsgBox ("Artikeltext nicht gefunden!"): logtext = "Artikeltext nicht gefunden.": Call loggen: GoTo zuende
    11. rec_adr.MoveFirst
    12. Do While rec_adr.EOF = False
    13. Worksheets("sucheartikel").Range("a" & tt4) = rec_adr!Artikelnummer
    14. Worksheets("sucheartikel").Range("b" & tt4) = rec_adr!Artikeltext
    15. Worksheets("sucheartikel").Range("c" & tt4) = rec_adr!EK
    16. Worksheets("sucheartikel").Range("d" & tt4) = rec_adr!VK
    17. Worksheets("sucheartikel").Range("e" & tt4) = rec_adr!VA
    18. tt4 = tt4 + 1
    19. rec_adr.MoveNext
    20. Loop


    Ne andere Frage zu Access ... wenn nun mehrer User meine Exceldatei gleichzeitig benutzen, kann man dann parallel auf die Access-Datenbank zugreifen oder gibt es dann eine Fehlermeldung?

    Gruss

    Blaupunkt79 schrieb:

    wenn nun mehrer User meine Exceldatei gleichzeitig benutzen, kann man dann parallel auf die Access-Datenbank zugreifen oder gibt es dann eine Fehlermeldung?

    Probier's doch aus. ;)

    Ich hätte spontan gesagt, dass das nicht geht, ohne dass man einen SQL-Server verwendet. Allerdings steht unter superuser.com/questions/992595…o-open-my-access-database etwas von einem "Shared Mode", den man über den entsprechenden ConnectionString aktivieren kann.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Jetzt habe ich mich ganz gut durchgekämpft, funktioniert auch soweit recht gut, muss nun Menü für Menü anpassen, dass mit dem parallelen Zugriff teste ich später mal.

    Eine Frage zum Löschen einzelner Felder in der Datenbank, meine Beispieldatenbank:

    Frischeliste Einheiten
    12457898 65784532
    02359874 47851437

    Wie lösche ich jetzt die Zahl im Feld Einheiten: "65784532" heraus? Habe es schon so versucht:

    Visual Basic-Quellcode

    1. sqlsearch = " SELECT * " & _
    2. " FROM Listen " & _
    3. " WHERE Einheiten = " & Worksheets("aendern").Range("a" & k) & ""
    4. Set rec_adr = DB.OpenRecordset(sqlsearch)
    5. If rec_adr.RecordCount = 0 Then GoTo weiter
    6. rec_adr.Fields.Delete "Einheiten"


    Kommt jedoch immer eine Fehlermeldung. Ganze Datensätze sind klar, allerdings möchte ich die Spalte "Frischeliste" ja beibehalten, da soll nichts passieren.

    Danke

    Gruß

    EDIT

    Hab DELETE übersehen:

    Visual Basic-Quellcode

    1. sqlsearch = " DELETE * " & _
    2. " FROM Listen " & _
    3. " WHERE Einheiten = " & Worksheets("aendern").Range("a" & k) & ""
    4. DB.Execute sqlsearch



    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Blaupunkt79“ ()

    Hallo,

    habe nun ein Problem mit dem Syntax in einer SQL Abfrage:

    Visual Basic-Quellcode

    1. Dim b As Integer: b = 0
    2. Dim a as string: a = "J"
    3. Do Until ListBox2.ListCount = b
    4. sqlsearch = " SELECT * " & _
    5. " FROM Highlight1 " & _
    6. " WHERE Artikelnummer = " & CDbl(TextBox4) & "" & _
    7. " AND '" & ListBox2.List(b) & "' = '" & a & "'"
    8. Set rec_adr = DB.OpenRecordset(sqlsearch)
    9. If rec_adr.RecordCount = 0 Then ListBox2.Selected(b) = False: GoTo weiter
    10. ListBox2.Selected(b) = True
    11. weiter:
    12. b = b + 1
    13. Loop


    Mein Programm fügt innerhalb einer Datenbank Spalten hinzu, somit muss ich diese bei String abrufen/suchen. Leider findet mein Programm nichts, bedeutet, die Listbox2 hat keine selected Felder. Ist der Syntax korrekt? Mit den ganzen Hochkommata und Anführungszeichen ist ein wenig verwirrend.

    Danke

    Gruß
    Oh man, wieder Fehlermeldung, "Syntaxfehler (fehlender Operater) in Abfrage ...."

    Hab mal getestet, wenn ich in der "AND" Abfrage ein Wort angebe (ListBox2.List(b)), dann klappt es, bei 2 Fehlermeldung, die Spalte ist jeweils in der Datenbank vorhanden.

    In der Listbox2 bestehen ab Position 3 die Einträge nur noch aus einem Wort, als Test habe ich b auf 2 gesetzt und es hat funktioniert.

    Visual Basic-Quellcode

    1. Dim b As Integer: b = 0
    2. Dim a As String: a = "J"
    3. Do Until ListBox2.ListCount = b
    4. sqlsearch = " SELECT * " & _
    5. " FROM Highlight1 " & _
    6. " WHERE Artikelnummer = " & CDbl(TextBox4) & "" & _
    7. " AND " & ListBox2.List(b) & " = '" & a & "'"
    8. Set rec_adr = DB.OpenRecordset(sqlsearch)
    9. If rec_adr.RecordCount = 0 Then ListBox2.Selected(b) = False: GoTo weiter
    10. ListBox2.Selected(b) = True
    11. weiter:
    12. b = b + 1
    13. Loop


    Danke

    Gruß

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Blaupunkt79“ ()

    Hallo,

    habe jetzt mein umgeschriebenes Zustellprogramm (jetzt mit Access Datenbanken) auf meinem Firmenlaptop starten wollen, leider erhalte ich folgende Fehlermeldung:





    [/img]Auf meinem Privatlaptop läuft es.

    Privatlaptop

    Windows 7
    Office 32 bit (inklusive Access Installation)

    Firmenlaptop

    Windows 10
    Office 64 bit (ohne Access Installation)

    Was kann ich tun, wodran liegt es? Habe halt auf dem Firmenlaptop keine Adminrechte ...

    Danke

    Gruß