[gelöst] Formular Eintrag automatisch in Datenbank suchen

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

Pixelletter
*
Beiträge: 12
Registriert: Do, 30.05.2013 13:43

[gelöst] Formular Eintrag automatisch in Datenbank suchen

Beitrag von Pixelletter »

Hallo Zusammen, folgendes Problem:

Ich erstelle ein Formular um Daten in eine DB eizutragen. An einer bestimmten Stelle wird eine Nummer (eine Art ID) eingetragen, die nicht doppelt vergeben werden darf. Wenn ich die Daten direkt in die Tabelle eintrage kommt beim Speichern eine Fehlermeldung. Beim Formular aber nicht.

Eine Lösung wäre ein Makro, dass beim verlassen des Formular-Textfeldes den Inhalt in der Datenbank sucht (am besten in 2 Spalten "ID" und "weitere IDs") und bei einem Treffer den Datensatz in einem Tabellenkotrollfeld anzeigt.

Ich habe so etwas in der Art bereits in diesem Thread gesehen. viewtopic.php?t=24986&p=106802#p106802
Aber ich habe keine Ahnung, wie ich das in mein Dokument einbauen kann. Die OpenOffice Hilfe hat mich auch nicht besonders weit gebracht.

Wenn mir jemand Hilfestellung geben kann, oder eigene Lösungsvorschläge hat, wär ich sehr dankbar.
Gruß, PL
Zuletzt geändert von Pixelletter am Di, 18.06.2013 13:33, insgesamt 3-mal geändert.
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Formular Eintrag automatisch in Datenbank suchen

Beitrag von F3K Total »

Hallo,
Pixelletter hat geschrieben:... in die Tabelle eintrage kommt beim Speichern eine Fehlermeldung. Beim Formular aber nicht.
Hast Du mal versucht einen solchen Datensatz im Formular zu speichern? Ich kann mir kaum vorstellen, dass dann keine Fehlermeldung kommt.
Um eine Makrolösung in dein Dokument einbauen zu können, müssten wir dein Dokument kennen.
Du kannst es hier hochladen, verfremdet, versteht sich.
Gruß R
Pixelletter
*
Beiträge: 12
Registriert: Do, 30.05.2013 13:43

Re: Formular Eintrag automatisch in Datenbank suchen

Beitrag von Pixelletter »

Hallo R,
ja, ich habe versucht, eine ID doppelt einzugeben. Direkt in der Tabelle kommt beim Verlassen des Datensatzes eine Fehlermeldung (dublicate value(s) for column etc.etc.) Im Formular wird einfach wieder in das erste Eingabefeld gesprungen. Das zeigt mir natürlich auch an, dass was falsch ist. Ziel ist es aber, den Lernaufwand für andere Kollegen gering zu halten.

Hier mal eine Version meiner Datenbank. Die Spalte ID ist Primärschlüssel. Die Nummern werden aber nicht der Reihe nach vergeben. Da manche Objekte mehrere ID's erhalten werden die anderen in eine zweite Spalte "weitere ID's" geschrieben. Beide Spalten sind als VarChar formatiert.

Ideal wäre, wenn beim verlassen des Feldes ID die Spalten ID und weitere ID's nach dem entsprechenden String durchsucht werden. Kommt die Zahlenfole bereits vor könnte eine Messagebox ausgegeben werden. Theoretisch ganz einfach, leider hab ich keinen Schimmer von Basic.

Vielleicht fällt jemand noch eine einfachere Lösung ein.

Gruß, Pixel
Dateianhänge
Test Datenbank_Formular_public.odt
Das ist das externe Formular, dass verwendet werden soll.
(11.96 KiB) 66-mal heruntergeladen
Test Datenbank_public.odb
Das ist die Datenbank
(25.07 KiB) 63-mal heruntergeladen
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Formular Eintrag automatisch in Datenbank suchen

Beitrag von F3K Total »

Hi,
ich habe mir was ausgedacht. Hänge dieses Makro an das Ereignis "Modifiziert" des Textfeldes "txtID"

Code: Alles auswählen

Sub S_Check
    oform = thiscomponent.drawpage.Forms.MainForm
    oconnection = oform.activeconnection
    SQL_Statement = oconnection.createstatement
    sSQL = "SELECT ""ID"", ""weitere IDs"" FROM ""Bestand_Videos"""
    SQL_Result = SQL_Statement.executequery(sSQL)
    otxtID = oform.txtID
    sID = otxtID.text
    while SQL_Result.next
        if SQL_Result.getstring(1) = sID or instr(SQL_Result.getstring(2),sID) > 0 then 
            sID = SQL_Result.getstring(1)
            msgbox "ID schon vorhanden"
            oform.ignoreresult = false
            oform.reload
            goto 100
        endif
    wend
    exit sub
    100:
    oform.first
    oresult = oform.createresultset
    nrow = 1
    do
        srid =  oresult.getstring(3)
        if srid = sID then exit do
        nrow = nrow + 1
    loop while oresult.next
    oform.absolute(nrow)
    oform.ignoreresult = true 
End Sub
Dann passiert Folgendes: Es erscheint eine Messagebox "ID schon vorhanden" und der gefundene Datensatz wird angezeigt. Mit dem Druck des Buttons "Speichern" ist er wieder weg.
Gruß R
Pixelletter
*
Beiträge: 12
Registriert: Do, 30.05.2013 13:43

Re: Formular Eintrag automatisch in Datenbank suchen

Beitrag von Pixelletter »

Das funktioniert!
Ist ja Wahnsinn, tausend Dank R.

