2 Autowertfelder in DB-Tabelle

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: 2 Autowertfelder in DB-Tabelle

Re: 2 Autowertfelder in DB-Tabelle

von F3K Total » So, 01.05.2011 22:40

Hallo,
erstmal der Tip zu Xray:
Der Befehl lautet nicht:

Code: Alles auswählen

Xray.ThisComponent
sondern schlicht:

Code: Alles auswählen

Xray ThisComponent
also ohne Punkt!
Vielleicht kommst Du damit dann schon weiter.
Gruß R

Re: 2 Autowertfelder in DB-Tabelle

von F3K Total » Sa, 30.04.2011 19:23

Hallo fydr,
klar, hier noch ein paar Tips:

Um den Cursor in ein Feld zu bringen, mußt Du den "Fokus" auf das Feld setzen:

Code: Alles auswählen

Dim Controller as Object
Dim Control as Object
oDoc = ThisComponent
oForm = oDoc.DrawPage.Forms.GetByIndex(0)
oFeld=oForm.GetByName("DasFeldindasderCursorsoll")
'ReFeldmarkierung:
Controller=oForm.Parent.CurrentController
Control=Controller.getControl(ofeld)
Control.setFocus()
Um jetzt ggf. den Inhalt des Feldes zu markieren (hier nur den ersten Buchstaben eines Strings):

Code: Alles auswählen

DIM oSel as new com.sun.star.awt.Selection
oSel.Min = 0
oSel.Max = 1
Control.setSelection(oSel)
und Xray gibt es ohne weiteres hier: http://bernard.marcelly.perso.sfr.fr/index2.html

Gruß R

Re: 2 Autowertfelder in DB-Tabelle

von F3K Total » Do, 28.04.2011 20:11

Hallo fydr,
folgender Hinweis:
Beim Befehl

Code: Alles auswählen

oform.UpdateInt(3,Zahl)
wird die Zahl "Zahl" in die dritte Spalte der Tabelle, die "oForm" zugewiesen ist, sofort in die DB geschrieben und auch im Formular angezeigt.
Es ist der direkteste und meiner Kenntnis nach, sicherste Weg.
Wenn Du also z.B. deine "LfdNr" in der dritten Spalte der Tabelle "taBasis" stehen hast, kannst Du mit

Code: Alles auswählen

sql=SELECT MAX(""LfdNr"") FROM ""taBasis"""
Sql_Abfrage=Stmt.executeQuery(sql)
While Sql_Abfrage.next
nextLfdNr=Sql_Abfrage.getint(1) +1 'hier steht das Ergbenis
Wend

oform.UpdateInt(3,nextLfdNr)

if oform.isnew=true then
oform.insertRow()
oform.updateRow()
else
oform.updateRow()
endif
Deine nächste laufende Nummer eintragen. Ohne reload()
Das Ganze sollte dann passieren, wenn Du einen neuen Datensatz anlegst.

Gruß R

Re: 2 Autowertfelder in DB-Tabelle

von F3K Total » Mi, 27.04.2011 20:40

Hallo,
ja das sollte gehen, wenn Du über das Formular gehst und einfach nur die "LfdNr" im gerade neu angelegten Datensatz updatest.
Sieh Dir mal die Datei "Kostenstellen_Umsatz.odb" in diesen Thread und auch den Thread an: viewtopic.php?f=8&t=47265 Mit den Befehlen

Code: Alles auswählen

UpdateString(3,Text) oder UpdateDouble(3,Zahl) oder UpdateInt(3,Zahl) usw.
if oform.isnew=true then
oform.insertRow()
oform.updateRow()
else
oform.updateRow()
endif
End Sub
kannst Du einfach den aktuellen Datensatz einzeln aktualisieren und brauchst kein reload(), das eben dazu führt, dass Du wieder im ersten Datensatz landest.
Es gibt auch einen anderen Weg, die aktuelle Zeile .row z.B einer Variablen orow zuweisen und nach dem reload mit .absolute(orow) wieder in die Zeile zu springen, halte ich aber für den schlechteren Weg.

Gruß R

Nach oben