BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das OpenOffice Forum zu erhalten!

DANKE >><< DANKE

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des OpenOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als OO-SUPPORTER gekennzeichnet. 🤗

Wortergänzung mit Datenbank

Alles zur Programmierung im OpenOffice.org
Antworten
finger99
Beiträge: 2
Registriert: Di 2. Okt 2018, 10:39

Wortergänzung mit Datenbank

Beitrag von finger99 » Di 2. Okt 2018, 11:08

Hallo

Ich möchte das beim Schreiben eines Ortsnamens dieser automatisch ergänzt wird. (Ähnlich wie im Autonavi).

Zu diesem Zweck habe ich eine Combobox in einem Dialog angelegt mit einer Datenbank die alle Ortsnamen in der Schweiz enthält (ca. 9000)
Beginne ich nun den Ortsnamen zu Schreiben wird mir laufend der volle Name inkl. Postleitzahl vorgeschlagen.

Folgendes Makro füllt die Combobox mit den Ortsnamen aus der Datenbank.

Code: Alles auswählen

Sub Listefuellen()

DBContext=createUnoService("com.sun.star.sdb.DatabaseContext")

If not DBContext.hasByName("ORT_PLZ") then
   MsgBox (ConnectionFailedMessage, , "Connection failed!") : End
End If

DataSource=DBContext.getByName("ORT_PLZ")
ConnectToDB=DataSource.GetConnection ("","")

SQLResult=createUnoService("com.sun.star.sdb.RowSet")

SQLQuery="SELECT ""ID"", ""Ort"" FROM ""ORT_PLZ"""
SQLResult.activeConnection = ConnectToDB
SQLResult.Command = SQLQuery
SQLResult.execute

exitOK=com.sun.star.ui.dialogs.ExecutableDialogResults.OK
DialogLibraries.LoadLibrary("Test13")
Library=DialogLibraries.GetByName("Test13")
TheDialog=Library.GetByName("Dialog1")

Dialog=CreateUnoDialog(TheDialog)

DialogField=Dialog.GetControl("ComboBox1")

While SQLResult.next
ListBoxItem = SQLResult.getString(2)
DialogField.additem(ListBoxItem, DialogField.ItemCount)
Wend

If Dialog.Execute=exitOK Then
CurrentItemName=DialogField.SelectedItem
End If

End Sub
Leider dauert es aber relativ lange (20s-30s) bis die Datenbank in die Combobox geladen ist. Hat jemand einen Vorschlag das ganze zu beschleunigen (2s-3s) oder eine alternative Herangehensweise.

Wenn der Ortsname erstmal komplett ist, wird er in eine Zelle in einem Calc Dokument eingetragen. (Darum kümmere ich mich später).

Danke für Hilfe und Tipps.

F3K Total
Beiträge: 1006
Registriert: Mo 1. Aug 2011, 00:03

Re: Wortergänzung mit Datenbank

Beitrag von F3K Total » Di 2. Okt 2018, 21:35

Hi,
ich habe eine Idee, wie der Dialog mit gefülltem Kombinationsfeld in 1 Sekunde auf geht:
Füge in das Calcdokument ein Kombinationsfeld ein und verbinde es mit der unter Extras/Einstellungen/OpenOfficeBase/Datenbanken registrierten Datenbank, setze die Art des Listeninhalt auf Typ SQL, den Listeninhalt auf

Code: Alles auswählen

SELECT "ORT" FROM "ORT_PLZ" ORDER BY "ORT" ASC
Dann reicht dieses Markro um die Liste in den Dialog zu übernehmen:

Code: Alles auswählen

Sub Listefuellen()
    oForm = ThisComponent.Sheets(0).Drawpage.forms.Formular
    oStringItemList = oForm.Kombinationsfeld1.StringItemList
    exitOK = com.sun.star.ui.dialogs.ExecutableDialogResults.OK
    DialogLibraries.LoadLibrary("Standard")
    Library = DialogLibraries.GetByName("Standard")
    TheDialog = Library.GetByName("Dialog1")
    Dialog = CreateUnoDialog(TheDialog)
    DialogField = Dialog.GetControl("ComboBox1")
    DialogField.Model.StringItemList = oStringItemList
    If Dialog.Execute = exitOK Then
        CurrentItemName = DialogField.SelectedItem
    End If
End Sub
Anbei Beispiel DB und Calcdokument.
Gruß R
Dateianhänge
PLZ_CH.ods
(11.06 KiB) 246-mal heruntergeladen
PLZ_CH.odb
(192.19 KiB) 241-mal heruntergeladen
Windows 10: AOO, LO Linux Mint: AOO, LO

finger99
Beiträge: 2
Registriert: Di 2. Okt 2018, 10:39

Re: Wortergänzung mit Datenbank

Beitrag von finger99 » Mi 3. Okt 2018, 16:49

Danke klappt perfekt

F3K Total
Beiträge: 1006
Registriert: Mo 1. Aug 2011, 00:03

Re: Wortergänzung mit Datenbank

Beitrag von F3K Total » Mi 3. Okt 2018, 16:54

Schön, freut mich,
vielleicht solltest du dir überlegen, statt des Dialoges in Calc doch mit einer Datenbank und einem zugehörigen Formular zu arbeiten. Da brauchst du dann kein Makro. Und der Calc-Export ist einfach.
Gruß R
Windows 10: AOO, LO Linux Mint: AOO, LO

Antworten