Resultset: Rows zählen

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Resultset: Rows zählen

von Mihilist » Fr, 19.05.2006 13:17

Hab jetzt noch ein bisschen für dich nachgeforscht:
Damit bekome ich das Rowset

Code: Alles auswählen

   oRowSet = createUnoService("com.sun.star.sdb.RowSet")
   oRowSet.setPropertyValue("DataSourceName", "oobuero")
   oRowSet.CommandType = com.sun.star.sdb.CommandType.COMMAND
   cmdSQL = "SELECT * FROM adressen ORDER BY NAME1"
   oRowSet.setPropertyValue("Command", cmdSQL)
   oRowSet.execute()
Und damit das Resultset

Code: Alles auswählen

   DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
   DataSource = DatabaseContext.getByName(DB)
   InteractionHandler = createUnoService("com.sun.star.sdb.InteractionHandler")
   Connection = DataSource.ConnectWithCompletion(InteractionHandler)
   Statement = Connection.createStatement()
   ResultSet = Statement.executeQuery("SELECT * FROM adressen ORDER BY NAME1")
Wenn du ein RowSet hast bekommst du das ResultSet auch durch:

Code: Alles auswählen

   ResultSet = oRowSet.getResultSet
:D
Der einzige wirkliche Unterschied den ich nachvollziehen kann ist das ich eine Resultset nicht updaten kann.
RowSet ist von ResultSet abgeleitet. Jedes RowSet unterstützt demnach (zumindest nach .execute()) auch die ResultSet-Methoden und besitzt die ResultSet-Properties. Umgekehrt natürlich nicht.
Warum aber rowcount nicht vorhanden ist?
Benutz das RowSet, dann hast du auch RowCount :)
Warum sie dem armen ResultSet keine Möglichkeit gegeben haben, die Datenbank die Rows zählen zu lassen weiß ich auch (noch) nicht :(
Und warum Rowcount im Formular nur die angezeigten zählt?
Weil er noch nicht mehr kennt. Das ResultSet hat Zugriff zur Datenquelle, das RowSet nicht - daher kann RowSet nur verraten, was er bisher von Papa ResultSet verraten bekommen hat.

Ich bilde mir ein, wenn du die Daten in einer Tabelle anzeigst zählt er auch erstmal nur so um die 40, und erst wenn du weiter runter scrollst guggd er nach und stellt fest "Hoppla, sind ja sogar 70... sogar 100..." usw ;)

von ykcim » Do, 18.05.2006 17:14

ResultSets haben diese Propertie nicht.
Ich bin gerade dabei das ganze noch mal neu zu lesen.
Ich muß mal versuchen den Unterschied zwischen Rowset und Resultset zu verstehen.

Damit bekome ich das Rowset

Code: Alles auswählen

   oRowSet = createUnoService("com.sun.star.sdb.RowSet")
   oRowSet.setPropertyValue("DataSourceName", "oobuero")
   oRowSet.CommandType = com.sun.star.sdb.CommandType.COMMAND
   cmdSQL = "SELECT * FROM adressen ORDER BY NAME1"
   oRowSet.setPropertyValue("Command", cmdSQL)
   oRowSet.execute() 
Und damit das Resultset

Code: Alles auswählen

   DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
   DataSource = DatabaseContext.getByName(DB)
   InteractionHandler = createUnoService("com.sun.star.sdb.InteractionHandler")
   Connection = DataSource.ConnectWithCompletion(InteractionHandler)
   Statement = Connection.createStatement()
   ResultSet = Statement.executeQuery("SELECT * FROM adressen ORDER BY NAME1")
Der einzige wirkliche Unterschied den ich nachvollziehen kann ist das ich eine Resultset nicht updaten kann. Warum aber rowcount nicht vorhanden ist? Und warum Rowcount im Formular nur die angezeigten zählt? Fragen über Fragen?

Michael

von Mihilist » Do, 18.05.2006 16:43

Laut Developer's Guide ist es eine Property von com.sun.star.sdb.RowSet. Datenformulare sind Resultsets und somit RowSets.

Demnach sollte die Eigenschaft auch ohne Formular funktionieren, wenn du ein RowSet hast ;)

von ykcim » Do, 18.05.2006 16:36

Leider hat die Methode den Nachteil, dass sie nicht alle vorhandenen Daten zählt, sondern nur die bisher geladenen/angezeigten.

Was daran liegt das es eine Propertie des Formulars ist und nicht des eigentlichen Resultsets.
Und somit ist diese Funktion auch wertlos wenn man ohne Formular arbeitet.

mfg
Michael

von Mihilist » Do, 18.05.2006 16:10

Nun bin ich durch Zufall auf eine (zumindest etwas) elegantere Lösung gestoßen, mit einer Methode namens .RowCount() - ich sagte ja ich kenne vermutlich nur die Methode nicht ;)

Leider hat die Methode den Nachteil, dass sie nicht alle vorhandenen Daten zählt, sondern nur die bisher geladenen/angezeigten.

Geht aber trotzdem:

Code: Alles auswählen

' Falls nicht alle Daten gezählt werden muss man eben doch .Last() aufrufen:
IF NOT oForm.isRowCountFinal THEN
   tmp = oForm.getRow
   oForm.Last
   oForm.absolute(tmp)
END IF

' Aber nun geht es sicher!
anzahl_der_zeilen = oForm.RowCount
[/code]

von Mihilist » Do, 18.05.2006 14:41

Schade :cry:

Ist nun halt sehr unschön, wenn im Formular dauernd der letzte Datensatz aufflimmert.

von ykcim » Di, 16.05.2006 15:57

Ich habe auch noch keinen anderen Weg gefunden.

mfg
Michael

Resultset: Rows zählen

von Mihilist » Di, 16.05.2006 13:08

Hoi!

Irgendwie finde ich nirgends was dazu, obwohl das bestimmt nur eine Methode ist, die ich nicht kenne... :(

Also, ich habe ein ResultSet und will die Anzahl der rows wissen.

Mein Resultset ist oForm = ThisComponent.DrawPages.Forms.getByIndex(0), allerdings zählt er mit oForm.Count nicht die Rows, sondern (vermutlich) die Anzahl der Controls des Forms.

Meine vorläufige "Lösung" wäre
tmp = oForm.getRow
oForm.Last
laenge = oForm.getRow
oForm.absolut(tmp)

...aber das kann's doch eigentlich nich sein, oder? :cry:

Grüße!

Nach oben