Daten auf mehrere Base Formulare verteilen - verknüpfen

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

gogo
*****
Beiträge: 207
Registriert: Mi, 10.11.2010 13:11

Re: Daten auf mehrere Formulare verteilen - verknüpfen

Beitrag von gogo »

da steht beschrieben wie Du einen Filter in ein (anderes) Formular setzen kannst

viewtopic.php?f=18&t=19988

Dieser Code könnte auch funktionieren:

Code: Alles auswählen

oDoc = ThisComponent
oCtrl = oDoc.getCurrentController()
oDraw = oDoc.drawpage
oForm = oDraw.forms.getbyName("Formularname")
oForm.Filter="(KundenID = " & sKundenID & ")"
oForm.Reload
End Sub
vergiss nicht, beim Schliessen des Formulars den Filter zu entfernen ('oForm.ApplyFilter = false')


zu "Kundeninfo anlegen":

wenn du vor dem Filteraufruf für "Kundeninfo anzeigen" eine Abfrage startest, die Dir sagt ob es schon einen Infosatz zu diesem Kunden gibt dann kannst Du beide Anliegen ja in einem Makro lösen.

also:

Code: Alles auswählen

1. Klick => Gibts Info?
   -nein: ggf Nachfrage à la: "Noch kein Infosatz vorhanden! Soll einer angelegt werden?"
                                          nein=>Exit Sub
                                          ja=>per SQL neuen (leeren) InfoDatensatz anlegen, der nur die Kundennummer enthält
                                          hier könnte ein Commit stehen ;)
   -ja: keine Aktion

2. Formular öffnen und Filter setzen

3. Formular reload
g
gogo
*****
Beiträge: 207
Registriert: Mi, 10.11.2010 13:11

Re: Daten auf mehrere Base Formulare verteilen - verknüpfen

Beitrag von gogo »

Wenn im Formular "Kundeninfo" bereits ein Datensatz mit der gleichen Kundennummer vorhanden ist Dann Exit Sub (also keinen anlegen)
Wenn im Formular "Kundeninfo" bereits ein Datensatz mit der gleichen Kundennummer vorhanden ist Dann DIESEN ANZEIGEN

(das hast Du ja schon programmiert)

Du kannst also in Deiner sub Formularoeffnen vorne (nach dem sID = oFeld.text) eine Abfrage starten ob's schon eine Kundeninfo gibt (z.B. nach dieser Anleitung http://www.starbasicfaq.de/Wiekannmanau ... ifen..html )
In dieser Anleitung wird ein ResultSet erstellt, also eine virtuelle Tabelle. Den String in

Code: Alles auswählen

Statement.executeQuery("SELECT * FROM Bibliography")
ersetzt Du dann natürlich mit Deiner Kundeninfotabelle und mit 'where KundeniD = sID' wird die Anzeige auf den aktuellen Kunden beschränkt.
nun musst du nur noch die Anzahl der Datensätze ermitteln:

Code: Alles auswählen

resultset.last
anzahl=resultset.getrow
je nachdem Ergebnis für die Variable anzahl kannst Du dann entscheiden:
>0: hurra eine Info ist vorhanden, also weiter im Makro
0: oops noch kein Datensatz angelegt, also Nachfrage ob der User das will: wenn nicht: Exit Sub, wenn ja: Datensatz anlegen und weiter im Makro (der neu, bis auf die sID leer angelegte Datensatz kann ja dann angezeigt werden.)

g
g
LucidLynx/WinXP LibreOffice v3.3.2 ab 03/12 v3.3.2 & v3.4.5
gogo
*****
Beiträge: 207
Registriert: Mi, 10.11.2010 13:11

Re: Daten auf mehrere Base Formulare verteilen - verknüpfen

Beitrag von gogo »

Probier mal so:

Code: Alles auswählen

Statement.ResultSetType = com.sun.star.sdbc.ResultSetType.SCROLL_SENSITIVE '<========= EDITIERT!!! (eingefügt)
ResultSet = Statement.executeQuery("SELECT * FROM Kundeninfo WHERE IDKunde = " & sID & ";")
  
Resultset.last
anzahl=resultset.getrow

if anzahl = 0 then 
      UserInput = MsgBox("Es gibt noch keinen Kundeninfosatz! Wollen Sie einen neuen Satz anlegen?", 36)

      if UserInput =6 then 
          dim SQLTXT as string
          SQLTXT = "INSERT INTO ""Kundeninfo"" (""IDKunde"") VALUES (" & sID & ");" '<========= EDITIERT!!! (geändert)
          oStatement = ThisDatabaseDocument.CurrentController.ActiveConnection.createStatement
          oResultSet = oStatement.executeUpdate( SQLTXT )
          'oResultSet.Commit()
      else
         Exit Sub
      end if

end If

Sollte der neue Datensatz nicht korrekt angezeigt werden dann das Commit ausführen.

g

ACHTUNG! Hab' den Code nochmal editiert!!! ohne .SCROLL_SENSITIVE kannst Du im Resultset keine großen Sprünge machen (Error bei .last) und das insert Statement war falsch :?
g
LucidLynx/WinXP LibreOffice v3.3.2 ab 03/12 v3.3.2 & v3.4.5
Antworten