Für zukünftige Leser:
Die Implementierung ist ganz einfach, einfach in Zeile 5 die Spaltennamen "ID" und "weitere IDs" durch die Spalten erstetzen, die durchsucht werden sollen. Und natürlich den Tabellennamen "Bestand_Videos".
Dann noch in Zeile 7 für die Variable otextID das richtige Textfeld zuordnen, also:
otxtID = oform."textfeldname"
Das wars dann auch schon.
Pixelletter
*
Beiträge: 12
Registriert: Do, 30.05.2013 13:43

Re: [re-opened] Formular Eintrag automatisch in Datenbank su

Beitrag von Pixelletter »

Jetzt ist doch noch ein Problem aufgetreten:
Wenn man eine ID eingibt, deren Ziffernfolge teil einer anderen ID ist (also 234 bei einer vorhandenen 12345). Lässt sich die neue ID nicht mehr eingeben.
Gibt es eine Möglichkeit, die Strings aus den ID-Feldern in integere Zahlen zu wandeln?
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: [re-opened] Formular Eintrag automatisch in Datenbank su

Beitrag von F3K Total »

Hi,
wenn Du die weiteren IDs immer schön mit einem Komma voneinander trennst, sollte dieses Makro helfen:

Code: Alles auswählen

Sub S_Check
    oform = thiscomponent.drawpage.Forms.MainForm
    oconnection = oform.activeconnection
    SQL_Statement = oconnection.createstatement
    sSQL = "SELECT ""ID"", ""weitere IDs"" FROM ""Bestand_Videos"""
    SQL_Result = SQL_Statement.executequery(sSQL)
    otxtID = oform.txtID
    sID = otxtID.text
    while SQL_Result.next
        if SQL_Result.getstring(1) = sID then'or instr(SQL_Result.getstring(2),sID) > 0 then 
            msgbox "ID schon vorhanden"
            oform.ignoreresult = false
            oform.reload
            goto 100
        else
            if SQL_Result.getstring(2) > "" then
                sIDs = Split(SQL_Result.getstring(2),",")
                for i = 0 to ubound (sIDs)
                    sIDe = TRIM(sIDs(i))
                    if sIDe = sID then
                        msgbox "ID schon vorhanden"
                        oform.ignoreresult = false
                        oform.reload
                        goto 100
                    endif
                next i
            endif
        endif
    wend
    exit sub
    100:
    oform.first
    oresult = oform.createresultset
    nrow = 1
    do
        srid =  oresult.getstring(3)
        if srid = sID then exit do
        nrow = nrow + 1
    loop while oresult.next
    oform.absolute(nrow)
    oform.ignoreresult = true 
End Sub
Gruß R
Pixelletter
*
Beiträge: 12
Registriert: Do, 30.05.2013 13:43

Re: [re-opened] Formular Eintrag automatisch in Datenbank su

Beitrag von Pixelletter »

das hilft. Ich hatte schon befürchtet, ich müsste alle Datensätze überarbeiten um nach ,ID, suchen zu können, aber das hier ist viel besser. Vielen Danke
Btw. Ich glaube, du hast vergessen, sID = SQL_Result.getstring (1) zu setzen, um den passenden Datensatz zu suchen.

Wen's interessiert: der fertige Code sieht jetzt so aus:

Code: Alles auswählen

Sub S_CheckID
        oform = thiscomponent.drawpage.Forms.MainForm
        oconnection = oform.activeconnection
        SQL_Statement = oconnection.createstatement
        sSQL = "SELECT ""ID"", ""weitere IDs"" FROM ""Bestand_Videos"""
        SQL_Result = SQL_Statement.executequery(sSQL)
        otxtID = oform.txtID
        sID = otxtID.text
        sIDSafe = sID
        while SQL_Result.next
            if SQL_Result.getstring(1) = sID then' or instr(SQL_Result.getstring(2),sID) > 0 then
                sID = SQL_Result.getstring(1)
                msgbox "ID schon vorhanden. OK zum suchen des Datensatzes"
       				DialogLibraries.LoadLibrary("Standard")
    				oDialog1 = CreateUnoDialog( DialogLibraries.Standard.msgBox_Bitte_warten )
    				oDialog1.setVisible(true)
                oform.ignoreresult = false
                oform.reload
                goto 100
           	else
            	if SQL_Result.getstring(2) > "" then
                	sIDs = Split(SQL_Result.getstring(2),",")
                	for i = 0 to ubound (sIDs)
                	    sIDe = TRIM(sIDs(i))
                	    if sIDe = sID then
 							msgbox "ID schon vorhanden. OK zum suchen des Datensatzes"
       							DialogLibraries.LoadLibrary("Standard")
    							oDialog1 = CreateUnoDialog( DialogLibraries.Standard.msgBox_Bitte_warten )
    							oDialog1.setVisible(true
                	        sID = SQL_Result.getstring (1)
                	        oform.ignoreresult = false
                	        oform.reload
                    	    goto 100
                    	endif
               		 next i
           		endif
            endif
        wend
        exit sub
        100:
        oform.first
        oresult = oform.createresultset
        nrow = 1
        do
            srid =  oresult.getstring(3)
            if srid = sID then exit do
            nrow = nrow + 1
        loop while oresult.next
        oform.absolute(nrow)
        oform.ignoreresult = true
        oDialog1.setVisible(false)
        msgbox "Datensatz mit ID " +sIDSafe
End Sub
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: [gelöst] Formular Eintrag automatisch in Datenbank suche

Beitrag von F3K Total »

Hi,
Pixelletter hat geschrieben:Btw. Ich glaube, du hast vergessen, sID = SQL_Result.getstring (1) zu setzen, um den passenden Datensatz zu suchen.
Btw: Bei mir funktioniert das Makro einwandfrei, da fehlt nichts.
Gruß R
Antworten