Base Formular Textfeld und dazugehöriges Datenfeld ändern

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: Base Formular Textfeld und dazugehöriges Datenfeld ändern

von chrdz » Sa, 10.06.2006 11:05

Hallo Thomas,

der letzte Tip wars. mit

Code: Alles auswählen

oMyForm.updateInt(2, CInt(oText))
hat sich mein Problem gelöst.

Danke!!!

Gruß nach Hessen

Christian

von Toxitom » Fr, 09.06.2006 16:29

Hey Christian,
Damit ich Dich richtig verstehe, muss ich wenn es sich um einen bestehenden Datensatz handelt eine update query erzeugen. Bei einem neuen Datensatz eine insert query.
Nein, nicht unbedingt. Ich sage nur, dass ich es bisher so gemacht haben - bei mienen Applikationen. Allerdings - ich habe auch meist Dialoge verwendet - die haben sowieso keine Resultset - Fähigkeit. Das war dann alles in basic realisiert (von mir).
Kann ich innerhalb eines Makros den angezeigten Datensatz 'editierbar'
DAs sollte schon gehen. Allerdings könntest du wahrscheinlich auch direkt den angezeigten Wer tändern - allerdings nicht durch direktes hineinschreiiben in das Kontrollfeld, sondern über die Methode UpdateInt() , updateString() oder was immer du für Felder hast - angewendet auf den aktuellen Datensatz des Resultsets und übergabe der Spaltennummer - also soetwas wie

Code: Alles auswählen

oForm.updateInt(2, "123")
für die 2. Spalte des Resultsets. Das wirkt ja immer auf den aktuellen Datensatz - und der wird auch angezeigt im Formular. Eventuell musst du noch ein RefreshRow() hinterherschicken - hab ich noch nicht ausprobiert.

Das solle alles gehen - falls der Resultset updateable ist.

Gruss
Thomas

von chrdz » Fr, 09.06.2006 14:55

Hallo Thomas,

ich möchte eigentlich beides. Wenn ich über die Navigationsleiste einen neuen Datensatz erstelle gibt es einen neuen Datensatz. Wenn ich mich auf einem bestehenden Datensatz befinde soll dieser geändert werden. Das funktioniert auch wunderbar, wenn ich die Daten 'händisch' (klick auf Feld VORID, Zahl eintragen, speichern)eingebe. Somit gibt das resultset grundsätzlich eine Änderbarkeit her.

Damit ich Dich richtig verstehe, muss ich wenn es sich um einen bestehenden Datensatz handelt eine update query erzeugen. Bei einem neuen Datensatz eine insert query. Mir den aktuellen Datensatz merken und über ein select (oder refresh?) wieder anzeigen.

Dann ergibt sich eine neue Frage. Kann ich innerhalb eines Makros den angezeigten Datensatz 'editierbar' (Navigationsleiste zeigt den speichern Button) machen?

Alles läuft in dem gezeigten Formular ab. Erstellt wurde das Formular über die GUI in Base (Formular in der Entwurfsansicht erstellen).

Danke schon mal

mfg

Christian

von Toxitom » Fr, 09.06.2006 14:32

Hey Christian,
...darunterstehenden Textfeld '168' in das Feld VORID auf der linken Seite eingetragen werden und der Datensatz speicherbar werden.
Wird dadurch ein "neuer" Datensatz erzeugt oder soll der aktuell angezeigte verändert werden?

Also, ich habe das bisher so werldigt, dass ich den Wert ausgelesen haben, dann einen Insert-Befehl in SQL an die Datenbank geschickt habe und anschliesssend für das neue Formular wieder einen Select-Befehl - Dann war der Datensatz da.
Wenn es sich nicht um ein AutoFeld handelt, sollte es auch gehen, dass du zunächst den Datensatzzeiger des 2. Formulars auf einen neuen Datensatz bewegst (durch insertRow()) und jetzt den Wert in die entsprechenden Felder schreibst. Einen neue Reihe ist nicht merh schreibgeschützt - vorausgesetzt, das Resulset lässt ein Update bzw. ein InsertRow überhaupt zu (ResultSetConcurrency).

Viele grüße
Thomas

von chrdz » Fr, 09.06.2006 14:09

Hallo Thomas,

erstmal danke für's Interesse. Ich möchte innerhalb eines Formulars ausgewählte Daten (in diesem Fall eine Zahl (Int)) in einen neuen Datensatz einfügen.

Bild

Das heißt mit dem Button 'in Veranstaltung einfügen' soll der Wert aus dem darunterstehenden Textfeld '168' in das Feld VORID auf der linken Seite eingetragen werden und der Datensatz speicherbar werden.

