Seite 1 von 1
[gelöst] Formular Eintrag automatisch in Datenbank suchen
Verfasst: Fr, 31.05.2013 17:16
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
Re: Formular Eintrag automatisch in Datenbank suchen
Verfasst: Fr, 31.05.2013 18:17
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
Re: Formular Eintrag automatisch in Datenbank suchen
Verfasst: Mo, 03.06.2013 10:11
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
Re: Formular Eintrag automatisch in Datenbank suchen
Verfasst: Mo, 03.06.2013 22:48
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
Re: Formular Eintrag automatisch in Datenbank suchen
Verfasst: Di, 04.06.2013 15:52
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.
Re: [re-opened] Formular Eintrag automatisch in Datenbank su
Verfasst: Do, 13.06.2013 10:29
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?
Re: [re-opened] Formular Eintrag automatisch in Datenbank su
Verfasst: So, 16.06.2013 18:45
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
Re: [re-opened] Formular Eintrag automatisch in Datenbank su
Verfasst: Di, 18.06.2013 13:32
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
Re: [gelöst] Formular Eintrag automatisch in Datenbank suche
Verfasst: Di, 18.06.2013 21:57
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