Das resultset das ich erhalte ist readonly. Wenn ich in das Textfeld manuell etwas eintrage wird, so wie ich das verstehe der Datensatz von nur lesen auf editieren und gleichzeitig auf geändert gesetzt. Das möchte ich ganz gerne innerhalb eines Macros realisieren. Wahrscheinlich, so scheint es im Moment gehe ich aber von der falsche Seite ran. Meine Erfahrungen kommen noch von Kylix (Delphi), wo ich direkten zugriff über das Daten(Text)feld auf das darunterliegende Datenfeld hatte.

Danke für jede Hilfe

Gruß

Christian

von Toxitom » Fr, 09.06.2006 10:39

Hey Christian,

nur mal aus Interesse: Was willst du erreichen?
Die Fromualre spiegeln intern Resultsets wider - also Ergebnisse einer Abfrage (in SQL Schreibweise). Die Felder wiederum zweigen die Daten der Abfrage an. Also, selbst wenn du den angezeigten Feldinhalt ändern würdest - was soll das bringen?
Wenn ich das richtig verstehe, möchtest du in Abhängigkeit eines angezeigten Feldwertes in einem Formular die Daten eines anderen Fomulars ändern?
Dann darfst du nicht die Kontrollelement-Inhalte ändern, sondern die dem Formular zugrundeliegende Abfrage - also den SQL Befehl. Der Inhalt des Kontrollfeldes ändert sich dann entsprechend.
Sollten die Inhalte schon da sein (also im Resultset - dann mussst du nur den Datensatz-Zeiger auf den entsprechenden Datensatz navigierern - dann wird auch das richtige Ergebnis angezeigt.
Ich verstehe also nicht, wieso du die Anzeige eines Kontrollelementes direkt verändern möchtest?

Gruss
Thomas

Base Formular Textfeld und dazugehöriges Datenfeld ändern

von chrdz » Fr, 09.06.2006 10:25

Hallo alle,

nach langer erfolgloser Suche und viel probieren, wende ich mich an alle Mitglieder in diesem Board.

Folgendes Problem:

Unter Base habe ich ein Formular erstellt, das 3 MySql tabellen aus einer Datenbank verwalten soll (referent, vortrag, termin). Die Tabelle refernt enthält keine Verknüpfung zu anderen Tabellen. 'vortrag' verweist auf referent (mit refid) termin enthält 'vorid' aus vortrag.

Problem:
über Referent und Vortrag wähle ich eine 'vorid' aus. Diese möchte ich in das Feld 'vorid' in termin eintragen.

Hier der gedachtte und mehrmals verworfene code:

Code: Alles auswählen

Sub VORinVA
Dim refid as Integer
Dim I as Integer
Dim oDoc as Object
Dim oMyForm as Object
Dim oMyForm1 as Object
Dim oMyForm2 as Object
Dim oControl as Object
Dim DatabaseContext as Object
Dim forms as Object
Dim oMyFormDoc as Object
Dim datensatz as Object
Dim feld as Object
Dim Meldung as String
Dim oText as String
DataBaseContext = createUNOService("com.sun.star.sdb.DatabaseContext")
forms = DatabaseContext.getByName("forum").DatabaseDocument.getFormDocuments()
oMyForm1 = forms.getByName("Termin_neu").getcomponent().DrawPage.Forms.getbyname("Referent")
oControl = oMyForm1.getbyName("Vortrag").getbyName("fmtVORID")
oText = oControl.text
oMyForm = forms.getByName("Termin_neu").getcomponent().DrawPage.Forms.getByName("Termin")
'xRay oMyForm
oControl = oMyForm.getByName("fmtVORID")
'datensatz = oMyForm.createResultSet()
'feld = datensatz.Columns.getbyName("VORID")
'xRay datensatz
'msgBox Cstr(feld.value)
'xRay oControl
'xRay feld
'feld.isWriteable = true
'feld.value = oText
'oControl.text = oText
'msgBox oControl.currentValue
if oControl.currentValue <> oText Then
Meldung = "Bitte '"+oText+"' in Feld VORID eingeben!" 
msgBox Meldung
end if
End Sub
Der richtige Text wird in oControl.text eingetragen und angezeigt. Leider stehe ich auf dem Schlauch, wenn es nun darum geht das unter 'fmtVORID' liegende Datenfeld zu modifizieren. (.currentvalue ändert sich nicht; feld.value ist schreibgeschützt).
Kann mir jemand auf die Sprünge helfen?

Vielen Dank
Christian

Nach oben